diff -Nru mednafen-1.24.3+dfsg/aclocal.m4 mednafen-1.26.1+dfsg/aclocal.m4 --- mednafen-1.24.3+dfsg/aclocal.m4 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/aclocal.m4 2020-11-10 06:04:17.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,32 +20,63 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant . -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -67,18 +98,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -88,8 +120,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -101,10 +135,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -112,19 +147,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -178,16 +211,40 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -198,16 +255,18 @@ AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -218,13 +277,15 @@ AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR -# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# ------------------------------------------- -# Retrieves the value of the pkg-config variable for the given module. +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl @@ -233,9 +294,9 @@ AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl -])# PKG_CHECK_VAR +])dnl PKG_CHECK_VAR -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -247,10 +308,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -266,14 +327,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -293,7 +354,7 @@ # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -345,7 +406,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -376,7 +437,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -567,13 +628,12 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -581,49 +641,41 @@ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -632,18 +684,17 @@ # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -730,11 +781,11 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -798,7 +849,7 @@ Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -808,6 +859,9 @@ AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not @@ -837,7 +891,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -848,7 +902,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -858,7 +912,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -879,7 +933,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -887,49 +941,42 @@ # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -966,7 +1013,7 @@ fi ]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1000,7 +1047,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1029,7 +1076,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1076,7 +1123,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1095,7 +1142,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1176,7 +1223,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1236,7 +1283,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1264,7 +1311,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1283,7 +1330,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru mednafen-1.24.3+dfsg/ChangeLog mednafen-1.26.1+dfsg/ChangeLog --- mednafen-1.24.3+dfsg/ChangeLog 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/ChangeLog 2020-11-10 06:04:17.000000000 +0000 @@ -1,3 +1,161 @@ +-- 1.26.1: -- + +November 8, 2020: + PSX: Fixed various inaccuracies in the SPU reverb emulation code. + + PSX: Fixed quasi-benign dereferencing of a null pointer in the GPU code when playing a PSF. + +November 3, 2020: + SNES-Faust: Fixed a crash when an MSU1-enabled game tried to play MSU1 audio but no audio tracks existed. + + SNES-Faust: Only create MSU1 multithreaded audio reader object if at least one audio track is available. + +November 2, 2020: + SNES-Faust: Fixed a design flaw in the MSU1 audio track loading code that broke loading of audio tracks when the game's filename included a "%" character. + +November 1, 2020: + SS: Fixed compilation errors after configuring with --disable-debugger. + + SS: Fixed compilation errors with clang. + +-- 1.26.0-UNSTABLE: -- + +October 26, 2020: + SS: Added "The Lost World: Jurassic Park" to the internal database of games to enable full cache emulation with, to fix most rock face graphical glitches. + +October 25, 2020: + SS: Added "Corpse Killer" to the internal database of games to enable full cache emulation with, to fix the glitchy rotation-zoom effect. + +October 24, 2020: + SS: Fixed major bug, existing since Saturn save state support was added, in the SCU save state code that caused wrong state to be saved(and later restored) + when an SCU DMA level in indirect mode was active. + + SS: Added "Kaitei Daisensou"/"In the Hunt" to the internal database of games to enable SH-2 read/write VDP1 draw slowdown with, to fix FMV tearing. + + SS: Added "Zero Divide" to the internal database of games to use the data cache read bypass kludge with, to fix a graphical glitch with character portraits. + +October 23, 2020: + SS: Made changes to prevent the CDB emulation from reporting PLAY status until the second sector is read after a seek completes; fixes game-breaking + problems in "Break Point", "DJ Wars", "Hop Step Idol", and "Tennis Arena". + + SS: Fixed inaccuracies with how CDB playback buffer full auto-pause and resume works; fixes occasional hangs of finite duration in "Dragon Force II" and + "World Cup France '98: Road to Win" when trying to skip FMVs. + +October 22, 2020: + SS: Added "Mujintou Monogatari R: Futari no Love Love Island" to the internal database of games to use the data cache read bypass kludge with, + to fix glitches when character portrait graphics change. + +October 21, 2020: + SS: Added "Doraemon: Nobita to Fukkatsu no Hoshi" to the internal database of games to use the data cache read bypass kludge with, + to fix the blank Game Over screen. + + SS: When a CDB 'Get CD Device Connection' command is issued very shortly after a 'Reset Selector' command, the 'Get CD Device Connection' command + will now be executed before the resetting effects of the 'Reset Selector' command occur. Fixes startup hang in the USA version of "Independence Day". + +October 20, 2020: + SS: Slowed down emulated VDP1 pixel plotting performance by a bit less than 20%(10% in 8bpp mode); fixes prematurely cut-off voices in "Paneltia Story", + and reduces tearing in "Yu-No". + +October 18, 2020: + SS: Added "3D Baseball", "The Crow", "NBA Action", "NFL Quarterback Club 96", "Solar Eclipse", and "Titan Wars" to the internal database of games to + enable full cache emulation with, to fix minor FMV glitches. + + SS: Added "Thunder Force Gold Pack 1" to the internal database of games to enable full cache emulation with, to fix the glitchy ship sprite in the ending + of "Thunder Force III". + + SS: Added the Europe releases of "Virtua Cop" and "Virtua Cop 2" to the internal database of games to enable full cache emulation with, to fix + startup hangs. + + SS: Added "Yu-No" to the internal database of games to enable full cache emulation with, to fix the problem of the intro FMV ending too soon. + + SS: Added "Horror Tour" to the internal database of games to enable full cache emulation with, to fix graphical glitches on the save and load screens. + + SS: Added "Falcom Classics II" to the internal database of games to enable SH-2 read/write VDP1 draw slowdown with, to fix tearing in the intro FMV of "Ys II". + + SS: Added "Tokimeki Memorial: Forever With You" to the internal database of games to enable SH-2 read/write VDP1 draw slowdown with, to fix the glitchy + arm sprite in the Konami intro. + + SS: Added "Virtua Fighter Kids" to the internal database of games to use the data cache read bypass kludge with, to fix a major FMV glitch. + +October 17, 2020: + SS: Made a very small SSE2-based optimization to the cache tag evaluation code. + +October 16, 2020: + SS: Removed incorrect write mirrors for the SH-2 CCR register; fixes FMV glitches in "NFL Quarterback Club 97". + + SS: When full cache emulation is enabled(e.g. via database), alternate slave CPU and bus sharing emulation code will be used, to reduce + disproportionate sharing of the bus(it's still not perfect, however). + + SS: SH-2 PC-relative MOV.W and MOV.L loads are now correctly treated as instruction fetches instead of data fetches with respect to the + OD/ID bits of CCR. + + SS: The SH-2 WB/EX pipeline stall emulation logic is now always enabled, instead of only being enabled in full cache emulation mode as it was previously. + +October 12, 2020: + SS: Moved SH-2 cache entry invalid bit from bit31 of the internal combined tag variable to bit0, for slightly better code generation. + +October 11, 2020: + SS: Slave SH-2 on/off is now handled outside of the regular event handling system to prevent a crash under certain conditions. + +October 9, 2020: + SS: Extended the handling of VDP1 command execution slowdown on SH-2 CPU reads/writes to also include SH-2 DMA accesses. + +October 5, 2020: + SS: Bumped up minimum seek timing delay, to compensate for upcoming general CPU timing improvements in the games sensitive to seek timing. + +October 4, 2020: + SS: The SR value loaded with RTE is now properly masked. + +October 2, 2020: + SS: Allow the SMPC joystick reading process to be aborted earlier on, while still waiting for vblank to end; fixes another hang in "QuoVadis". + + SS: Added "Wolf Fang SS: Kuuga 2001" to the internal database of games to enable SH-2 CPU read/write VDP1 draw slowdown with, to + fix glitchy graphics in the player's robot. + + SS: Added "Mahjong Doukyuusei Special" to the internal database of games to use the data cache read bypass kludge with, to fix the missing + background graphics layer on disc 2. + + SS: Added "Kidou Senkan Nadesico: Yappari Saigo wa Ai ga Katsu" to the internal database of games to use full cache emulation with, to fix a hang. + + SS: Implemented emulation of the timing effects of the B-bus write buffer on SH-2 CPU writes; fixes hang in "QuoVadis". + +September 4, 2020: + SNES-Faust: Fixed bug in the multithreaded PPU renderer that could cause massive graphics corruption when a game interleaves reads and writes to + VRAM without resetting the VRAM address, like in "NBA Pro Basketball: Bulls vs Blazers". + +August 28, 2020: + SS: Delay CDB status position info update by about 44us after a seek request(via Play command, or otherwise); fixes missing graphics in + the intro of "Magical Drop 3". + +-- 1.25.0-UNSTABLE: -- + +June 27, 2020: + SS: Implemented more accurate emulation of VDP1 drawing of excessively-large primitives. + It's not perfect, there's still something weird going on with antialiasing, and the effects on gradient shading + and texturing are not fully emulated, but it's enough to fix missing graphics in the attract mode of "Virtua Cop", + and a hang after defeating the final boss in "Rayman". + + SS: Fixed an off-by-1 inaccuracy in the edge stepping code for sprites and polygons, with minor visible effects in + non-rectangular sprites/polygons. + +June 26, 2020: + SS, MD: Fixed/Implemented M68K MULU and MULS instruction timing. + +June 24, 2020: + SS: Added wait states to M68K writes; fixes hang in "Lunar" after the Meribia pub singer's singing, that was caused by a timer being + reloaded too quickly in an interrupt handler. + +June 13, 2020: + SS: Allow VDP1 primitive drawing code to be suspended(and later resumed) mid-drawing when it's consumed too much emulated time; fixes excessive CPU usage during + the FMV in "Dark Seed II". + +June 4, 2020: + SS: Added "Senken Kigyouden", "Xian Jian Qi Xia Zhuan", "Virtua Fighter", and "Virtua Fighter Remix" to the internal database of games to + enable full cache emulation with, to fix graphical glitches. + +May 17, 2020: + SS: Implemented more complete emulation of SCSP's buggy(inter-slot contamination) linear interpolation on FM carrier slots. + -- 1.24.3: -- May 1, 2020: diff -Nru mednafen-1.24.3+dfsg/compile mednafen-1.26.1+dfsg/compile --- mednafen-1.24.3+dfsg/compile 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/compile 2020-11-10 06:04:17.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # 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, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -255,7 +255,8 @@ echo "compile $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -339,9 +340,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru mednafen-1.24.3+dfsg/config.guess mednafen-1.26.1+dfsg/config.guess --- mednafen-1.24.3+dfsg/config.guess 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/config.guess 2020-11-10 06:04:17.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2014-03-23' +timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -24,12 +24,12 @@ # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -39,7 +39,7 @@ Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -107,9 +107,9 @@ dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; + ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; @@ -132,14 +132,14 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc @@ -149,13 +149,20 @@ LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -168,21 +175,31 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)` + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -197,44 +214,67 @@ os=netbsd ;; esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,63 +291,54 @@ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -319,7 +350,7 @@ echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -346,38 +377,38 @@ sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" + eval "$set_cc_for_build" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -386,25 +417,25 @@ ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -415,44 +446,44 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -461,23 +492,23 @@ #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -503,17 +534,17 @@ AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -530,7 +561,7 @@ echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -542,14 +573,14 @@ if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -560,7 +591,7 @@ exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -574,26 +605,27 @@ exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -608,28 +640,28 @@ echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -662,13 +694,13 @@ exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -679,23 +711,23 @@ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -720,11 +752,11 @@ exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -733,7 +765,7 @@ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -741,9 +773,9 @@ exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -768,127 +800,109 @@ echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -901,58 +915,64 @@ EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el @@ -966,64 +986,74 @@ #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + if objdump -f /bin/sh | grep -q elf32-x86-64; then + echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 + else + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + fi exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1037,34 +1067,34 @@ # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1074,12 +1104,12 @@ *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1089,9 +1119,9 @@ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1099,7 +1129,7 @@ # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1111,9 +1141,9 @@ exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1133,9 +1163,9 @@ test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1144,28 +1174,28 @@ test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1176,7 +1206,7 @@ *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1196,23 +1226,23 @@ exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1231,46 +1261,56 @@ echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build + eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1281,27 +1321,33 @@ # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1310,18 +1356,18 @@ echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1342,14 +1388,14 @@ echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1358,34 +1404,48 @@ echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs exit ;; esac +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp @@ -1404,16 +1464,16 @@ /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff -Nru mednafen-1.24.3+dfsg/config.sub mednafen-1.26.1+dfsg/config.sub --- mednafen-1.24.3+dfsg/config.sub 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/config.sub 2020-11-10 06:04:17.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2014-09-11' +timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -25,7 +25,7 @@ # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -33,7 +33,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,12 +53,11 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -68,7 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -95,7 +94,7 @@ *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -113,24 +112,24 @@ # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` + basic_machine=`echo "$1" | sed 's/-[^-]*$//'` + if [ "$basic_machine" != "$1" ] + then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac @@ -179,44 +178,44 @@ ;; -sco6) os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 @@ -228,10 +227,7 @@ os=-lynxos ;; -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos @@ -255,15 +251,16 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ - | i370 | i860 | i960 | ia64 \ + | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ @@ -299,13 +296,14 @@ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ + | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -313,7 +311,8 @@ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ + | visium \ + | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown @@ -327,11 +326,14 @@ c6x) basic_machine=tic6x-unknown ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown @@ -360,7 +362,7 @@ ;; # Object if more than one company name word. *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. @@ -372,17 +374,18 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ @@ -423,13 +426,15 @@ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -437,6 +442,8 @@ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ + | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -450,7 +457,7 @@ # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) - basic_machine=i386-unknown + basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) @@ -484,7 +491,7 @@ basic_machine=x86_64-pc ;; amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl @@ -513,6 +520,9 @@ basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -526,7 +536,7 @@ os=-linux ;; blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) @@ -534,13 +544,13 @@ os=-cnk ;; c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray @@ -629,10 +639,18 @@ basic_machine=rs6000-bull os=-bosx ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -722,9 +740,6 @@ hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; - hppa-next) - os=-nextstep3 - ;; hppaosf) basic_machine=hppa1.1-hp os=-osf @@ -737,26 +752,26 @@ basic_machine=i370-ibm ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; - i386-vsta | vsta) + vsta) basic_machine=i386-unknown os=-vsta ;; @@ -774,17 +789,17 @@ basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; - m88k-omron*) - basic_machine=m88k-omron - ;; magnum | m3230) basic_machine=mips-mips os=-sysv @@ -816,10 +831,10 @@ os=-mint ;; mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k @@ -838,7 +853,7 @@ os=-msdos ;; ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc @@ -880,7 +895,7 @@ basic_machine=v70-nec os=-sysv ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) @@ -925,6 +940,12 @@ nsr-tandem) basic_machine=nsr-tandem ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf @@ -957,7 +978,7 @@ os=-linux ;; parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) @@ -973,7 +994,7 @@ basic_machine=i386-pc ;; pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc @@ -988,16 +1009,16 @@ basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould @@ -1007,23 +1028,23 @@ ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm @@ -1077,17 +1098,10 @@ sequent) basic_machine=i386-sequent ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; sh5el) basic_machine=sh5le-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) + simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; @@ -1106,7 +1120,7 @@ os=-sysv4 ;; strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun @@ -1228,6 +1242,9 @@ basic_machine=hppa1.1-winbond os=-proelf ;; + x64) + basic_machine=x86_64-pc + ;; xbox) basic_machine=i686-pc os=-mingw32 @@ -1236,20 +1253,12 @@ basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; none) basic_machine=none-none os=-none @@ -1278,10 +1287,6 @@ vax) basic_machine=vax-dec ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; pdp11) basic_machine=pdp11-dec ;; @@ -1291,9 +1296,6 @@ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; cydra) basic_machine=cydra-cydrome ;; @@ -1313,7 +1315,7 @@ # Make sure to match an already-canonicalized machine name. ;; *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac @@ -1321,10 +1323,10 @@ # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; @@ -1335,8 +1337,8 @@ if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases that might get confused + # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux @@ -1347,45 +1349,48 @@ -solaris) os=-solaris2 ;; - -svr4*) - os=-sysv4 - ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. + # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1402,12 +1407,12 @@ -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc @@ -1416,10 +1421,10 @@ os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition @@ -1430,12 +1435,6 @@ -wince*) os=-wince ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; -utek*) os=-bsd ;; @@ -1460,7 +1459,7 @@ -nova*) os=-rtmk-nova ;; - -ns2 ) + -ns2) os=-nextstep2 ;; -nsk*) @@ -1482,7 +1481,7 @@ -oss*) os=-sysv3 ;; - -svr4) + -svr4*) os=-sysv4 ;; -svr3) @@ -1497,32 +1496,38 @@ -ose*) os=-ose ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; - -aros*) - os=-aros - ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; -nacl*) ;; + -ios) + ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac @@ -1612,12 +1617,12 @@ sparc-* | *-sun) os=-sunos4.1.1 ;; + pru-*) + os=-elf + ;; *-be) os=-beos ;; - *-haiku) - os=-haiku - ;; *-ibm) os=-aix ;; @@ -1657,7 +1662,7 @@ m88k-omron*) os=-luna ;; - *-next ) + *-next) os=-nextstep ;; *-sequent) @@ -1672,9 +1677,6 @@ i370-*) os=-mvs ;; - *-next) - os=-nextstep3 - ;; *-gould) os=-sysv ;; @@ -1784,15 +1786,15 @@ vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$basic_machine$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff -Nru mednafen-1.24.3+dfsg/configure mednafen-1.26.1+dfsg/configure --- mednafen-1.24.3+dfsg/configure 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/configure 2020-11-10 06:04:17.000000000 +0000 @@ -835,7 +835,6 @@ AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR am__untar @@ -898,6 +897,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -916,7 +916,8 @@ PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -1035,6 +1036,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1287,6 +1289,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1424,7 +1435,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1577,6 +1588,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -4366,8 +4378,8 @@ # # Avoid trailing and leading zeroes in the decimal version components to avoid confusing not-so-learned people. # -MEDNAFEN_VERSION='1.24.3' -MEDNAFEN_VERSION_NUMERIC=0x00102403 +MEDNAFEN_VERSION='1.26.1' +MEDNAFEN_VERSION_NUMERIC=0x00102601 # 0xJJJnnnRR # Make sure we can run config.sub. @@ -4441,7 +4453,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -am__api_version='1.14' +am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -4630,7 +4642,7 @@ $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -4867,45 +4879,45 @@ ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : @@ -5018,12 +5030,12 @@ # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -5198,7 +5210,7 @@ Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -9830,6 +9842,8 @@ if (*(data + i) != *(data3 + i)) return 14; close (fd); + free (data); + free (data3); return 0; } _ACEOF @@ -20821,7 +20835,7 @@ # # INIT-COMMANDS # -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. @@ -21487,29 +21501,35 @@ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21527,53 +21547,48 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)$/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "po-directories":C) diff -Nru mednafen-1.24.3+dfsg/configure.ac mednafen-1.26.1+dfsg/configure.ac --- mednafen-1.24.3+dfsg/configure.ac 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/configure.ac 2020-11-10 06:04:17.000000000 +0000 @@ -6,8 +6,8 @@ # # Avoid trailing and leading zeroes in the decimal version components to avoid confusing not-so-learned people. # -MEDNAFEN_VERSION='1.24.3' -MEDNAFEN_VERSION_NUMERIC=0x00102403 +MEDNAFEN_VERSION='1.26.1' +MEDNAFEN_VERSION_NUMERIC=0x00102601 # 0xJJJnnnRR AC_CANONICAL_HOST diff -Nru mednafen-1.24.3+dfsg/debian/changelog mednafen-1.26.1+dfsg/debian/changelog --- mednafen-1.24.3+dfsg/debian/changelog 2020-05-09 18:03:27.000000000 +0000 +++ mednafen-1.26.1+dfsg/debian/changelog 2020-11-11 20:03:05.000000000 +0000 @@ -1,3 +1,12 @@ +mednafen (1.26.1+dfsg-1) unstable; urgency=medium + + * New upstream release. + * Fix some ordering issues in debian/copyright. + * Remove obsolete Lintian overrides. + * Switch to debhelper compatibility level 13. + + -- Stephen Kitt Wed, 11 Nov 2020 21:03:05 +0100 + mednafen (1.24.3+dfsg-1) unstable; urgency=medium * New upstream release. diff -Nru mednafen-1.24.3+dfsg/debian/control mednafen-1.26.1+dfsg/debian/control --- mednafen-1.24.3+dfsg/debian/control 2020-05-09 17:59:07.000000000 +0000 +++ mednafen-1.26.1+dfsg/debian/control 2020-11-11 16:47:32.000000000 +0000 @@ -3,7 +3,7 @@ Uploaders: Stephen Kitt Section: games Priority: optional -Build-Depends: debhelper-compat (= 12), +Build-Depends: debhelper-compat (= 13), libasound2-dev [linux-any], libgl1-mesa-dev | libgl-dev, libjack-dev, diff -Nru mednafen-1.24.3+dfsg/debian/copyright mednafen-1.26.1+dfsg/debian/copyright --- mednafen-1.24.3+dfsg/debian/copyright 2020-03-18 12:49:07.000000000 +0000 +++ mednafen-1.26.1+dfsg/debian/copyright 2020-11-11 11:33:27.000000000 +0000 @@ -57,6 +57,16 @@ Copyright: 1999-2004 Buschmann/Klemm/Piecha/Wolf License: LGPL-2.1+ +Files: + src/nes/* + src/pce_fast/huc6280_ops.inc +Comment: FCE Ultra +Copyright: 1998 BERO + 2002 Xodnizel + 2002 Paul Kuliniewicz + 2003 CaH4e3 +License: GPL-2+ + Files: src/tremor/* Comment: Tremor Copyright: 2002 Xiph.org Foundation @@ -167,16 +177,6 @@ Copyright: 2005-2012 Stanislav Shwartsman License: LGPL-2+ -Files: - src/nes/* - src/pce_fast/huc6280_ops.inc -Comment: FCE Ultra -Copyright: 1998 BERO - 2002 Xodnizel - 2002 Paul Kuliniewicz - 2003 CaH4e3 -License: GPL-2+ - Files: src/quicklz/* Comment: QuickLZ Copyright: 2006-2008 Lasse Mikkel Reinhold diff -Nru mednafen-1.24.3+dfsg/debian/source/lintian-overrides mednafen-1.26.1+dfsg/debian/source/lintian-overrides --- mednafen-1.24.3+dfsg/debian/source/lintian-overrides 2019-06-13 06:36:52.000000000 +0000 +++ mednafen-1.26.1+dfsg/debian/source/lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -# False positives for GPL-2 / GPL-2+ / GPL-1 or GPL-2 licenses (#801182) -mednafen source: dep5-copyright-license-name-not-unique (paragraph at line 380) -mednafen source: missing-license-paragraph-in-dep5-copyright gpl-2 (paragraph at line 323) diff -Nru mednafen-1.24.3+dfsg/depcomp mednafen-1.26.1+dfsg/depcomp --- mednafen-1.24.3+dfsg/depcomp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/depcomp 2020-11-10 06:04:17.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # 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 @@ -16,7 +16,7 @@ # 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, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -783,9 +783,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru mednafen-1.24.3+dfsg/Documentation/apple2.html mednafen-1.26.1+dfsg/Documentation/apple2.html --- mednafen-1.24.3+dfsg/Documentation/apple2.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/apple2.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Apple II/II+ Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/cdplay.html mednafen-1.26.1+dfsg/Documentation/cdplay.html --- mednafen-1.24.3+dfsg/Documentation/cdplay.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/cdplay.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Saturn Sound Format Player Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/docgen.inc mednafen-1.26.1+dfsg/Documentation/docgen.inc --- mednafen-1.24.3+dfsg/Documentation/docgen.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/docgen.inc 2020-11-10 06:04:17.000000000 +0000 @@ -369,6 +369,7 @@ echo('' . htmlspecialchars($db['fullname']) . ':' . ''); echo('Purpose:'); echo(''); + echo("\n"); foreach($db['entries'] as $gdbe) { @@ -377,10 +378,11 @@ if($gdbe['idishash']) echo('' . htmlspecialchars($gdbe['id']) . ''); else - echo('' . htmlspecialchars($gdbe['id']) . ''); + echo('' . str_replace("\n", "
", htmlspecialchars($gdbe['id'])) . ''); echo('' . htmlspecialchars($gdbe['setting']) . ''); echo('' . htmlspecialchars($gdbe['purpose']) . ''); echo(''); + echo("\n"); } echo(''); @@ -435,6 +437,9 @@ $type = $setting['type']; $flags = $setting['flags']; + if(strpos($flags, "MDFNSF_SUPPRESS_DOC") !== FALSE) + continue; + if($curmod == "") { $should_continue = 0; @@ -488,9 +493,6 @@ continue; } - if(strpos($flags, "MDFNSF_SUPPRESS_DOC") !== FALSE) - continue; - if($display_ct != spis($flags, "MDFNSF_COMMON_TEMPLATE")) continue; diff -Nru mednafen-1.24.3+dfsg/Documentation/gba.html mednafen-1.26.1+dfsg/Documentation/gba.html --- mednafen-1.24.3+dfsg/Documentation/gba.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/gba.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Game Boy Advance Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/gb.html mednafen-1.26.1+dfsg/Documentation/gb.html --- mednafen-1.24.3+dfsg/Documentation/gb.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/gb.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Game Boy (Color) Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/gg.html mednafen-1.26.1+dfsg/Documentation/gg.html --- mednafen-1.24.3+dfsg/Documentation/gg.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/gg.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Game Gear Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/lynx.html mednafen-1.26.1+dfsg/Documentation/lynx.html --- mednafen-1.24.3+dfsg/Documentation/lynx.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/lynx.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Atari Lynx Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/md.html mednafen-1.26.1+dfsg/Documentation/md.html --- mednafen-1.24.3+dfsg/Documentation/md.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/md.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Genesis/MegaDrive Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/mednafen.html mednafen-1.26.1+dfsg/Documentation/mednafen.html --- mednafen-1.24.3+dfsg/Documentation/mednafen.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/mednafen.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

General Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/modules.def mednafen-1.26.1+dfsg/Documentation/modules.def --- mednafen-1.24.3+dfsg/Documentation/modules.def 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/modules.def 2020-11-10 06:04:17.000000000 +0000 @@ -1,4 +1,4 @@ -1.24.3 +1.26.1 apple2 Apple II/II+ 250 @@ -356,7 +356,7 @@ 0 1MiB Extended RAM Required by \"Groove on Fight\" demo. -Super Real Mahjong P7 (Japan) (TODO: Test) +Super Real Mahjong P7 (Japan) T-16509G 0 1MiB Extended RAM @@ -453,8 +453,8 @@ Allows saving replay data. cachemode Cache Mode -This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally due to the large increase in host CPU usage, along with the potential of causing games that fully utilize both SH-2 CPUs to run significantly slower than they should due to inadequate emulation of bus sharing/contention. -54 +This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally primarily due to the large increase in host CPU usage. +92 Area 51 (USA) T-9705H 0 @@ -475,6 +475,11 @@ 0 Data only, with high-level bypass Fixes graphical glitches. +Doraemon - Nobita to Fukkatsu no Hoshi (Japan) +T-19801G +0 +Data only, with high-level bypass +Fixes blank Game Over screen. Dragon Force II (Japan) GS-9184 0 @@ -520,6 +525,21 @@ 0 Data only, with high-level bypass Fixes game crash when going to the world map. +Mahjong Doukyuusei Special (Japan) +T-25302G1 +0 +Data only, with high-level bypass +Fixes missing background layer on disc 2. +Mahjong Doukyuusei Special (Japan) +T-25302G2 +0 +Data only, with high-level bypass +Fixes missing background layer on disc 2. +Mujintou Monogatari R - Futari no Love Love Island (Japan) +T-28901G +0 +Data only, with high-level bypass +Fixes glitches when character graphics change. Ronde (Japan) T-14415G 0 @@ -534,7 +554,7 @@ 610680501 0 Data only, with high-level bypass - +Fixes graphical glitch on the character select screen in the \"Zero Divide\" demo. Shunsai (Japan) T-18703G 0 @@ -570,21 +590,26 @@ 0 Data only, with high-level bypass Fixes hang during FMV. -Thunder Force Gold Pack 1 (Japan) -T-1807G -0 -Data only, with high-level bypass -Fixes explosion graphic glitches in \"Thunder Force III\". Thunder Force Gold Pack 2 (Japan) T-1808G 0 Data only, with high-level bypass Fixes hang when pausing the game under certain conditions in \"Thunder Force AC\". -Virtua Fighter Kids (Java Tea Original) -GS-9113 +Virtua Fighter Kids (Japan/Europe) +GS-9079\nVF. KIDS +0 +Data only, with high-level bypass +Fixes FMV glitches. +Virtua Fighter Kids (Korea/Java Tea Original) +GS-9113\nVF. KIDS +0 +Data only, with high-level bypass +Fixes FMV glitches and/or malfunction of computer-controlled player. +Virtua Fighter Kids (USA) +MK-81049\nVF. KIDS 0 Data only, with high-level bypass -Fixes malfunction of computer-controlled player. +Fixes FMV glitches. Virtual Mahjong (Japan) T-2206G 0 @@ -620,6 +645,21 @@ 0 Data only, with high-level bypass Fixes severe gameplay logic glitches. +Zero Divide - The Final Conflict (Japan) +T-31601G +0 +Data only, with high-level bypass +Fixes graphical glitch on the character select screen. +3D Baseball (USA) +T-15906H +0 +Full +Fixes minor FMV glitches. +3D Baseball - The Majors (Japan) +T-18003G +0 +Full +Fixes minor FMV glitches. Albert Odyssey (Japan) T-1507G 0 @@ -630,6 +670,31 @@ 0 Full Fixes battle text truncation. +Corpse Killer (USA) +T-16201H +0 +Full +Fixes glitchy rotation-zoom effect. +Crow, The (USA) +T-8124H +0 +Full +Fixes minor FMV glitches. +Crow, The (Europe) +T-8124H-50 +0 +Full +Fixes minor FMV glitches. +Crow, The (Germany) +T-8124H-18 +0 +Full +Fixes minor FMV glitches. +Dark Seed II (Japan) +T-36101G +0 +Full +Fixes game hang. Die Hard Trilogy (Japan) GS-9123 0 @@ -640,11 +705,6 @@ 0 Full Fixes game hang. -Digital Monster Version S (Japan) -T-13331G -0 -Full -Fixes game hang. GeGeGe no Kitarou (Japan) T-13310G 0 @@ -665,11 +725,61 @@ 0 Full Fixes minor FMV glitches. +Horror Tour (Japan) +T-24301G +0 +Full +Fixes graphical glitches on the save and load screens. +Irem Arcade Classics (Japan) +T-22403G +0 +Full +Fixes hang when trying to start \"Zippy Race\". +Kidou Senkan Nadesico - Yappari Saigo wa Ai ga Katsu +GS-9142 +0 +Full +Fixes game hang. +The Lost World - Jurassic Park (Japan) +GS-9162 +0 +Full +Fixes most graphical glitches in rock faces. +The Lost World - Jurassic Park (Europe/USA) +MK-81065 +0 +Full +Fixes most graphical glitches in rock faces. Lunar - Silver Star Story (Japan) T-27901G 0 Full -Fixes FMV flickering with alternative BIOS. +Fixes FMV flickering. +NBA Action (USA) +MK-81103 +0 +Full +Fixes minor FMV glitches. +NBA Action (Europe) +MK81103-50 +0 +Full +Fixes minor FMV glitches. +NFL Quarterback Club 96 (Japan) +T-8105G +0 +Full +Fixes minor FMV glitches. +NFL Quarterback Club 96 (USA) +T-8109H +0 +Full +Fixes minor FMV glitches. +NFL Quarterback Club 96 (Europe) +T-8109H-50 +0 +Full +Fixes minor FMV glitches. Nobunaga no Yabou Shouseiroku (Japan) T-7664G 0 @@ -685,6 +795,16 @@ 0 Full Fixes game hang. +Senken Kigyouden (Japan) +T-37401G +0 +Full +Fixes dialogue text truncation. +Xian Jian Qi Xia Zhuan (Taiwan) +T-37401H +0 +Full +Fixes dialogue text truncation. Slam 'n Jam 96 (Japan) T-159056 0 @@ -715,6 +835,71 @@ 0 Full Fixes game crash. +Thunder Force Gold Pack 1 (Japan) +T-1807G +0 +Full +Fixes explosion graphic glitches in \"Thunder Force III\". +Titan Wars (Japan) +T-15903G +0 +Full +Fixes minor FMV glitches. +Solar Eclipse (USA) +T-15911H +0 +Full +Fixes minor FMV glitches. +Titan Wars (Europe) +T-15911H50 +0 +Full +Fixes minor FMV glitches. +Virtua Cop (Europe) +MK-81015\n\nE +0 +Full +Fixes game hang. +Virtua Cop 2 (Europe) +MK-81043\n\nE +0 +Full +Fixes game hang. +Virtua Fighter (Japan) +GS-9001 +0 +Full +Fixes graphical glitches. +Virtua Fighter (USA) +MK-81005 +0 +Full +Fixes graphical glitches. +Virtua Fighter (Europe) +MK_8100550 +0 +Full +Fixes graphical glitches. +Virtua Fighter Remix (Japan) +GS-9039 +0 +Full +Fixes graphical glitches. +Virtua Fighter Remix (USA) +MK-81023 +0 +Full +Fixes graphical glitches. +Virtua Fighter Remix (Europe) +MK-8102350 +0 +Full +Fixes graphical glitches. +Virtua Fighter Remix (SegaNet) +SG-7103 +0 +Full +Fixes graphical glitches. Whizz (Japan) T-36102G 0 @@ -725,10 +910,15 @@ 0 Full Fixes quasi-random hangs during startup. +Yu-No (Japan) +T-28004G +0 +Full +Fixes FMV ending too soon. horriblehacks Horrible Hacks -This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 CPU reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies. -18 +This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies. +30 Fighters Megamix (Japan) GS-9126 0 @@ -739,11 +929,6 @@ 0 Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. Fixes hang after watching or aborting FMV playback. -Irem Arcade Classics (Japan) -T-22403G -0 -Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. -Fixes hang when trying to start \"Zippy Race\". Grandia (Japan) T-4507G 0 @@ -752,63 +937,128 @@ Albert Odyssey (Japan) T-1507G 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Partially fixes battle text truncation. Albert Odyssey (USA) T-12705H 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Partially fixes battle text truncation. All-Star Baseball 97 (USA) T-8150H 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes texture glitches. Arcade's Greatest Hits (USA) T-9703H 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes flickering credits text. Arcade's Greatest Hits - Atari Collection 1 (USA) T-9706H 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes flickering credits text. Burning Rangers Taikenban (Japan) 6106856 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes flickering rescue text. Burning Rangers (Japan) GS-9174 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes flickering rescue text. Burning Rangers (Europe/USA) MK-81803 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes flickering rescue text. +Falcom Classics II (Japan) +T-31505G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes FMV tearing in \"Ys II\". Frank Thomas Big Hurt Baseball (Japan) T-8111G 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Reduces graphical glitches. Frank Thomas Big Hurt Baseball (USA) T-8138H 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Reduces graphical glitches. +Tokimeki Memorial - Forever with You (Japan) +T-9504G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes glitchy frames on the Konami intro arm sprite. +Kaitei Daisensou (Japan) +T-15006G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes FMV tearing. +In The Hunt (Europe/USA) +T-10001G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes FMV tearing. +Virtua Fighter (Japan) +GS-9001 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter (USA) +MK-81005 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter (Europe) +MK_8100550 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter Remix (Japan) +GS-9039 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter Remix (USA) +MK-81023 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter Remix (Europe) +MK-8102350 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Virtua Fighter Remix (SegaNet) +SG-7103 +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. Whizz (Japan) T-36102G 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes major graphical issues during gameplay. Whizz (Europe) T-9515H-50 0 -SH-2 CPU reads/writes from/to VDP1 slow down command execution. +SH-2 reads/writes from/to VDP1 slow down command execution. Fixes major graphical issues during gameplay. +Wolf Fang SS - Kuuga 2001 (Japan) +T-26105G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Fixes graphical glitches. +Yu-No (Japan) +T-28004G +0 +SH-2 reads/writes from/to VDP1 slow down command execution. +Reduces FMV tearing. Thunderhawk II (Japan) T-6006G 0 diff -Nru mednafen-1.24.3+dfsg/Documentation/nes.html mednafen-1.26.1+dfsg/Documentation/nes.html --- mednafen-1.24.3+dfsg/Documentation/nes.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/nes.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Nintendo Entertainment System/Famicom Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/netplay.html mednafen-1.26.1+dfsg/Documentation/netplay.html --- mednafen-1.24.3+dfsg/Documentation/netplay.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/netplay.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Netplay Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/ngp.html mednafen-1.26.1+dfsg/Documentation/ngp.html --- mednafen-1.24.3+dfsg/Documentation/ngp.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/ngp.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Neo Geo Pocket (Color) Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/pce_fast.html mednafen-1.26.1+dfsg/Documentation/pce_fast.html --- mednafen-1.24.3+dfsg/Documentation/pce_fast.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/pce_fast.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

PC Engine (CD)/TurboGrafx 16 (CD)/SuperGrafx Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/pce.html mednafen-1.26.1+dfsg/Documentation/pce.html --- mednafen-1.24.3+dfsg/Documentation/pce.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/pce.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

PC Engine/TurboGrafx 16 (CD)/SuperGrafx Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/pcfx.html mednafen-1.26.1+dfsg/Documentation/pcfx.html --- mednafen-1.24.3+dfsg/Documentation/pcfx.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/pcfx.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

PC-FX Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/psx.html mednafen-1.26.1+dfsg/Documentation/psx.html --- mednafen-1.24.3+dfsg/Documentation/psx.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/psx.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sony PlayStation Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/settings.def mednafen-1.26.1+dfsg/Documentation/settings.def --- mednafen-1.24.3+dfsg/Documentation/settings.def 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/settings.def 2020-11-10 06:04:17.000000000 +0000 @@ -99,7 +99,7 @@ 0 apple2.input.keyboard.twopiece.7 MDFNSF_CAT_INPUT_MAPPING MDFNSF_SUPPRESS_DOC -apple2, Keyboard, Apple II/II+ 2-piece keyboard: 7\' +apple2, Keyboard, Apple II/II+ 2-piece keyboard: 7 MDFNST_STRING keyboard 0x0 36 diff -Nru mednafen-1.24.3+dfsg/Documentation/sms.html mednafen-1.26.1+dfsg/Documentation/sms.html --- mednafen-1.24.3+dfsg/Documentation/sms.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/sms.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Master System Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/snes_faust.html mednafen-1.26.1+dfsg/Documentation/snes_faust.html --- mednafen-1.24.3+dfsg/Documentation/snes_faust.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/snes_faust.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Super Nintendo Entertainment System/Super Famicom Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/snes.html mednafen-1.26.1+dfsg/Documentation/snes.html --- mednafen-1.24.3+dfsg/Documentation/snes.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/snes.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Super Nintendo Entertainment System/Super Famicom Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/ssfplay.html mednafen-1.26.1+dfsg/Documentation/ssfplay.html --- mednafen-1.24.3+dfsg/Documentation/ssfplay.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/ssfplay.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Saturn Sound Format Player Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/ss.html mednafen-1.26.1+dfsg/Documentation/ss.html --- mednafen-1.24.3+dfsg/Documentation/ss.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/ss.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Sega Saturn Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
@@ -35,6 +35,11 @@ A list of known emulation bugs(with workarounds in some cases) in Saturn games with Mednafen is available at https://forum.fobby.net/index.php?t=msg&th=1357

+

+Mednafen's Sega Saturn emulation should not be used in lieu of a Sega Saturn for authoritative game performance/FPS review purposes. The emulation will generally +run Saturn games with less slowdown than on a real Saturn, even when more accurate emulation modes are enabled via internal databases. +

+

Firmware/BIOS

Place the correct BIOS image files in the correct location. @@ -97,7 +102,196 @@



-

Internal Databases

Region

This database is used in conjunction with a game's internal header and the "ss.region_default" setting to automatically select the region of Saturn to emulate when the "ss.region_autodetect" setting is set to "1", the default.

Game:      ID:      Region:Purpose:
Preview Sega Saturn Vol. 1 (Europe)10 8f e1 af 55 5a 95 42 04 85 7e 98 8c 53 6a 31Europe
Primal Rage (Europe)ed 4c 0b 87 35 37 86 76 a0 f6 32 c6 a4 c3 99 88Europe
Race Drivin' (Japan)15 fc 3a 82 16 a9 85 a5 a8 ad 30 af 9a ff 03 a9Japan
Riven - A Sequencia de Myst (Brazil) (Disc 1)e1 dd fd a1 8b 47 02 21 36 1e 5a ae 20 c0 59 9fBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 2)bf 5f f8 5f f2 0c 35 f6 c9 8d 03 bc 34 d9 da 7fBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 3)98 b6 6e 09 e6 dc 30 e6 55 db 85 01 33 0c 0b 9cBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 4)a2 34 b0 b9 aa 47 74 1f d4 1e 35 da 3d e7 4d e3Brazil
Sega International Victory Goal (Japan)f7 e9 23 0a 9e 92 f1 93 16 43 f8 6c e8 21 50 66Japan
Virtua Racing (Europe)64 75 25 0c a1 9b 6c 5e 4e a0 6d 69 d9 0f 32 caEurope
Virtua Racing (Japan)0d e3 fa fb 2b b9 6d 79 e0 3a b7 6d cc bf b0 2cJapan
WWF WrestleMania - The Arcade Game (Europe) (Demo)73 91 4b e1 ad 4d af 69 c3 eb b8 43 ee 3e b5 09Europe
Winter Heat (Europe) (Demo)6b 29 33 fc dd ad 8e 0d 95 81 a6 ee fd 90 4b 43Europe

Cart

This database is used to automatically select the type of cart to emulate when the "ss.cart" setting is set to "auto", the default. If a game is not found in the database when auto selection is enabled, then the cart used is specified by the "ss.cart.auto_default" setting, default "backup"(a backup memory cart).

Game:      ID:      Cart:Purpose:
Astra Superstars (Japan)T-1521G1MiB Extended RAM
Cotton 2 (Japan)T-9904G1MiB Extended RAM
Cyberbots (Japan)T-1217G1MiB Extended RAM
Daytona USA CCE Net Link EditionMK-81218NoneReserved for future modem support.
Dennou Senki Virtual On (SegaNet)GS-7106NoneReserved for future modem support.
Dezaemon 2 (Japan)T-16804GBackup MemoryAllows saving.
Die Hard Trilogy (Europe/USA)T-16103HBackup MemoryGame will crash when running with a RAM expansion cart.
Die Hard Trilogy (Japan)GS-9123Backup MemoryGame will crash when running with a RAM expansion cart.
Dragon's Dream (Japan)GS-7114NoneReserved for future modem support.
Duke Nukem 3DMK-81071NoneReserved for future modem support.
Dungeons and Dragons Collection (Japan)T-1245G4MiB Extended RAMGame requirement("Shadow over Mystara").
Fighter's History Dynamite (Japan)GS-91071MiB Extended RAMGame requirement.
Final Fight Revenge (Japan)T-1248G4MiB Extended RAMGame requirement.
Friends (Japan)T-20109G1MiB Extended RAM
Groove on Fight (Japan)T-14411G1MiB Extended RAMGame requirement.
Habitat II (Japan)GS-7105NoneReserved for future modem support.
Heart of Darkness (Prototype)4a f9 ff 30 ea 54 fe 3a 79 a7 68 69 ae de 55 bb16MiB A-bus CS1 RAMGame requirement(though it's probable the original dev cart was only around 6 to 8MiB).
Heart of Darkness (Prototype)f1 71 c3 e4 69 d5 99 93 94 09 05 fc 29 d3 8a 5916MiB A-bus CS1 RAMGame requirement(though it's probable the original dev cart was only around 6 to 8MiB).
King of Fighters '95, The (Europe)MK-81088King of Fighters 95 ROMGame requirement.
King of Fighters '95, The (Japan)T-3101GKing of Fighters 95 ROMGame requirement.
Kouryuu Sangoku Engi (Japan)T-26104GBackup Memory
Marvel Super Heroes (Europe)T-7032H-501MiB Extended RAM
Marvel Super Heroes (Japan)T-1215G1MiB Extended RAM
Marvel Super Heroes vs. Street Fighter (Japan)T-1238G4MiB Extended RAMGame requirement.
Metal Slug (Japan)T-3111G1MiB Extended RAMGame requirement.
NOël 3 (Japan)T-22205G1MiB Extended RAM
Pad Nifty (Japan)GS-7101NoneReserved for future modem support.
Pia Carrot e Youkoso!! 2 (Japan)T-20114G1MiB Extended RAM
PlanetWeb Browser (multiple versions)T-319-01HNoneReserved for future modem support.
Pocket Fighter (Japan)T-1230G4MiB Extended RAM
Puzzle Bobble 3 (SegaNet)GS-7113NoneReserved for future modem support.
Real Bout Garou Densetsu (Japan)T-3105G1MiB Extended RAMGame requirement.
Real Bout Garou Densetsu Special (Japan)T-3119G1MiB Extended RAMGame requirement.
Samurai Spirits - Amakusa Kourin (Japan)T-3116G1MiB Extended RAMGame requirement.
Samurai Spirits - Zankurou Musouken (Japan)T-3104G1MiB Extended RAMGame requirement.
Saturn BombermanMK-81070NoneReserved for future modem support.
Saturn Bomberman (SegaNet)T-14305GNoneReserved for future modem support.
Sega Ages - Galaxy Force IIGS-9197Backup MemoryAllows saving replay data.
Sega Rally Championship Plus NetLink EditionMK-81215NoneReserved for future modem support.
SegaSaturn Internet Vol. 1 (Japan)T-31301GNoneReserved for future modem support.
Street Fighter Zero 3 (Japan)T-1246G4MiB Extended RAMGame requirement.
Super Real Mahjong P7 (Japan)T-16510G1MiB Extended RAM
Super Real Mahjong P7 (Japan) (TODO: Test)T-16509G1MiB Extended RAM
Tech Saturn 1997.6 (Japan)6106360081MiB Extended RAMRequired by "Groove on Fight" demo.
The King of Fighters '96 (Japan)T-3108G1MiB Extended RAMGame requirement.
The King of Fighters '97 (Japan)T-3121G1MiB Extended RAMGame requirement.
Ultraman - Hikari no Kyojin Densetsu (Japan)T-13308GUltraman ROMGame requirement.
Vampire Savior (Japan)T-1229G4MiB Extended RAMGame requirement.
Virtual On NetLink EditionMK-81072NoneReserved for future modem support.
Waku Waku 7 (Japan)T-1515G1MiB Extended RAMGame requirement.
X-Men vs. Street Fighter (Japan)T-1226G4MiB Extended RAMGame requirement.

Cache Mode

This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).

The cache mode "Data-only, with high-level bypass" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.

Full cache emulation is not enabled globally due to the large increase in host CPU usage, along with the potential of causing games that fully utilize both SH-2 CPUs to run significantly slower than they should due to inadequate emulation of bus sharing/contention.

Game:      ID:      Cache Mode:Purpose:
Albert Odyssey (Japan)T-1507GFull
Albert Odyssey (USA)T-12705HFullFixes battle text truncation.
Area 51 (Europe)T-25408HData only, with high-level bypassFixes game hang.
Area 51 (USA)T-9705HData only, with high-level bypassFixes game hang.
Clockwork Knight 2 (USA)MK-81036Data only, with high-level bypassFixes game hang that occurred when some FMVs were played.
DeJig - Lassen Art Collection (Japan)T-30304GData only, with high-level bypassFixes graphical glitches.
Die Hard Trilogy (Europe/USA)T-16103HFullFixes game hang.
Die Hard Trilogy (Japan)GS-9123FullFixes game hang.
Digital Monster Version S (Japan)T-13331GFullFixes game hang.
Dragon Force II (Japan)GS-9184Data only, with high-level bypassFixes math and game logic errors during battles.
Father Christmas (Japan)T-18504GData only, with high-level bypassFixes stuck music and voice acting.
Fighting Vipers (Europe/USA)MK-81041Data only, with high-level bypassFixes computer-controlled opponent turning into a ghost statue.
Fighting Vipers (Japan)GS-9101Data only, with high-level bypassFixes computer-controlled opponent turning into a ghost statue.
Formula Grand Prix - Team Unei Simulation (Japan)T-7309GData only, with high-level bypassFixes game hang.
GeGeGe no Kitarou (Japan)T-13310GFullFixes game hang.
Gex (Europe)T-15904H50FullFixes minor FMV glitches.
Gex (Japan)T-15904GFullFixes minor FMV glitches.
Gex (USA)T-15904HFullFixes minor FMV glitches.
Golden Axe - The Duel (Europe/USA)MK-81045Data only, with high-level bypassFixes flickering title screen.
Golden Axe - The Duel (Japan)GS-9041Data only, with high-level bypassFixes flickering title screen.
Hideo Nomo World Series Baseball (Japan)GS-9061Data only, with high-level bypassFixes severe gameplay logic glitches.
House of the Dead (Japan)GS-9173Data only, with high-level bypassFixes game crash on lightgun calibration screen.
Linkle Liver Story (Japan)GS-9055Data only, with high-level bypassFixes game crash when going to the world map.
Lunar - Silver Star Story (Japan)T-27901GFullFixes FMV flickering with alternative BIOS.
Nobunaga no Yabou Shouseiroku (Japan)T-7664GFullFixes game hang.
Policenauts (Japan)T-9510GFullFixes screen flickering on disc 2.
Rampage - World Tour (Europe)T-25416H50FullFixes game hang.
Ronde (Japan)T-14415GData only, with high-level bypassFixes missing graphics on the title screen, main menu, and elsewhere.
Sega Saturn Choice Cuts (USA)81600Data only, with high-level bypassFixes FMV playback hangs and playback failures.
Segakore Sega Bible Mogitate SegaSaturn (Japan)610680501Data only, with high-level bypass
Shunsai (Japan)T-18703GData only, with high-level bypassFixes various graphical glitches.
Slam 'n Jam 96 (Europe)T-15902H50FullFixes minor FMV glitches.
Slam 'n Jam 96 (Japan)T-159056FullFixes minor FMV glitches.
Slam 'n Jam 96 (USA)T-159028HFullFixes minor FMV glitches.
Space Jam (Europe)T-8125H-50FullFixes game crash.
Space Jam (Japan)T-8119GFullFixes game crash.
Space Jam (USA)T-8125HFullFixes game crash.
Spot Goes to Hollywood (Japan)T-7014GData only, with high-level bypassFixes hang at corrupted "Burst" logo.
Spot Goes to Hollywood (USA)T-7001HData only, with high-level bypassFixes hang at corrupted "Burst" logo.
Street Fighter Zero (Japan)T-1206GData only, with high-level bypassFixes weird color/palette issues during game startup.
Street Fighter Zero 3 (Japan)T-1246GData only, with high-level bypass
Super Puzzle Fighter II Turbo (USA)T-1215HData only, with high-level bypassFixes color/brightness and other graphical issues.
Theme Park (Europe)T-5001HData only, with high-level bypassFixes hang during FMV.
Thunder Force Gold Pack 1 (Japan)T-1807GData only, with high-level bypassFixes explosion graphic glitches in "Thunder Force III".
Thunder Force Gold Pack 2 (Japan)T-1808GData only, with high-level bypassFixes hang when pausing the game under certain conditions in "Thunder Force AC".
Virtua Fighter Kids (Java Tea Original)GS-9113Data only, with high-level bypassFixes malfunction of computer-controlled player.
Virtual Mahjong (Japan)T-2206GData only, with high-level bypassFixes graphical glitches on the character select screen.
Virtual Volleyball (Japan)T-15005GData only, with high-level bypassFixes invisible menu items and hang.
Whizz (Europe)T-9515H-50FullFixes quasi-random hangs during startup.
Whizz (Japan)T-36102GFullFixes quasi-random hangs during startup.
WipEout (Europe)T-11301HData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
WipEout (Japan)T-18603GData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
WipEout (USA)T-18601HData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
World Series Baseball (Europe/USA)MK-81109Data only, with high-level bypassFixes severe gameplay logic glitches.

Horrible Hacks

This database is used to automatically enable various horrible hacks to fix issues in certain games.

Note that slowing down VDP1 command execution due to SH-2 CPU reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.

Game:      ID:      Horrible Hacks:Purpose:
Albert Odyssey (Japan)T-1507GSH-2 CPU reads/writes from/to VDP1 slow down command execution.Partially fixes battle text truncation.
Albert Odyssey (USA)T-12705HSH-2 CPU reads/writes from/to VDP1 slow down command execution.Partially fixes battle text truncation.
All-Star Baseball 97 (USA)T-8150HSH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes texture glitches.
Arcade's Greatest Hits (USA)T-9703HSH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes flickering credits text.
Arcade's Greatest Hits - Atari Collection 1 (USA)T-9706HSH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes flickering credits text.
Burning Rangers (Europe/USA)MK-81803SH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Burning Rangers (Japan)GS-9174SH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Burning Rangers Taikenban (Japan)6106856SH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Fighters Megamix (Europe/USA)MK-81073Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA.Fixes hang after watching or aborting FMV playback.
Fighters Megamix (Japan)GS-9126Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA.Fixes hang after watching or aborting FMV playback.
Frank Thomas Big Hurt Baseball (Japan)T-8111GSH-2 CPU reads/writes from/to VDP1 slow down command execution.Reduces graphical glitches.
Frank Thomas Big Hurt Baseball (USA)T-8138HSH-2 CPU reads/writes from/to VDP1 slow down command execution.Reduces graphical glitches.
Grandia (Japan)T-4507GPatch VDP1 VRAM to break an infinite loop.Fixes hang at end of first disc.
Irem Arcade Classics (Japan)T-22403GDisable slowing down of SH-2 CPU reads/writes during SH-2 DMA.Fixes hang when trying to start "Zippy Race".
Thunderhawk II (Japan)T-6006GBlock SH-2 DMA on last line of frame. Execute VDP1 commands instantly.Fixes hangs just before and during gameplay.
Thunderstrike II (USA)T-11501H00Block SH-2 DMA on last line of frame. Execute VDP1 commands instantly.Fixes hangs just before and during gameplay.
Whizz (Europe)T-9515H-50SH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes major graphical issues during gameplay.
Whizz (Japan)T-36102GSH-2 CPU reads/writes from/to VDP1 slow down command execution.Fixes major graphical issues during gameplay.


+

Internal Databases

Region

This database is used in conjunction with a game's internal header and the "ss.region_default" setting to automatically select the region of Saturn to emulate when the "ss.region_autodetect" setting is set to "1", the default.

+ + + + + + + + + + + + +
Game:      ID:      Region:Purpose:
Preview Sega Saturn Vol. 1 (Europe)10 8f e1 af 55 5a 95 42 04 85 7e 98 8c 53 6a 31Europe
Primal Rage (Europe)ed 4c 0b 87 35 37 86 76 a0 f6 32 c6 a4 c3 99 88Europe
Race Drivin' (Japan)15 fc 3a 82 16 a9 85 a5 a8 ad 30 af 9a ff 03 a9Japan
Riven - A Sequencia de Myst (Brazil) (Disc 1)e1 dd fd a1 8b 47 02 21 36 1e 5a ae 20 c0 59 9fBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 2)bf 5f f8 5f f2 0c 35 f6 c9 8d 03 bc 34 d9 da 7fBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 3)98 b6 6e 09 e6 dc 30 e6 55 db 85 01 33 0c 0b 9cBrazil
Riven - A Sequencia de Myst (Brazil) (Disc 4)a2 34 b0 b9 aa 47 74 1f d4 1e 35 da 3d e7 4d e3Brazil
Sega International Victory Goal (Japan)f7 e9 23 0a 9e 92 f1 93 16 43 f8 6c e8 21 50 66Japan
Virtua Racing (Europe)64 75 25 0c a1 9b 6c 5e 4e a0 6d 69 d9 0f 32 caEurope
Virtua Racing (Japan)0d e3 fa fb 2b b9 6d 79 e0 3a b7 6d cc bf b0 2cJapan
WWF WrestleMania - The Arcade Game (Europe) (Demo)73 91 4b e1 ad 4d af 69 c3 eb b8 43 ee 3e b5 09Europe
Winter Heat (Europe) (Demo)6b 29 33 fc dd ad 8e 0d 95 81 a6 ee fd 90 4b 43Europe

Cart

This database is used to automatically select the type of cart to emulate when the "ss.cart" setting is set to "auto", the default. If a game is not found in the database when auto selection is enabled, then the cart used is specified by the "ss.cart.auto_default" setting, default "backup"(a backup memory cart).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Game:      ID:      Cart:Purpose:
Astra Superstars (Japan)T-1521G1MiB Extended RAM
Cotton 2 (Japan)T-9904G1MiB Extended RAM
Cyberbots (Japan)T-1217G1MiB Extended RAM
Daytona USA CCE Net Link EditionMK-81218NoneReserved for future modem support.
Dennou Senki Virtual On (SegaNet)GS-7106NoneReserved for future modem support.
Dezaemon 2 (Japan)T-16804GBackup MemoryAllows saving.
Die Hard Trilogy (Europe/USA)T-16103HBackup MemoryGame will crash when running with a RAM expansion cart.
Die Hard Trilogy (Japan)GS-9123Backup MemoryGame will crash when running with a RAM expansion cart.
Dragon's Dream (Japan)GS-7114NoneReserved for future modem support.
Duke Nukem 3DMK-81071NoneReserved for future modem support.
Dungeons and Dragons Collection (Japan)T-1245G4MiB Extended RAMGame requirement("Shadow over Mystara").
Fighter's History Dynamite (Japan)GS-91071MiB Extended RAMGame requirement.
Final Fight Revenge (Japan)T-1248G4MiB Extended RAMGame requirement.
Friends (Japan)T-20109G1MiB Extended RAM
Groove on Fight (Japan)T-14411G1MiB Extended RAMGame requirement.
Habitat II (Japan)GS-7105NoneReserved for future modem support.
Heart of Darkness (Prototype)4a f9 ff 30 ea 54 fe 3a 79 a7 68 69 ae de 55 bb16MiB A-bus CS1 RAMGame requirement(though it's probable the original dev cart was only around 6 to 8MiB).
Heart of Darkness (Prototype)f1 71 c3 e4 69 d5 99 93 94 09 05 fc 29 d3 8a 5916MiB A-bus CS1 RAMGame requirement(though it's probable the original dev cart was only around 6 to 8MiB).
King of Fighters '95, The (Europe)MK-81088King of Fighters 95 ROMGame requirement.
King of Fighters '95, The (Japan)T-3101GKing of Fighters 95 ROMGame requirement.
Kouryuu Sangoku Engi (Japan)T-26104GBackup Memory
Marvel Super Heroes (Europe)T-7032H-501MiB Extended RAM
Marvel Super Heroes (Japan)T-1215G1MiB Extended RAM
Marvel Super Heroes vs. Street Fighter (Japan)T-1238G4MiB Extended RAMGame requirement.
Metal Slug (Japan)T-3111G1MiB Extended RAMGame requirement.
NOël 3 (Japan)T-22205G1MiB Extended RAM
Pad Nifty (Japan)GS-7101NoneReserved for future modem support.
Pia Carrot e Youkoso!! 2 (Japan)T-20114G1MiB Extended RAM
PlanetWeb Browser (multiple versions)T-319-01HNoneReserved for future modem support.
Pocket Fighter (Japan)T-1230G4MiB Extended RAM
Puzzle Bobble 3 (SegaNet)GS-7113NoneReserved for future modem support.
Real Bout Garou Densetsu (Japan)T-3105G1MiB Extended RAMGame requirement.
Real Bout Garou Densetsu Special (Japan)T-3119G1MiB Extended RAMGame requirement.
Samurai Spirits - Amakusa Kourin (Japan)T-3116G1MiB Extended RAMGame requirement.
Samurai Spirits - Zankurou Musouken (Japan)T-3104G1MiB Extended RAMGame requirement.
Saturn BombermanMK-81070NoneReserved for future modem support.
Saturn Bomberman (SegaNet)T-14305GNoneReserved for future modem support.
Sega Ages - Galaxy Force IIGS-9197Backup MemoryAllows saving replay data.
Sega Rally Championship Plus NetLink EditionMK-81215NoneReserved for future modem support.
SegaSaturn Internet Vol. 1 (Japan)T-31301GNoneReserved for future modem support.
Street Fighter Zero 3 (Japan)T-1246G4MiB Extended RAMGame requirement.
Super Real Mahjong P7 (Japan)T-16509G1MiB Extended RAM
Super Real Mahjong P7 (Japan)T-16510G1MiB Extended RAM
Tech Saturn 1997.6 (Japan)6106360081MiB Extended RAMRequired by "Groove on Fight" demo.
The King of Fighters '96 (Japan)T-3108G1MiB Extended RAMGame requirement.
The King of Fighters '97 (Japan)T-3121G1MiB Extended RAMGame requirement.
Ultraman - Hikari no Kyojin Densetsu (Japan)T-13308GUltraman ROMGame requirement.
Vampire Savior (Japan)T-1229G4MiB Extended RAMGame requirement.
Virtual On NetLink EditionMK-81072NoneReserved for future modem support.
Waku Waku 7 (Japan)T-1515G1MiB Extended RAMGame requirement.
X-Men vs. Street Fighter (Japan)T-1226G4MiB Extended RAMGame requirement.

Cache Mode

This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).

The cache mode "Data-only, with high-level bypass" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.

Full cache emulation is not enabled globally primarily due to the large increase in host CPU usage.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Game:      ID:      Cache Mode:Purpose:
3D Baseball (USA)T-15906HFullFixes minor FMV glitches.
3D Baseball - The Majors (Japan)T-18003GFullFixes minor FMV glitches.
Albert Odyssey (Japan)T-1507GFull
Albert Odyssey (USA)T-12705HFullFixes battle text truncation.
Area 51 (Europe)T-25408HData only, with high-level bypassFixes game hang.
Area 51 (USA)T-9705HData only, with high-level bypassFixes game hang.
Clockwork Knight 2 (USA)MK-81036Data only, with high-level bypassFixes game hang that occurred when some FMVs were played.
Corpse Killer (USA)T-16201HFullFixes glitchy rotation-zoom effect.
Crow, The (Europe)T-8124H-50FullFixes minor FMV glitches.
Crow, The (Germany)T-8124H-18FullFixes minor FMV glitches.
Crow, The (USA)T-8124HFullFixes minor FMV glitches.
Dark Seed II (Japan)T-36101GFullFixes game hang.
DeJig - Lassen Art Collection (Japan)T-30304GData only, with high-level bypassFixes graphical glitches.
Die Hard Trilogy (Europe/USA)T-16103HFullFixes game hang.
Die Hard Trilogy (Japan)GS-9123FullFixes game hang.
Doraemon - Nobita to Fukkatsu no Hoshi (Japan)T-19801GData only, with high-level bypassFixes blank Game Over screen.
Dragon Force II (Japan)GS-9184Data only, with high-level bypassFixes math and game logic errors during battles.
Father Christmas (Japan)T-18504GData only, with high-level bypassFixes stuck music and voice acting.
Fighting Vipers (Europe/USA)MK-81041Data only, with high-level bypassFixes computer-controlled opponent turning into a ghost statue.
Fighting Vipers (Japan)GS-9101Data only, with high-level bypassFixes computer-controlled opponent turning into a ghost statue.
Formula Grand Prix - Team Unei Simulation (Japan)T-7309GData only, with high-level bypassFixes game hang.
GeGeGe no Kitarou (Japan)T-13310GFullFixes game hang.
Gex (Europe)T-15904H50FullFixes minor FMV glitches.
Gex (Japan)T-15904GFullFixes minor FMV glitches.
Gex (USA)T-15904HFullFixes minor FMV glitches.
Golden Axe - The Duel (Europe/USA)MK-81045Data only, with high-level bypassFixes flickering title screen.
Golden Axe - The Duel (Japan)GS-9041Data only, with high-level bypassFixes flickering title screen.
Hideo Nomo World Series Baseball (Japan)GS-9061Data only, with high-level bypassFixes severe gameplay logic glitches.
Horror Tour (Japan)T-24301GFullFixes graphical glitches on the save and load screens.
House of the Dead (Japan)GS-9173Data only, with high-level bypassFixes game crash on lightgun calibration screen.
Irem Arcade Classics (Japan)T-22403GFullFixes hang when trying to start "Zippy Race".
Kidou Senkan Nadesico - Yappari Saigo wa Ai ga KatsuGS-9142FullFixes game hang.
Linkle Liver Story (Japan)GS-9055Data only, with high-level bypassFixes game crash when going to the world map.
Lunar - Silver Star Story (Japan)T-27901GFullFixes FMV flickering.
Mahjong Doukyuusei Special (Japan)T-25302G1Data only, with high-level bypassFixes missing background layer on disc 2.
Mahjong Doukyuusei Special (Japan)T-25302G2Data only, with high-level bypassFixes missing background layer on disc 2.
Mujintou Monogatari R - Futari no Love Love Island (Japan)T-28901GData only, with high-level bypassFixes glitches when character graphics change.
NBA Action (Europe)MK81103-50FullFixes minor FMV glitches.
NBA Action (USA)MK-81103FullFixes minor FMV glitches.
NFL Quarterback Club 96 (Europe)T-8109H-50FullFixes minor FMV glitches.
NFL Quarterback Club 96 (Japan)T-8105GFullFixes minor FMV glitches.
NFL Quarterback Club 96 (USA)T-8109HFullFixes minor FMV glitches.
Nobunaga no Yabou Shouseiroku (Japan)T-7664GFullFixes game hang.
Policenauts (Japan)T-9510GFullFixes screen flickering on disc 2.
Rampage - World Tour (Europe)T-25416H50FullFixes game hang.
Ronde (Japan)T-14415GData only, with high-level bypassFixes missing graphics on the title screen, main menu, and elsewhere.
Sega Saturn Choice Cuts (USA)81600Data only, with high-level bypassFixes FMV playback hangs and playback failures.
Segakore Sega Bible Mogitate SegaSaturn (Japan)610680501Data only, with high-level bypassFixes graphical glitch on the character select screen in the "Zero Divide" demo.
Senken Kigyouden (Japan)T-37401GFullFixes dialogue text truncation.
Shunsai (Japan)T-18703GData only, with high-level bypassFixes various graphical glitches.
Slam 'n Jam 96 (Europe)T-15902H50FullFixes minor FMV glitches.
Slam 'n Jam 96 (Japan)T-159056FullFixes minor FMV glitches.
Slam 'n Jam 96 (USA)T-159028HFullFixes minor FMV glitches.
Solar Eclipse (USA)T-15911HFullFixes minor FMV glitches.
Space Jam (Europe)T-8125H-50FullFixes game crash.
Space Jam (Japan)T-8119GFullFixes game crash.
Space Jam (USA)T-8125HFullFixes game crash.
Spot Goes to Hollywood (Japan)T-7014GData only, with high-level bypassFixes hang at corrupted "Burst" logo.
Spot Goes to Hollywood (USA)T-7001HData only, with high-level bypassFixes hang at corrupted "Burst" logo.
Street Fighter Zero (Japan)T-1206GData only, with high-level bypassFixes weird color/palette issues during game startup.
Street Fighter Zero 3 (Japan)T-1246GData only, with high-level bypass
Super Puzzle Fighter II Turbo (USA)T-1215HData only, with high-level bypassFixes color/brightness and other graphical issues.
The Lost World - Jurassic Park (Europe/USA)MK-81065FullFixes most graphical glitches in rock faces.
The Lost World - Jurassic Park (Japan)GS-9162FullFixes most graphical glitches in rock faces.
Theme Park (Europe)T-5001HData only, with high-level bypassFixes hang during FMV.
Thunder Force Gold Pack 1 (Japan)T-1807GFullFixes explosion graphic glitches in "Thunder Force III".
Thunder Force Gold Pack 2 (Japan)T-1808GData only, with high-level bypassFixes hang when pausing the game under certain conditions in "Thunder Force AC".
Titan Wars (Europe)T-15911H50FullFixes minor FMV glitches.
Titan Wars (Japan)T-15903GFullFixes minor FMV glitches.
Virtua Cop (Europe)MK-81015

E
FullFixes game hang.
Virtua Cop 2 (Europe)MK-81043

E
FullFixes game hang.
Virtua Fighter (Europe)MK_8100550FullFixes graphical glitches.
Virtua Fighter (Japan)GS-9001FullFixes graphical glitches.
Virtua Fighter (USA)MK-81005FullFixes graphical glitches.
Virtua Fighter Kids (Japan/Europe)GS-9079
VF. KIDS
Data only, with high-level bypassFixes FMV glitches.
Virtua Fighter Kids (Korea/Java Tea Original)GS-9113
VF. KIDS
Data only, with high-level bypassFixes FMV glitches and/or malfunction of computer-controlled player.
Virtua Fighter Kids (USA)MK-81049
VF. KIDS
Data only, with high-level bypassFixes FMV glitches.
Virtua Fighter Remix (Europe)MK-8102350FullFixes graphical glitches.
Virtua Fighter Remix (Japan)GS-9039FullFixes graphical glitches.
Virtua Fighter Remix (SegaNet)SG-7103FullFixes graphical glitches.
Virtua Fighter Remix (USA)MK-81023FullFixes graphical glitches.
Virtual Mahjong (Japan)T-2206GData only, with high-level bypassFixes graphical glitches on the character select screen.
Virtual Volleyball (Japan)T-15005GData only, with high-level bypassFixes invisible menu items and hang.
Whizz (Europe)T-9515H-50FullFixes quasi-random hangs during startup.
Whizz (Japan)T-36102GFullFixes quasi-random hangs during startup.
WipEout (Europe)T-11301HData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
WipEout (Japan)T-18603GData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
WipEout (USA)T-18601HData only, with high-level bypassFixes hang when trying to exit gameplay back to the main menu.
World Series Baseball (Europe/USA)MK-81109Data only, with high-level bypassFixes severe gameplay logic glitches.
Xian Jian Qi Xia Zhuan (Taiwan)T-37401HFullFixes dialogue text truncation.
Yu-No (Japan)T-28004GFullFixes FMV ending too soon.
Zero Divide - The Final Conflict (Japan)T-31601GData only, with high-level bypassFixes graphical glitch on the character select screen.

Horrible Hacks

This database is used to automatically enable various horrible hacks to fix issues in certain games.

Note that slowing down VDP1 command execution due to SH-2 reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Game:      ID:      Horrible Hacks:Purpose:
Albert Odyssey (Japan)T-1507GSH-2 reads/writes from/to VDP1 slow down command execution.Partially fixes battle text truncation.
Albert Odyssey (USA)T-12705HSH-2 reads/writes from/to VDP1 slow down command execution.Partially fixes battle text truncation.
All-Star Baseball 97 (USA)T-8150HSH-2 reads/writes from/to VDP1 slow down command execution.Fixes texture glitches.
Arcade's Greatest Hits (USA)T-9703HSH-2 reads/writes from/to VDP1 slow down command execution.Fixes flickering credits text.
Arcade's Greatest Hits - Atari Collection 1 (USA)T-9706HSH-2 reads/writes from/to VDP1 slow down command execution.Fixes flickering credits text.
Burning Rangers (Europe/USA)MK-81803SH-2 reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Burning Rangers (Japan)GS-9174SH-2 reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Burning Rangers Taikenban (Japan)6106856SH-2 reads/writes from/to VDP1 slow down command execution.Fixes flickering rescue text.
Falcom Classics II (Japan)T-31505GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes FMV tearing in "Ys II".
Fighters Megamix (Europe/USA)MK-81073Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA.Fixes hang after watching or aborting FMV playback.
Fighters Megamix (Japan)GS-9126Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA.Fixes hang after watching or aborting FMV playback.
Frank Thomas Big Hurt Baseball (Japan)T-8111GSH-2 reads/writes from/to VDP1 slow down command execution.Reduces graphical glitches.
Frank Thomas Big Hurt Baseball (USA)T-8138HSH-2 reads/writes from/to VDP1 slow down command execution.Reduces graphical glitches.
Grandia (Japan)T-4507GPatch VDP1 VRAM to break an infinite loop.Fixes hang at end of first disc.
In The Hunt (Europe/USA)T-10001GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes FMV tearing.
Kaitei Daisensou (Japan)T-15006GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes FMV tearing.
Thunderhawk II (Japan)T-6006GBlock SH-2 DMA on last line of frame. Execute VDP1 commands instantly.Fixes hangs just before and during gameplay.
Thunderstrike II (USA)T-11501H00Block SH-2 DMA on last line of frame. Execute VDP1 commands instantly.Fixes hangs just before and during gameplay.
Tokimeki Memorial - Forever with You (Japan)T-9504GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes glitchy frames on the Konami intro arm sprite.
Virtua Fighter (Europe)MK_8100550SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter (Japan)GS-9001SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter (USA)MK-81005SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter Remix (Europe)MK-8102350SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter Remix (Japan)GS-9039SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter Remix (SegaNet)SG-7103SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Virtua Fighter Remix (USA)MK-81023SH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Whizz (Europe)T-9515H-50SH-2 reads/writes from/to VDP1 slow down command execution.Fixes major graphical issues during gameplay.
Whizz (Japan)T-36102GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes major graphical issues during gameplay.
Wolf Fang SS - Kuuga 2001 (Japan)T-26105GSH-2 reads/writes from/to VDP1 slow down command execution.Fixes graphical glitches.
Yu-No (Japan)T-28004GSH-2 reads/writes from/to VDP1 slow down command execution.Reduces FMV tearing.


Settings Reference

Caution: Any settings that change emulation behavior as seen from the emulated game are shown with the setting name bolded in the table. One should be conscious of these settings if one has changed them from the default values when using network play or movies, as they can cause desychronizations if not set the same among hosts(or between the recording emulator and the playing emulator).

diff -Nru mednafen-1.24.3+dfsg/Documentation/ss.php mednafen-1.26.1+dfsg/Documentation/ss.php --- mednafen-1.24.3+dfsg/Documentation/ss.php 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/ss.php 2020-11-10 06:04:17.000000000 +0000 @@ -25,6 +25,11 @@ A list of known emulation bugs(with workarounds in some cases) in Saturn games with Mednafen is available at https://forum.fobby.net/index.php?t=msg&th=1357

+

+Mednafen's Sega Saturn emulation should not be used in lieu of a Sega Saturn for authoritative game performance/FPS review purposes. The emulation will generally +run Saturn games with less slowdown than on a real Saturn, even when more accurate emulation modes are enabled via internal databases. +

+ diff -Nru mednafen-1.24.3+dfsg/Documentation/vb.html mednafen-1.26.1+dfsg/Documentation/vb.html --- mednafen-1.24.3+dfsg/Documentation/vb.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/vb.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

Virtual Boy Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/Documentation/wswan.html mednafen-1.26.1+dfsg/Documentation/wswan.html --- mednafen-1.24.3+dfsg/Documentation/wswan.html 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Documentation/wswan.html 2020-11-10 06:04:17.000000000 +0000 @@ -9,7 +9,7 @@

Mednafen

WonderSwan Documentation

-
Last updated May 1, 2020
Valid as of 1.24.3
+
Last updated November 9, 2020
Valid as of 1.26.1

Table of Contents:
diff -Nru mednafen-1.24.3+dfsg/include/mednafen/apple2/apple2.cpp mednafen-1.26.1+dfsg/include/mednafen/apple2/apple2.cpp --- mednafen-1.24.3+dfsg/include/mednafen/apple2/apple2.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/apple2/apple2.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1450,7 +1450,7 @@ { const std::string& giotype = gio_cfg[1]; - if(gio_cfg.size() != (2 + (giotype == "gamepad" || giotype == "joystick"))) + if(gio_cfg.size() != (unsigned)(2 + (giotype == "gamepad" || giotype == "joystick"))) throw MDFN_Error(0, _("Too many arguments for \"%s\" setting in MAI file."), "gameio"); else { diff -Nru mednafen-1.24.3+dfsg/include/mednafen/apple2/debug.inc mednafen-1.26.1+dfsg/include/mednafen/apple2/debug.inc --- mednafen-1.24.3+dfsg/include/mednafen/apple2/debug.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/apple2/debug.inc 2020-11-10 06:04:17.000000000 +0000 @@ -499,6 +499,7 @@ static DebuggerInfoStruct DBGInfo = { + true, "cp437", 3, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/apple2/disk2.inc mednafen-1.26.1+dfsg/include/mednafen/apple2/disk2.inc --- mednafen-1.24.3+dfsg/include/mednafen/apple2/disk2.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/apple2/disk2.inc 2020-11-10 06:04:17.000000000 +0000 @@ -1357,7 +1357,7 @@ { const uint8 header_magic[7] = { 'M', 'D', 'F', 'N', 'A', 'F', 'D' }; uint8 header[16]; - uint32 version; + uint32 version MDFN_NOWARN_UNUSED; bool bigendian; if(sp->read(header, 16, false) != 16 || memcmp(header, header_magic, sizeof(header_magic))) @@ -1840,7 +1840,7 @@ disk->ever_modified = true; } -static bool GetClearDiskDirty(FloppyDisk* disk) +static MDFN_NOWARN_UNUSED bool GetClearDiskDirty(FloppyDisk* disk) { bool ret = disk->dirty; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/apple2/kbio.inc mednafen-1.26.1+dfsg/include/mednafen/apple2/kbio.inc --- mednafen-1.24.3+dfsg/include/mednafen/apple2/kbio.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/apple2/kbio.inc 2020-11-10 06:04:17.000000000 +0000 @@ -447,7 +447,7 @@ /* X8 */ IDIIS_Padding<1>(), /* Y4 */ - /* X0 */ IDIIS_Button("7", "7'", -1), + /* X0 */ IDIIS_Button("7", "7", -1), /* X1 */ IDIIS_Button("t", "T", -1), /* X2 */ IDIIS_Button("j", "J", -1), /* X3 */ IDIIS_Button("b", "B", -1), diff -Nru mednafen-1.24.3+dfsg/include/mednafen/apple2/video.inc mednafen-1.26.1+dfsg/include/mednafen/apple2/video.inc --- mednafen-1.24.3+dfsg/include/mednafen/apple2/video.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/apple2/video.inc 2020-11-10 06:04:17.000000000 +0000 @@ -481,7 +481,7 @@ if(text) { uint8 fd = FontData[((ram_data & 0x3F) << 3) | (VCounter & 0x7)]; - bool invert = !(ram_data & 0x80) & (!(ram_data & 0x40) | !flashything); + bool invert = (!(ram_data & 0x80)) & (!(ram_data & 0x40) | !flashything); if(invert) fd ^= 0x7F; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/cdrom/scsicd.cpp mednafen-1.26.1+dfsg/include/mednafen/cdrom/scsicd.cpp --- mednafen-1.24.3+dfsg/include/mednafen/cdrom/scsicd.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/cdrom/scsicd.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -22,6 +22,21 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* + When changing CD read timing(throughput, and startup/seek delay), be sure to test: + + 4 in 1 Super CD (check for stuck note when starting "Gate of Thunder") + Downtown Nekketsu Monogatari (with text speed set to fast, quickly enter and exit store and listen to ADPCM playback for glitches) + Galaxy Fraulein Yuna HuVideo CD + It Came from the Desert + John Madden Duo Football + Kuusou Kagaku Sekai Gulliver Boy + Magical Fantasy Adventure: Popful Mail (third cutscene, check for glitches and hang) + Mirai Shonen Conan (check for hang after boat sinking cutscene) + Sherlock Holmes Consulting Detective + +*/ + #include #include #include @@ -1939,6 +1954,7 @@ uint32 Offset = sa - toc.tracks[Track].lba; //Cur_CDIF->GetTrackStartPositionLBA(Track); SCSILog("SCSI", "Read: start=0x%08x(track=%d, offs=0x%08x), cnt=0x%08x", sa, Track, Offset, sc); } + //const uint32 PrevSectorAddr = SectorAddr; SectorAddr = sa; SectorCount = sc; @@ -1947,6 +1963,8 @@ Cur_CDIF->HintReadSector(sa); //, sa + sc); CDReadTimer = (uint64)((WhichSystem == SCSICD_PCE) ? 8 : 1) * 2048 * System_Clock / CD_DATA_TRANSFER_RATE; + //printf("%d\n", SectorAddr - PrevSectorAddr); + //TODO?: CDReadTimer = (double)((WhichSystem == SCSICD_PCE) ? ((PrevSectorAddr == SectorAddr) ? 0.5 : 8) : 1) * 2048 * System_Clock / CD_DATA_TRANSFER_RATE; } else { diff -Nru mednafen-1.24.3+dfsg/include/mednafen/compress/GZFileStream.cpp mednafen-1.26.1+dfsg/include/mednafen/compress/GZFileStream.cpp --- mednafen-1.24.3+dfsg/include/mednafen/compress/GZFileStream.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/compress/GZFileStream.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -158,7 +158,7 @@ throw MDFN_Error(0, _("Error reading from opened file \"%s\": %s"), path_save.c_str(), errstring); } - const uint64 read_count_u64 = (std::make_unsigned::type)read_count; + const uint64 read_count_u64 = (std::make_unsigned::type>::type)read_count; if(read_count_u64 != count && error_on_eof) throw MDFN_Error(0, _("Error reading from opened file \"%s\": %s"), path_save.c_str(), _("Unexpected EOF")); @@ -210,7 +210,7 @@ void GZFileStream::write(const void *data, uint64 count) { const auto write_count = gzwrite(gzp, data, count); - const uint64 write_count_u64 = (std::make_unsigned::type)write_count; + const uint64 write_count_u64 = (std::make_unsigned::type>::type)write_count; if(write_count_u64 != count) { diff -Nru mednafen-1.24.3+dfsg/include/mednafen/debug.h mednafen-1.26.1+dfsg/include/mednafen/debug.h --- mednafen-1.24.3+dfsg/include/mednafen/debug.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/debug.h 2020-11-10 06:04:17.000000000 +0000 @@ -118,8 +118,9 @@ }; #endif -typedef struct +struct DebuggerInfoStruct { + bool SuppressDoc; // Suppress auto-generated documentation for this system's debugger. const char *DefaultCharEnc; // Default(or most common) internal character encoding for text for the system. uint32 MaxInstructionSize; // Maximum instruction size in bytes @@ -180,7 +181,7 @@ // Game emulation code shouldn't touch these directly. std::vector *AddressSpaces; std::vector *RegGroups; -} DebuggerInfoStruct; +}; // ASpace_Add() functions return an ID that should be used with with MDFNDBG_ASpace_Read() // and ASpace_Write() functions. The ID is guaranteed to be 0 for the first address space, diff -Nru mednafen-1.24.3+dfsg/include/mednafen/drivers/main.cpp mednafen-1.26.1+dfsg/include/mednafen/drivers/main.cpp --- mednafen-1.24.3+dfsg/include/mednafen/drivers/main.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/drivers/main.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -195,7 +195,7 @@ void BuildSystemSetting(MDFNSetting *setting, const char *system_name, const char *name, const char *description, const char *description_extra, MDFNSettingType type, const char *default_value, const char *minimum, const char *maximum, bool (*validate_func)(const char *name, const char *value), void (*ChangeNotification)(const char *name), - const MDFNSetting_EnumList *enum_list) + const MDFNSetting_EnumList *enum_list, uint32 extra_flags) { char setting_name[256]; @@ -204,7 +204,7 @@ trio_snprintf(setting_name, 256, "%s.%s", system_name, name); setting->name = strdup(setting_name); - setting->flags = MDFNSF_COMMON_TEMPLATE; + setting->flags = MDFNSF_COMMON_TEMPLATE | extra_flags; setting->description = description; setting->description_extra = description_extra; setting->type = type; @@ -227,11 +227,13 @@ if(!dbg) continue; + // + const uint32 extra_flags = dbg->SuppressDoc ? MDFNSF_SUPPRESS_DOC : 0; - BuildSystemSetting(&setting, sysname, "debugger.disfontsize", gettext_noop("Disassembly font size."), gettext_noop("Note: Setting the font size to larger than the default may cause text overlap in the debugger."), MDFNST_ENUM, "5x7", NULL, NULL, NULL, NULL, FontSize_List); + BuildSystemSetting(&setting, sysname, "debugger.disfontsize", gettext_noop("Disassembly font size."), gettext_noop("Note: Setting the font size to larger than the default may cause text overlap in the debugger."), MDFNST_ENUM, "5x7", NULL, NULL, NULL, NULL, FontSize_List, extra_flags); settings.push_back(setting); - BuildSystemSetting(&setting, sysname, "debugger.memcharenc", gettext_noop("Character encoding for the debugger's memory editor."), NULL, MDFNST_STRING, dbg->DefaultCharEnc); + BuildSystemSetting(&setting, sysname, "debugger.memcharenc", gettext_noop("Character encoding for the debugger's memory editor."), NULL, MDFNST_STRING, dbg->DefaultCharEnc, NULL, NULL, NULL, NULL, NULL, extra_flags); settings.push_back(setting); } #endif @@ -2584,6 +2586,14 @@ { //printf("MidSync; flags=0x%08x --- SoundBufSize_DriverProcessed=0x%08x, SoundBufSize=0x%08x\n", flags, espec->SoundBufSize_DriverProcessed, espec->SoundBufSize); // + if(MDFN_UNLIKELY(StateRCTest)) + { + // TODO: Make state rewind consistency checking compatible with midsync, instead of this quick workaround. + //puts("MDFND_MidSync ignored"); + return; + } + // + // int16* const sbuf = espec->SoundBuf + espec->SoundBufSize_DriverProcessed * CurGame->soundchan; const int32 scount = espec->SoundBufSize - espec->SoundBufSize_DriverProcessed; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/drivers/main.h mednafen-1.26.1+dfsg/include/mednafen/drivers/main.h --- mednafen-1.24.3+dfsg/include/mednafen/drivers/main.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/drivers/main.h 2020-11-10 06:04:17.000000000 +0000 @@ -74,5 +74,5 @@ void BuildSystemSetting(MDFNSetting *setting, const char *system_name, const char *name, const char *description, const char *description_extra, MDFNSettingType type, const char *default_value, const char *minimum = NULL, const char *maximum = NULL, bool (*validate_func)(const char *name, const char *value) = NULL, void (*ChangeNotification)(const char *name) = NULL, - const MDFNSetting_EnumList *enum_list = NULL); + const MDFNSetting_EnumList *enum_list = NULL, uint32 extra_flags = 0); #endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/drivers/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/drivers/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/drivers/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/drivers/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ @WANT_FANCY_SCALERS_TRUE@am__append_3 = hqxx-common.cpp hq2x.cpp hq3x.cpp hq4x.cpp scale2x.c scale3x.c scalebit.c 2xSaI.cpp @WANT_DEBUGGER_TRUE@am__append_4 = debugger.cpp gfxdebugger.cpp memdebugger.cpp logdebugger.cpp prompt.cpp subdir = src/drivers -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -106,6 +114,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -163,7 +172,25 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/2xSaI.Po ./$(DEPDIR)/Joystick.Po \ + ./$(DEPDIR)/Joystick_DX5.Po ./$(DEPDIR)/Joystick_Linux.Po \ + ./$(DEPDIR)/Joystick_SDL.Po ./$(DEPDIR)/Joystick_XInput.Po \ + ./$(DEPDIR)/args.Po ./$(DEPDIR)/cheat.Po \ + ./$(DEPDIR)/console.Po ./$(DEPDIR)/debugger.Po \ + ./$(DEPDIR)/ers.Po ./$(DEPDIR)/fps.Po \ + ./$(DEPDIR)/gfxdebugger.Po ./$(DEPDIR)/help.Po \ + ./$(DEPDIR)/hq2x.Po ./$(DEPDIR)/hq3x.Po ./$(DEPDIR)/hq4x.Po \ + ./$(DEPDIR)/hqxx-common.Po ./$(DEPDIR)/input.Po \ + ./$(DEPDIR)/keyboard.Po ./$(DEPDIR)/logdebugger.Po \ + ./$(DEPDIR)/main.Po ./$(DEPDIR)/memdebugger.Po \ + ./$(DEPDIR)/mouse.Po ./$(DEPDIR)/netplay.Po ./$(DEPDIR)/nnx.Po \ + ./$(DEPDIR)/nongl.Po ./$(DEPDIR)/opengl.Po \ + ./$(DEPDIR)/prompt.Po ./$(DEPDIR)/remote.Po \ + ./$(DEPDIR)/rmdui.Po ./$(DEPDIR)/scale2x.Po \ + ./$(DEPDIR)/scale3x.Po ./$(DEPDIR)/scalebit.Po \ + ./$(DEPDIR)/shader.Po ./$(DEPDIR)/sound.Po \ + ./$(DEPDIR)/video-state.Po ./$(DEPDIR)/video.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -216,6 +243,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -390,6 +419,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -423,14 +453,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -456,44 +485,50 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/2xSaI.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_DX5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_Linux.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_SDL.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_XInput.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfxdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq2x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq3x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq4x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hqxx-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nnx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nongl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opengl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prompt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdui.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale2x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale3x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalebit.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video-state.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/2xSaI.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_DX5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_Linux.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_SDL.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_XInput.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheat.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ers.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fps.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfxdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq2x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq3x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq4x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hqxx-common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nnx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nongl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opengl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prompt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdui.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale2x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale3x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalebit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video-state.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -579,7 +614,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -648,7 +686,44 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/2xSaI.Po + -rm -f ./$(DEPDIR)/Joystick.Po + -rm -f ./$(DEPDIR)/Joystick_DX5.Po + -rm -f ./$(DEPDIR)/Joystick_Linux.Po + -rm -f ./$(DEPDIR)/Joystick_SDL.Po + -rm -f ./$(DEPDIR)/Joystick_XInput.Po + -rm -f ./$(DEPDIR)/args.Po + -rm -f ./$(DEPDIR)/cheat.Po + -rm -f ./$(DEPDIR)/console.Po + -rm -f ./$(DEPDIR)/debugger.Po + -rm -f ./$(DEPDIR)/ers.Po + -rm -f ./$(DEPDIR)/fps.Po + -rm -f ./$(DEPDIR)/gfxdebugger.Po + -rm -f ./$(DEPDIR)/help.Po + -rm -f ./$(DEPDIR)/hq2x.Po + -rm -f ./$(DEPDIR)/hq3x.Po + -rm -f ./$(DEPDIR)/hq4x.Po + -rm -f ./$(DEPDIR)/hqxx-common.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/logdebugger.Po + -rm -f ./$(DEPDIR)/main.Po + -rm -f ./$(DEPDIR)/memdebugger.Po + -rm -f ./$(DEPDIR)/mouse.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/nnx.Po + -rm -f ./$(DEPDIR)/nongl.Po + -rm -f ./$(DEPDIR)/opengl.Po + -rm -f ./$(DEPDIR)/prompt.Po + -rm -f ./$(DEPDIR)/remote.Po + -rm -f ./$(DEPDIR)/rmdui.Po + -rm -f ./$(DEPDIR)/scale2x.Po + -rm -f ./$(DEPDIR)/scale3x.Po + -rm -f ./$(DEPDIR)/scalebit.Po + -rm -f ./$(DEPDIR)/shader.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/video-state.Po + -rm -f ./$(DEPDIR)/video.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -694,7 +769,44 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/2xSaI.Po + -rm -f ./$(DEPDIR)/Joystick.Po + -rm -f ./$(DEPDIR)/Joystick_DX5.Po + -rm -f ./$(DEPDIR)/Joystick_Linux.Po + -rm -f ./$(DEPDIR)/Joystick_SDL.Po + -rm -f ./$(DEPDIR)/Joystick_XInput.Po + -rm -f ./$(DEPDIR)/args.Po + -rm -f ./$(DEPDIR)/cheat.Po + -rm -f ./$(DEPDIR)/console.Po + -rm -f ./$(DEPDIR)/debugger.Po + -rm -f ./$(DEPDIR)/ers.Po + -rm -f ./$(DEPDIR)/fps.Po + -rm -f ./$(DEPDIR)/gfxdebugger.Po + -rm -f ./$(DEPDIR)/help.Po + -rm -f ./$(DEPDIR)/hq2x.Po + -rm -f ./$(DEPDIR)/hq3x.Po + -rm -f ./$(DEPDIR)/hq4x.Po + -rm -f ./$(DEPDIR)/hqxx-common.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/logdebugger.Po + -rm -f ./$(DEPDIR)/main.Po + -rm -f ./$(DEPDIR)/memdebugger.Po + -rm -f ./$(DEPDIR)/mouse.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/nnx.Po + -rm -f ./$(DEPDIR)/nongl.Po + -rm -f ./$(DEPDIR)/opengl.Po + -rm -f ./$(DEPDIR)/prompt.Po + -rm -f ./$(DEPDIR)/remote.Po + -rm -f ./$(DEPDIR)/rmdui.Po + -rm -f ./$(DEPDIR)/scale2x.Po + -rm -f ./$(DEPDIR)/scale3x.Po + -rm -f ./$(DEPDIR)/scalebit.Po + -rm -f ./$(DEPDIR)/shader.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/video-state.Po + -rm -f ./$(DEPDIR)/video.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -714,18 +826,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/drivers_dos/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/drivers_dos/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/drivers_dos/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/drivers_dos/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/drivers_dos -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -149,6 +158,7 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -323,6 +333,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -350,14 +361,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers_dos/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers_dos/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -389,7 +399,10 @@ cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -534,6 +547,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/drivers_libxxx/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/drivers_libxxx/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/drivers_libxxx/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/drivers_libxxx/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/drivers_libxxx -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -135,7 +144,9 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/CDInterface_EXT.Po \ + ./$(DEPDIR)/interface.Po ./$(DEPDIR)/main.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -176,6 +187,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -350,6 +363,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -379,14 +393,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers_libxxx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers_libxxx/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -417,9 +430,15 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDInterface_EXT.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDInterface_EXT.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -489,7 +508,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -558,7 +580,9 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/CDInterface_EXT.Po + -rm -f ./$(DEPDIR)/interface.Po + -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -604,7 +628,9 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/CDInterface_EXT.Po + -rm -f ./$(DEPDIR)/interface.Po + -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -624,18 +650,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/hw_cpu/m68k/m68k.cpp mednafen-1.26.1+dfsg/include/mednafen/hw_cpu/m68k/m68k.cpp --- mednafen-1.24.3+dfsg/include/mednafen/hw_cpu/m68k/m68k.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/hw_cpu/m68k/m68k.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -27,7 +27,7 @@ // // TODO: Fix instruction timings(currently execute too fast). // -// TODO: Fix multiplication and division timing, and make sure flags are ok for divide by zero. +// TODO: Fix division timing, and make sure flags are ok for divide by zero. // // FIXME: Handle NMI differently; how to test? Maybe MOVEM to interrupt control registers... // @@ -1123,6 +1123,11 @@ T const src_data = src.read(); uint32 const result = (uint32)(uint16)D[dr] * (uint32)src_data; + timestamp += 34; + + for(uint32 tmp = src_data; tmp; tmp &= tmp - 1) + timestamp += 2; + CalcZN(result); SetC(false); SetV(false); @@ -1143,6 +1148,11 @@ T const src_data = src.read(); uint32 const result = (int16)D[dr] * (int16)src_data; + timestamp += 34; + + for(uint32 tmp = src_data << 1, i = 0; i < 16; tmp >>= 1, i++) + timestamp += (tmp ^ (tmp << 1)) & 2; + CalcZN(result); SetC(false); SetV(false); diff -Nru mednafen-1.24.3+dfsg/include/mednafen/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -91,42 +101,6 @@ @ENABLE_LIBXXX_MODE_TRUE@am__append_9 = drivers_libxxx/libmdfnxxx.a @ENABLE_LIBXXX_MODE_TRUE@am__append_10 = drivers_libxxx/libmdfnxxx.a @HAVE_SDL_TRUE@am__append_11 = @SDL_LIBS@ -DIST_COMMON = $(srcdir)/cdplay/Makefile.am.inc \ - $(srcdir)/demo/Makefile.am.inc \ - $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc \ - $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc \ - $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc \ - $(srcdir)/nes/ppu/Makefile.am.inc \ - $(srcdir)/nes/boards/Makefile.am.inc \ - $(srcdir)/nes/input/Makefile.am.inc \ - $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc \ - $(srcdir)/pce_fast/Makefile.am.inc \ - $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc \ - $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc \ - $(srcdir)/snes_faust/Makefile.am.inc \ - $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc \ - $(srcdir)/desa68/Makefile.am.inc \ - $(srcdir)/hw_cpu/Makefile.am.inc \ - $(srcdir)/hw_misc/Makefile.am.inc \ - $(srcdir)/hw_sound/Makefile.am.inc \ - $(srcdir)/hw_video/Makefile.am.inc \ - $(srcdir)/mthreading/Makefile.am.inc \ - $(srcdir)/cdrom/Makefile.am.inc \ - $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc \ - $(srcdir)/quicklz/Makefile.am.inc \ - $(srcdir)/compress/Makefile.am.inc \ - $(srcdir)/hash/Makefile.am.inc \ - $(srcdir)/string/Makefile.am.inc \ - $(srcdir)/video/Makefile.am.inc \ - $(srcdir)/resampler/Makefile.am.inc \ - $(srcdir)/cputest/Makefile.am.inc \ - $(srcdir)/cheat_formats/Makefile.am.inc \ - $(srcdir)/minilzo/Makefile.am.inc \ - $(srcdir)/tremor/Makefile.am.inc \ - $(srcdir)/mpcdec/Makefile.am.inc \ - $(srcdir)/trio/Makefile.am.inc $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \ - $(top_srcdir)/depcomp @WANT_APPLE2_EMU_TRUE@am__append_12 = apple2/apple2.cpp @WANT_GB_EMU_TRUE@am__append_13 = gb/gb.cpp gb/gfx.cpp gb/gbGlobals.cpp gb/memory.cpp gb/sound.cpp gb/z80.cpp @WANT_GBA_EMU_TRUE@am__append_14 = gba/GBAinline.cpp gba/arm.cpp \ @@ -342,10 +316,13 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru @@ -492,8 +469,6 @@ @HAVE_EXTERNAL_TREMOR_FALSE@ tremor/libvorbisidec_a-framing.$(OBJEXT) \ @HAVE_EXTERNAL_TREMOR_FALSE@ tremor/libvorbisidec_a-bitwise.$(OBJEXT) libvorbisidec_a_OBJECTS = $(am_libvorbisidec_a_OBJECTS) -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) am__mednafen_SOURCES_DIST = debug.cpp error.cpp mempatcher.cpp \ settings.cpp endian.cpp Time.cpp mednafen.cpp git.cpp file.cpp \ general.cpp memory.cpp netplay.cpp state.cpp state_rewind.cpp \ @@ -999,7 +974,309 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/ExtMemStream.Po \ + ./$(DEPDIR)/FileStream.Po ./$(DEPDIR)/IPSPatcher.Po \ + ./$(DEPDIR)/MTStreamReader.Po ./$(DEPDIR)/MemoryStream.Po \ + ./$(DEPDIR)/NativeVFS.Po ./$(DEPDIR)/PSFLoader.Po \ + ./$(DEPDIR)/SNSFLoader.Po ./$(DEPDIR)/SPCReader.Po \ + ./$(DEPDIR)/SSFLoader.Po ./$(DEPDIR)/Stream.Po \ + ./$(DEPDIR)/Time.Po ./$(DEPDIR)/VirtualFS.Po \ + ./$(DEPDIR)/debug.Po ./$(DEPDIR)/endian.Po \ + ./$(DEPDIR)/error.Po ./$(DEPDIR)/file.Po \ + ./$(DEPDIR)/general.Po ./$(DEPDIR)/git.Po \ + ./$(DEPDIR)/mednafen.Po ./$(DEPDIR)/memory.Po \ + ./$(DEPDIR)/mempatcher.Po ./$(DEPDIR)/movie.Po \ + ./$(DEPDIR)/netplay.Po ./$(DEPDIR)/player.Po \ + ./$(DEPDIR)/qtrecord.Po ./$(DEPDIR)/settings.Po \ + ./$(DEPDIR)/state.Po ./$(DEPDIR)/state_rewind.Po \ + ./$(DEPDIR)/tests.Po ./$(DEPDIR)/win32-common.Po \ + apple2/$(DEPDIR)/apple2.Po cdplay/$(DEPDIR)/cdplay.Po \ + cdrom/$(DEPDIR)/CDAFReader.Po \ + cdrom/$(DEPDIR)/CDAFReader_MPC.Po \ + cdrom/$(DEPDIR)/CDAFReader_SF.Po \ + cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po \ + cdrom/$(DEPDIR)/CDAccess.Po cdrom/$(DEPDIR)/CDAccess_CCD.Po \ + cdrom/$(DEPDIR)/CDAccess_Image.Po \ + cdrom/$(DEPDIR)/CDInterface.Po \ + cdrom/$(DEPDIR)/CDInterface_MT.Po \ + cdrom/$(DEPDIR)/CDInterface_ST.Po cdrom/$(DEPDIR)/CDUtility.Po \ + cdrom/$(DEPDIR)/crc32.Po cdrom/$(DEPDIR)/galois.Po \ + cdrom/$(DEPDIR)/l-ec.Po cdrom/$(DEPDIR)/lec.Po \ + cdrom/$(DEPDIR)/recover-raw.Po cdrom/$(DEPDIR)/scsicd.Po \ + cheat_formats/$(DEPDIR)/gb.Po cheat_formats/$(DEPDIR)/psx.Po \ + cheat_formats/$(DEPDIR)/snes.Po \ + compress/$(DEPDIR)/GZFileStream.Po \ + compress/$(DEPDIR)/ZIPReader.Po \ + compress/$(DEPDIR)/ZLInflateFilter.Po \ + cputest/$(DEPDIR)/cputest.Po cputest/$(DEPDIR)/ppc_cpu.Po \ + cputest/$(DEPDIR)/x86_cpu.Po demo/$(DEPDIR)/demo.Po \ + desa68/$(DEPDIR)/libdesa68_a-desa68.Po gb/$(DEPDIR)/gb.Po \ + gb/$(DEPDIR)/gbGlobals.Po gb/$(DEPDIR)/gfx.Po \ + gb/$(DEPDIR)/memory.Po gb/$(DEPDIR)/sound.Po \ + gb/$(DEPDIR)/z80.Po gba/$(DEPDIR)/GBA.Po \ + gba/$(DEPDIR)/GBAinline.Po gba/$(DEPDIR)/Gfx.Po \ + gba/$(DEPDIR)/Globals.Po gba/$(DEPDIR)/Mode0.Po \ + gba/$(DEPDIR)/Mode1.Po gba/$(DEPDIR)/Mode2.Po \ + gba/$(DEPDIR)/Mode3.Po gba/$(DEPDIR)/Mode4.Po \ + gba/$(DEPDIR)/Mode5.Po gba/$(DEPDIR)/RTC.Po \ + gba/$(DEPDIR)/Sound.Po gba/$(DEPDIR)/arm.Po \ + gba/$(DEPDIR)/bios.Po gba/$(DEPDIR)/eeprom.Po \ + gba/$(DEPDIR)/flash.Po gba/$(DEPDIR)/sram.Po \ + gba/$(DEPDIR)/thumb.Po hash/$(DEPDIR)/crc.Po \ + hash/$(DEPDIR)/md5.Po hash/$(DEPDIR)/sha1.Po \ + hash/$(DEPDIR)/sha256.Po hw_cpu/m68k/$(DEPDIR)/m68k.Po \ + hw_cpu/v810/$(DEPDIR)/v810_cpu.Po \ + hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po \ + hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po \ + hw_cpu/z80-fuse/$(DEPDIR)/z80.Po \ + hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po \ + hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po \ + hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po \ + hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po \ + hw_sound/ym2413/$(DEPDIR)/emu2413.Po \ + hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po \ + hw_video/huc6270/$(DEPDIR)/vdc.Po lynx/$(DEPDIR)/c65c02.Po \ + lynx/$(DEPDIR)/cart.Po lynx/$(DEPDIR)/memmap.Po \ + lynx/$(DEPDIR)/mikie.Po lynx/$(DEPDIR)/ram.Po \ + lynx/$(DEPDIR)/rom.Po lynx/$(DEPDIR)/susie.Po \ + lynx/$(DEPDIR)/system.Po md/$(DEPDIR)/debug.Po \ + md/$(DEPDIR)/genesis.Po md/$(DEPDIR)/genio.Po \ + md/$(DEPDIR)/header.Po md/$(DEPDIR)/mem68k.Po \ + md/$(DEPDIR)/membnk.Po md/$(DEPDIR)/memvdp.Po \ + md/$(DEPDIR)/memz80.Po md/$(DEPDIR)/sound.Po \ + md/$(DEPDIR)/system.Po md/$(DEPDIR)/vdp.Po \ + md/cart/$(DEPDIR)/cart.Po md/cart/$(DEPDIR)/map_eeprom.Po \ + md/cart/$(DEPDIR)/map_ff.Po md/cart/$(DEPDIR)/map_realtec.Po \ + md/cart/$(DEPDIR)/map_rmx3.Po md/cart/$(DEPDIR)/map_rom.Po \ + md/cart/$(DEPDIR)/map_sbb.Po md/cart/$(DEPDIR)/map_sram.Po \ + md/cart/$(DEPDIR)/map_ssf2.Po md/cart/$(DEPDIR)/map_svp.Po \ + md/cart/$(DEPDIR)/map_yase.Po md/cd/$(DEPDIR)/cd.Po \ + md/cd/$(DEPDIR)/cdc_cdd.Po md/cd/$(DEPDIR)/interrupt.Po \ + md/cd/$(DEPDIR)/pcm.Po md/cd/$(DEPDIR)/timer.Po \ + md/input/$(DEPDIR)/4way.Po md/input/$(DEPDIR)/gamepad.Po \ + md/input/$(DEPDIR)/megamouse.Po md/input/$(DEPDIR)/multitap.Po \ + minilzo/$(DEPDIR)/minilzo.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po \ + mthreading/$(DEPDIR)/MThreading_POSIX.Po \ + mthreading/$(DEPDIR)/MThreading_Win32.Po nes/$(DEPDIR)/cart.Po \ + nes/$(DEPDIR)/debug.Po nes/$(DEPDIR)/dis6502.Po \ + nes/$(DEPDIR)/fds-sound.Po nes/$(DEPDIR)/fds.Po \ + nes/$(DEPDIR)/ines.Po nes/$(DEPDIR)/input.Po \ + nes/$(DEPDIR)/nes.Po nes/$(DEPDIR)/nsf.Po \ + nes/$(DEPDIR)/nsfe.Po nes/$(DEPDIR)/sound.Po \ + nes/$(DEPDIR)/unif.Po nes/$(DEPDIR)/vsuni.Po \ + nes/$(DEPDIR)/x6502.Po nes/boards/$(DEPDIR)/107.Po \ + nes/boards/$(DEPDIR)/112.Po nes/boards/$(DEPDIR)/113.Po \ + nes/boards/$(DEPDIR)/114.Po nes/boards/$(DEPDIR)/117.Po \ + nes/boards/$(DEPDIR)/140.Po nes/boards/$(DEPDIR)/15.Po \ + nes/boards/$(DEPDIR)/151.Po nes/boards/$(DEPDIR)/152.Po \ + nes/boards/$(DEPDIR)/156.Po nes/boards/$(DEPDIR)/16.Po \ + nes/boards/$(DEPDIR)/163.Po nes/boards/$(DEPDIR)/18.Po \ + nes/boards/$(DEPDIR)/180.Po nes/boards/$(DEPDIR)/182.Po \ + nes/boards/$(DEPDIR)/184.Po nes/boards/$(DEPDIR)/185.Po \ + nes/boards/$(DEPDIR)/187.Po nes/boards/$(DEPDIR)/189.Po \ + nes/boards/$(DEPDIR)/190.Po nes/boards/$(DEPDIR)/193.Po \ + nes/boards/$(DEPDIR)/208.Po nes/boards/$(DEPDIR)/21.Po \ + nes/boards/$(DEPDIR)/22.Po nes/boards/$(DEPDIR)/222.Po \ + nes/boards/$(DEPDIR)/228.Po nes/boards/$(DEPDIR)/23.Po \ + nes/boards/$(DEPDIR)/232.Po nes/boards/$(DEPDIR)/234.Po \ + nes/boards/$(DEPDIR)/240.Po nes/boards/$(DEPDIR)/241.Po \ + nes/boards/$(DEPDIR)/242.Po nes/boards/$(DEPDIR)/244.Po \ + nes/boards/$(DEPDIR)/246.Po nes/boards/$(DEPDIR)/248.Po \ + nes/boards/$(DEPDIR)/25.Po nes/boards/$(DEPDIR)/30.Po \ + nes/boards/$(DEPDIR)/32.Po nes/boards/$(DEPDIR)/33.Po \ + nes/boards/$(DEPDIR)/34.Po nes/boards/$(DEPDIR)/38.Po \ + nes/boards/$(DEPDIR)/40.Po nes/boards/$(DEPDIR)/41.Po \ + nes/boards/$(DEPDIR)/42.Po nes/boards/$(DEPDIR)/46.Po \ + nes/boards/$(DEPDIR)/51.Po nes/boards/$(DEPDIR)/65.Po \ + nes/boards/$(DEPDIR)/67.Po nes/boards/$(DEPDIR)/68.Po \ + nes/boards/$(DEPDIR)/70.Po nes/boards/$(DEPDIR)/72.Po \ + nes/boards/$(DEPDIR)/73.Po nes/boards/$(DEPDIR)/75.Po \ + nes/boards/$(DEPDIR)/76.Po nes/boards/$(DEPDIR)/77.Po \ + nes/boards/$(DEPDIR)/78.Po nes/boards/$(DEPDIR)/8.Po \ + nes/boards/$(DEPDIR)/80.Po nes/boards/$(DEPDIR)/82.Po \ + nes/boards/$(DEPDIR)/8237.Po nes/boards/$(DEPDIR)/86.Po \ + nes/boards/$(DEPDIR)/87.Po nes/boards/$(DEPDIR)/88.Po \ + nes/boards/$(DEPDIR)/89.Po nes/boards/$(DEPDIR)/90.Po \ + nes/boards/$(DEPDIR)/92.Po nes/boards/$(DEPDIR)/93.Po \ + nes/boards/$(DEPDIR)/94.Po nes/boards/$(DEPDIR)/95.Po \ + nes/boards/$(DEPDIR)/96.Po nes/boards/$(DEPDIR)/97.Po \ + nes/boards/$(DEPDIR)/99.Po nes/boards/$(DEPDIR)/codemasters.Po \ + nes/boards/$(DEPDIR)/colordreams.Po \ + nes/boards/$(DEPDIR)/deirom.Po nes/boards/$(DEPDIR)/emu2413.Po \ + nes/boards/$(DEPDIR)/ffe.Po nes/boards/$(DEPDIR)/fme7.Po \ + nes/boards/$(DEPDIR)/h2288.Po nes/boards/$(DEPDIR)/malee.Po \ + nes/boards/$(DEPDIR)/maxicart.Po nes/boards/$(DEPDIR)/mmc1.Po \ + nes/boards/$(DEPDIR)/mmc2and4.Po nes/boards/$(DEPDIR)/mmc3.Po \ + nes/boards/$(DEPDIR)/mmc5.Po nes/boards/$(DEPDIR)/n106.Po \ + nes/boards/$(DEPDIR)/nina06.Po nes/boards/$(DEPDIR)/novel.Po \ + nes/boards/$(DEPDIR)/sachen.Po nes/boards/$(DEPDIR)/simple.Po \ + nes/boards/$(DEPDIR)/super24.Po \ + nes/boards/$(DEPDIR)/supervision.Po \ + nes/boards/$(DEPDIR)/tengen.Po nes/boards/$(DEPDIR)/vrc6.Po \ + nes/boards/$(DEPDIR)/vrc7.Po nes/input/$(DEPDIR)/arkanoid.Po \ + nes/input/$(DEPDIR)/bbattler2.Po nes/input/$(DEPDIR)/cursor.Po \ + nes/input/$(DEPDIR)/fkb.Po nes/input/$(DEPDIR)/ftrainer.Po \ + nes/input/$(DEPDIR)/hypershot.Po \ + nes/input/$(DEPDIR)/mahjong.Po nes/input/$(DEPDIR)/oekakids.Po \ + nes/input/$(DEPDIR)/partytap.Po \ + nes/input/$(DEPDIR)/powerpad.Po nes/input/$(DEPDIR)/shadow.Po \ + nes/input/$(DEPDIR)/suborkb.Po nes/input/$(DEPDIR)/toprider.Po \ + nes/input/$(DEPDIR)/zapper.Po nes/ntsc/$(DEPDIR)/nes_ntsc.Po \ + nes/ppu/$(DEPDIR)/palette.Po nes/ppu/$(DEPDIR)/ppu.Po \ + net/$(DEPDIR)/Net.Po net/$(DEPDIR)/Net_POSIX.Po \ + net/$(DEPDIR)/Net_WS2.Po ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po \ + ngp/$(DEPDIR)/libngp_a-Z80_interface.Po \ + ngp/$(DEPDIR)/libngp_a-bios.Po \ + ngp/$(DEPDIR)/libngp_a-biosHLE.Po \ + ngp/$(DEPDIR)/libngp_a-dma.Po ngp/$(DEPDIR)/libngp_a-flash.Po \ + ngp/$(DEPDIR)/libngp_a-gfx.Po \ + ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po \ + ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po \ + ngp/$(DEPDIR)/libngp_a-interrupt.Po \ + ngp/$(DEPDIR)/libngp_a-mem.Po ngp/$(DEPDIR)/libngp_a-neopop.Po \ + ngp/$(DEPDIR)/libngp_a-rom.Po ngp/$(DEPDIR)/libngp_a-rtc.Po \ + ngp/$(DEPDIR)/libngp_a-sound.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po \ + pce/$(DEPDIR)/debug.Po pce/$(DEPDIR)/dis6280.Po \ + pce/$(DEPDIR)/hes.Po pce/$(DEPDIR)/huc.Po \ + pce/$(DEPDIR)/huc6280.Po pce/$(DEPDIR)/input.Po \ + pce/$(DEPDIR)/mcgenjin.Po pce/$(DEPDIR)/pce.Po \ + pce/$(DEPDIR)/pcecd.Po pce/$(DEPDIR)/tsushin.Po \ + pce/$(DEPDIR)/vce.Po pce/input/$(DEPDIR)/gamepad.Po \ + pce/input/$(DEPDIR)/mouse.Po pce/input/$(DEPDIR)/tsushinkb.Po \ + pce_fast/$(DEPDIR)/hes.Po pce_fast/$(DEPDIR)/huc.Po \ + pce_fast/$(DEPDIR)/huc6280.Po pce_fast/$(DEPDIR)/input.Po \ + pce_fast/$(DEPDIR)/pce.Po pce_fast/$(DEPDIR)/pcecd.Po \ + pce_fast/$(DEPDIR)/pcecd_drive.Po pce_fast/$(DEPDIR)/psg.Po \ + pce_fast/$(DEPDIR)/vdc.Po pcfx/$(DEPDIR)/debug.Po \ + pcfx/$(DEPDIR)/fxscsi.Po pcfx/$(DEPDIR)/huc6273.Po \ + pcfx/$(DEPDIR)/idct.Po pcfx/$(DEPDIR)/input.Po \ + pcfx/$(DEPDIR)/interrupt.Po pcfx/$(DEPDIR)/king.Po \ + pcfx/$(DEPDIR)/pcfx.Po pcfx/$(DEPDIR)/rainbow.Po \ + pcfx/$(DEPDIR)/soundbox.Po pcfx/$(DEPDIR)/timer.Po \ + pcfx/input/$(DEPDIR)/gamepad.Po pcfx/input/$(DEPDIR)/mouse.Po \ + psx/$(DEPDIR)/cdc.Po psx/$(DEPDIR)/cpu.Po \ + psx/$(DEPDIR)/debug.Po psx/$(DEPDIR)/dis.Po \ + psx/$(DEPDIR)/dma.Po psx/$(DEPDIR)/frontio.Po \ + psx/$(DEPDIR)/gpu.Po psx/$(DEPDIR)/gpu_line.Po \ + psx/$(DEPDIR)/gpu_polygon.Po psx/$(DEPDIR)/gpu_sprite.Po \ + psx/$(DEPDIR)/gte.Po psx/$(DEPDIR)/irq.Po \ + psx/$(DEPDIR)/mdec.Po psx/$(DEPDIR)/psx.Po \ + psx/$(DEPDIR)/sio.Po psx/$(DEPDIR)/spu.Po \ + psx/$(DEPDIR)/timer.Po psx/input/$(DEPDIR)/dualanalog.Po \ + psx/input/$(DEPDIR)/dualshock.Po \ + psx/input/$(DEPDIR)/gamepad.Po psx/input/$(DEPDIR)/guncon.Po \ + psx/input/$(DEPDIR)/justifier.Po \ + psx/input/$(DEPDIR)/memcard.Po psx/input/$(DEPDIR)/mouse.Po \ + psx/input/$(DEPDIR)/multitap.Po psx/input/$(DEPDIR)/negcon.Po \ + quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po \ + resampler/$(DEPDIR)/resample.Po sms/$(DEPDIR)/cart.Po \ + sms/$(DEPDIR)/memz80.Po sms/$(DEPDIR)/pio.Po \ + sms/$(DEPDIR)/render.Po sms/$(DEPDIR)/romdb.Po \ + sms/$(DEPDIR)/sms.Po sms/$(DEPDIR)/sound.Po \ + sms/$(DEPDIR)/system.Po sms/$(DEPDIR)/tms.Po \ + sms/$(DEPDIR)/vdp.Po snes/$(DEPDIR)/libsnes_a-interface.Po \ + snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po \ + snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po \ + snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po \ + snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po \ + snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po \ + snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po \ + snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po \ + snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po \ + snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po \ + snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po \ + snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po \ + snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po \ + snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po \ + snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po \ + snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po \ + snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po \ + snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po \ + snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po \ + snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po \ + snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po \ + snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po \ + snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po \ + snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po \ + snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po \ + snes/src/system/$(DEPDIR)/libsnes_a-system.Po \ + snes_faust/$(DEPDIR)/apu.Po snes_faust/$(DEPDIR)/cart.Po \ + snes_faust/$(DEPDIR)/cpu.Po snes_faust/$(DEPDIR)/debug.Po \ + snes_faust/$(DEPDIR)/dis65816.Po snes_faust/$(DEPDIR)/input.Po \ + snes_faust/$(DEPDIR)/msu1.Po snes_faust/$(DEPDIR)/ppu.Po \ + snes_faust/$(DEPDIR)/ppu_mt.Po \ + snes_faust/$(DEPDIR)/ppu_mtrender.Po \ + snes_faust/$(DEPDIR)/ppu_st.Po snes_faust/$(DEPDIR)/snes.Po \ + snes_faust/cart/$(DEPDIR)/cx4.Po \ + snes_faust/cart/$(DEPDIR)/dsp1.Po \ + snes_faust/cart/$(DEPDIR)/dsp2.Po \ + snes_faust/cart/$(DEPDIR)/sa1.Po \ + snes_faust/cart/$(DEPDIR)/sa1cpu.Po \ + snes_faust/cart/$(DEPDIR)/sdd1.Po \ + snes_faust/cart/$(DEPDIR)/superfx.Po \ + sound/$(DEPDIR)/Blip_Buffer.Po sound/$(DEPDIR)/DSPUtility.Po \ + sound/$(DEPDIR)/Fir_Resampler.Po \ + sound/$(DEPDIR)/OwlResampler.Po \ + sound/$(DEPDIR)/Stereo_Buffer.Po \ + sound/$(DEPDIR)/SwiftResampler.Po sound/$(DEPDIR)/WAVRecord.Po \ + sound/$(DEPDIR)/okiadpcm.Po string/$(DEPDIR)/escape.Po \ + string/$(DEPDIR)/string.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-block.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-framing.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-info.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-registry.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-res012.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-window.Po \ + trio/$(DEPDIR)/libtrio_a-trio.Po \ + trio/$(DEPDIR)/libtrio_a-trionan.Po \ + trio/$(DEPDIR)/libtrio_a-triostr.Po vb/$(DEPDIR)/debug.Po \ + vb/$(DEPDIR)/input.Po vb/$(DEPDIR)/timer.Po vb/$(DEPDIR)/vb.Po \ + vb/$(DEPDIR)/vip.Po vb/$(DEPDIR)/vsu.Po \ + video/$(DEPDIR)/Deinterlacer.Po \ + video/$(DEPDIR)/Deinterlacer_Blend.Po \ + video/$(DEPDIR)/Deinterlacer_Simple.Po \ + video/$(DEPDIR)/font-data-12x13.Po \ + video/$(DEPDIR)/font-data-18x18.Po \ + video/$(DEPDIR)/font-data.Po video/$(DEPDIR)/png.Po \ + video/$(DEPDIR)/primitives.Po video/$(DEPDIR)/resize.Po \ + video/$(DEPDIR)/surface.Po video/$(DEPDIR)/tblur.Po \ + video/$(DEPDIR)/text.Po video/$(DEPDIR)/video.Po \ + wswan/$(DEPDIR)/comm.Po wswan/$(DEPDIR)/debug.Po \ + wswan/$(DEPDIR)/eeprom.Po wswan/$(DEPDIR)/gfx.Po \ + wswan/$(DEPDIR)/interrupt.Po wswan/$(DEPDIR)/main.Po \ + wswan/$(DEPDIR)/memory.Po wswan/$(DEPDIR)/rtc.Po \ + wswan/$(DEPDIR)/sound.Po wswan/$(DEPDIR)/tcache.Po \ + wswan/$(DEPDIR)/v30mz.Po wswan/dis/$(DEPDIR)/dis_decode.Po \ + wswan/dis/$(DEPDIR)/dis_groups.Po \ + wswan/dis/$(DEPDIR)/resolve.Po wswan/dis/$(DEPDIR)/syntax.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -1060,7 +1337,7 @@ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -1081,6 +1358,43 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = drivers drivers_dos drivers_libxxx sexyal ss +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(srcdir)/apple2/Makefile.am.inc \ + $(srcdir)/cdplay/Makefile.am.inc \ + $(srcdir)/cdrom/Makefile.am.inc \ + $(srcdir)/cheat_formats/Makefile.am.inc \ + $(srcdir)/compress/Makefile.am.inc \ + $(srcdir)/cputest/Makefile.am.inc \ + $(srcdir)/demo/Makefile.am.inc \ + $(srcdir)/desa68/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc \ + $(srcdir)/gba/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc \ + $(srcdir)/hw_cpu/Makefile.am.inc \ + $(srcdir)/hw_misc/Makefile.am.inc \ + $(srcdir)/hw_sound/Makefile.am.inc \ + $(srcdir)/hw_video/Makefile.am.inc \ + $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc \ + $(srcdir)/minilzo/Makefile.am.inc \ + $(srcdir)/mpcdec/Makefile.am.inc \ + $(srcdir)/mthreading/Makefile.am.inc \ + $(srcdir)/nes/Makefile.am.inc \ + $(srcdir)/nes/boards/Makefile.am.inc \ + $(srcdir)/nes/input/Makefile.am.inc \ + $(srcdir)/nes/ppu/Makefile.am.inc \ + $(srcdir)/net/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc \ + $(srcdir)/pce/Makefile.am.inc \ + $(srcdir)/pce_fast/Makefile.am.inc \ + $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc \ + $(srcdir)/quicklz/Makefile.am.inc \ + $(srcdir)/resampler/Makefile.am.inc \ + $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc \ + $(srcdir)/snes_faust/Makefile.am.inc \ + $(srcdir)/sound/Makefile.am.inc \ + $(srcdir)/string/Makefile.am.inc \ + $(srcdir)/tremor/Makefile.am.inc \ + $(srcdir)/trio/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc \ + $(srcdir)/video/Makefile.am.inc \ + $(srcdir)/wswan/Makefile.am.inc $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -1280,6 +1594,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1467,16 +1782,15 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; -$(srcdir)/cdplay/Makefile.am.inc $(srcdir)/demo/Makefile.am.inc $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc $(srcdir)/nes/ppu/Makefile.am.inc $(srcdir)/nes/boards/Makefile.am.inc $(srcdir)/nes/input/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc $(srcdir)/pce_fast/Makefile.am.inc $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc $(srcdir)/snes_faust/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc $(srcdir)/desa68/Makefile.am.inc $(srcdir)/hw_cpu/Makefile.am.inc $(srcdir)/hw_misc/Makefile.am.inc $(srcdir)/hw_sound/Makefile.am.inc $(srcdir)/hw_video/Makefile.am.inc $(srcdir)/mthreading/Makefile.am.inc $(srcdir)/cdrom/Makefile.am.inc $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc $(srcdir)/quicklz/Makefile.am.inc $(srcdir)/compress/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc $(srcdir)/string/Makefile.am.inc $(srcdir)/video/Makefile.am.inc $(srcdir)/resampler/Makefile.am.inc $(srcdir)/cputest/Makefile.am.inc $(srcdir)/cheat_formats/Makefile.am.inc $(srcdir)/minilzo/Makefile.am.inc $(srcdir)/tremor/Makefile.am.inc $(srcdir)/mpcdec/Makefile.am.inc $(srcdir)/trio/Makefile.am.inc: +$(srcdir)/cdplay/Makefile.am.inc $(srcdir)/demo/Makefile.am.inc $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc $(srcdir)/nes/ppu/Makefile.am.inc $(srcdir)/nes/boards/Makefile.am.inc $(srcdir)/nes/input/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc $(srcdir)/pce_fast/Makefile.am.inc $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc $(srcdir)/snes_faust/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc $(srcdir)/desa68/Makefile.am.inc $(srcdir)/hw_cpu/Makefile.am.inc $(srcdir)/hw_misc/Makefile.am.inc $(srcdir)/hw_sound/Makefile.am.inc $(srcdir)/hw_video/Makefile.am.inc $(srcdir)/mthreading/Makefile.am.inc $(srcdir)/cdrom/Makefile.am.inc $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc $(srcdir)/quicklz/Makefile.am.inc $(srcdir)/compress/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc $(srcdir)/string/Makefile.am.inc $(srcdir)/video/Makefile.am.inc $(srcdir)/resampler/Makefile.am.inc $(srcdir)/cputest/Makefile.am.inc $(srcdir)/cheat_formats/Makefile.am.inc $(srcdir)/minilzo/Makefile.am.inc $(srcdir)/tremor/Makefile.am.inc $(srcdir)/mpcdec/Makefile.am.inc $(srcdir)/trio/Makefile.am.inc $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -1486,6 +1800,48 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -1901,48 +2257,6 @@ $(AM_V_at)-rm -f libvorbisidec.a $(AM_V_AR)$(libvorbisidec_a_AR) libvorbisidec.a $(libvorbisidec_a_OBJECTS) $(libvorbisidec_a_LIBADD) $(AM_V_at)$(RANLIB) libvorbisidec.a -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) drivers/$(am__dirstamp): @$(MKDIR_P) drivers @: > drivers/$(am__dirstamp) @@ -3029,492 +3343,498 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtMemStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IPSPatcher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MTStreamReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemoryStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NativeVFS.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SNSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SPCReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Time.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VirtualFS.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/endian.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/general.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mednafen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempatcher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtrecord.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settings.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_rewind.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@apple2/$(DEPDIR)/apple2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdplay/$(DEPDIR)/cdplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_MPC.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_SF.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_CCD.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_Image.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_MT.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_ST.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDUtility.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/crc32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/galois.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/l-ec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/lec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/recover-raw.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/scsicd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/gb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/psx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/snes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/GZFileStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZIPReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZLInflateFilter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/cputest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/ppc_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/x86_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@demo/$(DEPDIR)/demo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@desa68/$(DEPDIR)/libdesa68_a-desa68.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gbGlobals.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/z80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBA.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBAinline.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Globals.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/RTC.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/arm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/flash.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/sram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/thumb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/crc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/md5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha256.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/m68k/$(DEPDIR)/m68k.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2413/$(DEPDIR)/emu2413.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_video/huc6270/$(DEPDIR)/vdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/c65c02.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/memmap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/mikie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/ram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/susie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genesis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/header.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/mem68k.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/membnk.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memvdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memz80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/vdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_realtec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rmx3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sbb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ssf2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_svp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_yase.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cdc_cdd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/pcm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/4way.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/megamouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@minilzo/$(DEPDIR)/minilzo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_POSIX.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_Win32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/dis6502.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds-sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/ines.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsfe.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/unif.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/vsuni.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/x6502.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/107.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/112.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/113.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/114.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/117.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/140.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/15.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/151.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/152.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/156.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/16.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/163.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/18.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/180.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/182.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/184.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/185.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/187.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/189.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/190.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/193.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/208.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/21.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/22.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/222.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/228.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/23.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/232.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/234.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/240.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/241.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/242.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/244.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/246.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/248.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/25.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/30.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/33.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/34.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/38.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/40.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/41.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/42.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/46.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/51.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/65.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/67.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/68.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/70.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/72.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/73.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/75.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/76.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/77.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/78.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/82.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8237.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/86.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/87.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/88.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/89.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/90.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/92.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/93.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/94.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/95.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/96.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/97.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/99.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/codemasters.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/colordreams.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/deirom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/emu2413.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/ffe.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/fme7.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/h2288.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/malee.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/maxicart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc2and4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/n106.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/nina06.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/novel.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/sachen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/simple.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/super24.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/supervision.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/tengen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc6.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc7.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/arkanoid.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/bbattler2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/cursor.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/fkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/ftrainer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/hypershot.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/mahjong.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/oekakids.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/partytap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/powerpad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/shadow.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/suborkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/toprider.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/zapper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ntsc/$(DEPDIR)/nes_ntsc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/palette.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_POSIX.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_WS2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-Z80_interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-biosHLE.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-dma.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-flash.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-mem.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-neopop.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/dis6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/hes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/mcgenjin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pcecd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/tsushin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/vce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/tsushinkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/hes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd_drive.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/psg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/vdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/fxscsi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/huc6273.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/idct.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/king.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/pcfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/rainbow.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/soundbox.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dma.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/frontio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_line.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_polygon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_sprite.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gte.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/irq.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/mdec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/psx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/sio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/spu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualanalog.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualshock.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/guncon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/justifier.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/memcard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/negcon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@resampler/$(DEPDIR)/resample.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/memz80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/pio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/render.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/romdb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sms.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/tms.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/vdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/$(DEPDIR)/libsnes_a-interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/system/$(DEPDIR)/libsnes_a-system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/dis65816.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/msu1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mtrender.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_st.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/snes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/cx4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sdd1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/superfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Blip_Buffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/DSPUtility.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Fir_Resampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/OwlResampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Stereo_Buffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/SwiftResampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/WAVRecord.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/okiadpcm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/escape.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/string.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-block.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-framing.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-info.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-registry.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-res012.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-window.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trionan.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-triostr.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vsu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Blend.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Simple.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-12x13.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-18x18.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/png.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/primitives.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/resize.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/surface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/tblur.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/text.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/comm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/rtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/tcache.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/v30mz.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_decode.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_groups.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/resolve.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/syntax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtMemStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IPSPatcher.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MTStreamReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemoryStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NativeVFS.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SNSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SPCReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Time.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VirtualFS.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/endian.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/general.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mednafen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempatcher.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtrecord.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settings.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_rewind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@apple2/$(DEPDIR)/apple2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdplay/$(DEPDIR)/cdplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_MPC.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_SF.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_CCD.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_Image.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_MT.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_ST.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDUtility.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/crc32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/galois.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/l-ec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/lec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/recover-raw.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/scsicd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/gb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/psx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/snes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/GZFileStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZIPReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZLInflateFilter.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/cputest.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/ppc_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/x86_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@demo/$(DEPDIR)/demo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@desa68/$(DEPDIR)/libdesa68_a-desa68.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gbGlobals.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/z80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBA.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBAinline.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Globals.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/RTC.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/arm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/bios.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/flash.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/sram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/thumb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/crc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/md5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha256.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/m68k/$(DEPDIR)/m68k.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2413/$(DEPDIR)/emu2413.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_video/huc6270/$(DEPDIR)/vdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/c65c02.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/memmap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/mikie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/ram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/susie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genesis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/header.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/mem68k.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/membnk.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memvdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memz80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/vdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ff.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_realtec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rmx3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sbb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ssf2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_svp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_yase.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cdc_cdd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/pcm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/4way.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/megamouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@minilzo/$(DEPDIR)/minilzo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_POSIX.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_Win32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/dis6502.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds-sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/ines.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsfe.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/unif.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/vsuni.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/x6502.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/107.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/112.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/113.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/114.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/117.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/140.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/15.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/151.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/152.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/156.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/16.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/163.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/18.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/180.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/182.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/184.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/185.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/187.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/189.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/190.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/193.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/208.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/21.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/22.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/222.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/228.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/23.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/232.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/234.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/240.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/241.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/242.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/244.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/246.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/248.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/25.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/30.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/33.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/34.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/38.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/40.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/41.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/42.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/46.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/51.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/65.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/67.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/68.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/70.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/72.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/73.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/75.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/76.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/77.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/78.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/82.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8237.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/86.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/87.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/88.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/89.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/90.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/92.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/93.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/94.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/95.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/96.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/97.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/99.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/codemasters.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/colordreams.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/deirom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/emu2413.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/ffe.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/fme7.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/h2288.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/malee.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/maxicart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc2and4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/n106.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/nina06.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/novel.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/sachen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/simple.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/super24.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/supervision.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/tengen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc6.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc7.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/arkanoid.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/bbattler2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/cursor.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/fkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/ftrainer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/hypershot.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/mahjong.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/oekakids.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/partytap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/powerpad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/shadow.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/suborkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/toprider.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/zapper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ntsc/$(DEPDIR)/nes_ntsc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/palette.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_POSIX.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_WS2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-Z80_interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-bios.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-biosHLE.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-dma.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-flash.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-mem.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-neopop.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/dis6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/hes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/mcgenjin.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pcecd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/tsushin.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/vce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/tsushinkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/hes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd_drive.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/psg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/vdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/fxscsi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/huc6273.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/idct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/king.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/pcfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/rainbow.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/soundbox.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dma.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/frontio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_line.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_polygon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_sprite.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gte.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/irq.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/mdec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/psx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/sio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/spu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualanalog.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualshock.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/guncon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/justifier.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/memcard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/negcon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@resampler/$(DEPDIR)/resample.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/memz80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/pio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/render.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/romdb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sms.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/tms.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/vdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/$(DEPDIR)/libsnes_a-interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/system/$(DEPDIR)/libsnes_a-system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/dis65816.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/msu1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mtrender.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_st.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/snes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/cx4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sdd1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/superfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Blip_Buffer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/DSPUtility.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Fir_Resampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/OwlResampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Stereo_Buffer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/SwiftResampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/WAVRecord.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/okiadpcm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/escape.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/string.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-block.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-framing.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-registry.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-res012.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-window.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trionan.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-triostr.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vip.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vsu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Blend.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Simple.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-12x13.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-18x18.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/png.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/primitives.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/resize.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/surface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/tblur.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/text.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/comm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/rtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/tcache.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/v30mz.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_decode.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_groups.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/resolve.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/syntax.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -4711,7 +5031,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -4768,7 +5091,7 @@ done check-am: all-am check: check-recursive -all-am: Makefile $(LIBRARIES) $(PROGRAMS) +all-am: Makefile $(PROGRAMS) $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ @@ -4978,7 +5301,492 @@ mostlyclean-am distclean: distclean-recursive - -rm -rf ./$(DEPDIR) apple2/$(DEPDIR) cdplay/$(DEPDIR) cdrom/$(DEPDIR) cheat_formats/$(DEPDIR) compress/$(DEPDIR) cputest/$(DEPDIR) demo/$(DEPDIR) desa68/$(DEPDIR) gb/$(DEPDIR) gba/$(DEPDIR) hash/$(DEPDIR) hw_cpu/m68k/$(DEPDIR) hw_cpu/v810/$(DEPDIR) hw_cpu/z80-fuse/$(DEPDIR) hw_misc/arcade_card/$(DEPDIR) hw_sound/gb_apu/$(DEPDIR) hw_sound/pce_psg/$(DEPDIR) hw_sound/sms_apu/$(DEPDIR) hw_sound/ym2413/$(DEPDIR) hw_sound/ym2612/$(DEPDIR) hw_video/huc6270/$(DEPDIR) lynx/$(DEPDIR) md/$(DEPDIR) md/cart/$(DEPDIR) md/cd/$(DEPDIR) md/input/$(DEPDIR) minilzo/$(DEPDIR) mpcdec/$(DEPDIR) mthreading/$(DEPDIR) nes/$(DEPDIR) nes/boards/$(DEPDIR) nes/input/$(DEPDIR) nes/ntsc/$(DEPDIR) nes/ppu/$(DEPDIR) net/$(DEPDIR) ngp/$(DEPDIR) ngp/TLCS-900h/$(DEPDIR) pce/$(DEPDIR) pce/input/$(DEPDIR) pce_fast/$(DEPDIR) pcfx/$(DEPDIR) pcfx/input/$(DEPDIR) psx/$(DEPDIR) psx/input/$(DEPDIR) quicklz/$(DEPDIR) resampler/$(DEPDIR) sms/$(DEPDIR) snes/$(DEPDIR) snes/src/cartridge/$(DEPDIR) snes/src/cheat/$(DEPDIR) snes/src/chip/bsx/$(DEPDIR) snes/src/chip/cx4/$(DEPDIR) snes/src/chip/dsp1/$(DEPDIR) snes/src/chip/dsp2/$(DEPDIR) snes/src/chip/dsp3/$(DEPDIR) snes/src/chip/dsp4/$(DEPDIR) snes/src/chip/obc1/$(DEPDIR) snes/src/chip/sa1/$(DEPDIR) snes/src/chip/sdd1/$(DEPDIR) snes/src/chip/spc7110/$(DEPDIR) snes/src/chip/srtc/$(DEPDIR) snes/src/chip/st010/$(DEPDIR) snes/src/chip/superfx/$(DEPDIR) snes/src/cpu/$(DEPDIR) snes/src/cpu/core/$(DEPDIR) snes/src/cpu/scpu/$(DEPDIR) snes/src/lib/libco/$(DEPDIR) snes/src/memory/$(DEPDIR) snes/src/memory/smemory/$(DEPDIR) snes/src/ppu/$(DEPDIR) snes/src/sdsp/$(DEPDIR) snes/src/smp/$(DEPDIR) snes/src/system/$(DEPDIR) snes_faust/$(DEPDIR) snes_faust/cart/$(DEPDIR) sound/$(DEPDIR) string/$(DEPDIR) tremor/$(DEPDIR) trio/$(DEPDIR) vb/$(DEPDIR) video/$(DEPDIR) wswan/$(DEPDIR) wswan/dis/$(DEPDIR) + -rm -f ./$(DEPDIR)/ExtMemStream.Po + -rm -f ./$(DEPDIR)/FileStream.Po + -rm -f ./$(DEPDIR)/IPSPatcher.Po + -rm -f ./$(DEPDIR)/MTStreamReader.Po + -rm -f ./$(DEPDIR)/MemoryStream.Po + -rm -f ./$(DEPDIR)/NativeVFS.Po + -rm -f ./$(DEPDIR)/PSFLoader.Po + -rm -f ./$(DEPDIR)/SNSFLoader.Po + -rm -f ./$(DEPDIR)/SPCReader.Po + -rm -f ./$(DEPDIR)/SSFLoader.Po + -rm -f ./$(DEPDIR)/Stream.Po + -rm -f ./$(DEPDIR)/Time.Po + -rm -f ./$(DEPDIR)/VirtualFS.Po + -rm -f ./$(DEPDIR)/debug.Po + -rm -f ./$(DEPDIR)/endian.Po + -rm -f ./$(DEPDIR)/error.Po + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/general.Po + -rm -f ./$(DEPDIR)/git.Po + -rm -f ./$(DEPDIR)/mednafen.Po + -rm -f ./$(DEPDIR)/memory.Po + -rm -f ./$(DEPDIR)/mempatcher.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/player.Po + -rm -f ./$(DEPDIR)/qtrecord.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/state.Po + -rm -f ./$(DEPDIR)/state_rewind.Po + -rm -f ./$(DEPDIR)/tests.Po + -rm -f ./$(DEPDIR)/win32-common.Po + -rm -f apple2/$(DEPDIR)/apple2.Po + -rm -f cdplay/$(DEPDIR)/cdplay.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_MPC.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_SF.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po + -rm -f cdrom/$(DEPDIR)/CDAccess.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_CCD.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_Image.Po + -rm -f cdrom/$(DEPDIR)/CDInterface.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_MT.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_ST.Po + -rm -f cdrom/$(DEPDIR)/CDUtility.Po + -rm -f cdrom/$(DEPDIR)/crc32.Po + -rm -f cdrom/$(DEPDIR)/galois.Po + -rm -f cdrom/$(DEPDIR)/l-ec.Po + -rm -f cdrom/$(DEPDIR)/lec.Po + -rm -f cdrom/$(DEPDIR)/recover-raw.Po + -rm -f cdrom/$(DEPDIR)/scsicd.Po + -rm -f cheat_formats/$(DEPDIR)/gb.Po + -rm -f cheat_formats/$(DEPDIR)/psx.Po + -rm -f cheat_formats/$(DEPDIR)/snes.Po + -rm -f compress/$(DEPDIR)/GZFileStream.Po + -rm -f compress/$(DEPDIR)/ZIPReader.Po + -rm -f compress/$(DEPDIR)/ZLInflateFilter.Po + -rm -f cputest/$(DEPDIR)/cputest.Po + -rm -f cputest/$(DEPDIR)/ppc_cpu.Po + -rm -f cputest/$(DEPDIR)/x86_cpu.Po + -rm -f demo/$(DEPDIR)/demo.Po + -rm -f desa68/$(DEPDIR)/libdesa68_a-desa68.Po + -rm -f gb/$(DEPDIR)/gb.Po + -rm -f gb/$(DEPDIR)/gbGlobals.Po + -rm -f gb/$(DEPDIR)/gfx.Po + -rm -f gb/$(DEPDIR)/memory.Po + -rm -f gb/$(DEPDIR)/sound.Po + -rm -f gb/$(DEPDIR)/z80.Po + -rm -f gba/$(DEPDIR)/GBA.Po + -rm -f gba/$(DEPDIR)/GBAinline.Po + -rm -f gba/$(DEPDIR)/Gfx.Po + -rm -f gba/$(DEPDIR)/Globals.Po + -rm -f gba/$(DEPDIR)/Mode0.Po + -rm -f gba/$(DEPDIR)/Mode1.Po + -rm -f gba/$(DEPDIR)/Mode2.Po + -rm -f gba/$(DEPDIR)/Mode3.Po + -rm -f gba/$(DEPDIR)/Mode4.Po + -rm -f gba/$(DEPDIR)/Mode5.Po + -rm -f gba/$(DEPDIR)/RTC.Po + -rm -f gba/$(DEPDIR)/Sound.Po + -rm -f gba/$(DEPDIR)/arm.Po + -rm -f gba/$(DEPDIR)/bios.Po + -rm -f gba/$(DEPDIR)/eeprom.Po + -rm -f gba/$(DEPDIR)/flash.Po + -rm -f gba/$(DEPDIR)/sram.Po + -rm -f gba/$(DEPDIR)/thumb.Po + -rm -f hash/$(DEPDIR)/crc.Po + -rm -f hash/$(DEPDIR)/md5.Po + -rm -f hash/$(DEPDIR)/sha1.Po + -rm -f hash/$(DEPDIR)/sha256.Po + -rm -f hw_cpu/m68k/$(DEPDIR)/m68k.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpu.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po + -rm -f hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po + -rm -f hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po + -rm -f hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po + -rm -f hw_sound/ym2413/$(DEPDIR)/emu2413.Po + -rm -f hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po + -rm -f hw_video/huc6270/$(DEPDIR)/vdc.Po + -rm -f lynx/$(DEPDIR)/c65c02.Po + -rm -f lynx/$(DEPDIR)/cart.Po + -rm -f lynx/$(DEPDIR)/memmap.Po + -rm -f lynx/$(DEPDIR)/mikie.Po + -rm -f lynx/$(DEPDIR)/ram.Po + -rm -f lynx/$(DEPDIR)/rom.Po + -rm -f lynx/$(DEPDIR)/susie.Po + -rm -f lynx/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/debug.Po + -rm -f md/$(DEPDIR)/genesis.Po + -rm -f md/$(DEPDIR)/genio.Po + -rm -f md/$(DEPDIR)/header.Po + -rm -f md/$(DEPDIR)/mem68k.Po + -rm -f md/$(DEPDIR)/membnk.Po + -rm -f md/$(DEPDIR)/memvdp.Po + -rm -f md/$(DEPDIR)/memz80.Po + -rm -f md/$(DEPDIR)/sound.Po + -rm -f md/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/vdp.Po + -rm -f md/cart/$(DEPDIR)/cart.Po + -rm -f md/cart/$(DEPDIR)/map_eeprom.Po + -rm -f md/cart/$(DEPDIR)/map_ff.Po + -rm -f md/cart/$(DEPDIR)/map_realtec.Po + -rm -f md/cart/$(DEPDIR)/map_rmx3.Po + -rm -f md/cart/$(DEPDIR)/map_rom.Po + -rm -f md/cart/$(DEPDIR)/map_sbb.Po + -rm -f md/cart/$(DEPDIR)/map_sram.Po + -rm -f md/cart/$(DEPDIR)/map_ssf2.Po + -rm -f md/cart/$(DEPDIR)/map_svp.Po + -rm -f md/cart/$(DEPDIR)/map_yase.Po + -rm -f md/cd/$(DEPDIR)/cd.Po + -rm -f md/cd/$(DEPDIR)/cdc_cdd.Po + -rm -f md/cd/$(DEPDIR)/interrupt.Po + -rm -f md/cd/$(DEPDIR)/pcm.Po + -rm -f md/cd/$(DEPDIR)/timer.Po + -rm -f md/input/$(DEPDIR)/4way.Po + -rm -f md/input/$(DEPDIR)/gamepad.Po + -rm -f md/input/$(DEPDIR)/megamouse.Po + -rm -f md/input/$(DEPDIR)/multitap.Po + -rm -f minilzo/$(DEPDIR)/minilzo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po + -rm -f mthreading/$(DEPDIR)/MThreading_POSIX.Po + -rm -f mthreading/$(DEPDIR)/MThreading_Win32.Po + -rm -f nes/$(DEPDIR)/cart.Po + -rm -f nes/$(DEPDIR)/debug.Po + -rm -f nes/$(DEPDIR)/dis6502.Po + -rm -f nes/$(DEPDIR)/fds-sound.Po + -rm -f nes/$(DEPDIR)/fds.Po + -rm -f nes/$(DEPDIR)/ines.Po + -rm -f nes/$(DEPDIR)/input.Po + -rm -f nes/$(DEPDIR)/nes.Po + -rm -f nes/$(DEPDIR)/nsf.Po + -rm -f nes/$(DEPDIR)/nsfe.Po + -rm -f nes/$(DEPDIR)/sound.Po + -rm -f nes/$(DEPDIR)/unif.Po + -rm -f nes/$(DEPDIR)/vsuni.Po + -rm -f nes/$(DEPDIR)/x6502.Po + -rm -f nes/boards/$(DEPDIR)/107.Po + -rm -f nes/boards/$(DEPDIR)/112.Po + -rm -f nes/boards/$(DEPDIR)/113.Po + -rm -f nes/boards/$(DEPDIR)/114.Po + -rm -f nes/boards/$(DEPDIR)/117.Po + -rm -f nes/boards/$(DEPDIR)/140.Po + -rm -f nes/boards/$(DEPDIR)/15.Po + -rm -f nes/boards/$(DEPDIR)/151.Po + -rm -f nes/boards/$(DEPDIR)/152.Po + -rm -f nes/boards/$(DEPDIR)/156.Po + -rm -f nes/boards/$(DEPDIR)/16.Po + -rm -f nes/boards/$(DEPDIR)/163.Po + -rm -f nes/boards/$(DEPDIR)/18.Po + -rm -f nes/boards/$(DEPDIR)/180.Po + -rm -f nes/boards/$(DEPDIR)/182.Po + -rm -f nes/boards/$(DEPDIR)/184.Po + -rm -f nes/boards/$(DEPDIR)/185.Po + -rm -f nes/boards/$(DEPDIR)/187.Po + -rm -f nes/boards/$(DEPDIR)/189.Po + -rm -f nes/boards/$(DEPDIR)/190.Po + -rm -f nes/boards/$(DEPDIR)/193.Po + -rm -f nes/boards/$(DEPDIR)/208.Po + -rm -f nes/boards/$(DEPDIR)/21.Po + -rm -f nes/boards/$(DEPDIR)/22.Po + -rm -f nes/boards/$(DEPDIR)/222.Po + -rm -f nes/boards/$(DEPDIR)/228.Po + -rm -f nes/boards/$(DEPDIR)/23.Po + -rm -f nes/boards/$(DEPDIR)/232.Po + -rm -f nes/boards/$(DEPDIR)/234.Po + -rm -f nes/boards/$(DEPDIR)/240.Po + -rm -f nes/boards/$(DEPDIR)/241.Po + -rm -f nes/boards/$(DEPDIR)/242.Po + -rm -f nes/boards/$(DEPDIR)/244.Po + -rm -f nes/boards/$(DEPDIR)/246.Po + -rm -f nes/boards/$(DEPDIR)/248.Po + -rm -f nes/boards/$(DEPDIR)/25.Po + -rm -f nes/boards/$(DEPDIR)/30.Po + -rm -f nes/boards/$(DEPDIR)/32.Po + -rm -f nes/boards/$(DEPDIR)/33.Po + -rm -f nes/boards/$(DEPDIR)/34.Po + -rm -f nes/boards/$(DEPDIR)/38.Po + -rm -f nes/boards/$(DEPDIR)/40.Po + -rm -f nes/boards/$(DEPDIR)/41.Po + -rm -f nes/boards/$(DEPDIR)/42.Po + -rm -f nes/boards/$(DEPDIR)/46.Po + -rm -f nes/boards/$(DEPDIR)/51.Po + -rm -f nes/boards/$(DEPDIR)/65.Po + -rm -f nes/boards/$(DEPDIR)/67.Po + -rm -f nes/boards/$(DEPDIR)/68.Po + -rm -f nes/boards/$(DEPDIR)/70.Po + -rm -f nes/boards/$(DEPDIR)/72.Po + -rm -f nes/boards/$(DEPDIR)/73.Po + -rm -f nes/boards/$(DEPDIR)/75.Po + -rm -f nes/boards/$(DEPDIR)/76.Po + -rm -f nes/boards/$(DEPDIR)/77.Po + -rm -f nes/boards/$(DEPDIR)/78.Po + -rm -f nes/boards/$(DEPDIR)/8.Po + -rm -f nes/boards/$(DEPDIR)/80.Po + -rm -f nes/boards/$(DEPDIR)/82.Po + -rm -f nes/boards/$(DEPDIR)/8237.Po + -rm -f nes/boards/$(DEPDIR)/86.Po + -rm -f nes/boards/$(DEPDIR)/87.Po + -rm -f nes/boards/$(DEPDIR)/88.Po + -rm -f nes/boards/$(DEPDIR)/89.Po + -rm -f nes/boards/$(DEPDIR)/90.Po + -rm -f nes/boards/$(DEPDIR)/92.Po + -rm -f nes/boards/$(DEPDIR)/93.Po + -rm -f nes/boards/$(DEPDIR)/94.Po + -rm -f nes/boards/$(DEPDIR)/95.Po + -rm -f nes/boards/$(DEPDIR)/96.Po + -rm -f nes/boards/$(DEPDIR)/97.Po + -rm -f nes/boards/$(DEPDIR)/99.Po + -rm -f nes/boards/$(DEPDIR)/codemasters.Po + -rm -f nes/boards/$(DEPDIR)/colordreams.Po + -rm -f nes/boards/$(DEPDIR)/deirom.Po + -rm -f nes/boards/$(DEPDIR)/emu2413.Po + -rm -f nes/boards/$(DEPDIR)/ffe.Po + -rm -f nes/boards/$(DEPDIR)/fme7.Po + -rm -f nes/boards/$(DEPDIR)/h2288.Po + -rm -f nes/boards/$(DEPDIR)/malee.Po + -rm -f nes/boards/$(DEPDIR)/maxicart.Po + -rm -f nes/boards/$(DEPDIR)/mmc1.Po + -rm -f nes/boards/$(DEPDIR)/mmc2and4.Po + -rm -f nes/boards/$(DEPDIR)/mmc3.Po + -rm -f nes/boards/$(DEPDIR)/mmc5.Po + -rm -f nes/boards/$(DEPDIR)/n106.Po + -rm -f nes/boards/$(DEPDIR)/nina06.Po + -rm -f nes/boards/$(DEPDIR)/novel.Po + -rm -f nes/boards/$(DEPDIR)/sachen.Po + -rm -f nes/boards/$(DEPDIR)/simple.Po + -rm -f nes/boards/$(DEPDIR)/super24.Po + -rm -f nes/boards/$(DEPDIR)/supervision.Po + -rm -f nes/boards/$(DEPDIR)/tengen.Po + -rm -f nes/boards/$(DEPDIR)/vrc6.Po + -rm -f nes/boards/$(DEPDIR)/vrc7.Po + -rm -f nes/input/$(DEPDIR)/arkanoid.Po + -rm -f nes/input/$(DEPDIR)/bbattler2.Po + -rm -f nes/input/$(DEPDIR)/cursor.Po + -rm -f nes/input/$(DEPDIR)/fkb.Po + -rm -f nes/input/$(DEPDIR)/ftrainer.Po + -rm -f nes/input/$(DEPDIR)/hypershot.Po + -rm -f nes/input/$(DEPDIR)/mahjong.Po + -rm -f nes/input/$(DEPDIR)/oekakids.Po + -rm -f nes/input/$(DEPDIR)/partytap.Po + -rm -f nes/input/$(DEPDIR)/powerpad.Po + -rm -f nes/input/$(DEPDIR)/shadow.Po + -rm -f nes/input/$(DEPDIR)/suborkb.Po + -rm -f nes/input/$(DEPDIR)/toprider.Po + -rm -f nes/input/$(DEPDIR)/zapper.Po + -rm -f nes/ntsc/$(DEPDIR)/nes_ntsc.Po + -rm -f nes/ppu/$(DEPDIR)/palette.Po + -rm -f nes/ppu/$(DEPDIR)/ppu.Po + -rm -f net/$(DEPDIR)/Net.Po + -rm -f net/$(DEPDIR)/Net_POSIX.Po + -rm -f net/$(DEPDIR)/Net_WS2.Po + -rm -f ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po + -rm -f ngp/$(DEPDIR)/libngp_a-Z80_interface.Po + -rm -f ngp/$(DEPDIR)/libngp_a-bios.Po + -rm -f ngp/$(DEPDIR)/libngp_a-biosHLE.Po + -rm -f ngp/$(DEPDIR)/libngp_a-dma.Po + -rm -f ngp/$(DEPDIR)/libngp_a-flash.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po + -rm -f ngp/$(DEPDIR)/libngp_a-interrupt.Po + -rm -f ngp/$(DEPDIR)/libngp_a-mem.Po + -rm -f ngp/$(DEPDIR)/libngp_a-neopop.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rom.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rtc.Po + -rm -f ngp/$(DEPDIR)/libngp_a-sound.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po + -rm -f pce/$(DEPDIR)/debug.Po + -rm -f pce/$(DEPDIR)/dis6280.Po + -rm -f pce/$(DEPDIR)/hes.Po + -rm -f pce/$(DEPDIR)/huc.Po + -rm -f pce/$(DEPDIR)/huc6280.Po + -rm -f pce/$(DEPDIR)/input.Po + -rm -f pce/$(DEPDIR)/mcgenjin.Po + -rm -f pce/$(DEPDIR)/pce.Po + -rm -f pce/$(DEPDIR)/pcecd.Po + -rm -f pce/$(DEPDIR)/tsushin.Po + -rm -f pce/$(DEPDIR)/vce.Po + -rm -f pce/input/$(DEPDIR)/gamepad.Po + -rm -f pce/input/$(DEPDIR)/mouse.Po + -rm -f pce/input/$(DEPDIR)/tsushinkb.Po + -rm -f pce_fast/$(DEPDIR)/hes.Po + -rm -f pce_fast/$(DEPDIR)/huc.Po + -rm -f pce_fast/$(DEPDIR)/huc6280.Po + -rm -f pce_fast/$(DEPDIR)/input.Po + -rm -f pce_fast/$(DEPDIR)/pce.Po + -rm -f pce_fast/$(DEPDIR)/pcecd.Po + -rm -f pce_fast/$(DEPDIR)/pcecd_drive.Po + -rm -f pce_fast/$(DEPDIR)/psg.Po + -rm -f pce_fast/$(DEPDIR)/vdc.Po + -rm -f pcfx/$(DEPDIR)/debug.Po + -rm -f pcfx/$(DEPDIR)/fxscsi.Po + -rm -f pcfx/$(DEPDIR)/huc6273.Po + -rm -f pcfx/$(DEPDIR)/idct.Po + -rm -f pcfx/$(DEPDIR)/input.Po + -rm -f pcfx/$(DEPDIR)/interrupt.Po + -rm -f pcfx/$(DEPDIR)/king.Po + -rm -f pcfx/$(DEPDIR)/pcfx.Po + -rm -f pcfx/$(DEPDIR)/rainbow.Po + -rm -f pcfx/$(DEPDIR)/soundbox.Po + -rm -f pcfx/$(DEPDIR)/timer.Po + -rm -f pcfx/input/$(DEPDIR)/gamepad.Po + -rm -f pcfx/input/$(DEPDIR)/mouse.Po + -rm -f psx/$(DEPDIR)/cdc.Po + -rm -f psx/$(DEPDIR)/cpu.Po + -rm -f psx/$(DEPDIR)/debug.Po + -rm -f psx/$(DEPDIR)/dis.Po + -rm -f psx/$(DEPDIR)/dma.Po + -rm -f psx/$(DEPDIR)/frontio.Po + -rm -f psx/$(DEPDIR)/gpu.Po + -rm -f psx/$(DEPDIR)/gpu_line.Po + -rm -f psx/$(DEPDIR)/gpu_polygon.Po + -rm -f psx/$(DEPDIR)/gpu_sprite.Po + -rm -f psx/$(DEPDIR)/gte.Po + -rm -f psx/$(DEPDIR)/irq.Po + -rm -f psx/$(DEPDIR)/mdec.Po + -rm -f psx/$(DEPDIR)/psx.Po + -rm -f psx/$(DEPDIR)/sio.Po + -rm -f psx/$(DEPDIR)/spu.Po + -rm -f psx/$(DEPDIR)/timer.Po + -rm -f psx/input/$(DEPDIR)/dualanalog.Po + -rm -f psx/input/$(DEPDIR)/dualshock.Po + -rm -f psx/input/$(DEPDIR)/gamepad.Po + -rm -f psx/input/$(DEPDIR)/guncon.Po + -rm -f psx/input/$(DEPDIR)/justifier.Po + -rm -f psx/input/$(DEPDIR)/memcard.Po + -rm -f psx/input/$(DEPDIR)/mouse.Po + -rm -f psx/input/$(DEPDIR)/multitap.Po + -rm -f psx/input/$(DEPDIR)/negcon.Po + -rm -f quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po + -rm -f resampler/$(DEPDIR)/resample.Po + -rm -f sms/$(DEPDIR)/cart.Po + -rm -f sms/$(DEPDIR)/memz80.Po + -rm -f sms/$(DEPDIR)/pio.Po + -rm -f sms/$(DEPDIR)/render.Po + -rm -f sms/$(DEPDIR)/romdb.Po + -rm -f sms/$(DEPDIR)/sms.Po + -rm -f sms/$(DEPDIR)/sound.Po + -rm -f sms/$(DEPDIR)/system.Po + -rm -f sms/$(DEPDIR)/tms.Po + -rm -f sms/$(DEPDIR)/vdp.Po + -rm -f snes/$(DEPDIR)/libsnes_a-interface.Po + -rm -f snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po + -rm -f snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po + -rm -f snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po + -rm -f snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po + -rm -f snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po + -rm -f snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po + -rm -f snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po + -rm -f snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po + -rm -f snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po + -rm -f snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po + -rm -f snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po + -rm -f snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po + -rm -f snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po + -rm -f snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po + -rm -f snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po + -rm -f snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po + -rm -f snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po + -rm -f snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po + -rm -f snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po + -rm -f snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po + -rm -f snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po + -rm -f snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po + -rm -f snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po + -rm -f snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po + -rm -f snes/src/system/$(DEPDIR)/libsnes_a-system.Po + -rm -f snes_faust/$(DEPDIR)/apu.Po + -rm -f snes_faust/$(DEPDIR)/cart.Po + -rm -f snes_faust/$(DEPDIR)/cpu.Po + -rm -f snes_faust/$(DEPDIR)/debug.Po + -rm -f snes_faust/$(DEPDIR)/dis65816.Po + -rm -f snes_faust/$(DEPDIR)/input.Po + -rm -f snes_faust/$(DEPDIR)/msu1.Po + -rm -f snes_faust/$(DEPDIR)/ppu.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mt.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mtrender.Po + -rm -f snes_faust/$(DEPDIR)/ppu_st.Po + -rm -f snes_faust/$(DEPDIR)/snes.Po + -rm -f snes_faust/cart/$(DEPDIR)/cx4.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp1.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp2.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1cpu.Po + -rm -f snes_faust/cart/$(DEPDIR)/sdd1.Po + -rm -f snes_faust/cart/$(DEPDIR)/superfx.Po + -rm -f sound/$(DEPDIR)/Blip_Buffer.Po + -rm -f sound/$(DEPDIR)/DSPUtility.Po + -rm -f sound/$(DEPDIR)/Fir_Resampler.Po + -rm -f sound/$(DEPDIR)/OwlResampler.Po + -rm -f sound/$(DEPDIR)/Stereo_Buffer.Po + -rm -f sound/$(DEPDIR)/SwiftResampler.Po + -rm -f sound/$(DEPDIR)/WAVRecord.Po + -rm -f sound/$(DEPDIR)/okiadpcm.Po + -rm -f string/$(DEPDIR)/escape.Po + -rm -f string/$(DEPDIR)/string.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-block.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-framing.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-info.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-registry.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-res012.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-window.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trio.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trionan.Po + -rm -f trio/$(DEPDIR)/libtrio_a-triostr.Po + -rm -f vb/$(DEPDIR)/debug.Po + -rm -f vb/$(DEPDIR)/input.Po + -rm -f vb/$(DEPDIR)/timer.Po + -rm -f vb/$(DEPDIR)/vb.Po + -rm -f vb/$(DEPDIR)/vip.Po + -rm -f vb/$(DEPDIR)/vsu.Po + -rm -f video/$(DEPDIR)/Deinterlacer.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Blend.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Simple.Po + -rm -f video/$(DEPDIR)/font-data-12x13.Po + -rm -f video/$(DEPDIR)/font-data-18x18.Po + -rm -f video/$(DEPDIR)/font-data.Po + -rm -f video/$(DEPDIR)/png.Po + -rm -f video/$(DEPDIR)/primitives.Po + -rm -f video/$(DEPDIR)/resize.Po + -rm -f video/$(DEPDIR)/surface.Po + -rm -f video/$(DEPDIR)/tblur.Po + -rm -f video/$(DEPDIR)/text.Po + -rm -f video/$(DEPDIR)/video.Po + -rm -f wswan/$(DEPDIR)/comm.Po + -rm -f wswan/$(DEPDIR)/debug.Po + -rm -f wswan/$(DEPDIR)/eeprom.Po + -rm -f wswan/$(DEPDIR)/gfx.Po + -rm -f wswan/$(DEPDIR)/interrupt.Po + -rm -f wswan/$(DEPDIR)/main.Po + -rm -f wswan/$(DEPDIR)/memory.Po + -rm -f wswan/$(DEPDIR)/rtc.Po + -rm -f wswan/$(DEPDIR)/sound.Po + -rm -f wswan/$(DEPDIR)/tcache.Po + -rm -f wswan/$(DEPDIR)/v30mz.Po + -rm -f wswan/dis/$(DEPDIR)/dis_decode.Po + -rm -f wswan/dis/$(DEPDIR)/dis_groups.Po + -rm -f wswan/dis/$(DEPDIR)/resolve.Po + -rm -f wswan/dis/$(DEPDIR)/syntax.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -5024,7 +5832,492 @@ installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) apple2/$(DEPDIR) cdplay/$(DEPDIR) cdrom/$(DEPDIR) cheat_formats/$(DEPDIR) compress/$(DEPDIR) cputest/$(DEPDIR) demo/$(DEPDIR) desa68/$(DEPDIR) gb/$(DEPDIR) gba/$(DEPDIR) hash/$(DEPDIR) hw_cpu/m68k/$(DEPDIR) hw_cpu/v810/$(DEPDIR) hw_cpu/z80-fuse/$(DEPDIR) hw_misc/arcade_card/$(DEPDIR) hw_sound/gb_apu/$(DEPDIR) hw_sound/pce_psg/$(DEPDIR) hw_sound/sms_apu/$(DEPDIR) hw_sound/ym2413/$(DEPDIR) hw_sound/ym2612/$(DEPDIR) hw_video/huc6270/$(DEPDIR) lynx/$(DEPDIR) md/$(DEPDIR) md/cart/$(DEPDIR) md/cd/$(DEPDIR) md/input/$(DEPDIR) minilzo/$(DEPDIR) mpcdec/$(DEPDIR) mthreading/$(DEPDIR) nes/$(DEPDIR) nes/boards/$(DEPDIR) nes/input/$(DEPDIR) nes/ntsc/$(DEPDIR) nes/ppu/$(DEPDIR) net/$(DEPDIR) ngp/$(DEPDIR) ngp/TLCS-900h/$(DEPDIR) pce/$(DEPDIR) pce/input/$(DEPDIR) pce_fast/$(DEPDIR) pcfx/$(DEPDIR) pcfx/input/$(DEPDIR) psx/$(DEPDIR) psx/input/$(DEPDIR) quicklz/$(DEPDIR) resampler/$(DEPDIR) sms/$(DEPDIR) snes/$(DEPDIR) snes/src/cartridge/$(DEPDIR) snes/src/cheat/$(DEPDIR) snes/src/chip/bsx/$(DEPDIR) snes/src/chip/cx4/$(DEPDIR) snes/src/chip/dsp1/$(DEPDIR) snes/src/chip/dsp2/$(DEPDIR) snes/src/chip/dsp3/$(DEPDIR) snes/src/chip/dsp4/$(DEPDIR) snes/src/chip/obc1/$(DEPDIR) snes/src/chip/sa1/$(DEPDIR) snes/src/chip/sdd1/$(DEPDIR) snes/src/chip/spc7110/$(DEPDIR) snes/src/chip/srtc/$(DEPDIR) snes/src/chip/st010/$(DEPDIR) snes/src/chip/superfx/$(DEPDIR) snes/src/cpu/$(DEPDIR) snes/src/cpu/core/$(DEPDIR) snes/src/cpu/scpu/$(DEPDIR) snes/src/lib/libco/$(DEPDIR) snes/src/memory/$(DEPDIR) snes/src/memory/smemory/$(DEPDIR) snes/src/ppu/$(DEPDIR) snes/src/sdsp/$(DEPDIR) snes/src/smp/$(DEPDIR) snes/src/system/$(DEPDIR) snes_faust/$(DEPDIR) snes_faust/cart/$(DEPDIR) sound/$(DEPDIR) string/$(DEPDIR) tremor/$(DEPDIR) trio/$(DEPDIR) vb/$(DEPDIR) video/$(DEPDIR) wswan/$(DEPDIR) wswan/dis/$(DEPDIR) + -rm -f ./$(DEPDIR)/ExtMemStream.Po + -rm -f ./$(DEPDIR)/FileStream.Po + -rm -f ./$(DEPDIR)/IPSPatcher.Po + -rm -f ./$(DEPDIR)/MTStreamReader.Po + -rm -f ./$(DEPDIR)/MemoryStream.Po + -rm -f ./$(DEPDIR)/NativeVFS.Po + -rm -f ./$(DEPDIR)/PSFLoader.Po + -rm -f ./$(DEPDIR)/SNSFLoader.Po + -rm -f ./$(DEPDIR)/SPCReader.Po + -rm -f ./$(DEPDIR)/SSFLoader.Po + -rm -f ./$(DEPDIR)/Stream.Po + -rm -f ./$(DEPDIR)/Time.Po + -rm -f ./$(DEPDIR)/VirtualFS.Po + -rm -f ./$(DEPDIR)/debug.Po + -rm -f ./$(DEPDIR)/endian.Po + -rm -f ./$(DEPDIR)/error.Po + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/general.Po + -rm -f ./$(DEPDIR)/git.Po + -rm -f ./$(DEPDIR)/mednafen.Po + -rm -f ./$(DEPDIR)/memory.Po + -rm -f ./$(DEPDIR)/mempatcher.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/player.Po + -rm -f ./$(DEPDIR)/qtrecord.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/state.Po + -rm -f ./$(DEPDIR)/state_rewind.Po + -rm -f ./$(DEPDIR)/tests.Po + -rm -f ./$(DEPDIR)/win32-common.Po + -rm -f apple2/$(DEPDIR)/apple2.Po + -rm -f cdplay/$(DEPDIR)/cdplay.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_MPC.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_SF.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po + -rm -f cdrom/$(DEPDIR)/CDAccess.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_CCD.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_Image.Po + -rm -f cdrom/$(DEPDIR)/CDInterface.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_MT.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_ST.Po + -rm -f cdrom/$(DEPDIR)/CDUtility.Po + -rm -f cdrom/$(DEPDIR)/crc32.Po + -rm -f cdrom/$(DEPDIR)/galois.Po + -rm -f cdrom/$(DEPDIR)/l-ec.Po + -rm -f cdrom/$(DEPDIR)/lec.Po + -rm -f cdrom/$(DEPDIR)/recover-raw.Po + -rm -f cdrom/$(DEPDIR)/scsicd.Po + -rm -f cheat_formats/$(DEPDIR)/gb.Po + -rm -f cheat_formats/$(DEPDIR)/psx.Po + -rm -f cheat_formats/$(DEPDIR)/snes.Po + -rm -f compress/$(DEPDIR)/GZFileStream.Po + -rm -f compress/$(DEPDIR)/ZIPReader.Po + -rm -f compress/$(DEPDIR)/ZLInflateFilter.Po + -rm -f cputest/$(DEPDIR)/cputest.Po + -rm -f cputest/$(DEPDIR)/ppc_cpu.Po + -rm -f cputest/$(DEPDIR)/x86_cpu.Po + -rm -f demo/$(DEPDIR)/demo.Po + -rm -f desa68/$(DEPDIR)/libdesa68_a-desa68.Po + -rm -f gb/$(DEPDIR)/gb.Po + -rm -f gb/$(DEPDIR)/gbGlobals.Po + -rm -f gb/$(DEPDIR)/gfx.Po + -rm -f gb/$(DEPDIR)/memory.Po + -rm -f gb/$(DEPDIR)/sound.Po + -rm -f gb/$(DEPDIR)/z80.Po + -rm -f gba/$(DEPDIR)/GBA.Po + -rm -f gba/$(DEPDIR)/GBAinline.Po + -rm -f gba/$(DEPDIR)/Gfx.Po + -rm -f gba/$(DEPDIR)/Globals.Po + -rm -f gba/$(DEPDIR)/Mode0.Po + -rm -f gba/$(DEPDIR)/Mode1.Po + -rm -f gba/$(DEPDIR)/Mode2.Po + -rm -f gba/$(DEPDIR)/Mode3.Po + -rm -f gba/$(DEPDIR)/Mode4.Po + -rm -f gba/$(DEPDIR)/Mode5.Po + -rm -f gba/$(DEPDIR)/RTC.Po + -rm -f gba/$(DEPDIR)/Sound.Po + -rm -f gba/$(DEPDIR)/arm.Po + -rm -f gba/$(DEPDIR)/bios.Po + -rm -f gba/$(DEPDIR)/eeprom.Po + -rm -f gba/$(DEPDIR)/flash.Po + -rm -f gba/$(DEPDIR)/sram.Po + -rm -f gba/$(DEPDIR)/thumb.Po + -rm -f hash/$(DEPDIR)/crc.Po + -rm -f hash/$(DEPDIR)/md5.Po + -rm -f hash/$(DEPDIR)/sha1.Po + -rm -f hash/$(DEPDIR)/sha256.Po + -rm -f hw_cpu/m68k/$(DEPDIR)/m68k.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpu.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po + -rm -f hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po + -rm -f hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po + -rm -f hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po + -rm -f hw_sound/ym2413/$(DEPDIR)/emu2413.Po + -rm -f hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po + -rm -f hw_video/huc6270/$(DEPDIR)/vdc.Po + -rm -f lynx/$(DEPDIR)/c65c02.Po + -rm -f lynx/$(DEPDIR)/cart.Po + -rm -f lynx/$(DEPDIR)/memmap.Po + -rm -f lynx/$(DEPDIR)/mikie.Po + -rm -f lynx/$(DEPDIR)/ram.Po + -rm -f lynx/$(DEPDIR)/rom.Po + -rm -f lynx/$(DEPDIR)/susie.Po + -rm -f lynx/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/debug.Po + -rm -f md/$(DEPDIR)/genesis.Po + -rm -f md/$(DEPDIR)/genio.Po + -rm -f md/$(DEPDIR)/header.Po + -rm -f md/$(DEPDIR)/mem68k.Po + -rm -f md/$(DEPDIR)/membnk.Po + -rm -f md/$(DEPDIR)/memvdp.Po + -rm -f md/$(DEPDIR)/memz80.Po + -rm -f md/$(DEPDIR)/sound.Po + -rm -f md/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/vdp.Po + -rm -f md/cart/$(DEPDIR)/cart.Po + -rm -f md/cart/$(DEPDIR)/map_eeprom.Po + -rm -f md/cart/$(DEPDIR)/map_ff.Po + -rm -f md/cart/$(DEPDIR)/map_realtec.Po + -rm -f md/cart/$(DEPDIR)/map_rmx3.Po + -rm -f md/cart/$(DEPDIR)/map_rom.Po + -rm -f md/cart/$(DEPDIR)/map_sbb.Po + -rm -f md/cart/$(DEPDIR)/map_sram.Po + -rm -f md/cart/$(DEPDIR)/map_ssf2.Po + -rm -f md/cart/$(DEPDIR)/map_svp.Po + -rm -f md/cart/$(DEPDIR)/map_yase.Po + -rm -f md/cd/$(DEPDIR)/cd.Po + -rm -f md/cd/$(DEPDIR)/cdc_cdd.Po + -rm -f md/cd/$(DEPDIR)/interrupt.Po + -rm -f md/cd/$(DEPDIR)/pcm.Po + -rm -f md/cd/$(DEPDIR)/timer.Po + -rm -f md/input/$(DEPDIR)/4way.Po + -rm -f md/input/$(DEPDIR)/gamepad.Po + -rm -f md/input/$(DEPDIR)/megamouse.Po + -rm -f md/input/$(DEPDIR)/multitap.Po + -rm -f minilzo/$(DEPDIR)/minilzo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po + -rm -f mthreading/$(DEPDIR)/MThreading_POSIX.Po + -rm -f mthreading/$(DEPDIR)/MThreading_Win32.Po + -rm -f nes/$(DEPDIR)/cart.Po + -rm -f nes/$(DEPDIR)/debug.Po + -rm -f nes/$(DEPDIR)/dis6502.Po + -rm -f nes/$(DEPDIR)/fds-sound.Po + -rm -f nes/$(DEPDIR)/fds.Po + -rm -f nes/$(DEPDIR)/ines.Po + -rm -f nes/$(DEPDIR)/input.Po + -rm -f nes/$(DEPDIR)/nes.Po + -rm -f nes/$(DEPDIR)/nsf.Po + -rm -f nes/$(DEPDIR)/nsfe.Po + -rm -f nes/$(DEPDIR)/sound.Po + -rm -f nes/$(DEPDIR)/unif.Po + -rm -f nes/$(DEPDIR)/vsuni.Po + -rm -f nes/$(DEPDIR)/x6502.Po + -rm -f nes/boards/$(DEPDIR)/107.Po + -rm -f nes/boards/$(DEPDIR)/112.Po + -rm -f nes/boards/$(DEPDIR)/113.Po + -rm -f nes/boards/$(DEPDIR)/114.Po + -rm -f nes/boards/$(DEPDIR)/117.Po + -rm -f nes/boards/$(DEPDIR)/140.Po + -rm -f nes/boards/$(DEPDIR)/15.Po + -rm -f nes/boards/$(DEPDIR)/151.Po + -rm -f nes/boards/$(DEPDIR)/152.Po + -rm -f nes/boards/$(DEPDIR)/156.Po + -rm -f nes/boards/$(DEPDIR)/16.Po + -rm -f nes/boards/$(DEPDIR)/163.Po + -rm -f nes/boards/$(DEPDIR)/18.Po + -rm -f nes/boards/$(DEPDIR)/180.Po + -rm -f nes/boards/$(DEPDIR)/182.Po + -rm -f nes/boards/$(DEPDIR)/184.Po + -rm -f nes/boards/$(DEPDIR)/185.Po + -rm -f nes/boards/$(DEPDIR)/187.Po + -rm -f nes/boards/$(DEPDIR)/189.Po + -rm -f nes/boards/$(DEPDIR)/190.Po + -rm -f nes/boards/$(DEPDIR)/193.Po + -rm -f nes/boards/$(DEPDIR)/208.Po + -rm -f nes/boards/$(DEPDIR)/21.Po + -rm -f nes/boards/$(DEPDIR)/22.Po + -rm -f nes/boards/$(DEPDIR)/222.Po + -rm -f nes/boards/$(DEPDIR)/228.Po + -rm -f nes/boards/$(DEPDIR)/23.Po + -rm -f nes/boards/$(DEPDIR)/232.Po + -rm -f nes/boards/$(DEPDIR)/234.Po + -rm -f nes/boards/$(DEPDIR)/240.Po + -rm -f nes/boards/$(DEPDIR)/241.Po + -rm -f nes/boards/$(DEPDIR)/242.Po + -rm -f nes/boards/$(DEPDIR)/244.Po + -rm -f nes/boards/$(DEPDIR)/246.Po + -rm -f nes/boards/$(DEPDIR)/248.Po + -rm -f nes/boards/$(DEPDIR)/25.Po + -rm -f nes/boards/$(DEPDIR)/30.Po + -rm -f nes/boards/$(DEPDIR)/32.Po + -rm -f nes/boards/$(DEPDIR)/33.Po + -rm -f nes/boards/$(DEPDIR)/34.Po + -rm -f nes/boards/$(DEPDIR)/38.Po + -rm -f nes/boards/$(DEPDIR)/40.Po + -rm -f nes/boards/$(DEPDIR)/41.Po + -rm -f nes/boards/$(DEPDIR)/42.Po + -rm -f nes/boards/$(DEPDIR)/46.Po + -rm -f nes/boards/$(DEPDIR)/51.Po + -rm -f nes/boards/$(DEPDIR)/65.Po + -rm -f nes/boards/$(DEPDIR)/67.Po + -rm -f nes/boards/$(DEPDIR)/68.Po + -rm -f nes/boards/$(DEPDIR)/70.Po + -rm -f nes/boards/$(DEPDIR)/72.Po + -rm -f nes/boards/$(DEPDIR)/73.Po + -rm -f nes/boards/$(DEPDIR)/75.Po + -rm -f nes/boards/$(DEPDIR)/76.Po + -rm -f nes/boards/$(DEPDIR)/77.Po + -rm -f nes/boards/$(DEPDIR)/78.Po + -rm -f nes/boards/$(DEPDIR)/8.Po + -rm -f nes/boards/$(DEPDIR)/80.Po + -rm -f nes/boards/$(DEPDIR)/82.Po + -rm -f nes/boards/$(DEPDIR)/8237.Po + -rm -f nes/boards/$(DEPDIR)/86.Po + -rm -f nes/boards/$(DEPDIR)/87.Po + -rm -f nes/boards/$(DEPDIR)/88.Po + -rm -f nes/boards/$(DEPDIR)/89.Po + -rm -f nes/boards/$(DEPDIR)/90.Po + -rm -f nes/boards/$(DEPDIR)/92.Po + -rm -f nes/boards/$(DEPDIR)/93.Po + -rm -f nes/boards/$(DEPDIR)/94.Po + -rm -f nes/boards/$(DEPDIR)/95.Po + -rm -f nes/boards/$(DEPDIR)/96.Po + -rm -f nes/boards/$(DEPDIR)/97.Po + -rm -f nes/boards/$(DEPDIR)/99.Po + -rm -f nes/boards/$(DEPDIR)/codemasters.Po + -rm -f nes/boards/$(DEPDIR)/colordreams.Po + -rm -f nes/boards/$(DEPDIR)/deirom.Po + -rm -f nes/boards/$(DEPDIR)/emu2413.Po + -rm -f nes/boards/$(DEPDIR)/ffe.Po + -rm -f nes/boards/$(DEPDIR)/fme7.Po + -rm -f nes/boards/$(DEPDIR)/h2288.Po + -rm -f nes/boards/$(DEPDIR)/malee.Po + -rm -f nes/boards/$(DEPDIR)/maxicart.Po + -rm -f nes/boards/$(DEPDIR)/mmc1.Po + -rm -f nes/boards/$(DEPDIR)/mmc2and4.Po + -rm -f nes/boards/$(DEPDIR)/mmc3.Po + -rm -f nes/boards/$(DEPDIR)/mmc5.Po + -rm -f nes/boards/$(DEPDIR)/n106.Po + -rm -f nes/boards/$(DEPDIR)/nina06.Po + -rm -f nes/boards/$(DEPDIR)/novel.Po + -rm -f nes/boards/$(DEPDIR)/sachen.Po + -rm -f nes/boards/$(DEPDIR)/simple.Po + -rm -f nes/boards/$(DEPDIR)/super24.Po + -rm -f nes/boards/$(DEPDIR)/supervision.Po + -rm -f nes/boards/$(DEPDIR)/tengen.Po + -rm -f nes/boards/$(DEPDIR)/vrc6.Po + -rm -f nes/boards/$(DEPDIR)/vrc7.Po + -rm -f nes/input/$(DEPDIR)/arkanoid.Po + -rm -f nes/input/$(DEPDIR)/bbattler2.Po + -rm -f nes/input/$(DEPDIR)/cursor.Po + -rm -f nes/input/$(DEPDIR)/fkb.Po + -rm -f nes/input/$(DEPDIR)/ftrainer.Po + -rm -f nes/input/$(DEPDIR)/hypershot.Po + -rm -f nes/input/$(DEPDIR)/mahjong.Po + -rm -f nes/input/$(DEPDIR)/oekakids.Po + -rm -f nes/input/$(DEPDIR)/partytap.Po + -rm -f nes/input/$(DEPDIR)/powerpad.Po + -rm -f nes/input/$(DEPDIR)/shadow.Po + -rm -f nes/input/$(DEPDIR)/suborkb.Po + -rm -f nes/input/$(DEPDIR)/toprider.Po + -rm -f nes/input/$(DEPDIR)/zapper.Po + -rm -f nes/ntsc/$(DEPDIR)/nes_ntsc.Po + -rm -f nes/ppu/$(DEPDIR)/palette.Po + -rm -f nes/ppu/$(DEPDIR)/ppu.Po + -rm -f net/$(DEPDIR)/Net.Po + -rm -f net/$(DEPDIR)/Net_POSIX.Po + -rm -f net/$(DEPDIR)/Net_WS2.Po + -rm -f ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po + -rm -f ngp/$(DEPDIR)/libngp_a-Z80_interface.Po + -rm -f ngp/$(DEPDIR)/libngp_a-bios.Po + -rm -f ngp/$(DEPDIR)/libngp_a-biosHLE.Po + -rm -f ngp/$(DEPDIR)/libngp_a-dma.Po + -rm -f ngp/$(DEPDIR)/libngp_a-flash.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po + -rm -f ngp/$(DEPDIR)/libngp_a-interrupt.Po + -rm -f ngp/$(DEPDIR)/libngp_a-mem.Po + -rm -f ngp/$(DEPDIR)/libngp_a-neopop.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rom.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rtc.Po + -rm -f ngp/$(DEPDIR)/libngp_a-sound.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po + -rm -f pce/$(DEPDIR)/debug.Po + -rm -f pce/$(DEPDIR)/dis6280.Po + -rm -f pce/$(DEPDIR)/hes.Po + -rm -f pce/$(DEPDIR)/huc.Po + -rm -f pce/$(DEPDIR)/huc6280.Po + -rm -f pce/$(DEPDIR)/input.Po + -rm -f pce/$(DEPDIR)/mcgenjin.Po + -rm -f pce/$(DEPDIR)/pce.Po + -rm -f pce/$(DEPDIR)/pcecd.Po + -rm -f pce/$(DEPDIR)/tsushin.Po + -rm -f pce/$(DEPDIR)/vce.Po + -rm -f pce/input/$(DEPDIR)/gamepad.Po + -rm -f pce/input/$(DEPDIR)/mouse.Po + -rm -f pce/input/$(DEPDIR)/tsushinkb.Po + -rm -f pce_fast/$(DEPDIR)/hes.Po + -rm -f pce_fast/$(DEPDIR)/huc.Po + -rm -f pce_fast/$(DEPDIR)/huc6280.Po + -rm -f pce_fast/$(DEPDIR)/input.Po + -rm -f pce_fast/$(DEPDIR)/pce.Po + -rm -f pce_fast/$(DEPDIR)/pcecd.Po + -rm -f pce_fast/$(DEPDIR)/pcecd_drive.Po + -rm -f pce_fast/$(DEPDIR)/psg.Po + -rm -f pce_fast/$(DEPDIR)/vdc.Po + -rm -f pcfx/$(DEPDIR)/debug.Po + -rm -f pcfx/$(DEPDIR)/fxscsi.Po + -rm -f pcfx/$(DEPDIR)/huc6273.Po + -rm -f pcfx/$(DEPDIR)/idct.Po + -rm -f pcfx/$(DEPDIR)/input.Po + -rm -f pcfx/$(DEPDIR)/interrupt.Po + -rm -f pcfx/$(DEPDIR)/king.Po + -rm -f pcfx/$(DEPDIR)/pcfx.Po + -rm -f pcfx/$(DEPDIR)/rainbow.Po + -rm -f pcfx/$(DEPDIR)/soundbox.Po + -rm -f pcfx/$(DEPDIR)/timer.Po + -rm -f pcfx/input/$(DEPDIR)/gamepad.Po + -rm -f pcfx/input/$(DEPDIR)/mouse.Po + -rm -f psx/$(DEPDIR)/cdc.Po + -rm -f psx/$(DEPDIR)/cpu.Po + -rm -f psx/$(DEPDIR)/debug.Po + -rm -f psx/$(DEPDIR)/dis.Po + -rm -f psx/$(DEPDIR)/dma.Po + -rm -f psx/$(DEPDIR)/frontio.Po + -rm -f psx/$(DEPDIR)/gpu.Po + -rm -f psx/$(DEPDIR)/gpu_line.Po + -rm -f psx/$(DEPDIR)/gpu_polygon.Po + -rm -f psx/$(DEPDIR)/gpu_sprite.Po + -rm -f psx/$(DEPDIR)/gte.Po + -rm -f psx/$(DEPDIR)/irq.Po + -rm -f psx/$(DEPDIR)/mdec.Po + -rm -f psx/$(DEPDIR)/psx.Po + -rm -f psx/$(DEPDIR)/sio.Po + -rm -f psx/$(DEPDIR)/spu.Po + -rm -f psx/$(DEPDIR)/timer.Po + -rm -f psx/input/$(DEPDIR)/dualanalog.Po + -rm -f psx/input/$(DEPDIR)/dualshock.Po + -rm -f psx/input/$(DEPDIR)/gamepad.Po + -rm -f psx/input/$(DEPDIR)/guncon.Po + -rm -f psx/input/$(DEPDIR)/justifier.Po + -rm -f psx/input/$(DEPDIR)/memcard.Po + -rm -f psx/input/$(DEPDIR)/mouse.Po + -rm -f psx/input/$(DEPDIR)/multitap.Po + -rm -f psx/input/$(DEPDIR)/negcon.Po + -rm -f quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po + -rm -f resampler/$(DEPDIR)/resample.Po + -rm -f sms/$(DEPDIR)/cart.Po + -rm -f sms/$(DEPDIR)/memz80.Po + -rm -f sms/$(DEPDIR)/pio.Po + -rm -f sms/$(DEPDIR)/render.Po + -rm -f sms/$(DEPDIR)/romdb.Po + -rm -f sms/$(DEPDIR)/sms.Po + -rm -f sms/$(DEPDIR)/sound.Po + -rm -f sms/$(DEPDIR)/system.Po + -rm -f sms/$(DEPDIR)/tms.Po + -rm -f sms/$(DEPDIR)/vdp.Po + -rm -f snes/$(DEPDIR)/libsnes_a-interface.Po + -rm -f snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po + -rm -f snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po + -rm -f snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po + -rm -f snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po + -rm -f snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po + -rm -f snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po + -rm -f snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po + -rm -f snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po + -rm -f snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po + -rm -f snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po + -rm -f snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po + -rm -f snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po + -rm -f snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po + -rm -f snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po + -rm -f snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po + -rm -f snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po + -rm -f snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po + -rm -f snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po + -rm -f snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po + -rm -f snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po + -rm -f snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po + -rm -f snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po + -rm -f snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po + -rm -f snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po + -rm -f snes/src/system/$(DEPDIR)/libsnes_a-system.Po + -rm -f snes_faust/$(DEPDIR)/apu.Po + -rm -f snes_faust/$(DEPDIR)/cart.Po + -rm -f snes_faust/$(DEPDIR)/cpu.Po + -rm -f snes_faust/$(DEPDIR)/debug.Po + -rm -f snes_faust/$(DEPDIR)/dis65816.Po + -rm -f snes_faust/$(DEPDIR)/input.Po + -rm -f snes_faust/$(DEPDIR)/msu1.Po + -rm -f snes_faust/$(DEPDIR)/ppu.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mt.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mtrender.Po + -rm -f snes_faust/$(DEPDIR)/ppu_st.Po + -rm -f snes_faust/$(DEPDIR)/snes.Po + -rm -f snes_faust/cart/$(DEPDIR)/cx4.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp1.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp2.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1cpu.Po + -rm -f snes_faust/cart/$(DEPDIR)/sdd1.Po + -rm -f snes_faust/cart/$(DEPDIR)/superfx.Po + -rm -f sound/$(DEPDIR)/Blip_Buffer.Po + -rm -f sound/$(DEPDIR)/DSPUtility.Po + -rm -f sound/$(DEPDIR)/Fir_Resampler.Po + -rm -f sound/$(DEPDIR)/OwlResampler.Po + -rm -f sound/$(DEPDIR)/Stereo_Buffer.Po + -rm -f sound/$(DEPDIR)/SwiftResampler.Po + -rm -f sound/$(DEPDIR)/WAVRecord.Po + -rm -f sound/$(DEPDIR)/okiadpcm.Po + -rm -f string/$(DEPDIR)/escape.Po + -rm -f string/$(DEPDIR)/string.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-block.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-framing.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-info.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-registry.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-res012.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-window.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trio.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trionan.Po + -rm -f trio/$(DEPDIR)/libtrio_a-triostr.Po + -rm -f vb/$(DEPDIR)/debug.Po + -rm -f vb/$(DEPDIR)/input.Po + -rm -f vb/$(DEPDIR)/timer.Po + -rm -f vb/$(DEPDIR)/vb.Po + -rm -f vb/$(DEPDIR)/vip.Po + -rm -f vb/$(DEPDIR)/vsu.Po + -rm -f video/$(DEPDIR)/Deinterlacer.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Blend.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Simple.Po + -rm -f video/$(DEPDIR)/font-data-12x13.Po + -rm -f video/$(DEPDIR)/font-data-18x18.Po + -rm -f video/$(DEPDIR)/font-data.Po + -rm -f video/$(DEPDIR)/png.Po + -rm -f video/$(DEPDIR)/primitives.Po + -rm -f video/$(DEPDIR)/resize.Po + -rm -f video/$(DEPDIR)/surface.Po + -rm -f video/$(DEPDIR)/tblur.Po + -rm -f video/$(DEPDIR)/text.Po + -rm -f video/$(DEPDIR)/video.Po + -rm -f wswan/$(DEPDIR)/comm.Po + -rm -f wswan/$(DEPDIR)/debug.Po + -rm -f wswan/$(DEPDIR)/eeprom.Po + -rm -f wswan/$(DEPDIR)/gfx.Po + -rm -f wswan/$(DEPDIR)/interrupt.Po + -rm -f wswan/$(DEPDIR)/main.Po + -rm -f wswan/$(DEPDIR)/memory.Po + -rm -f wswan/$(DEPDIR)/rtc.Po + -rm -f wswan/$(DEPDIR)/sound.Po + -rm -f wswan/$(DEPDIR)/tcache.Po + -rm -f wswan/$(DEPDIR)/v30mz.Po + -rm -f wswan/dis/$(DEPDIR)/dis_decode.Po + -rm -f wswan/dis/$(DEPDIR)/dis_groups.Po + -rm -f wswan/dis/$(DEPDIR)/resolve.Po + -rm -f wswan/dis/$(DEPDIR)/syntax.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -5044,20 +6337,22 @@ .MAKE: $(am__recursive_targets) install-am install-strip -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-binPROGRAMS clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--depfiles check check-am clean clean-binPROGRAMS \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS + +.PRECIOUS: Makefile # diff -Nru mednafen-1.24.3+dfsg/include/mednafen/md/cd/cd.cpp mednafen-1.26.1+dfsg/include/mednafen/md/cd/cd.cpp --- mednafen-1.24.3+dfsg/include/mednafen/md/cd/cd.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/md/cd/cd.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -43,12 +43,12 @@ // Read: 0 = Sub CPU "operating"(?), 1 = acknowledge static bool SACK; -static uint8 LEDControl; -static bool InPeripheralReset; +//static uint8 LEDControl; +//static bool InPeripheralReset; static uint8 MM_WP; // Write protect static uint8 MM_BK; // R/W only on main. PRAM bank select for the main CPU -static uint8 MM_PM; // R/W only on sub. Priority mode. +//static uint8 MM_PM; // R/W only on sub. Priority mode. static bool MM_MODE; // R/W on main and sub. 0 = 2M mode, 1 = 1M mode enum { @@ -439,7 +439,7 @@ printf("Unknown main Read16: %08x\n", A); return(0); } - +#if 0 ////////////////////////////////// // // Sub 68K memory map handling: @@ -820,7 +820,7 @@ printf("Unknown Sub read16: %08x\n", A); return(0); } - +#endif #define SUBCPU_CLOCK 12500000 void MDCD_Run(int32 md_master_cycles) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/md/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/md/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/md/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/md/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -409,6 +409,7 @@ DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 10, // Max instruction size(bytes) 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/mednafen.cpp mednafen-1.26.1+dfsg/include/mednafen/mednafen.cpp --- mednafen-1.24.3+dfsg/include/mednafen/mednafen.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/mednafen.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1425,7 +1425,7 @@ &EmulatedCDPlay, &EmulatedDEMO }; - static_assert(MEDNAFEN_VERSION_NUMERIC >= 0x00102402, "Bad MEDNAFEN_VERSION_NUMERIC"); + static_assert(MEDNAFEN_VERSION_NUMERIC >= 0x00102601, "Bad MEDNAFEN_VERSION_NUMERIC"); for(unsigned int i = 0; i < sizeof(InternalSystems) / sizeof(MDFNGI *); i++) AddSystem(InternalSystems[i]); diff -Nru mednafen-1.24.3+dfsg/include/mednafen/nes/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/nes/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/nes/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/nes/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -498,6 +498,7 @@ DebuggerInfoStruct NESDBGInfo = { + false, "cp437", 3, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/nes/ppu/ppu.cpp mednafen-1.26.1+dfsg/include/mednafen/nes/ppu/ppu.cpp --- mednafen-1.24.3+dfsg/include/mednafen/nes/ppu/ppu.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/nes/ppu/ppu.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1037,47 +1037,47 @@ if(n == 0) sb=1; - uint8 *C; - int t; - unsigned int vadr; - - t = (int)scanline-(spr->y); - - if (Sprite16) - vadr = ((spr->no&1)<<12) + ((spr->no&0xFE)<<4); - else - vadr = (spr->no<<4)+vofs; + uint8 *C; + int t; + unsigned int vadr; + + t = (int)scanline-(spr->y); + + if (Sprite16) + vadr = ((spr->no&1)<<12) + ((spr->no&0xFE)<<4); + else + vadr = (spr->no<<4)+vofs; - if (spr->atr&V_FLIP) - { + if (spr->atr&V_FLIP) + { vadr+=7; vadr-=t; vadr+=(P0&0x20)>>1; vadr-=t&8; - } - else - { + } + else + { vadr+=t; vadr+=t&8; - } + } - if(MMC5Hack && geniestage!=1 && Sprite16) C = MMC5SPRVRAMADR(vadr); - else C = VRAMADR(vadr); - dst->ca[0]=C[0]; + if(MMC5Hack && geniestage!=1 && Sprite16) C = MMC5SPRVRAMADR(vadr); + else C = VRAMADR(vadr); + dst->ca[0]=C[0]; - if(PPU_hook && ns < 8) - { - PPU_hook(0x2000); - PPU_hook(vadr); - } + if(PPU_hook && ns < 8) + { + PPU_hook(0x2000); + PPU_hook(vadr); + } - dst->ca[1]=C[8]; + dst->ca[1]=C[8]; - if(PPU_hook && ns<8) - PPU_hook(vadr | 8); + if(PPU_hook && ns<8) + PPU_hook(vadr | 8); - dst->x=spr->x; - dst->atr=spr->atr; + dst->x=spr->x; + dst->atr=spr->atr; ns++; } @@ -1722,61 +1722,52 @@ neo_palette[x] = GfxDecode_Buf->format.MakeColor(x * 85, x * 85, x * 85, 0xFF); } else + { for(int x = 0; x < 4; x++) neo_palette[x] = CM.PALRAMLUTCache[PALRAMCache[pbn * 4 + x] & 0x3F] | GfxDecode_Buf->format.MakeColor(0, 0, 0, 0xFF); + } - for(int y = 0; y < GfxDecode_Buf->h; y++) + for(int y = 0; y < GfxDecode_Buf->h; y++) + { + for(int x = 0; x < GfxDecode_Buf->w; x+=8) { - for(int x = 0; x < GfxDecode_Buf->w; x+=8) - { - unsigned which_tile = (x / 8) + (GfxDecode_Scroll + (y / 8)) * (GfxDecode_Buf->w / 8); - unsigned tile_c = 0; + unsigned which_tile = (x / 8) + (GfxDecode_Scroll + (y / 8)) * (GfxDecode_Buf->w / 8); + unsigned tile_c = 0; - uint8 *cg_ptr; - uint8 cg[2]; + uint8 *cg_ptr; + uint8 cg[2]; - if(MMC5Hack) + if(MMC5Hack) + { + if(GfxDecode_Layer) // Sprites { - if(GfxDecode_Layer) // Sprites - { - //which_tile &= 0x1FF; - cg_ptr = MMC5SPRVRAMADR(which_tile * 16); - tile_c = 0x200; - } - else + //which_tile &= 0x1FF; + cg_ptr = MMC5SPRVRAMADR(which_tile * 16); + tile_c = 0x200; + } + else + { + switch(MMC5HackCHRMode) { - switch(MMC5HackCHRMode) - { - case 1: break; - default: //which_tile &= 0x1FF; - cg_ptr = MMC5BGVRAMADR(which_tile * 16); + case 1: break; + default: //which_tile &= 0x1FF; + cg_ptr = MMC5BGVRAMADR(which_tile * 16); tile_c = 0x200; break; - } } } - else + } + else + { + if(GfxDecode_Layer) // Sprites { - if(GfxDecode_Layer) // Sprites + if(Sprite16) { - if(Sprite16) - { - tile_c = 0x200; - } - else - { - if(SpAdrHI) - { - which_tile += 0x100; - tile_c = 0x200; - } - else - tile_c = 0x100; - } + tile_c = 0x200; } - else // Background + else { - if(BGAdrHI) + if(SpAdrHI) { which_tile += 0x100; tile_c = 0x200; @@ -1784,30 +1775,41 @@ else tile_c = 0x100; } - - cg_ptr = VRAMADR(which_tile * 16); } - - if(which_tile >= tile_c) + else // Background { - for(int sx = 0; sx < 8; sx++) target[x + sx] = GfxDecode_Buf->format.MakeColor(0, 0, 0, 0); - continue; + if(BGAdrHI) + { + which_tile += 0x100; + tile_c = 0x200; + } + else + tile_c = 0x100; } - cg[0] = cg_ptr[0 + (y & 0x7)]; - cg[1] = cg_ptr[8 + (y & 0x7)]; + cg_ptr = VRAMADR(which_tile * 16); + } - for(int sx = 0; sx < 8; sx++) - target[x + sx] = neo_palette[((cg[0] >> (7-sx)) & 0x1) | (((cg[1] >> (7-sx)) & 0x1) << 1)]; + if(which_tile >= tile_c) + { + for(int sx = 0; sx < 8; sx++) target[x + sx] = GfxDecode_Buf->format.MakeColor(0, 0, 0, 0); + continue; + } - target[x + GfxDecode_Buf->w*2 + 0] = target[x + GfxDecode_Buf->w*2 + 1] = target[x + GfxDecode_Buf->w*2 + 2] = target[x + GfxDecode_Buf->w*2 + 3] = - target[x + GfxDecode_Buf->w*2 + 4] = target[x + GfxDecode_Buf->w*2 + 5] = target[x + GfxDecode_Buf->w*2 + 6] = target[x + GfxDecode_Buf->w*2 + 7] = which_tile * 16; + cg[0] = cg_ptr[0 + (y & 0x7)]; + cg[1] = cg_ptr[8 + (y & 0x7)]; - target[x + GfxDecode_Buf->w*1 + 0]=target[x + GfxDecode_Buf->w*1 + 1]=target[x + GfxDecode_Buf->w*1 + 2]=target[x + GfxDecode_Buf->w*1 + 3] = - target[x + GfxDecode_Buf->w*1 + 4]=target[x + GfxDecode_Buf->w*1 + 5]=target[x + GfxDecode_Buf->w*1 + 6]=target[x + GfxDecode_Buf->w*1 + 7] = which_tile; - } - target += GfxDecode_Buf->w * 3; + for(int sx = 0; sx < 8; sx++) + target[x + sx] = neo_palette[((cg[0] >> (7-sx)) & 0x1) | (((cg[1] >> (7-sx)) & 0x1) << 1)]; + + target[x + GfxDecode_Buf->w*2 + 0] = target[x + GfxDecode_Buf->w*2 + 1] = target[x + GfxDecode_Buf->w*2 + 2] = target[x + GfxDecode_Buf->w*2 + 3] = + target[x + GfxDecode_Buf->w*2 + 4] = target[x + GfxDecode_Buf->w*2 + 5] = target[x + GfxDecode_Buf->w*2 + 6] = target[x + GfxDecode_Buf->w*2 + 7] = which_tile * 16; + + target[x + GfxDecode_Buf->w*1 + 0]=target[x + GfxDecode_Buf->w*1 + 1]=target[x + GfxDecode_Buf->w*1 + 2]=target[x + GfxDecode_Buf->w*1 + 3] = + target[x + GfxDecode_Buf->w*1 + 4]=target[x + GfxDecode_Buf->w*1 + 5]=target[x + GfxDecode_Buf->w*1 + 6]=target[x + GfxDecode_Buf->w*1 + 7] = which_tile; } + target += GfxDecode_Buf->w * 3; + } } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/pce/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/pce/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/pce/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/pce/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1094,6 +1094,7 @@ DebuggerInfoStruct PCEDBGInfo = { + false, "shift_jis", 7, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/pcfx/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/pcfx/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/pcfx/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/pcfx/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1008,6 +1008,7 @@ DebuggerInfoStruct PCFXDBGInfo = { + false, "shift_jis", 4, 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/psx/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/psx/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/psx/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/psx/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -416,6 +416,7 @@ DebuggerInfoStruct PSX_DBGInfo = { + false, "shift_jis", 4, // Max instruction byte size 4, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/psx/gpu.cpp mednafen-1.26.1+dfsg/include/mednafen/psx/gpu.cpp --- mednafen-1.24.3+dfsg/include/mednafen/psx/gpu.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/psx/gpu.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1448,7 +1448,7 @@ } else { - PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, NULL, &surface->format, 0, 0, 0, 0); + PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, NULL, NULL, 0, 0, 0, 0); } if(!InVBlank) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/psx/spu.h mednafen-1.26.1+dfsg/include/mednafen/psx/spu.h --- mednafen-1.24.3+dfsg/include/mednafen/psx/spu.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/psx/spu.h 2020-11-10 06:04:17.000000000 +0000 @@ -219,28 +219,17 @@ int16 IIR_COEF; int16 FB_ALPHA; int16 FB_X; - uint16 IIR_DEST_A0; - uint16 IIR_DEST_A1; - uint16 ACC_SRC_A0; - uint16 ACC_SRC_A1; - uint16 ACC_SRC_B0; - uint16 ACC_SRC_B1; - uint16 IIR_SRC_A0; - uint16 IIR_SRC_A1; - uint16 IIR_DEST_B0; - uint16 IIR_DEST_B1; - uint16 ACC_SRC_C0; - uint16 ACC_SRC_C1; - uint16 ACC_SRC_D0; - uint16 ACC_SRC_D1; - uint16 IIR_SRC_B1; - uint16 IIR_SRC_B0; - uint16 MIX_DEST_A0; - uint16 MIX_DEST_A1; - uint16 MIX_DEST_B0; - uint16 MIX_DEST_B1; - int16 IN_COEF_L; - int16 IN_COEF_R; + uint16 IIR_DEST_A[2]; + uint16 ACC_SRC_A[2]; + uint16 ACC_SRC_B[2]; + uint16 IIR_SRC_A[2]; + uint16 IIR_DEST_B[2]; + uint16 ACC_SRC_C[2]; + uint16 ACC_SRC_D[2]; + uint16 IIR_SRC_B[2]; + uint16 MIX_DEST_A[2]; + uint16 MIX_DEST_B[2]; + int16 IN_COEF[2]; }; }; }; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/psx/spu_reverb.inc mednafen-1.26.1+dfsg/include/mednafen/psx/spu_reverb.inc --- mednafen-1.24.3+dfsg/include/mednafen/psx/spu_reverb.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/psx/spu_reverb.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sony PS1 Emulation Module */ /******************************************************************************/ /* spu_reverb.inc: -** Copyright (C) 2011-2016 Mednafen Team +** Copyright (C) 2011-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -31,6 +31,13 @@ return(samp); } +static INLINE int16 ReverbNeg(int16 samp) +{ + if(samp == -32768) + return 0x7FFF; + + return -samp; +} INLINE uint32 PS_SPU::Get_Reverb_Offset(uint32 in_offset) { @@ -54,7 +61,8 @@ void NO_INLINE PS_SPU::WR_RVB(uint16 raw_offs, int16 sample) { - WriteSPURAM(Get_Reverb_Offset(raw_offs << 2), sample); + if(SPUControl & 0x80) + WriteSPURAM(Get_Reverb_Offset(raw_offs << 2), sample); } // @@ -140,77 +148,70 @@ int32 downsampled[2]; for(unsigned lr = 0; lr < 2; lr++) - downsampled[lr] = Reverb4422(&RDSB[lr][(RvbResPos - 39) & 0x3F]); + downsampled[lr] = Reverb4422(&RDSB[lr][(RvbResPos - 38) & 0x3F]); // // Run algorithm - /// - if(SPUControl & 0x80) + // + for(unsigned lr = 0; lr < 2; lr++) { - int16 IIR_INPUT_A0, IIR_INPUT_A1, IIR_INPUT_B0, IIR_INPUT_B1; - int16 IIR_A0, IIR_A1, IIR_B0, IIR_B1; - int16 ACC0, ACC1; - int16 FB_A0, FB_A1, FB_B0, FB_B1; - - IIR_INPUT_A0 = ReverbSat(((RD_RVB(IIR_SRC_A0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); - IIR_INPUT_A1 = ReverbSat(((RD_RVB(IIR_SRC_A1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); - IIR_INPUT_B0 = ReverbSat(((RD_RVB(IIR_SRC_B0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); - IIR_INPUT_B1 = ReverbSat(((RD_RVB(IIR_SRC_B1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); - - IIR_A0 = ReverbSat((((IIR_INPUT_A0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A0, -1)) >> 14)) >> 1); - IIR_A1 = ReverbSat((((IIR_INPUT_A1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A1, -1)) >> 14)) >> 1); - IIR_B0 = ReverbSat((((IIR_INPUT_B0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B0, -1)) >> 14)) >> 1); - IIR_B1 = ReverbSat((((IIR_INPUT_B1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B1, -1)) >> 14)) >> 1); - - WR_RVB(IIR_DEST_A0, IIR_A0); - WR_RVB(IIR_DEST_A1, IIR_A1); - WR_RVB(IIR_DEST_B0, IIR_B0); - WR_RVB(IIR_DEST_B1, IIR_B1); - - ACC0 = ReverbSat((((RD_RVB(ACC_SRC_A0) * ACC_COEF_A) >> 14) + - ((RD_RVB(ACC_SRC_B0) * ACC_COEF_B) >> 14) + - ((RD_RVB(ACC_SRC_C0) * ACC_COEF_C) >> 14) + - ((RD_RVB(ACC_SRC_D0) * ACC_COEF_D) >> 14)) >> 1); - - ACC1 = ReverbSat((((RD_RVB(ACC_SRC_A1) * ACC_COEF_A) >> 14) + - ((RD_RVB(ACC_SRC_B1) * ACC_COEF_B) >> 14) + - ((RD_RVB(ACC_SRC_C1) * ACC_COEF_C) >> 14) + - ((RD_RVB(ACC_SRC_D1) * ACC_COEF_D) >> 14)) >> 1); - - FB_A0 = RD_RVB(MIX_DEST_A0 - FB_SRC_A); - FB_A1 = RD_RVB(MIX_DEST_A1 - FB_SRC_A); - FB_B0 = RD_RVB(MIX_DEST_B0 - FB_SRC_B); - FB_B1 = RD_RVB(MIX_DEST_B1 - FB_SRC_B); - - WR_RVB(MIX_DEST_A0, ReverbSat(ACC0 - ((FB_A0 * FB_ALPHA) >> 15))); - WR_RVB(MIX_DEST_A1, ReverbSat(ACC1 - ((FB_A1 * FB_ALPHA) >> 15))); - - WR_RVB(MIX_DEST_B0, ReverbSat(((FB_ALPHA * ACC0) >> 15) - ((FB_A0 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B0 * FB_X) >> 15))); - WR_RVB(MIX_DEST_B1, ReverbSat(((FB_ALPHA * ACC1) >> 15) - ((FB_A1 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B1 * FB_X) >> 15))); + const int16 IIR_INPUT_A = ReverbSat((((RD_RVB(IIR_SRC_A[lr ^ 0]) * IIR_COEF) >> 14) + ((downsampled[lr] * IN_COEF[lr]) >> 14)) >> 1); + const int16 IIR_INPUT_B = ReverbSat((((RD_RVB(IIR_SRC_B[lr ^ 1]) * IIR_COEF) >> 14) + ((downsampled[lr] * IN_COEF[lr]) >> 14)) >> 1); + const int16 IIR_A = ReverbSat((((IIR_INPUT_A * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A[lr], -1)) >> 14)) >> 1); + const int16 IIR_B = ReverbSat((((IIR_INPUT_B * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B[lr], -1)) >> 14)) >> 1); + + WR_RVB(IIR_DEST_A[lr], IIR_A); + WR_RVB(IIR_DEST_B[lr], IIR_B); + + const int32 ACC = ((RD_RVB(ACC_SRC_A[lr]) * ACC_COEF_A) >> 14) + + ((RD_RVB(ACC_SRC_B[lr]) * ACC_COEF_B) >> 14) + + ((RD_RVB(ACC_SRC_C[lr]) * ACC_COEF_C) >> 14) + + ((RD_RVB(ACC_SRC_D[lr]) * ACC_COEF_D) >> 14); + + const int16 FB_A = RD_RVB(MIX_DEST_A[lr] - FB_SRC_A); + const int16 FB_B = RD_RVB(MIX_DEST_B[lr] - FB_SRC_B); + const int16 MDA = ReverbSat((ACC + ((FB_A * ReverbNeg(FB_ALPHA)) >> 14)) >> 1); + const int16 MDB = ReverbSat(FB_A + ((((MDA * FB_ALPHA) >> 14) + ((FB_B * ReverbNeg(FB_X)) >> 14)) >> 1)); + const int16 IVB = ReverbSat(FB_B + ((MDB * FB_X) >> 15)); + + WR_RVB(MIX_DEST_A[lr], MDA); + WR_RVB(MIX_DEST_B[lr], MDB); +#if 0 + { + static uint32 sqcounter; + RUSB[lr][(RvbResPos >> 1) | 0x20] = RUSB[lr][RvbResPos >> 1] = ((sqcounter & 0xFF) == 0) ? 0x8000 : 0x0000; //((sqcounter & 0x80) ? 0x7000 : 0x9000); + sqcounter += lr; + } +#else + RUSB[lr][(RvbResPos >> 1) | 0x20] = RUSB[lr][RvbResPos >> 1] = IVB; // Output sample +#endif } - - // - // Get output samples // - RUSB[0][(RvbResPos >> 1) | 0x20] = RUSB[0][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A0) + RD_RVB(MIX_DEST_B0)) >> 1; - RUSB[1][(RvbResPos >> 1) | 0x20] = RUSB[1][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A1) + RD_RVB(MIX_DEST_B1)) >> 1; - + // + // ReverbCur = (ReverbCur + 1) & 0x3FFFF; if(!ReverbCur) ReverbCur = ReverbWA; for(unsigned lr = 0; lr < 2; lr++) - upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos >> 1) - 19) & 0x1F]); } else { for(unsigned lr = 0; lr < 2; lr++) - upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos >> 1) - 19) & 0x1F]); } RvbResPos = (RvbResPos + 1) & 0x3F; for(unsigned lr = 0; lr < 2; lr++) + { +#if 0 + if(!lr) + printf("%d\n", (-upsampled[lr]) >> 1); +#endif + out[lr] = upsampled[lr]; + } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/sexyal/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/sexyal/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/sexyal/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/sexyal/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/sexyal -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -151,7 +160,15 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/convert.Po ./$(DEPDIR)/sexyal.Po \ + drivers/$(DEPDIR)/alsa.Po drivers/$(DEPDIR)/cmi8738.Po \ + drivers/$(DEPDIR)/dos_common.Po drivers/$(DEPDIR)/dsound.Po \ + drivers/$(DEPDIR)/dummy.Po drivers/$(DEPDIR)/es1370.Po \ + drivers/$(DEPDIR)/es1371.Po drivers/$(DEPDIR)/jack.Po \ + drivers/$(DEPDIR)/openbsd.Po drivers/$(DEPDIR)/oss.Po \ + drivers/$(DEPDIR)/sb.Po drivers/$(DEPDIR)/sdl.Po \ + drivers/$(DEPDIR)/wasapi.Po drivers/$(DEPDIR)/wasapish.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -192,6 +209,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -366,6 +385,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -405,14 +425,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sexyal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sexyal/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -473,22 +492,28 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sexyal.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/alsa.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/cmi8738.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dos_common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dsound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dummy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1370.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1371.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/jack.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/openbsd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/oss.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sdl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sexyal.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/alsa.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/cmi8738.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dos_common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dsound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dummy.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1370.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1371.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/jack.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/openbsd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/oss.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sdl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapish.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -558,7 +583,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -629,7 +657,22 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) drivers/$(DEPDIR) + -rm -f ./$(DEPDIR)/convert.Po + -rm -f ./$(DEPDIR)/sexyal.Po + -rm -f drivers/$(DEPDIR)/alsa.Po + -rm -f drivers/$(DEPDIR)/cmi8738.Po + -rm -f drivers/$(DEPDIR)/dos_common.Po + -rm -f drivers/$(DEPDIR)/dsound.Po + -rm -f drivers/$(DEPDIR)/dummy.Po + -rm -f drivers/$(DEPDIR)/es1370.Po + -rm -f drivers/$(DEPDIR)/es1371.Po + -rm -f drivers/$(DEPDIR)/jack.Po + -rm -f drivers/$(DEPDIR)/openbsd.Po + -rm -f drivers/$(DEPDIR)/oss.Po + -rm -f drivers/$(DEPDIR)/sb.Po + -rm -f drivers/$(DEPDIR)/sdl.Po + -rm -f drivers/$(DEPDIR)/wasapi.Po + -rm -f drivers/$(DEPDIR)/wasapish.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -675,7 +718,22 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) drivers/$(DEPDIR) + -rm -f ./$(DEPDIR)/convert.Po + -rm -f ./$(DEPDIR)/sexyal.Po + -rm -f drivers/$(DEPDIR)/alsa.Po + -rm -f drivers/$(DEPDIR)/cmi8738.Po + -rm -f drivers/$(DEPDIR)/dos_common.Po + -rm -f drivers/$(DEPDIR)/dsound.Po + -rm -f drivers/$(DEPDIR)/dummy.Po + -rm -f drivers/$(DEPDIR)/es1370.Po + -rm -f drivers/$(DEPDIR)/es1371.Po + -rm -f drivers/$(DEPDIR)/jack.Po + -rm -f drivers/$(DEPDIR)/openbsd.Po + -rm -f drivers/$(DEPDIR)/oss.Po + -rm -f drivers/$(DEPDIR)/sb.Po + -rm -f drivers/$(DEPDIR)/sdl.Po + -rm -f drivers/$(DEPDIR)/wasapi.Po + -rm -f drivers/$(DEPDIR)/wasapish.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -695,18 +753,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes/interface.cpp mednafen-1.26.1+dfsg/include/mednafen/snes/interface.cpp --- mednafen-1.24.3+dfsg/include/mednafen/snes/interface.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes/interface.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -346,7 +346,6 @@ case bSNES_v059::Input::DeviceMouse: { - assert(port < 2); switch(id) { case bSNES_v059::Input::MouseX: @@ -370,7 +369,6 @@ case bSNES_v059::Input::DeviceSuperScope: { - assert(port < 2); switch(id) { case bSNES_v059::Input::SuperScopeX: diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes_faust/debug.cpp mednafen-1.26.1+dfsg/include/mednafen/snes_faust/debug.cpp --- mednafen-1.24.3+dfsg/include/mednafen/snes_faust/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes_faust/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -591,6 +591,7 @@ DebuggerInfoStruct DBG_DBGInfo { + true, "cp437", 4, diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes_faust/msu1.cpp mednafen-1.26.1+dfsg/include/mednafen/snes_faust/msu1.cpp --- mednafen-1.24.3+dfsg/include/mednafen/snes_faust/msu1.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes_faust/msu1.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Fast SNES Emulation Module */ /******************************************************************************/ /* msu1.cpp - MSU1 emulation -** Copyright (C) 2019 Mednafen Team +** Copyright (C) 2019-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -90,8 +90,11 @@ // const float eff_volume = volume * ((1.0 / 255.0f) * 256.0f); - if(MDFN_UNLIKELY(!(status & 0x10) || (status & 0x40))) + if(MDFN_UNLIKELY((status & 0x50) != 0x10 || !audio_reader)) { + if(!(status & 0x60) && !audio_reader) + status &= ~0x10; + while(run_count) { (&ResampBuf[0].BufPudding()->f)[ResampBufPos] = 0; @@ -481,7 +484,6 @@ // // // - audio_reader = new MTStreamReader(affinity_audio); data_reader = new MTStreamReader(affinity_data); // { @@ -500,6 +502,7 @@ const std::string filebase = gf->outside.fbase; const std::string fnamepat = filebase + "-%.pcm"; + const size_t fnamepat_pctpos = fnamepat.size() - 5; const std::string dirpath = gf->outside.dir; std::bitset<65536> trypcm; // May have false positives, should not have false negatives, but who knows with case insensitive filesystems... try @@ -515,10 +518,12 @@ if(si >= fname.size()) return ret; // - if(fnamepat[i] == '%') + if(i == fnamepat_pctpos) { bool first = true; + assert(fnamepat[i] == '%'); + tnum = 0; do { @@ -606,6 +611,9 @@ asi.pos = 0; asi.stream = std::move(afp); + if(!audio_reader) + audio_reader = new MTStreamReader(affinity_audio); + audio_reader->add_stream(std::move(asi)); // td.w = w++; @@ -658,7 +666,7 @@ control = 0x00; data_reader->set_active_stream(0, 0); - if(tracks.size()) + if(audio_reader) audio_reader->set_active_stream(0, 8); // // diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes_faust/notes/GAME_NOTES mednafen-1.26.1+dfsg/include/mednafen/snes_faust/notes/GAME_NOTES --- mednafen-1.24.3+dfsg/include/mednafen/snes_faust/notes/GAME_NOTES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes_faust/notes/GAME_NOTES 2020-11-10 06:04:17.000000000 +0000 @@ -29,6 +29,11 @@ Hook Tecmo Super Bowl II +// +// Attempts to write(non-HDMA) to VRAM during active display: +// +NBA Pro Basketball: Bulls vs Blazers +Zen-Nihon Pro Wres // // Interlace: diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes_faust/ppu_common.inc mednafen-1.26.1+dfsg/include/mednafen/snes_faust/ppu_common.inc --- mednafen-1.24.3+dfsg/include/mednafen/snes_faust/ppu_common.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes_faust/ppu_common.inc 2020-11-10 06:04:17.000000000 +0000 @@ -315,7 +315,7 @@ VRAM_ReadBuffer = VRAM[GetVAddr()]; VRAM_Addr += VMAIN_AddrInc; - PPU_MTRENDER::MTIF_Read(A); + PPU_MTRENDER::MTIF_Read(A); // Don't move outside this if() block } return BusLatch[0]; @@ -338,7 +338,7 @@ VRAM_ReadBuffer = VRAM[GetVAddr()]; VRAM_Addr += VMAIN_AddrInc; - PPU_MTRENDER::MTIF_Read(A); + PPU_MTRENDER::MTIF_Read(A); // Don't move outside this if() block } return BusLatch[0]; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/snes_faust/ppu_mtrender.cpp mednafen-1.26.1+dfsg/include/mednafen/snes_faust/ppu_mtrender.cpp --- mednafen-1.24.3+dfsg/include/mednafen/snes_faust/ppu_mtrender.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/snes_faust/ppu_mtrender.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -420,8 +420,7 @@ case 0x39: case 0x3A: //printf("MT VRAM Addr Inc\n"); - if(!VMAIN_IncMode) - VRAM_Addr += VMAIN_AddrInc; + VRAM_Addr += VMAIN_AddrInc; break; } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/cdb.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/cdb.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/cdb.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/cdb.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* cdb.cpp - CD Block Emulation -** Copyright (C) 2016-2017 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -19,14 +19,80 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* + Finicky games: + Astal + Play and Seek command nuances. + + Batman Forever + Seek delay must be high enough, or glitchy batmobile. + + BIOS CD-DA Player + Play and Seek command nuances. + + Break Point + Aborts out to BIOS CD player screen if CDB ever reports + PLAY status for a 1-sector read. + + DJ Wars + Same issue as Break Point. + + Dragon Force II + When trying to skip an FMV, the game will hang until the initial + Play command completes if the CDB in in a PAUSE state due to + buffers being full, and the CDB fails to quickly go into BUSY + state(due to seek start) immediately after a Reset Selector + command frees up buffers. + + Hop Step Idol + Similar issue to Break Point, but fails more spectacularly. + + Independence Day (USA) + Issues 'Get CD Device Connection' command without waiting for + the previously-issued 'Reset Selector' command to completely + finish, expecting the returned value to not be the reset + value. + + Jung Rhythm + Seek delay must be high enough, or will hang when trying to + retry a failed stage. + + Magical Drop III + Needs resetting of 'is_cdrom' status bit to be delayed by a + few dozen microseconds after a seek start triggered by the + Play command. + + NBA Action + Relies on seek to index 2+ functionality. + + Steam Heart's + Play and Seek command nuances. Music should resume where it + left off after pausing and unpausing in-game. + + Tactics Ogre + If repeat handling is wrong, will hang when trying to resume + a suspended game. + + Taito Chase H.Q. + Relies on seek to index 2+ functionality. + + Tenchi Muyou! Ryououki Gokuraku + Quirks with running commands during an Init command software + reset. + + Tennis Arena + Probably same issue as Break Point. + + World Cup France '98 + Same issues as Dragon Force II +*/ + // TODO: Respect auth type with COMMAND_AUTH_DEVICE. // TODO: Test INIT 0x00 side effects(and see if it affects CD device connection) // TODO: edc_lec_check_and_correct -// TODO: Proper seek delays(for "Gungriffon" FMV) - // TODO: Some filesys commands(at least change dir, read file) seem to reset the saved command start and end positions(accessed via 0xFFFFFF to PLAY command) to something // akin to 0. @@ -63,6 +129,8 @@ namespace MDFN_IEN_SS { +static void CheckBufPauseResume(void); + enum { SECLEN__FIRST = 0, @@ -379,6 +447,7 @@ static bool CommandPending; static uint16 SWResetHIRQDeferred; static bool SWResetPending; +static uint8 ResetSelPending; static uint8 CDDevConn; static uint8 LastBufDest; @@ -498,7 +567,7 @@ DRIVEPHASE_STOPPED = 0, DRIVEPHASE_PLAY, - DRIVEPHASE_SEEK_START, + DRIVEPHASE_SEEK_START3, DRIVEPHASE_SEEK, DRIVEPHASE_SCAN, @@ -507,12 +576,19 @@ DRIVEPHASE_EJECTED_WAITING, DRIVEPHASE_STARTUP, - DRIVEPHASE_RESETTING + DRIVEPHASE_RESETTING, + + DRIVEPHASE_SEEK_START1, + DRIVEPHASE_SEEK_START2, + + DRIVEPHASE_PAUSE }; static int64 DriveCounter; static int64 PeriodicIdleCounter; enum : int64 { PeriodicIdleCounter_Reload = (int64)187065 << 32 }; +static int32 PauseCounter; +static bool PlaySectorProcessed; static uint8 PlayRepeatCounter; static uint8 CurPlayRepeat; @@ -893,6 +969,7 @@ Partition_UnlinkBuffer(FLS.pnum, bfi); \ memcpy(FLS.pbuf, &dptr[(dptr[15] == 0x2) ? 24 : 16], 2048); \ Buffer_Free(bfi); \ + CheckBufPauseResume(); \ } #define FLS_READ(buffer, count) \ @@ -1040,7 +1117,6 @@ // Pause // PlayEndIRQType = 0; - CurPlayStart = 0x800000; CurPlayEnd = 0x800000; CurPlayRepeat = 0; // @@ -1282,6 +1358,7 @@ CommandPending = false; SWResetHIRQDeferred = 0; SWResetPending = false; + ResetSelPending = false; CDDevConn = 0; LastBufDest = 0; @@ -1315,6 +1392,9 @@ DriveCounter = 0; PeriodicIdleCounter = 0; + PauseCounter = 0; + PlaySectorProcessed = false; + PlayRepeatCounter = 0; CurPlayRepeat = 0; @@ -1605,27 +1685,18 @@ SWResetHIRQDeferred = 0; } -static void StartSeek(const uint32 cmd_target, const bool no_pickup_change = false) -{ - if(!Cur_CDIF) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_CDB, "[CDB] [BUG] StartSeek() called when no disc present or tray open.\n"); - return; - } - - CurPlayStart = cmd_target; +// +// Should be closer to 600, but 500 is good enough for Magical Drop 3's intro, so +// be more conservative to reduce the probability of breaking a game due +// to CPU timing emulation deficiencies. +// +enum : int32 { SeekCPIUpdateDelay = 500 }; - if(no_pickup_change) - { - if(DrivePhase == DRIVEPHASE_PLAY) - { - // Maybe stop scanning? or before the if(no_pickup_change)... - return; - } - } - else if(cmd_target & 0x800000) +static void SeekStart1(void) +{ + if(CurPlayStart & 0x800000) { - int32 fad_target = cmd_target & 0x7FFFFF; + int32 fad_target = CurPlayStart & 0x7FFFFF; int32 tt = 1; if(fad_target < 150) @@ -1640,7 +1711,7 @@ if(fad_target < (150 + (int32)toc.tracks[track].lba)) break; - + tt = track; } @@ -1652,8 +1723,8 @@ } else { - int32 track_target = (cmd_target >> 8) & 0xFF; - int32 index_target = cmd_target & 0xFF; + int32 track_target = (CurPlayStart >> 8) & 0xFF; + int32 index_target = CurPlayStart & 0xFF; if(track_target > toc.last_track) track_target = toc.last_track; @@ -1671,20 +1742,103 @@ CurPosInfo.rel_fad = 0; CurPosInfo.ctrl_adr = (toc.tracks[track_target].control << 4) | (toc.tracks[track_target].adr << 0); } - // +} + +static void SeekStart2(int delay_sub = 0) +{ CurPosInfo.status = STATUS_BUSY; CurPosInfo.is_cdrom = false; CurPosInfo.repcount = PlayRepeatCounter & 0xF; - DrivePhase = DRIVEPHASE_SEEK_START; + DrivePhase = DRIVEPHASE_SEEK_START3; Cur_CDIF->HintReadSector(CurPosInfo.fad); -// PlayEndIRQPending = false; - PeriodicIdleCounter = PeriodicIdleCounter_Reload; - DriveCounter = (int64)256000 << 32; //(int64)((44100 * 256) / 150) << 32; + DriveCounter = (int64)(256000 - delay_sub) << 32; SeekIndexPhase = 0; } +static void StartSeek(const uint32 cmd_target, const bool no_pickup_change = false) +{ + if(!Cur_CDIF) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_CDB, "[CDB] [BUG] StartSeek() called when no disc present or tray open.\n"); + return; + } + + CurPlayStart = cmd_target; + + if(no_pickup_change) + { + if(DrivePhase == DRIVEPHASE_PLAY) + { + // Maybe stop scanning? or before the if(no_pickup_change)... + return; + } + } + + CurPosInfo.status = STATUS_BUSY; + DrivePhase = no_pickup_change ? DRIVEPHASE_SEEK_START2 : DRIVEPHASE_SEEK_START1; + PeriodicIdleCounter = PeriodicIdleCounter_Reload; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; +} + +static bool CheckEndMet(void) +{ + bool end_met = (CurPosInfo.tno == 0xAA); + + if(CurPlayEnd != 0) + { + if(CurPlayEnd & 0x800000) + end_met |= (CurPosInfo.fad >= (CurPlayEnd & 0x7FFFFF)); + else + { + const unsigned end_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayEnd >> 8) & 0xFF)); + const unsigned end_index = std::min(99, std::max(1, CurPlayEnd & 0xFF)); + + end_met |= (CurPosInfo.tno > end_track) || (CurPosInfo.tno == end_track && CurPosInfo.idx > end_index); + } + } + + // + // Steam Heart's, it's always Steam Heart's... + // + if(CurPlayStart & 0x800000) + { + end_met |= (CurPosInfo.fad < (CurPlayStart & 0x7FFFFF)); + } + else + { + const unsigned start_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayStart >> 8) & 0xFF)); + //const unsigned start_index = std::min(99, std::max(1, CurPlayStart & 0xFF)); + + end_met |= (CurPosInfo.tno < start_track); //|| (CurPosInfo.tno == start_track && CurPosInfo.idx < start_index); + } + + return end_met; +} + +static void CheckBufPauseResume(void) +{ + if(DrivePhase == DRIVEPHASE_PAUSE) + { + const bool end_met = CheckEndMet(); + + if(!end_met && FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Resuming from buffer full pause (fast path).\n"); +#if 0 + CurPosInfo.status = STATUS_BUSY; +#else + SecPreBuf_In = false; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_SEEK_START2; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; + PeriodicIdleCounter = PeriodicIdleCounter_Reload; +#endif + } + } +} + static void Drive_Run(int64 clocks) { DriveCounter -= clocks; @@ -1752,7 +1906,14 @@ DriveCounter += (int64)2000 << 32; break; - case DRIVEPHASE_SEEK_START: + case DRIVEPHASE_SEEK_START1: + SeekStart1(); + // no break + case DRIVEPHASE_SEEK_START2: + SeekStart2(SeekCPIUpdateDelay); + break; + + case DRIVEPHASE_SEEK_START3: // // TODO: Motor spinup from stopped state time penalty? // @@ -1762,11 +1923,13 @@ fad_delta = CurPosInfo.fad - CurSector; - seek_time = 6 * (44100 * 256) / 150; + seek_time = 12 * (44100 * 256) / 150; seek_time += abs(fad_delta) * ((fad_delta < 0) ? 28 : 26); seek_time += (fad_delta < 0 || fad_delta >= 150) ? (44100 * 256) / 150 : 0; //seek_time += fabs(sqrt(CurSector) - sqrt(CurPosInfo.fad)) * 13000; + //printf("%d %d\n", fad_delta, seek_time); + CurPosInfo.status = STATUS_SEEK; DrivePhase = DRIVEPHASE_SEEK; DriveCounter += (int64)seek_time << 32; @@ -1836,6 +1999,7 @@ if(index_ok) { + PlaySectorProcessed = false; DrivePhase = DRIVEPHASE_PLAY; DriveCounter += (int64)((44100 * 256) / ((SubQBuf_Safe[0] & 0x40) ? 150 : 75)) << 32; @@ -1899,39 +2063,34 @@ if(!SecPreBuf_In) { - CurPosInfo.status = STATUS_PLAY; + PlaySectorProcessed = true; + CurSector++; } } // end if(SecPreBuf_In > 0) - + // Fallthrough: + case DRIVEPHASE_PAUSE: PeriodicIdleCounter = 17712LL << 32; - if(DrivePhase == DRIVEPHASE_PLAY) + + if(SecPreBuf_In) { - if(SecPreBuf_In) - { - // TODO: More accurate: - CurPosInfo.status = STATUS_PAUSE; + SS_DBG(SS_DBG_CDB, "[CDB] SecPreBuf_In=%d at sector read time(CurSector=%d, CurPosInfo.fad=%d).\n", CurSector, CurPosInfo.fad); + } + else + { + Cur_CDIF->ReadRawSector(SecPreBuf, CurSector - 150); + SecPreBuf_In = true; - if(SecPreBuf_In > 0) - SS_DBG(SS_DBG_CDB, "[CDB] SB Overflow\n"); - } - else + // TODO:(maybe pointless...) + //if(SubQBuf_Safe[0] & 0x40) + // CurPosInfo.fad = SECTOR HEADER + //else + // CurPosInfo.fad = SUBQ STUFF + CurPosInfo.fad = CurSector; + if(DecodeSubQ(SecPreBuf + 2352)) { - Cur_CDIF->ReadRawSector(SecPreBuf, CurSector - 150); - SecPreBuf_In = true; - - // TODO:(maybe pointless...) - //if(SubQBuf_Safe[0] & 0x40) - // CurPosInfo.fad = SECTOR HEADER - //else - // CurPosInfo.fad = SUBQ STUFF - CurPosInfo.fad = CurSector; - if(DecodeSubQ(SecPreBuf + 2352)) - { - CurPosInfo.rel_fad = (BCD_to_U8(SubQBuf[0x3]) * 60 + BCD_to_U8(SubQBuf[0x4])) * 75 + BCD_to_U8(SubQBuf[0x5]); - CurPosInfo.tno = (SubQBuf[0x1] >= 0xA0) ? SubQBuf[0x1] : BCD_to_U8(SubQBuf[0x1]); - CurPosInfo.idx = BCD_to_U8(SubQBuf[0x2]); - } - CurSector++; + CurPosInfo.rel_fad = (BCD_to_U8(SubQBuf[0x3]) * 60 + BCD_to_U8(SubQBuf[0x4])) * 75 + BCD_to_U8(SubQBuf[0x5]); + CurPosInfo.tno = (SubQBuf[0x1] >= 0xA0) ? SubQBuf[0x1] : BCD_to_U8(SubQBuf[0x1]); + CurPosInfo.idx = BCD_to_U8(SubQBuf[0x2]); } } @@ -1947,62 +2106,56 @@ // // // - if(SecPreBuf_In && DrivePhase == DRIVEPHASE_PLAY) + if(SecPreBuf_In && (DrivePhase == DRIVEPHASE_PLAY || DrivePhase == DRIVEPHASE_PAUSE)) { - bool end_met = (CurPosInfo.tno == 0xAA); + const bool end_met = CheckEndMet(); - if(CurPlayEnd != 0) + if(DrivePhase == DRIVEPHASE_PAUSE) { - if(CurPlayEnd & 0x800000) - end_met |= (CurPosInfo.fad >= (CurPlayEnd & 0x7FFFFF)); - else + SecPreBuf_In = false; + + if(PauseCounter == 1) { - const unsigned end_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayEnd >> 8) & 0xFF)); - const unsigned end_index = std::min(99, std::max(1, CurPlayEnd & 0xFF)); + CurPosInfo.status = STATUS_PAUSE; - end_met |= (CurPosInfo.tno > end_track) || (CurPosInfo.tno == end_track && CurPosInfo.idx > end_index); + if(end_met && PlayEndIRQType) + { + // Don't generate IRQ if we've repeated and there hasn't been a non-end_met sector since. + if(!(PlayRepeatCounter & 0x80)) + TriggerIRQ(PlayEndIRQType & 0xFFFF); // May not be right for EFLS with Read File, maybe EFLS is only triggered after the buffer is written? + PlayEndIRQType = 0; + } + PauseCounter = -1; } - } - - // - // Steam Heart's, it's always Steam Heart's... - // - if(CurPlayStart & 0x800000) - { - end_met |= (CurPosInfo.fad < (CurPlayStart & 0x7FFFFF)); - } - else - { - const unsigned start_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayStart >> 8) & 0xFF)); - //const unsigned start_index = std::min(99, std::max(1, CurPlayStart & 0xFF)); + else if(PauseCounter == -1) + { + CurPosInfo.status = STATUS_PAUSE; - end_met |= (CurPosInfo.tno < start_track); //|| (CurPosInfo.tno == start_track && CurPosInfo.idx < start_index); + if(!end_met && FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Resuming from buffer full pause.\n"); + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_SEEK_START2; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; + } + } + else + PauseCounter++; } - - if(end_met) + else if(end_met) { SecPreBuf_In = false; if(PlayRepeatCounter >= CurPlayRepeat) { - CurSector = CurPosInfo.fad; - if(PlayEndIRQType) - { - CurPosInfo.status = STATUS_BUSY; - - PlayEndIRQType += 1 << 30; // Crappy delay so we're in STATUS_BUSY state long enough. - - if((PlayEndIRQType >> 30) >= 3) - { - // Don't generate IRQ if we've repeated and there hasn't been a non-end_met sector since. - if(!(PlayRepeatCounter & 0x80)) - TriggerIRQ(PlayEndIRQType & 0xFFFF); // May not be right for EFLS with Read File, maybe EFLS is only triggered after the buffer is written? - PlayEndIRQType = 0; - } - } + SS_DBG(SS_DBG_CDB, "[CDB] Starting play end pause.\n"); + else + SS_DBG(SS_DBG_CDB, "[CDB] Starting pause.\n"); - if(!PlayEndIRQType) - CurPosInfo.status = STATUS_PAUSE; + CurSector = CurPosInfo.fad; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = PlayEndIRQType ? 0 : 1; } else { @@ -2011,11 +2164,28 @@ PlayRepeatCounter |= 0x80; // - StartSeek(PlayCmdStartPos); + SeekStart1(); + SeekStart2(); } } + else if((SubQBuf_Safe[0] & 0x40) && !FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Starting buffer full pause.\n"); + SecPreBuf_In = false; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = 0; + } else + { PlayRepeatCounter &= ~0x80; + + if(PlaySectorProcessed) + { + CurPosInfo.status = STATUS_PLAY; + PlaySectorProcessed = false; + } + } } // // @@ -2117,11 +2287,11 @@ { char cdet[128]; GetCommandDetails(CTR.CD, cdet, sizeof(cdet)); - SS_DBG(SS_DBG_CDB, "[CDB] Command: %s --- HIRQ=0x%04x, HIRQ_Mask=0x%04x\n", cdet, HIRQ, HIRQ_Mask); + SS_DBG(SS_DBG_CDB, "[CDB] Command: %s --- HIRQ=0x%04x, HIRQ_Mask=0x%04x --- %u\n", cdet, HIRQ, HIRQ_Mask, timestamp); } // // - CMD_EAT_CLOCKS(84); + CMD_EAT_CLOCKS(84); //90); // // @@ -2296,6 +2466,9 @@ TriggerIRQ(HIRQ_EHST); } } + // + // + CheckBufPauseResume(); } else BasicResults((MakeBaseStatus() << 8) | 0xFF, 0xFFFF, 0, 0); @@ -2593,6 +2766,7 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); { const uint32 fad = ((CTR.CD[0] & 0xFF) << 16) | CTR.CD[1]; const uint32 range = ((CTR.CD[2] & 0xFF) << 16) | CTR.CD[3]; @@ -2601,7 +2775,7 @@ CDStatusResults(); } - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2637,6 +2811,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); + Filters[fnum].Channel = CTR.CD[0] & 0xFF; Filters[fnum].SubModeMask = CTR.CD[1] >> 8; Filters[fnum].CInfoMask = CTR.CD[1] & 0xFF; @@ -2646,7 +2822,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2681,6 +2857,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); + Filters[fnum].Mode = CTR.CD[0] & 0xFF; if(CTR.CD[0] & 0x80) @@ -2688,7 +2866,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2722,6 +2900,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(41); + if(fcflags & 0x1) Filter_SetTrueConn(fnum, tconn); @@ -2730,7 +2910,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //192 + ((fcflags & 0x1) ? 167 : 0) + ((fcflags & 0x2) ? 198 : 0)); TriggerIRQ(HIRQ_ESEL); } #undef fconn @@ -2778,62 +2958,36 @@ { Partition_Clear(pnum); + //CMD_EAT_CLOCKS(34); + CDStatusResults(); // // // - CMD_EAT_CLOCKS(150); - TriggerIRQ(HIRQ_ESEL); + CMD_EAT_CLOCKS(150); //224); + TriggerIRQ(HIRQ_ESEL); + // + // + CheckBufPauseResume(); } } else { - for(unsigned pnum = 0; pnum < 0x18; pnum++) - { - if(rflags & 0x04) // Initialize all partition data - { - Partition_Clear(pnum); - } - - // TODO: Initialize all partition output connectors. - // Has to do with MPEG decoding, copy/move sector data - // commands, and maybe some other commands too? - if(rflags & 0x08) - { - - } - - if(rflags & 0x10) // Initialize all filter conditions - { - Filter_ResetCond(pnum); - } - - if(rflags & 0x20) // Initialize all filter input connectors - { - if(pnum == CDDevConn) - CDDevConn = 0xFF; - - if(Filters[pnum].FalseConn < 0x18) - Filters[pnum].FalseConn = 0xFF; - } - - if(rflags & 0x40) // Initialize all true output connectors - { - Filters[pnum].TrueConn = pnum; - } - - if(rflags & 0x80) // Initialize all false output connectors - { - Filters[pnum].FalseConn = 0xFF; - } - } CDStatusResults(); // // // + ResetSelPending = rflags; + // // TODO: Accurate timing(while not blocking other command execution and sector reading). - CMD_EAT_CLOCKS(300); - TriggerIRQ(HIRQ_ESEL); + CMD_EAT_CLOCKS((ResetSelPending & 0xAC) ? 400 : 300); + + // + // Half-assed handling of goofy games(e.g. USA release of "Independence Day") that issue a Get CD Device Connection command + // before the Reset Selector command resets it. + // + if((ResetSelPending & 0x3C) > 0x20 && CommandPending && (CData[0] >> 8) == COMMAND_GET_CDDEVCONN) + continue; } } // @@ -3136,6 +3290,9 @@ CMD_EAT_CLOCKS(485); TriggerIRQ(HIRQ_EHST); + // + // + CheckBufPauseResume(); } else { @@ -3547,6 +3704,58 @@ CommandPending = false; } + if(ResetSelPending) + { + const unsigned rflags = ResetSelPending; + ResetSelPending = false; + + for(unsigned pnum = 0; pnum < 0x18; pnum++) + { + if(rflags & 0x04) // Initialize all partition data + { + Partition_Clear(pnum); + } + + // TODO: Initialize all partition output connectors. + // Has to do with MPEG decoding, copy/move sector data + // commands, and maybe some other commands too? + if(rflags & 0x08) + { + + } + + if(rflags & 0x10) // Initialize all filter conditions + { + Filter_ResetCond(pnum); + } + + if(rflags & 0x20) // Initialize all filter input connectors + { + if(pnum == CDDevConn) + CDDevConn = 0xFF; + + if(Filters[pnum].FalseConn < 0x18) + Filters[pnum].FalseConn = 0xFF; + } + + if(rflags & 0x40) // Initialize all true output connectors + { + Filters[pnum].TrueConn = pnum; + } + + if(rflags & 0x80) // Initialize all false output connectors + { + Filters[pnum].FalseConn = 0xFF; + } + } + + TriggerIRQ(HIRQ_ESEL); + // + // + // + CheckBufPauseResume(); + } + if(SWResetPending) { SWResetPending = false; @@ -3579,6 +3788,7 @@ CommandPending = false; SWResetPending = false; SWResetHIRQDeferred = 0; + ResetSelPending = false; ResultsRead = true; memset(&DT, 0, sizeof(DT)); @@ -3810,6 +4020,7 @@ SFVAR(CommandPending), SFVAR(SWResetHIRQDeferred), SFVAR(SWResetPending), + SFVAR(ResetSelPending), SFVAR(CDDevConn), SFVAR(LastBufDest), @@ -3893,6 +4104,9 @@ SFVAR(DriveCounter), SFVAR(PeriodicIdleCounter), + SFVAR(PauseCounter), + SFVAR(PlaySectorProcessed), + SFVAR(PlayRepeatCounter), SFVAR(CurPlayRepeat), @@ -3979,6 +4193,25 @@ if(load) { + if(load < 0x00102600) + { + if(DrivePhase == DRIVEPHASE_PLAY && SecPreBuf_In) + { + //printf("CurSector--\n"); + CurSector--; + } + + if(CurPosInfo.status == STATUS_PAUSE && DrivePhase == DRIVEPHASE_PLAY) + { + //printf("Pause fixup.\n"); + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = -1; + } + } + // + // + // + // FIXME: Sanitizing! // // diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/db.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/db.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/db.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/db.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* db.cpp: -** Copyright (C) 2016-2019 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -21,12 +21,9 @@ /* Grandia could use full cache emulation to fix a hang at the end of disc 1, but - it glitches graphically during gameplay with it enabled, possibly from - VDP1 drawing completing too fast relative to the CPU... Also it makes - emulator CPU usage too high. - - Lost World(Jurassic Park) could use full cache emulation to fix some disappearing background graphics(at least mostly), but - it makes emulator CPU usage borderline too high. + FMVs make the emulator CPU usage too high; there's also currently a timing bug in + the VDP1 frame swap/draw start code that causes Grandia to glitch out during gameplay + with full cache emulation enabled. */ #include @@ -114,7 +111,7 @@ { "T-3116G", CART_EXTRAM_1M, "Samurai Spirits - Amakusa Kourin (Japan)", gettext_noop("Game requirement.") }, // Incompatible with 4MiB extended RAM cart. { "T-3104G", CART_EXTRAM_1M, "Samurai Spirits - Zankurou Musouken (Japan)", gettext_noop("Game requirement.") }, { "610636008",CART_EXTRAM_1M,"Tech Saturn 1997.6 (Japan)", gettext_noop("Required by \"Groove on Fight\" demo.") }, - { "T-16509G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan) (TODO: Test)" }, + { "T-16509G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan)" }, { "T-16510G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan)" }, // Would 4MiB be better? { "T-3108G", CART_EXTRAM_1M, "The King of Fighters '96 (Japan)", gettext_noop("Game requirement.") }, { "T-3121G", CART_EXTRAM_1M, "The King of Fighters '97 (Japan)", gettext_noop("Game requirement.") }, @@ -203,6 +200,9 @@ { "T-1219G", CART_BACKUP_MEM, "Bio Hazard (Japan)" }, { "T-1221H", CART_BACKUP_MEM, "Resident Evil (USA)" }, { "MK-81092", CART_BACKUP_MEM, "Resident Evil (Europe)" }, + { "T-7601G", CART_BACKUP_MEM, "Sangokushi IV (Japan)" }, + { "T-7644G", CART_BAKCUP_MEM, "Sangokushi IV with Power-Up Kit (Japan)" }, + { "T-7601H", CART_BACKUP_MEM, "Romance of the Three Kingdoms IV - Wall of Fire (USA)" }, { "MK-81383", CART_BACKUP_MEM, "Shining Force III (Europe/USA)" }, // ~ { "GS-9175", CART_BACKUP_MEM, "Shining Force III - Scenario 1 (Japan)" }, // ~ { "GS-9188", CART_BACKUP_MEM, "Shining Force III - Scenario 2 (Japan)" }, // ~ @@ -231,75 +231,134 @@ static const struct { const char* sgid; + const char* sgname; + const char* sgarea; unsigned mode; const char* game_name; const char* purpose; uint8 fd_id[16]; } cemdb[] = { - { "T-9705H", CPUCACHE_EMUMODE_DATA_CB, "Area 51 (USA)", gettext_noop("Fixes game hang.") }, - { "T-25408H", CPUCACHE_EMUMODE_DATA_CB, "Area 51 (Europe)", gettext_noop("Fixes game hang.") }, - { "MK-81036", CPUCACHE_EMUMODE_DATA_CB, "Clockwork Knight 2 (USA)", gettext_noop("Fixes game hang that occurred when some FMVs were played.") }, - { "T-30304G", CPUCACHE_EMUMODE_DATA_CB, "DeJig - Lassen Art Collection (Japan)", gettext_noop("Fixes graphical glitches.") }, - { "GS-9184", CPUCACHE_EMUMODE_DATA_CB, "Dragon Force II (Japan)", gettext_noop("Fixes math and game logic errors during battles.") }, - { "T-18504G", CPUCACHE_EMUMODE_DATA_CB, "Father Christmas (Japan)", gettext_noop("Fixes stuck music and voice acting.") }, - { "GS-9101", CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Japan)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, - { "MK-81041", CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Europe/USA)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, - { "T-7309G", CPUCACHE_EMUMODE_DATA_CB, "Formula Grand Prix - Team Unei Simulation (Japan)", gettext_noop("Fixes game hang.") }, - { "MK-81045", CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Europe/USA)", gettext_noop("Fixes flickering title screen.") }, - { "GS-9041", CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Japan)", gettext_noop("Fixes flickering title screen.") }, - { "GS-9173", CPUCACHE_EMUMODE_DATA_CB, "House of the Dead (Japan)", gettext_noop("Fixes game crash on lightgun calibration screen.") }, - { "GS-9055", CPUCACHE_EMUMODE_DATA_CB, "Linkle Liver Story (Japan)", gettext_noop("Fixes game crash when going to the world map.") }, - { "T-14415G", CPUCACHE_EMUMODE_DATA_CB, "Ronde (Japan)", gettext_noop("Fixes missing graphics on the title screen, main menu, and elsewhere.") }, - { "81600", CPUCACHE_EMUMODE_DATA_CB, "Sega Saturn Choice Cuts (USA)", gettext_noop("Fixes FMV playback hangs and playback failures.") }, - { "610680501",CPUCACHE_EMUMODE_DATA_CB, "Segakore Sega Bible Mogitate SegaSaturn (Japan)", gettext_noop("") }, // ? ? ? - { "T-18703G", CPUCACHE_EMUMODE_DATA_CB, "Shunsai (Japan)", gettext_noop("Fixes various graphical glitches.") }, - { "T-7001H", CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (USA)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, - { "T-7014G", CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Japan)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, + { "T-9705H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Area 51 (USA)", gettext_noop("Fixes game hang.") }, + { "T-25408H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Area 51 (Europe)", gettext_noop("Fixes game hang.") }, + { "MK-81036", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Clockwork Knight 2 (USA)", gettext_noop("Fixes game hang that occurred when some FMVs were played.") }, + { "T-30304G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "DeJig - Lassen Art Collection (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "T-19801G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Doraemon - Nobita to Fukkatsu no Hoshi (Japan)", gettext_noop("Fixes blank Game Over screen.") }, + { "GS-9184", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Dragon Force II (Japan)", gettext_noop("Fixes math and game logic errors during battles.") }, + { "T-18504G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Father Christmas (Japan)", gettext_noop("Fixes stuck music and voice acting.") }, + { "GS-9101", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Japan)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, + { "MK-81041", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Europe/USA)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, + { "T-7309G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Formula Grand Prix - Team Unei Simulation (Japan)", gettext_noop("Fixes game hang.") }, + { "MK-81045", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Europe/USA)", gettext_noop("Fixes flickering title screen.") }, + { "GS-9041", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Japan)", gettext_noop("Fixes flickering title screen.") }, + { "GS-9173", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "House of the Dead (Japan)", gettext_noop("Fixes game crash on lightgun calibration screen.") }, + { "GS-9055", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Linkle Liver Story (Japan)", gettext_noop("Fixes game crash when going to the world map.") }, + { "T-25302G1", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mahjong Doukyuusei Special (Japan)", gettext_noop("Fixes missing background layer on disc 2.") }, + { "T-25302G2", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mahjong Doukyuusei Special (Japan)", gettext_noop("Fixes missing background layer on disc 2.") }, + { "T-28901G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mujintou Monogatari R - Futari no Love Love Island (Japan)", gettext_noop("Fixes glitches when character graphics change.") }, + { "T-14415G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Ronde (Japan)", gettext_noop("Fixes missing graphics on the title screen, main menu, and elsewhere.") }, + { "81600", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Sega Saturn Choice Cuts (USA)", gettext_noop("Fixes FMV playback hangs and playback failures.") }, + { "610680501", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Segakore Sega Bible Mogitate SegaSaturn (Japan)", gettext_noop("Fixes graphical glitch on the character select screen in the \"Zero Divide\" demo.") }, + { "T-18703G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Shunsai (Japan)", gettext_noop("Fixes various graphical glitches.") }, + { "T-7001H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (USA)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, + { "T-7014G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Japan)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, // Nooo, causes glitches: { "T-7001H-50",CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Europe) - { "T-1206G", CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero (Japan)", gettext_noop("Fixes weird color/palette issues during game startup.") }, - { "T-1246G", CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero 3 (Japan)", gettext_noop("") }, // ? ? ? - { "T-1215H", CPUCACHE_EMUMODE_DATA_CB, "Super Puzzle Fighter II Turbo (USA)", gettext_noop("Fixes color/brightness and other graphical issues.") }, - { "T-5001H", CPUCACHE_EMUMODE_DATA_CB, "Theme Park (Europe)", gettext_noop("Fixes hang during FMV.") }, - { "T-1807G", CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 1 (Japan)", gettext_noop("Fixes explosion graphic glitches in \"Thunder Force III\".") }, - { "T-1808G", CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 2 (Japan)", gettext_noop("Fixes hang when pausing the game under certain conditions in \"Thunder Force AC\".") }, - { "GS-9113", CPUCACHE_EMUMODE_DATA_CB, "Virtua Fighter Kids (Java Tea Original)", gettext_noop("Fixes malfunction of computer-controlled player.") }, - { "T-2206G", CPUCACHE_EMUMODE_DATA_CB, "Virtual Mahjong (Japan)", gettext_noop("Fixes graphical glitches on the character select screen.") }, - { "T-15005G", CPUCACHE_EMUMODE_DATA_CB, "Virtual Volleyball (Japan)", gettext_noop("Fixes invisible menu items and hang.") }, - { "T-18601H", CPUCACHE_EMUMODE_DATA_CB, "WipEout (USA)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "T-18603G", CPUCACHE_EMUMODE_DATA_CB, "WipEout (Japan)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "T-11301H", CPUCACHE_EMUMODE_DATA_CB, "WipEout (Europe)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "GS-9061", CPUCACHE_EMUMODE_DATA_CB, "Hideo Nomo World Series Baseball (Japan)", gettext_noop("Fixes severe gameplay logic glitches.") }, - { "MK-81109", CPUCACHE_EMUMODE_DATA_CB, "World Series Baseball (Europe/USA)", gettext_noop("Fixes severe gameplay logic glitches.") }, - - //{ "MK-81019", CPUCACHE_EMUMODE_DATA }, // Astal (USA) + { "T-1206G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero (Japan)", gettext_noop("Fixes weird color/palette issues during game startup.") }, + { "T-1246G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero 3 (Japan)", gettext_noop("") }, // ? ? ? + { "T-1215H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Super Puzzle Fighter II Turbo (USA)", gettext_noop("Fixes color/brightness and other graphical issues.") }, + { "T-5001H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Theme Park (Europe)", gettext_noop("Fixes hang during FMV.") }, + { "T-1808G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 2 (Japan)", gettext_noop("Fixes hang when pausing the game under certain conditions in \"Thunder Force AC\".") }, + { "GS-9079","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (Japan/Europe)", gettext_noop("Fixes FMV glitches.") }, + { "GS-9113","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (Korea/Java Tea Original)", gettext_noop("Fixes FMV glitches and/or malfunction of computer-controlled player.") }, + { "MK-81049","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (USA)", gettext_noop("Fixes FMV glitches.") }, + { "T-2206G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Virtual Mahjong (Japan)", gettext_noop("Fixes graphical glitches on the character select screen.") }, + { "T-15005G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Virtual Volleyball (Japan)", gettext_noop("Fixes invisible menu items and hang.") }, + { "T-18601H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (USA)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "T-18603G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (Japan)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "T-11301H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (Europe)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "GS-9061", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Hideo Nomo World Series Baseball (Japan)", gettext_noop("Fixes severe gameplay logic glitches.") }, + { "MK-81109", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "World Series Baseball (Europe/USA)", gettext_noop("Fixes severe gameplay logic glitches.") }, + { "T-31601G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Zero Divide - The Final Conflict (Japan)", gettext_noop("Fixes graphical glitch on the character select screen.") }, + //{ "MK-81019", NULL, NULL, CPUCACHE_EMUMODE_DATA }, // Astal (USA) //{ "GS-9019", CPUCACHE_EMUMODE_DATA }, // Astal (Japan) - { "T-1507G", CPUCACHE_EMUMODE_FULL, "Albert Odyssey (Japan)", gettext_noop("") }, - { "T-12705H", CPUCACHE_EMUMODE_FULL, "Albert Odyssey (USA)", gettext_noop("Fixes battle text truncation.") }, - { "GS-9123", CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Japan)", gettext_noop("Fixes game hang.") }, - { "T-16103H", CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Europe/USA)", gettext_noop("Fixes game hang.") }, - { "T-13331G", CPUCACHE_EMUMODE_FULL, "Digital Monster Version S (Japan)", gettext_noop("Fixes game hang.") }, - //{ "T-20502G", CPUCACHE_EMUMODE_FULL, "Discworld (Japan) (still broken...)" }, - { "T-13310G", CPUCACHE_EMUMODE_FULL, "GeGeGe no Kitarou (Japan)", gettext_noop("Fixes game hang.") }, - { "T-15904G", CPUCACHE_EMUMODE_FULL, "Gex (Japan)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15904H", CPUCACHE_EMUMODE_FULL, "Gex (USA)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15904H50", CPUCACHE_EMUMODE_FULL, "Gex (Europe)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-27901G", CPUCACHE_EMUMODE_FULL, "Lunar - Silver Star Story (Japan)", gettext_noop("Fixes FMV flickering with alternative BIOS.") }, - { "T-7664G", CPUCACHE_EMUMODE_FULL, "Nobunaga no Yabou Shouseiroku (Japan)", gettext_noop("Fixes game hang.") }, - { "T-9510G", CPUCACHE_EMUMODE_FULL, "Policenauts (Japan)", gettext_noop("Fixes screen flickering on disc 2.") }, - { "T-25416H50", CPUCACHE_EMUMODE_FULL, "Rampage - World Tour (Europe)", gettext_noop("Fixes game hang.") }, - { "T-159056", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-159028H", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15902H50", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-8119G", CPUCACHE_EMUMODE_FULL, "Space Jam (Japan)", gettext_noop("Fixes game crash.") }, - { "T-8125H", CPUCACHE_EMUMODE_FULL, "Space Jam (USA)", gettext_noop("Fixes game crash.") }, - { "T-8125H-50", CPUCACHE_EMUMODE_FULL, "Space Jam (Europe)", gettext_noop("Fixes game crash.") }, - { "T-36102G", CPUCACHE_EMUMODE_FULL, "Whizz (Japan)", gettext_noop("Fixes quasi-random hangs during startup.") }, - { "T-9515H-50", CPUCACHE_EMUMODE_FULL, "Whizz (Europe)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-15906H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "3D Baseball (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-18003G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "3D Baseball - The Majors (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-1507G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Albert Odyssey (Japan)", gettext_noop("") }, + { "T-12705H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Albert Odyssey (USA)", gettext_noop("Fixes battle text truncation.") }, + //{ "MK-81501", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Baku Baku Animal (Europe)", gettext_noop("Fixes hang when trying to watch a movie in the \"Movie Viewer\".") }, + { "T-16201H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Corpse Killer (USA)", gettext_noop("Fixes glitchy rotation-zoom effect.") }, + { "T-8124H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8124H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8124H-18",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (Germany)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-36101G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Dark Seed II (Japan)", gettext_noop("Fixes game hang.") }, + { "GS-9123", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Japan)", gettext_noop("Fixes game hang.") }, + { "T-16103H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Europe/USA)", gettext_noop("Fixes game hang.") }, + // Not needed in 1.26.0, and actually causes a game hang, probably due to lack of SCI emulation messing up game timing: { "T-13331G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Digital Monster Version S (Japan)", gettext_noop("Fixes game hang.") }, + { "T-13310G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "GeGeGe no Kitarou (Japan)", gettext_noop("Fixes game hang.") }, + { "T-15904G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15904H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15904H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-24301G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Horror Tour (Japan)", gettext_noop("Fixes graphical glitches on the save and load screens.") }, + { "T-22403G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Irem Arcade Classics (Japan)", gettext_noop("Fixes hang when trying to start \"Zippy Race\".") }, + { "GS-9142", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Kidou Senkan Nadesico - Yappari Saigo wa Ai ga Katsu", gettext_noop("Fixes game hang.") }, + { "GS-9162", NULL, NULL, CPUCACHE_EMUMODE_FULL, "The Lost World - Jurassic Park (Japan)", gettext_noop("Fixes most graphical glitches in rock faces.") }, + { "MK-81065", NULL, NULL, CPUCACHE_EMUMODE_FULL, "The Lost World - Jurassic Park (Europe/USA)", gettext_noop("Fixes most graphical glitches in rock faces.") }, + { "T-27901G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Lunar - Silver Star Story (Japan)", gettext_noop("Fixes FMV flickering.") }, + { "MK-81103", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NBA Action (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "MK81103-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "NBA Action (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8105G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8109H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8109H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-7664G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Nobunaga no Yabou Shouseiroku (Japan)", gettext_noop("Fixes game hang.") }, + { "T-9510G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Policenauts (Japan)", gettext_noop("Fixes screen flickering on disc 2.") }, + { "T-25416H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Rampage - World Tour (Europe)", gettext_noop("Fixes game hang.") }, + { "T-37401G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Senken Kigyouden (Japan)", gettext_noop("Fixes dialogue text truncation.") }, + { "T-37401H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Xian Jian Qi Xia Zhuan (Taiwan)", gettext_noop("Fixes dialogue text truncation.") }, + { "T-159056", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-159028H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15902H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8119G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (Japan)", gettext_noop("Fixes game crash.") }, + { "T-8125H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (USA)", gettext_noop("Fixes game crash.") }, + { "T-8125H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (Europe)", gettext_noop("Fixes game crash.") }, + { "T-1807G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Thunder Force Gold Pack 1 (Japan)", gettext_noop("Fixes explosion graphic glitches in \"Thunder Force III\".") }, + { "T-15903G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Titan Wars (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15911H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Solar Eclipse (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15911H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Titan Wars (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "MK-81015", NULL, "E", CPUCACHE_EMUMODE_FULL, "Virtua Cop (Europe)", gettext_noop("Fixes game hang.") }, + { "MK-81043", NULL, "E", CPUCACHE_EMUMODE_FULL, "Virtua Cop 2 (Europe)", gettext_noop("Fixes game hang.") }, + { "GS-9001", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81005", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK_8100550",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "GS-9039", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81023", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK-8102350",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "SG-7103", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (SegaNet)", gettext_noop("Fixes graphical glitches.") }, + { "T-36102G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Whizz (Japan)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-9515H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Whizz (Europe)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-28004G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yu-No (Japan)", gettext_noop("Fixes FMV ending too soon.") }, + // + // DMA overhead sensitive games, may be fragile: + // +#if 0 + { "T-38001G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Another Memories (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27810G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Device Reign (Japan)", gettext_noop("Fixes game hang.") }, + { "T-30002G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Real Sound - Kaze no Regret (Japan)", gettext_noop("Fixes game hang.") }, + { "T-13324G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "SD Gundam G Century S (Japan)", gettext_noop("Fixes game hang.") }, + { "T-26413G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Super Tempo (Japan)", gettext_noop("Fixes game hang.") }, + { "T-17703G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Tennis Arena (Japan)", gettext_noop("Fixes game hang.") }, + { "T-32508G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Tilk - Aoi Umi kara Kita Shoujo (Japan)", gettext_noop("Fixes game hang.") }, + { "6106602", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku Demo (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27804G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27806G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu no Kobako Official Collection (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27807G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku 2nd Album (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27808G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku ensemble (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27809G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku ensemble 2 (Japan)", gettext_noop("Fixes game hang.") }, + { "T-21401G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Zero4 Champ DooZy-J Type-R (Japan)", gettext_noop("Fixes game hang.") }, +#endif }; -void DB_Lookup(const char* path, const char* sgid, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode) +void DB_Lookup(const char* path, const char* sgid, const char* sgname, const char* sgarea, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode) { for(auto& re : regiondb) { @@ -321,7 +380,22 @@ for(auto& c : cemdb) { - if((c.sgid && !strcmp(c.sgid, sgid)) || (!c.sgid && !memcmp(c.fd_id, fd_id, 16))) + bool match; + + if(c.sgid) + { + match = !strcmp(c.sgid, sgid); + + if(c.sgname) + match &= !strcmp(c.sgname, sgname); + + if(c.sgarea) + match &= !strcmp(c.sgarea, sgarea); + } + else + match = !memcmp(c.fd_id, fd_id, 16); + + if(match) { *cpucache_emumode = c.mode; break; @@ -340,7 +414,6 @@ { { "GS-9126", HORRIBLEHACK_NOSH2DMAPENALTY, "Fighters Megamix (Japan)", gettext_noop("Fixes hang after watching or aborting FMV playback.") }, { "MK-81073", HORRIBLEHACK_NOSH2DMAPENALTY, "Fighters Megamix (Europe/USA)", gettext_noop("Fixes hang after watching or aborting FMV playback.") }, - { "T-22403G", HORRIBLEHACK_NOSH2DMAPENALTY, "Irem Arcade Classics (Japan)", gettext_noop("Fixes hang when trying to start \"Zippy Race\".") }, // (way too finicky...) { "T-4507G", HORRIBLEHACK_VDP1VRAM5000FIX, "Grandia (Japan)", gettext_noop("Fixes hang at end of first disc.") }, @@ -352,10 +425,23 @@ { "6106856", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers Taikenban (Japan)", gettext_noop("Fixes flickering rescue text.") }, { "GS-9174", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers (Japan)", gettext_noop("Fixes flickering rescue text.") }, { "MK-81803", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers (Europe/USA)", gettext_noop("Fixes flickering rescue text.") }, + { "T-31505G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Falcom Classics II (Japan)", gettext_noop("Fixes FMV tearing in \"Ys II\".") }, { "T-8111G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Frank Thomas Big Hurt Baseball (Japan)", gettext_noop("Reduces graphical glitches.") }, { "T-8138H", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Frank Thomas Big Hurt Baseball (USA)", gettext_noop("Reduces graphical glitches.") }, // Probably need more-accurate VDP1 draw timings to fix the glitches completely. + { "T-9504G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Tokimeki Memorial - Forever with You (Japan)", gettext_noop("Fixes glitchy frames on the Konami intro arm sprite.") }, + { "T-15006G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Kaitei Daisensou (Japan)", gettext_noop("Fixes FMV tearing.") }, + { "T-10001G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "In The Hunt (Europe/USA)", gettext_noop("Fixes FMV tearing.") }, + { "GS-9001", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81005", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK_8100550", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Virtua Fighter (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "GS-9039", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81023", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK-8102350", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Virtua Fighter Remix (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "SG-7103", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (SegaNet)", gettext_noop("Fixes graphical glitches.") }, { "T-36102G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Whizz (Japan)", gettext_noop("Fixes major graphical issues during gameplay.") }, { "T-9515H-50", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Whizz (Europe)", gettext_noop("Fixes major graphical issues during gameplay.") }, + { "T-26105G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Wolf Fang SS - Kuuga 2001 (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "T-28004G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Yu-No (Japan)", gettext_noop("Reduces FMV tearing.") }, // Still random hangs...wtf is this game doing... { "T-6006G", HORRIBLEHACK_NOSH2DMALINE106 | HORRIBLEHACK_VDP1INSTANT, "Thunderhawk II (Japan)", gettext_noop("Fixes hangs just before and during gameplay.") }, @@ -380,6 +466,28 @@ return MDFN_sprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", fd_id[0], fd_id[1], fd_id[2], fd_id[3], fd_id[4], fd_id[5], fd_id[6], fd_id[7], fd_id[8], fd_id[9], fd_id[10], fd_id[11], fd_id[12], fd_id[13], fd_id[14], fd_id[15]); } +std::string DB_GetHHDescriptions(const uint32 hhv) +{ + std::string sv; + + if(hhv & HORRIBLEHACK_NOSH2DMALINE106) + sv += "Block SH-2 DMA on last line of frame. "; + + if(hhv & HORRIBLEHACK_NOSH2DMAPENALTY) + sv += "Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. "; + + if(hhv & HORRIBLEHACK_VDP1VRAM5000FIX) + sv += "Patch VDP1 VRAM to break an infinite loop. "; + + if(hhv & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN) + sv += "SH-2 reads/writes from/to VDP1 slow down command execution. "; + + if(hhv & HORRIBLEHACK_VDP1INSTANT) + sv += "Execute VDP1 commands instantly. "; + + return sv; +} + void DB_GetInternalDB(std::vector* databases) { databases->push_back({ @@ -458,7 +566,7 @@ databases->push_back({ "cachemode", gettext_noop("Cache Mode"), - gettext_noop("This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally due to the large increase in host CPU usage, along with the potential of causing games that fully utilize both SH-2 CPUs to run significantly slower than they should due to inadequate emulation of bus sharing/contention.") + gettext_noop("This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally primarily due to the large increase in host CPU usage.") }); for(auto& c : cemdb) { @@ -472,8 +580,32 @@ } GameDB_Entry e; - e.GameID = c.sgid ? c.sgid : FDIDToString(c.fd_id); - e.GameIDIsHash = !c.sgid; + if(c.sgid) + { + unsigned lfcount = 0; + + e.GameIDIsHash = false; + e.GameID = c.sgid; + + if(c.sgname) + { + for(; lfcount < 1; lfcount++) + e.GameID += '\n'; + e.GameID += c.sgname; + } + + if(c.sgarea) + { + for(; lfcount < 2; lfcount++) + e.GameID += '\n'; + e.GameID += c.sgarea; + } + } + else + { + e.GameIDIsHash = true; + e.GameID = FDIDToString(c.fd_id); + } e.Name = c.game_name; e.Setting = sv; e.Purpose = c.purpose ? _(c.purpose) : ""; @@ -486,30 +618,11 @@ databases->push_back({ "horriblehacks", gettext_noop("Horrible Hacks"), - gettext_noop("This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 CPU reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.") + gettext_noop("This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.") }); for(auto& hh : hhdb) { - std::string sv; - unsigned hhv = hh.horrible_hacks; - - if(hhv & HORRIBLEHACK_NOSH2DMALINE106) - sv += "Block SH-2 DMA on last line of frame. "; - - if(hhv & HORRIBLEHACK_NOSH2DMAPENALTY) - sv += "Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. "; - - if(hhv & HORRIBLEHACK_VDP1VRAM5000FIX) - sv += "Patch VDP1 VRAM to break an infinite loop. "; - - if(hhv & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN) - sv += "SH-2 CPU reads/writes from/to VDP1 slow down command execution. "; - - if(hhv & HORRIBLEHACK_VDP1INSTANT) - sv += "Execute VDP1 commands instantly. "; - // - // - // + std::string sv = DB_GetHHDescriptions(hh.horrible_hacks); GameDB_Entry e; e.GameID = hh.sgid ? hh.sgid : FDIDToString(hh.fd_id); diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/db.h mednafen-1.26.1+dfsg/include/mednafen/ss/db.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/db.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/db.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* db.h: -** Copyright (C) 2016-2019 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -27,14 +27,16 @@ enum { - CPUCACHE_EMUMODE_DATA_CB, - CPUCACHE_EMUMODE_DATA, - CPUCACHE_EMUMODE_FULL + CPUCACHE_EMUMODE_DATA_CB = 0, + CPUCACHE_EMUMODE_DATA = 1, + CPUCACHE_EMUMODE_FULL = 2, + CPUCACHE_EMUMODE__COUNT = 3, }; -void DB_Lookup(const char* path, const char* sgid, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode); +void DB_Lookup(const char* path, const char* sgid, const char* sgname, const char* sgarea, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode); uint32 DB_LookupHH(const char* sgid, const uint8* fd_id); void DB_GetInternalDB(std::vector* databases) MDFN_COLD; +std::string DB_GetHHDescriptions(const uint32 hhv) MDFN_COLD; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/debug.inc mednafen-1.26.1+dfsg/include/mednafen/ss/debug.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/debug.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/debug.inc 2020-11-10 06:04:17.000000000 +0000 @@ -52,14 +52,17 @@ uint32 CurPC[2]; unsigned ActiveCPU; + + sscpu_timestamp_t eff_ts; + bool inss; } DBG; -static MDFN_NOWARN_UNUSED void DBG_Break(void) +static MDFN_COLD MDFN_NOWARN_UNUSED void DBG_Break(void) { DBG.FoundBPoint = true; } -static void DBG_CheckReadBP(unsigned len, uint32 addr) +static MDFN_COLD void DBG_CheckReadBP(unsigned len, uint32 addr) { for(auto const& bp : DBG.BreakPointsRead) { @@ -74,7 +77,7 @@ } } -static void DBG_CheckWriteBP(unsigned len, uint32 addr) +static MDFN_COLD void DBG_CheckWriteBP(unsigned len, uint32 addr) { for(auto const& bp : DBG.BreakPointsWrite) { @@ -92,6 +95,7 @@ enum { ASPACE_PHYSICAL = 0, + ASPACE_BACKUP, ASPACE_WORKRAML, ASPACE_WORKRAMH, ASPACE_SCSPRAM, @@ -118,6 +122,11 @@ //*Buffer = SH7095_BusPeek(Address); break; + case ASPACE_BACKUP: + Address &= 0x7FFF; + *Buffer = BackupRAM[Address]; + break; + case ASPACE_WORKRAML: Address &= 0xFFFFF; *Buffer = ne16_rbo_be(WorkRAML, Address); @@ -175,6 +184,12 @@ //*Buffer = SH7095_BusPoke(Address, *Buffer); break; + case ASPACE_BACKUP: + Address &= 0x7FFF; + BackupRAM[Address] = *Buffer; + BackupRAM_Dirty = true; + break; + case ASPACE_WORKRAML: Address &= 0xFFFFF; ne16_wbo_be(WorkRAML, Address, *Buffer); @@ -216,7 +231,7 @@ } -static uint32 DBG_MemPeek(uint32 A, unsigned int bsize, bool hl, bool logical) +static MDFN_COLD uint32 DBG_MemPeek(uint32 A, unsigned int bsize, bool hl, bool logical) { /* uint32 ret = 0; @@ -255,13 +270,13 @@ DBG.BreakPointsPC.push_back(tmp); } -static void DBG_SetCPUCallback(void (*callb)(uint32 PC, bool bpoint), bool continuous) +static MDFN_COLD void DBG_SetCPUCallback(void (*callb)(uint32 PC, bool bpoint), bool continuous) { DBG.CPUHook = callb; DBG.CPUHookContinuous = continuous; } -static void DBG_EnableBranchTrace(bool enable) +static MDFN_COLD void DBG_EnableBranchTrace(bool enable) { if((DBG.BTEnabled ^ enable) & DBG.BTEnabled) { @@ -273,7 +288,7 @@ DBG.BTEnabled = enable; } -static void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) +static MDFN_COLD void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) { const uint32 from = DBG.CurPC[which]; auto *prevbt = &DBG.BTEntries[which][(DBG.BTIndex[which] + DBGS::NUMBT - 1) % DBGS::NUMBT]; @@ -296,7 +311,7 @@ } } -static std::vector DBG_GetBranchTrace(void) +static MDFN_COLD std::vector DBG_GetBranchTrace(void) { std::vector ret; BranchTraceResult tmp; @@ -369,8 +384,18 @@ return(ret); } +static INLINE void DBG_SetEffTS(const sscpu_timestamp_t eff_ts) +{ + DBG.eff_ts = eff_ts; +} + +static INLINE bool DBG_InSlaveStep(void) +{ + return DBG.inss; +} + template -static void DBG_CPUHandler(const sscpu_timestamp_t timestamp) +static MDFN_COLD void DBG_CPUHandler(void) { const uint32 PC = CPU[which].GetRegister(SH7095::GSREG_PC_ID, NULL, 0); @@ -419,8 +444,10 @@ if(DBG.CPUHookContinuous && DBG.CPUHook) { - ForceEventUpdates(timestamp); + DBG.inss = which; + ForceEventUpdates(DBG.eff_ts); DBG.CPUHook(PC, DBG.FoundBPoint); + DBG.inss = false; } DBG.FoundBPoint = false; @@ -431,18 +458,18 @@ } -static bool DBG_NeedCPUHooks(void) +static MDFN_COLD bool DBG_NeedCPUHooks(void) { return DBG.BTEnabled || DBG.CPUHook || DBG.BreakPointsPC.size() || DBG.BreakPointsRead.size() || DBG.BreakPointsWrite.size(); } // TODO: Standard peek functions -static INLINE uint16 DBG_DisPeek16(uint32 A) +static MDFN_COLD uint16 DBG_DisPeek16(uint32 A) { return *(uint16*)(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + A); } -static INLINE uint32 DBG_DisPeek32(uint32 A) +static MDFN_COLD uint32 DBG_DisPeek32(uint32 A) { uint32 ret; @@ -453,7 +480,7 @@ return ret; } -static void DBG_Disassemble(uint32 &A, uint32 SpecialA, char *TextBuf) +static MDFN_COLD void DBG_Disassemble(uint32 &A, uint32 SpecialA, char *TextBuf) { if(A & 0x1) { @@ -607,10 +634,15 @@ { SH7095::GSREG_TOCR, "TOCR", "TOCR", 1 }, { SH7095::GSREG_RWT, "RWT", "R/W Temp", 1 }, + { 0, "-----------", "", 0xFFFF }, + + { SH7095::GSREG_CCR, "CCR", "Cache Control Register", 1 }, + { SH7095::GSREG_SBYCR, "SBYCR", "Standby Control Register", 1 }, + { 0, "", "", 0 }, }; -static uint32 DBG_GetRegister_CPU(const unsigned int id, char* special, const uint32 special_len) +static MDFN_COLD uint32 DBG_GetRegister_CPU(const unsigned int id, char* special, const uint32 special_len) { return CPU[DBG.ActiveCPU].GetRegister(id, special, special_len); } @@ -720,7 +752,7 @@ { 0, "", "", 0 }, }; -static uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) +static MDFN_COLD uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) { switch(id >> 16) { @@ -734,7 +766,7 @@ return 0; } -static void SetRegister(const unsigned id, const uint32 value) +static MDFN_COLD void SetRegister(const unsigned id, const uint32 value) { switch(id >> 16) { @@ -835,8 +867,7 @@ // // // -static void DBG_Init(void) MDFN_COLD; -static void DBG_Init(void) +static MDFN_COLD void DBG_Init(void) { DBG.ActiveCPU = 0; DBG.BTEnabled = false; @@ -853,6 +884,9 @@ DBG.CPUHookContinuous = false; DBG.FoundBPoint = false; + DBG.eff_ts = 0; + DBG.inss = false; + MDFNDBG_AddRegGroup(&DBG_RegGroup_CPU); MDFNDBG_AddRegGroup(&DBG_RegGroup_CPUE); MDFNDBG_AddRegGroup(&DBG_RegGroup_SCU_CDB_VDP1); @@ -867,14 +901,15 @@ ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "dspprog", "DSP Program RAM", 10); + ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "backup", "Backup RAM", 15); + ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1vram", "VDP1 VRAM", 19); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1fb0", "VDP1 FB0 RAM(raw, no 8bpp/rot addr bit swizzling)", 18); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1fb1", "VDP1 FB1 RAM(raw, no 8bpp/rot addr bit swizzling)", 18); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp2vram", "VDP2 VRAM", 19); } -static void DBG_Kill(void) MDFN_COLD; -static void DBG_Kill(void) +static MDFN_COLD void DBG_Kill(void) { DBG.BreakPointsPC.clear(); DBG.BreakPointsRead.clear(); @@ -883,6 +918,7 @@ static DebuggerInfoStruct DBGInfo { + false, "SJIS", 2, @@ -916,8 +952,9 @@ NULL, }; #else -template -static INLINE void DBG_CPUHandler(const sscpu_timestamp_t timestamp) { } +static INLINE void DBG_SetEffTS(const sscpu_timestamp_t eff_ts) { } +static INLINE bool DBG_InSlaveStep(void) { return false; } +template static INLINE void DBG_CPUHandler(void) { } static INLINE void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) { } static INLINE bool DBG_NeedCPUHooks(void) { return false; } static INLINE void DBG_Init(void) { } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/Makefile.in mednafen-1.26.1+dfsg/include/mednafen/ss/Makefile.in --- mednafen-1.24.3+dfsg/include/mednafen/ss/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ @WANT_SS_EMU_TRUE@am__append_1 = libss.a @WANT_SSFPLAY_EMU_TRUE@am__append_2 = libssfplay.a subdir = src/ss -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -104,6 +112,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -148,7 +157,23 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/cart.Po ./$(DEPDIR)/cdb.Po \ + ./$(DEPDIR)/db.Po ./$(DEPDIR)/scu_dsp_gen.Po \ + ./$(DEPDIR)/scu_dsp_jmp.Po ./$(DEPDIR)/scu_dsp_misc.Po \ + ./$(DEPDIR)/scu_dsp_mvi.Po ./$(DEPDIR)/smpc.Po \ + ./$(DEPDIR)/sound.Po ./$(DEPDIR)/ss.Po ./$(DEPDIR)/ssf.Po \ + ./$(DEPDIR)/vdp1.Po ./$(DEPDIR)/vdp1_line.Po \ + ./$(DEPDIR)/vdp1_poly.Po ./$(DEPDIR)/vdp1_sprite.Po \ + ./$(DEPDIR)/vdp2.Po ./$(DEPDIR)/vdp2_render.Po \ + cart/$(DEPDIR)/ar4mp.Po cart/$(DEPDIR)/backup.Po \ + cart/$(DEPDIR)/cs1ram.Po cart/$(DEPDIR)/debug.Po \ + cart/$(DEPDIR)/extram.Po cart/$(DEPDIR)/rom.Po \ + input/$(DEPDIR)/3dpad.Po input/$(DEPDIR)/gamepad.Po \ + input/$(DEPDIR)/gun.Po input/$(DEPDIR)/jpkeyboard.Po \ + input/$(DEPDIR)/keyboard.Po input/$(DEPDIR)/mission.Po \ + input/$(DEPDIR)/mouse.Po input/$(DEPDIR)/multitap.Po \ + input/$(DEPDIR)/wheel.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -189,6 +214,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -363,6 +390,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -400,14 +428,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ss/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ss/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -482,38 +509,44 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_gen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_jmp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_misc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_mvi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_line.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_poly.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_sprite.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2_render.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/ar4mp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/backup.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/cs1ram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/extram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/3dpad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gun.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/jpkeyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/keyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mission.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/wheel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_gen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_jmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_misc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_mvi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_line.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_poly.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_sprite.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2_render.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/ar4mp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/backup.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/cs1ram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/extram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/3dpad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gun.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/jpkeyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/keyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mission.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/wheel.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -583,7 +616,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -656,7 +692,38 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) cart/$(DEPDIR) input/$(DEPDIR) + -rm -f ./$(DEPDIR)/cart.Po + -rm -f ./$(DEPDIR)/cdb.Po + -rm -f ./$(DEPDIR)/db.Po + -rm -f ./$(DEPDIR)/scu_dsp_gen.Po + -rm -f ./$(DEPDIR)/scu_dsp_jmp.Po + -rm -f ./$(DEPDIR)/scu_dsp_misc.Po + -rm -f ./$(DEPDIR)/scu_dsp_mvi.Po + -rm -f ./$(DEPDIR)/smpc.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/ss.Po + -rm -f ./$(DEPDIR)/ssf.Po + -rm -f ./$(DEPDIR)/vdp1.Po + -rm -f ./$(DEPDIR)/vdp1_line.Po + -rm -f ./$(DEPDIR)/vdp1_poly.Po + -rm -f ./$(DEPDIR)/vdp1_sprite.Po + -rm -f ./$(DEPDIR)/vdp2.Po + -rm -f ./$(DEPDIR)/vdp2_render.Po + -rm -f cart/$(DEPDIR)/ar4mp.Po + -rm -f cart/$(DEPDIR)/backup.Po + -rm -f cart/$(DEPDIR)/cs1ram.Po + -rm -f cart/$(DEPDIR)/debug.Po + -rm -f cart/$(DEPDIR)/extram.Po + -rm -f cart/$(DEPDIR)/rom.Po + -rm -f input/$(DEPDIR)/3dpad.Po + -rm -f input/$(DEPDIR)/gamepad.Po + -rm -f input/$(DEPDIR)/gun.Po + -rm -f input/$(DEPDIR)/jpkeyboard.Po + -rm -f input/$(DEPDIR)/keyboard.Po + -rm -f input/$(DEPDIR)/mission.Po + -rm -f input/$(DEPDIR)/mouse.Po + -rm -f input/$(DEPDIR)/multitap.Po + -rm -f input/$(DEPDIR)/wheel.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -702,7 +769,38 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) cart/$(DEPDIR) input/$(DEPDIR) + -rm -f ./$(DEPDIR)/cart.Po + -rm -f ./$(DEPDIR)/cdb.Po + -rm -f ./$(DEPDIR)/db.Po + -rm -f ./$(DEPDIR)/scu_dsp_gen.Po + -rm -f ./$(DEPDIR)/scu_dsp_jmp.Po + -rm -f ./$(DEPDIR)/scu_dsp_misc.Po + -rm -f ./$(DEPDIR)/scu_dsp_mvi.Po + -rm -f ./$(DEPDIR)/smpc.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/ss.Po + -rm -f ./$(DEPDIR)/ssf.Po + -rm -f ./$(DEPDIR)/vdp1.Po + -rm -f ./$(DEPDIR)/vdp1_line.Po + -rm -f ./$(DEPDIR)/vdp1_poly.Po + -rm -f ./$(DEPDIR)/vdp1_sprite.Po + -rm -f ./$(DEPDIR)/vdp2.Po + -rm -f ./$(DEPDIR)/vdp2_render.Po + -rm -f cart/$(DEPDIR)/ar4mp.Po + -rm -f cart/$(DEPDIR)/backup.Po + -rm -f cart/$(DEPDIR)/cs1ram.Po + -rm -f cart/$(DEPDIR)/debug.Po + -rm -f cart/$(DEPDIR)/extram.Po + -rm -f cart/$(DEPDIR)/rom.Po + -rm -f input/$(DEPDIR)/3dpad.Po + -rm -f input/$(DEPDIR)/gamepad.Po + -rm -f input/$(DEPDIR)/gun.Po + -rm -f input/$(DEPDIR)/jpkeyboard.Po + -rm -f input/$(DEPDIR)/keyboard.Po + -rm -f input/$(DEPDIR)/mission.Po + -rm -f input/$(DEPDIR)/mouse.Po + -rm -f input/$(DEPDIR)/multitap.Po + -rm -f input/$(DEPDIR)/wheel.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -722,18 +820,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/notes/build_sh7095s_ctable.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/notes/build_sh7095s_ctable.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/notes/build_sh7095s_ctable.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/notes/build_sh7095s_ctable.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,15 @@ +#include + + +int main(int argc, char* argv[]) +{ +// printf("static_assert(__COUNTER__ <= 11025, \"Unexpected __COUNTER__\");\n"); + const unsigned base = 2*5000; //10000; + const unsigned max_entries = 512; //512; + for(int i = max_entries; i > 0; i--) + { + printf("#if __COUNTER__ >= %u\n", base + max_entries + 2); + printf(" &&Resume_%u,\n", base + i); + printf("#endif\n"); + } +} diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/notes/PROBLEMATIC-GAMES mednafen-1.26.1+dfsg/include/mednafen/ss/notes/PROBLEMATIC-GAMES --- mednafen-1.24.3+dfsg/include/mednafen/ss/notes/PROBLEMATIC-GAMES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/notes/PROBLEMATIC-GAMES 2020-11-10 06:04:17.000000000 +0000 @@ -4,21 +4,30 @@ ------------------------------------------------------------------------------- Area 51 (USA/Europe) Clockwork Knight 2 (USA) -DeJig - Lassen Art Collection (Japan) +DeJig: Lassen Art Collection (Japan) +Doraemon: Nobita to Fukkatsu no Hoshi (Japan) Dragon Force II (Japan) - Battles(broken math) Father Christmas (Japan) Fighting Vipers (Japan/Europe/USA) +Formula Grand Prix: Team Unei Simulation (Japan) Golden Axe The Duel (Japan/Europe/USA) House of the Dead (Japan) Linkle Liver Story (Japan) +Mahjong Doukyuusei Special (Japan) +Mr. Bones - Intro FMV +Ronde (Japan) Sega Saturn Choice Cuts (USA) - Broken FMV playback(except intro FMV). Segakore Sega Bible Mogitate SegaSaturn - Zero Divide demo, especially. +Shunsai (Japan) Spot Goes to Hollywood (USA/Japan) Street Fighter Zero (Japan) Street Fighter Zero 3 (Japan) Super Puzzle Fighter II Turbo (USA) Theme Park (Europe) +Thunder Force Gold Pack 1 (Japan) +Thunder Force Gold Pack 2 (Japan) Virtua Fighter Kids (Java Tea Original) +Virtual Mahjong (Japan) Virtual Volleyball (Japan) WipEout (Japan/Europe/USA) World Series Baseball (USA/Japan) @@ -39,6 +48,7 @@ ------------------------------------------------------------------------------- Rely on SH-2 DMA bus hogging ------------------------------------------------------------------------------- +Another Memories Device Reign Real Sound Resident Evil @@ -70,11 +80,18 @@ ------------------------------------------------------------------------------- -Rely on SH-2 CPU writes/reads to/from VDP1 RAM slowing VDP1 command execution +Rely on SH-2 CPU and SH-2 DMA writes/reads to/from VDP1 RAM slowing +VDP1 command execution ------------------------------------------------------------------------------- +Albert Odyssey - Battle text Arcade's Greatest Hits - Credits Burning Rangers - Victim transfer text +Falcom Classics II - "Ys II" FMV +Frank Thomas Big Hurt Baseball +Tokimeki Memorial: Forever with You - Konami intro arm sprite Whizz - Gameplay +Wolf Fang SS: Kuuga 2001 - Player robot(especially when jumping) +Yu-No - FMV ------------------------------------------------------------------------------- @@ -121,6 +138,12 @@ ------------------------------------------------------------------------------- +Rely on quirks relating to command execution during CDB Reset Selector +------------------------------------------------------------------------------- +Independence Day (USA) - Startup hang; 'Get CD Device Connection' command + + +------------------------------------------------------------------------------- Rely on CDB seeks taking long enough ------------------------------------------------------------------------------- Batman Forever - Intro graphics; may also be a general timing issue. diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/notes/SCSP-FM-GAMES mednafen-1.26.1+dfsg/include/mednafen/ss/notes/SCSP-FM-GAMES --- mednafen-1.24.3+dfsg/include/mednafen/ss/notes/SCSP-FM-GAMES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/notes/SCSP-FM-GAMES 2020-11-10 06:04:17.000000000 +0000 @@ -12,6 +12,7 @@ S_GM_FM2.B S_GM_FM3.B S_GM_FM4.B +Hang On GP - BGM 00 through 03 in the sound test. Kaitou Saint Tail Langrisser III Magic Knight Rayearth - "Tokyo Tower", "Flash's Theme", "Mysterious Cephiro Lecture", "Great Whirlpool", "Rainbow Junction Shop", "Sea of Trees" diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/scsp.inc mednafen-1.26.1+dfsg/include/mednafen/ss/scsp.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/scsp.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/scsp.inc 2020-11-10 06:04:17.000000000 +0000 @@ -547,7 +547,7 @@ if(!shift) t->Reload = DBV & 0xFF; - //printf("Timer(%zu-byte) %u: %04x\n", sizeof(T), ((A >> 1) & 0x1F) - 0x0C, DBV); + //printf("Timer(%zu-byte) %u: %04x --- %02x\n", sizeof(T), ((A >> 1) & 0x1F) - 0x0C, DBV, t->Counter); } else DBV = 0; @@ -1313,7 +1313,6 @@ // for(unsigned slot = 0; slot < 32; slot++) { - uint32 mdata = 0; auto* s = &Slots[slot]; unsigned key_eg_scale; @@ -1343,16 +1342,8 @@ else s->EnvPhase = ENV_PHASE_RELEASE; } - // // - uint16 sample = 0; - - if(s->SourceControl == 1) - sample = LFSR << 8; - - sample ^= s->SBXOR; // For zero and noise case only; waveform playback needs it to occur before linear interpolation. - if(!s->InLoop) { if((uint16)(s->CurrentAddr + 1) > s->LoopStart) @@ -1393,29 +1384,27 @@ } } } + } + + for(unsigned slot = 0; slot < 32; slot++) + { + auto* s = &Slots[slot]; + uint32 mdata = 0; + uint16 sample = 0; + + if(s->SourceControl == 1) + sample = LFSR << 8; + + sample ^= s->SBXOR; // For zero and noise case only; waveform playback needs it to occur before linear interpolation. // // if(s->WFAllowAccess) { - uint32 modalizer; - uint32 modalizer_int; + uint32 modalizer_int[2]; uint32 tmppw = s->PhaseWhacker; uint16 tmpa = s->CurrentAddr; - int16 s0, s1; - - // // - modalizer = (int16)SoundStack[(GlobalCounter + s->ModInputX) & 0x3F]; - modalizer += (int16)SoundStack[(GlobalCounter + s->ModInputY) & 0x3F]; - modalizer = (modalizer << 6) >> (0x10 - s->ModLevel); - - if(s->ModLevel <= 0x04) - modalizer = 0; - - modalizer_int = sign_x_to_s32(11, modalizer >> 6); // - // - if(s->LoopSub) { tmppw = ~tmppw; @@ -1423,19 +1412,48 @@ } mdata |= ((tmpa >> 12) << 7); + // + // + uint32 sia; + int16 s0, s1; + + { + // + // TODO/FIXME: Proper handling of the slot 31->0 buggy FM interpolation case with respect to reverse looping(ns->LoopSub) + // requires sub-sample timing emulation. + // + auto* ns = &Slots[(slot + 1) & 0x1F]; + uint32 modalizer; + uint32 ns_sia; + + modalizer = (int16)SoundStack[(GlobalCounter + s->ModInputX) & 0x3F]; + modalizer += (int16)SoundStack[(GlobalCounter + s->ModInputY) & 0x3F]; + modalizer = ((modalizer << 6) >> (0x10 - s->ModLevel)) & ~1; + + if(s->ModLevel <= 0x04) + modalizer = 0; + + sia = modalizer + ((tmppw >> (14 - 6)) & 0x3F); + ns_sia = modalizer + (((ns->PhaseWhacker >> (14 - 6)) ^ (ns->LoopSub ? 0x3F : 0x00)) & 0x3F); + + modalizer_int[0] = sign_x_to_s32(11, sia >> 6); + modalizer_int[1] = sign_x_to_s32(11, ns_sia >> 6); + // + sia &= 0x3F; + } if(s->WF8Bit) { - const uint32 addr0 = (s->StartAddr + ((modalizer_int + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0xFFFFF; - const uint32 addr1 = (s->StartAddr + ((modalizer_int + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0xFFFFF; + const uint32 addr0 = (s->StartAddr + ((modalizer_int[0] + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0xFFFFF; + const uint32 addr1 = (s->StartAddr + ((modalizer_int[1] + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0xFFFFF; s0 = ne16_rbo_be(RAM, addr0) << 8; s1 = ne16_rbo_be(RAM, addr1) << 8; } else { - s0 = RAM[((s->StartAddr >> 1) + ((modalizer_int + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0x7FFFF]; - s1 = RAM[((s->StartAddr >> 1) + ((modalizer_int + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0x7FFFF]; + s0 = RAM[((s->StartAddr >> 1) + ((modalizer_int[0] + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0x7FFFF]; + s1 = RAM[((s->StartAddr >> 1) + ((modalizer_int[1] + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0x7FFFF]; } s0 ^= s->SBXOR; @@ -1443,7 +1461,6 @@ if(s->SourceControl == 0) { - const unsigned sia = std::min(0x40, ((tmppw >> (14 - 6)) & 0x3F) + (modalizer & 0x3E)); sample = ((s0 * (0x40 - sia)) + (s1 * sia)) >> 6; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/scu_dsp_common.inc mednafen-1.26.1+dfsg/include/mednafen/ss/scu_dsp_common.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/scu_dsp_common.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/scu_dsp_common.inc 2020-11-10 06:04:17.000000000 +0000 @@ -30,7 +30,7 @@ // See loop in "SCU_UpdateDSP()" in scu.inc, and END/ENDI handling in scu_dsp_misc.cpp enum { DSP_EndCCSubVal = 1000000 }; -void DSP_Init(void); +void DSP_Init(void) MDFN_COLD; void DSP_FinishPRAMDMA(void); union DSPR48 diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/scu.inc mednafen-1.26.1+dfsg/include/mednafen/ss/scu.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/scu.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/scu.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* scu.inc - SCU Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -30,6 +30,15 @@ // TODO: Test and improve emulation of DSP single-stepping. // // TODO: Running DMA forces DSP into full execution mode when single-stepping; test the exact semantics, and implement it. +// +// TODO: Better emulation of SH-2 CPU to SCU write timings: +// A-bus write buffer +// +// Higher B-bus base overhead, unless the last read or write to the specific memory region(VDP1 VRAM, VDP1 FB, etc.) being accessed +// was in the same page; pages seem to be 512 bytes for VDP1 VRAM, maybe 32 bytes for FB RAM but probably more complex. +// +// TODO: SH-2 CPU read overhead when reading from VDP1 VRAM and VDP1 FB RAM should be significantly higher. +// /* Notes(assuming NTSC, HRES=0, VRES=0, LSMD=0): @@ -173,6 +182,8 @@ static void CheckDMASFByInt(unsigned int_which); static INLINE void CheckForceDMAFinish(void); +static sscpu_timestamp_t BBus_SH2_WriteFinishTS; + static uint32 IAsserted; static uint32 IPending; static uint32 IMask; @@ -206,6 +217,9 @@ unsigned we = MDFN_tzcount16(ipmd >> 16); unsigned olev, ovec, bpos; + //if((ipmd & 0x3) == 0x3 || ((ipmd & 0x81) == 0x81)) + // printf("CONFLICT: 0x%08x 0x%08x\n", IPending, ipmd); + olev = internal_tab[wi]; ovec = 0x40 + wi; bpos = wi; @@ -398,6 +412,8 @@ if(DSP.T0_Until > 0x10000000) DSP.T0_Until = 0x10000000; + //DSP.LastTS = std::max(-1000000, DSP.LastTS + delta); + DSP.LastTS += delta; if(DSP.LastTS < 0) { @@ -405,6 +421,10 @@ //printf("%d\n", DSP.LastTS); DSP.LastTS = 0; } + // + // + // + BBus_SH2_WriteFinishTS = std::max(-1000000, BBus_SH2_WriteFinishTS + delta); } // @@ -770,19 +790,32 @@ } } - template static INLINE void BBusRW_DB(uint32 A, uint16* DB, int32* time_thing, int32* dma_time_thing = NULL, int32* sh2_dma_time_thing = NULL) // add to time_thing, subtract from dma_time_thing { static_assert(IsWrite || sizeof(T) == 2, "Wrong type."); + if(time_thing != NULL) + { + if(!SH32) + { + *time_thing = std::max(*time_thing, BBus_SH2_WriteFinishTS); + + if(IsWrite) + { + *time_thing += 2; + BBus_SH2_WriteFinishTS = *time_thing; + } + } + } + // // VDP1 // if(A >= 0x05C00000 && A <= 0x05D7FFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= IsWrite ? (SH32 ? 0 : 6) : 10; + *sh2_dma_time_thing += IsWrite ? (SH32 ? 0 : 6) : 10; if(dma_time_thing != NULL) { @@ -804,12 +837,19 @@ } } + //if(IsWrite && (A & 0x100000) && SH32) + //{ + // assert(0); + //} + if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 0 : 11; + BBus_SH2_WriteFinishTS += SH32 ? ((A & 0x100000) ? 0 : 1) : 9; else + { *time_thing += 14; + } CheckEventsByMemTS(); } @@ -818,6 +858,8 @@ { if(time_thing != NULL) VDP1::Write_CheckDrawSlowdown(A, *time_thing); + else if(sh2_dma_time_thing != NULL) + VDP1::Write_CheckDrawSlowdown(A, *sh2_dma_time_thing); if(sizeof(T) == 1) VDP1::Write8_DB(A, *DB); @@ -828,6 +870,8 @@ { if(time_thing != NULL) VDP1::Read_CheckDrawSlowdown(A, *time_thing); + else if(sh2_dma_time_thing != NULL) + VDP1::Read_CheckDrawSlowdown(A, *sh2_dma_time_thing); *DB = VDP1::Read16_DB(A); } @@ -841,7 +885,7 @@ if(A >= 0x05E00000 && A <= 0x05FBFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= IsWrite ? (SH32 ? 0 : 5) : 10; + *sh2_dma_time_thing += IsWrite ? (SH32 ? 0 : 5) : 10; if(dma_time_thing != NULL) { @@ -853,7 +897,7 @@ if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 0 : 5; + BBus_SH2_WriteFinishTS += SH32 ? 1 : 3; else *time_thing += 20; @@ -891,7 +935,7 @@ if(A >= 0x05A00000 && A <= 0x05BFFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 13; + *sh2_dma_time_thing += 13; if(dma_time_thing != NULL) { @@ -901,7 +945,7 @@ if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 13 : 19; + BBus_SH2_WriteFinishTS += SH32 ? 13 : 17; else *time_thing += 24; } @@ -922,7 +966,7 @@ // // if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) *dma_time_thing -= 1; @@ -967,7 +1011,7 @@ // TODO: SCU seems to have its own internal write buffering...or something else complex going on, that complicates // getting the SH-2 DMA timing right. if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) { @@ -997,7 +1041,7 @@ if(MDFN_UNLIKELY(A >= 0x05000000 && A <= 0x057FFFFF)) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 16; + *sh2_dma_time_thing += 16; if(dma_time_thing != NULL) { @@ -1019,7 +1063,7 @@ if(A >= 0x05800000 && A <= 0x058FFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 8; + *sh2_dma_time_thing += 8; if(dma_time_thing != NULL) { @@ -1065,7 +1109,7 @@ } if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) *dma_time_thing -= 1; @@ -1759,7 +1803,7 @@ DSP.PRAMDMABuf[i] = 0; } -void DSP_Init(void) +MDFN_COLD void DSP_Init(void) { DSP.LastTS = 0; @@ -1960,7 +2004,7 @@ // // -static void SCU_Init(void) +static MDFN_COLD void SCU_Init(void) { SCU_DMA_TimeCounter = 0; SCU_DMA_RunUntil = 0; @@ -1968,6 +2012,8 @@ HB_FromVDP2 = false; VB_FromVDP2 = false; + BBus_SH2_WriteFinishTS = 0; + DSP_Init(); } @@ -2115,6 +2161,8 @@ SFVAR(SCU_DMA_SDRAM_Slowdown_Counter), SFVAR(SCU_DMA_VDP1WriteIgnoreKludge), + SFVAR(BBus_SH2_WriteFinishTS), + SFVAR(IAsserted), SFVAR(IPending), SFVAR(IMask), @@ -2189,7 +2237,7 @@ { if(d.TableReadFunc == rftab[trb]) { - DMALevel_ReadFunc[level] = trb; + DMALevel_TableReadFunc[level] = trb; break; } } @@ -2282,7 +2330,7 @@ // // // -uint32 SCU_DSP_PeekProgRAM(uint8 A) +MDFN_COLD uint32 SCU_DSP_PeekProgRAM(uint8 A) { return DSP.ProgRAM[A] >> 32; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095.h mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* sh7095.h: -** Copyright (C) 2015-2017 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -29,13 +29,16 @@ SH7095(const char* const name_arg, const unsigned dma_event_id_arg, uint8 (*exivecfn_arg)(void)) MDFN_COLD; ~SH7095() MDFN_COLD; - void Init(const bool CacheBypassHack) MDFN_COLD; + void Init(const bool EmulateICache, const bool CacheBypassHack) MDFN_COLD; + void SetDebugMode(const bool DebugMode) MDFN_COLD; void StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname) MDFN_COLD; - void FixupICacheModeState(void) MDFN_COLD; + void StateAction_SlaveResume(StateMem* sm, const unsigned load, const bool data_only, const char* sname) MDFN_COLD; + void PostStateLoad(const unsigned state_version, const bool recorded_needicache, const bool needicache) MDFN_COLD; void ForceInternalEventUpdates(void); - void AdjustTS(int32 delta, bool force_set = false); + void AdjustTS(int32 delta); + void SetActive(bool active); void TruePowerOn(void) MDFN_COLD; void Reset(bool power_on_reset, bool from_internal_wdt = false) MDFN_COLD; @@ -61,9 +64,14 @@ ExtHaltDMA = (ExtHaltDMA & ~2) | (state << 1); } + // When entering Step(), EmulateICache and DebugMode must match what was passed to Init() and SetDebugMode() template void Step(void); + // Slave only + NO_CLONE NO_INLINE void RunSlaveUntil(sscpu_timestamp_t bound_timestamp) MDFN_HOT; + NO_CLONE NO_INLINE void RunSlaveUntil_Debug(sscpu_timestamp_t bound_timestamp) MDFN_COLD; + //private: uint32 R[16]; uint32 PC; @@ -185,17 +193,22 @@ // // uint32 IBuffer; - uint32 (MDFN_FASTCALL *MRFPI[8])(uint32 A); uint8 (MDFN_FASTCALL *MRFP8[8])(uint32 A); uint16 (MDFN_FASTCALL *MRFP16[8])(uint32 A); uint32 (MDFN_FASTCALL *MRFP32[8])(uint32 A); + uint16 (MDFN_FASTCALL *MRFP16_I[8])(uint32 A); + uint32 (MDFN_FASTCALL *MRFP32_I[8])(uint32 A); + void (MDFN_FASTCALL *MWFP8[8])(uint32 A, uint8); void (MDFN_FASTCALL *MWFP16[8])(uint32 A, uint16); void (MDFN_FASTCALL *MWFP32[8])(uint32 A, uint32); + void RecalcMRWFP_0(void); + void RecalcMRWFP_1_7(void); + sscpu_timestamp_t WB_until[16]; // @@ -203,15 +216,18 @@ // Cache: // // - struct + struct CacheEntry { // Rather than have separate validity bits, we're putting an INvalidity bit(invalid when =1) - // in the upper bit of the Tag variables. + // in the lower bit of the Tag variables. uint32 Tag[4]; - uint8 LRU; - alignas(4) uint8 Data[4][16]; - } Cache[64]; + uint8 Data[4][16]; + }; + alignas(16) CacheEntry Cache[64]; + uint8 Cache_LRU[64]; + int32 CCRC_Replace_OR[2]; // Cached cache var, calculated from the ID and OD bits of CCR in SetCCR() + uint8 CCRC_Replace_AND; // Cached cache var, calculated from the TW bit of CCR in SetCCR() uint8 CCR; void SetCCR(uint8 V); @@ -222,19 +238,97 @@ enum { CCR_CP = 0x10 }; // Cache Purge enum { CCR_W0 = 0x40 }; // enum { CCR_W1 = 0x80 }; // - void AssocPurge(const uint32 A); + + void Cache_AssocPurge(const uint32 A); + + int Cache_FindWay(CacheEntry* const cent, const uint32 ATM); + + template + void Cache_WriteAddressArray(uint32 A, T V); + + template + void Cache_WriteDataArray(uint32 A, T V); + + template + T Cache_ReadAddressArray(uint32 A); template - void Write_UpdateCache(uint32 A, T V); + T Cache_ReadDataArray(uint32 A); + + template + void Cache_CheckReadIncoherency(CacheEntry* cent, const int way, const uint32 A); + + template + void Cache_WriteUpdate(uint32 A, T V); // // End cache stuff // // + // Bus State Controller + // + struct + { + uint16 BCR1; + uint8 BCR2; + uint16 WCR; + uint16 MCR; + + uint8 RTCSR; + uint8 RTCSRM; + uint8 RTCNT; + uint8 RTCOR; + // + // + // + sscpu_timestamp_t sdram_finish_time; + sscpu_timestamp_t last_mem_time; + uint32 last_mem_addr; + uint32 last_mem_type; + } BSC; + + template + void INLINE BSC_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax); + + template + T INLINE BSC_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax); + + uint32 UCRead_IF_Kludge; + + // + // Exit/Resume stuff for slave CPU with icache emulation(RunSlaveUntil()) + // + const void* ResumePoint; + CacheEntry* Resume_cent; + uint32 Resume_instr; + int Resume_way_match; + uint32 Resume_uint8_A; + uint32 Resume_uint16_A; + uint32 Resume_uint32_A; + uint32 Resume_unmasked_A; + uint32 Resume_uint32_V; + uint16 Resume_uint16_V; + uint8 Resume_uint8_V; + + int32 Resume_MAC_L_m0; + int32 Resume_MAC_L_m1; + + int16 Resume_MAC_W_m0; + int16 Resume_MAC_W_m1; + + uint32 Resume_ea; + uint32 Resume_new_PC; + uint32 Resume_new_SR; + + uint8 Resume_ipr; + uint8 Resume_exnum; + uint8 Resume_vecnum; + + // // // Interrupt controller registers and related state // - // + // void INTC_Reset(void) MDFN_COLD; bool NMILevel; @@ -252,22 +346,6 @@ // // // - struct - { - uint16 BCR1; - uint8 BCR2; - uint16 WCR; - uint16 MCR; - - uint8 RTCSR; - uint8 RTCSRM; - uint8 RTCNT; - uint8 RTCOR; - } BSC; - - // - // - // uint8 SBYCR; bool Standby; @@ -335,10 +413,8 @@ void DMA_BusTimingKludge(void); const unsigned event_id_dma; - sscpu_timestamp_t dma_lastts; // External SH7095_mem_timestamp related. - - int32 DMA_ClockCounter; - int32 DMA_SGCounter; // When negative, smaller granularity scheduling for DMA_Update() + sscpu_timestamp_t DMA_Timestamp; + sscpu_timestamp_t DMA_SGEndTimestamp; // For smaller granularity scheduling for DMA_Update() after start of DMA. bool DMA_RoundRobinRockinBoppin; uint32 DMA_PenaltyKludgeAmount; @@ -402,51 +478,26 @@ uint8 GetPendingInt(uint8*); void RecalcPendingIntPEX(void); - template - INLINE void FetchIF(bool ForceIBufferFill); - - template - void DoIDIF_Real(void); + template + INLINE void DoIDIF_INLINE(void); - template - T ExtBusRead(uint32 A); + template + INLINE T ExtBusRead_INLINE(uint32 A); - template - void ExtBusWrite(uint32 A, T V); + template + INLINE void ExtBusWrite_INLINE(uint32 A, T V); template - void OnChipRegWrite(uint32 A, uint32 V); + NO_INLINE void OnChipRegWrite(uint32 A, uint32 V) MDFN_HOT; template - T OnChipRegRead(uint32 A); - - template - T MemReadRT(uint32 A); - - template - T MemRead(uint32 A); - - template - void MemWriteRT(uint32 A, T V); - - template - void MemWrite(uint32 A, T V); - - - template - INLINE void Branch(uint32 target); - - template - INLINE void CondRelBranch(bool cond, uint32 disp); - - - template - INLINE void UCDelayBranch(uint32 target); - - template - INLINE void UCRelDelayBranch(uint32 disp); + INLINE T OnChipRegRead_INLINE(uint32 A); + template + INLINE T MemReadRT(uint32 A); + template + INLINE void MemWriteRT(uint32 A, T V); // // // @@ -544,6 +595,9 @@ GSREG_TCR, GSREG_TOCR, GSREG_RWT, + + GSREG_CCR, + GSREG_SBYCR }; uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len); @@ -552,9 +606,24 @@ void CheckRWBreakpoints(void (*MRead)(unsigned len, uint32 addr), void (*MWrite)(unsigned len, uint32 addr)) const; static void Disassemble(const uint16 instr, const uint32 PC, char* buffer, uint16 (*DisPeek16)(uint32), uint32 (*DisPeek32)(uint32)); private: - const char* const cpu_name; bool CBH_Setting; + bool EIC_Setting; + bool DM_Setting; uint32 PC_IF, PC_ID; // Debug-related variables. -}; +#ifdef MDFN_ENABLE_DEV_BUILD + void CheckDMARace(uint32 addr, uint32 size, bool write); + struct + { + uint32 rw[2][2]; + } DMADebug[2]; +#endif + const char* const cpu_name; + const void*const* ResumeTableP[2]; + + template + void DevBuild_ReadLog(uint32 A); + template + void DevBuild_WriteLog(uint32 A, T V); +}; #endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* sh7095.inc - Hitachi SH7095 Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -20,14 +20,6 @@ */ /* - Instruction cache emulation shouldn't be enabled globally for all games until we resolve timestamp vs mem_timestamp issues - in regards to bus contention and time sharing, or else emulated dual-CPU programs may run slower - than they should and probably glitch out(and also until 5GHz desktop CPUs are the norm ;)). - - Also...the emulated overhead is a little too high when executing a branch with no delay slot from non-cacheable memory. -*/ - -/* Emulation implementation notes/deficiencies: Cache multiple-way tag collisions (ostensibly an illegal condition) during reads/writes are not handled accurately. @@ -61,26 +53,20 @@ This cooouuuld turn out to be a problem, and if it does, it can be fixed by having two interrupt-pending variables, with one being copied to the other in DoIDIF(). - Instruction fetches don't go through the cache emulation, for performance reasons(getting the instruction fetches timed right - versus the instruction data read/write would be critical, to avoid causing inaccurate cache miss patterns which could cause code - to run slower than on the real thing, which is arguably worse than having it run faster). + Emulation of SH-2 master/slave bus sharing is very approximate. On a real SH-2, internal bus cycles may affect + bus grant timing, need to run tests(though emulating that behavior would probably be unrealistic performance-wise). - SCI, UBC, and BSC are mostly unemulated. -*/ + The SCU C-bus DMA ExtHalt kludge doesn't work totally as intended when full cache emulation is enabled(and the + interruptible/resumable slave CPU code is used), but it proooobably won't be a problem in practice because on + a real Saturn, after the write that triggers the SCU DMA, a few CPU bus accesses can get in before the SCU hogs the bus. -// Address error exception order, sleep versus exceptions. - -/* - TODO: PC-relative addressing, uses instruction or data fetches? + SCI, UBC, and BSC are mostly unemulated. */ -/* - TODO: Make sure RecalcPendingIntPEX() is called in all places it needs to be called(which is arguably too many...). -*/ +/* TODO: + Check address error exception order, sleep versus exceptions. -/* - TODO: Penalize slave CPU external bus access if we ever figure out a solution to the timestamp vs mem_timestamp problem that doesn't murder - performance. + Make sure RecalcPendingIntPEX() is called in all places it needs to be called(which is arguably too many...). */ #ifdef MSB_FIRST @@ -89,60 +75,197 @@ #define NE32ASU8_IDX_ADJ(T, idx) ( ((idx) & ~(sizeof(T) - 1)) ^ (4 - (sizeof(T))) ) #endif -SH7095::SH7095(const char* const name_arg, const unsigned event_id_dma_arg, uint8 (*exivecfn_arg)(void)) : event_id_dma(event_id_dma_arg), ExIVecFetch(exivecfn_arg), cpu_name(name_arg) +SH7095::SH7095(const char* const name_arg, const unsigned event_id_dma_arg, uint8 (*exivecfn_arg)(void)) : event_id_dma(event_id_dma_arg), ExIVecFetch(exivecfn_arg), CBH_Setting(false), EIC_Setting(false), DM_Setting(false), cpu_name(name_arg) { - Init(false); + if(this == &CPU[1]) + { + for(unsigned dm = 0; dm < 2; dm++) + { + // + // Very fragile, be careful. + // + ResumePoint = nullptr; + ResumeTableP[dm] = nullptr; + timestamp = -1; + FRT_WDT_NextTS = 0x7FFFFFFF; + Pipe_ID = 0xFEU << 24; + // + if(dm) + RunSlaveUntil_Debug(0); + else + RunSlaveUntil(0); + // + assert(ResumePoint == nullptr); + assert(ResumeTableP[dm] != nullptr); + assert(timestamp == -1); + assert(FRT_WDT_NextTS == 0x7FFFFFFF); + assert(Pipe_ID == (0xFEU << 24)); + } + } + // + // + Init(false, false); } -template -static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A); +template +static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A) MDFN_HOT; -template -static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V); +template +static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) MDFN_HOT; -void SH7095::Init(const bool cbh) +// WARNING: Template arguments CacheEnabled and CacheBypassHack are only valid for region==0. +void SH7095::RecalcMRWFP_0(void) { - CBH_Setting = cbh; - // - #define MAHL_P(w, region) { \ - MRFP8[region] = C_MemReadRT; \ - MRFP16[region] = C_MemReadRT; \ - MRFP32[region] = C_MemReadRT; \ - MRFPI[region] = C_MemReadRT; \ - MWFP8[region] = C_MemWriteRT; \ - MWFP16[region] = C_MemWriteRT; \ - MWFP32[region] = C_MemWriteRT; \ + #define MAHL_(bs,w,nsc,cbh) \ + if(CCR & CCR_CE) \ + { \ + if(bs == 16) { MRFP16_I[0] = C_MemReadRT; } \ + if(bs == 32) { MRFP32_I[0] = C_MemReadRT; } \ + MRFP##bs[0] = C_MemReadRT ; \ + MRFPI[0] = C_MemReadRT ; \ + MWFP##bs[0] = C_MemWriteRT; \ + } \ + else \ + { \ + if(bs == 16) { MRFP16_I[0] = C_MemReadRT; }\ + if(bs == 32) { MRFP32_I[0] = C_MemReadRT; }\ + MRFP##bs[0] = C_MemReadRT ; \ + MRFPI[0] = C_MemReadRT ; \ + MWFP##bs[0] = C_MemWriteRT; \ + } + + #define MAHL(w, nsc, cbh) \ + { \ + MAHL_( 8, w, nsc, cbh) \ + MAHL_(16, w, nsc, cbh) \ + MAHL_(32, w, nsc, cbh) \ + } + + if(this == &CPU[0]) + { + if(EIC_Setting) + { + if(DM_Setting) + MAHL(0, -1, false) + else + MAHL(0, true, false) + } + else if(CBH_Setting) + { + MAHL(0, false, true) + } + else + { + MAHL(0, false, false) + } + } + else + { + if(!EIC_Setting && CBH_Setting) + { + MAHL(1, false, true) + } + else + { + MAHL(1, false, false) + } + } + #undef MAHL_ + #undef MAHL +} + +void SH7095::RecalcMRWFP_1_7(void) +{ + #define MAHL_P(w, nsc, region) { \ + MRFP8[region] = C_MemReadRT; \ + MRFP16[region] = C_MemReadRT; \ + MRFP32[region] = C_MemReadRT; \ + MRFP16_I[region] = C_MemReadRT; \ + MRFP32_I[region] = C_MemReadRT; \ + MRFPI[region] = C_MemReadRT; \ + MWFP8[region] = C_MemWriteRT; \ + MWFP16[region] = C_MemWriteRT; \ + MWFP32[region] = C_MemWriteRT; \ } - #define MAHL(region) \ - if(this == &CPU[0]) \ - { MAHL_P(0, region) } \ - else \ - { MAHL_P(1, region) } - - MAHL(1) - MAHL(2) - MAHL(3) - MAHL(4) - MAHL(5) - MAHL(6) - MAHL(7) + #define MAHL(nsc, region) \ + if(this == &CPU[0]) \ + { MAHL_P(0, nsc, region) } \ + else \ + { MAHL_P(1, false, region) } + + if(EIC_Setting) + { + if(DM_Setting) + { + MAHL(-1, 1) + } + else + { + MAHL(true, 1) + } + MAHL(false, 2) + MAHL(false, 3) + MAHL(false, 4) + MAHL(false, 5) + MAHL(false, 6) + MAHL(false, 7) + } + else + { + MAHL(false, 1) + MAHL(false, 2) + MAHL(false, 3) + MAHL(false, 4) + MAHL(false, 5) + MAHL(false, 6) + MAHL(false, 7) + } #undef MAHL #undef MAHL_P +} + +void SH7095::SetDebugMode(bool DebugMode) +{ + if(DM_Setting != DebugMode) + { + if(ResumePoint != nullptr) + { + bool found = false; + + for(unsigned i = 0; i < 512; i++) + { + if(ResumeTableP[DM_Setting][i] == ResumePoint) + { + ResumePoint = ResumeTableP[DebugMode][i]; + found = true; + break; + } + } + assert(found); + } + DM_Setting = DebugMode; + // + RecalcMRWFP_0(); + RecalcMRWFP_1_7(); + } +} + +void SH7095::Init(const bool EmulateICache, const bool CacheBypassHack) +{ + CBH_Setting = CacheBypassHack; + EIC_Setting = EmulateICache; + RecalcMRWFP_0(); + RecalcMRWFP_1_7(); // // // - // // Initialize variables that won't be initialized elsewhere since they reflect the overall emulator timing state, or are cache variables // for signal inputs. // timestamp = 0; - write_finish_timestamp = 0; - divide_finish_timestamp = 0; - FRT.lastts = 0; - dma_lastts = 0; FRT.FTI = false; FRT.FTCI = false; @@ -152,6 +275,8 @@ ExtHalt = false; ExtHaltDMA = false; + ResumePoint = nullptr; + TruePowerOn(); } @@ -160,55 +285,6 @@ } -void SH7095::AdjustTS(int32 delta, bool force_set) -{ - if(force_set) - { - timestamp = delta; - - MA_until = delta; - MM_until = delta; - - for(unsigned i = 0; i < 16; i++) - WB_until[i] = delta; - - write_finish_timestamp = delta; - divide_finish_timestamp = delta; - - FRT.lastts = delta; - dma_lastts = delta; - } - else - { - if(!(timestamp & 0x40000000)) - timestamp += delta; - - if(!(MA_until & 0x40000000)) - MA_until += delta; - - if(!(MM_until & 0x40000000)) - MM_until += delta; - - for(unsigned i = 0; i < 16; i++) - { - if(!(WB_until[i] & 0x40000000)) - WB_until[i] += delta; - } - - if(!(write_finish_timestamp & 0x40000000)) - write_finish_timestamp += delta; - - if(!(divide_finish_timestamp & 0x40000000)) - divide_finish_timestamp += delta; - - FRT.lastts += delta; - dma_lastts += delta; - } - - FRT_WDT_ClockDivider &= 0x00FFFFFF; - FRT_WDT_Recalc_NET(); -} - // // Initialize everything for determinism, especially state left "undefined" by reset/power exception handling. // @@ -218,7 +294,13 @@ R[i] = 0; for(unsigned i = 0; i < 16; i++) - WB_until[i] = 0; + WB_until[i] = timestamp; + + UCRead_IF_Kludge = 0; + + MA_until = timestamp; + MM_until = timestamp; + write_finish_timestamp = timestamp; PC = 0; @@ -238,10 +320,39 @@ PC_IF = PC_ID = 0; memset(Cache, 0, sizeof(Cache)); + memset(Cache_LRU, 0, sizeof(Cache_LRU)); + CCRC_Replace_OR[0] = 0; + CCRC_Replace_OR[1] = 0; + CCRC_Replace_AND = 0; CCR = 0; - - MA_until = 0; - MM_until = 0; + // + // + // + ResumePoint = nullptr; + Resume_cent = nullptr; + Resume_instr = 0; + Resume_way_match = 0; + Resume_uint8_A = 0; + Resume_uint16_A = 0; + Resume_uint32_A = 0; + Resume_unmasked_A = 0; + Resume_uint32_V = 0; + Resume_uint16_V = 0; + Resume_uint8_V = 0; + + Resume_MAC_L_m0 = 0; + Resume_MAC_L_m1 = 0; + + Resume_MAC_W_m0 = 0; + Resume_MAC_W_m1 = 0; + + Resume_ea = 0; + Resume_new_PC = 0; + Resume_new_SR = 0; + + Resume_ipr = 0; + Resume_exnum = 0; + Resume_vecnum = 0; // // // @@ -253,10 +364,39 @@ VCRC = 0; VCRD = 0; ICR = 0; + // + // + // + BSC.BCR1 &= 0x8000; + BSC.BCR2 = 0; + BSC.WCR = 0; + BSC.MCR = 0; + + BSC.RTCSR = 0; + BSC.RTCSRM = 0; + BSC.RTCNT = 0; + BSC.RTCOR = 0; + BSC.sdram_finish_time = timestamp; + BSC.last_mem_time = timestamp; + BSC.last_mem_addr = 0; + BSC.last_mem_type = 0; + // + // + // + ResumePoint = nullptr; + // + // + // + SBYCR = 0; + Standby = false; // // // + FRT.lastts = timestamp; + + // Don't change FRT.FTI and FRT.FTCI here. + FRT.FRC = 0; FRT.OCR[0] = FRT.OCR[1] = 0; FRT.FICR = 0; @@ -279,8 +419,8 @@ // // // - DMA_ClockCounter = 0; - DMA_SGCounter = 0; + DMA_Timestamp = timestamp; + DMA_SGEndTimestamp = timestamp; DMA_RoundRobinRockinBoppin = 0; DMA_PenaltyKludgeAmount = 0; DMA_PenaltyKludgeAccum = 0; @@ -291,6 +431,7 @@ // // // + divide_finish_timestamp = timestamp; DVSR = 0; DVDNT = 0; DVDNTH = 0; @@ -302,10 +443,68 @@ // // // + SCI.SMR = 0; + SCI.BRR = 0; + SCI.SCR = 0; + SCI.TDR = 0; + SCI.SSR = 0; + SCI.SSRM = 0; + SCI.RDR = 0; + SCI.RSR = 0; + SCI.TSR = 0; +} + +void SH7095::SetActive(bool active) +{ + if(active && timestamp == SS_EVENT_DISABLED_TS) + { + timestamp = SH7095_mem_timestamp; + FRT.lastts = timestamp; + + DMA_Timestamp = SH7095_mem_timestamp; + DMA_SGEndTimestamp = SH7095_mem_timestamp; + + SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 1); + // + Reset(true); + } + else if(!active && timestamp != SS_EVENT_DISABLED_TS) + { + Reset(true); + // + timestamp = SS_EVENT_DISABLED_TS; + SS_SetEventNT(&events[event_id_dma], SS_EVENT_DISABLED_TS); + } } +void SH7095::AdjustTS(int32 delta) +{ + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + return; + + timestamp += delta; + FRT.lastts += delta; +#define ATSD(v) v = std::max(-1000000, v + (delta)) + ATSD(DMA_Timestamp); + ATSD(DMA_SGEndTimestamp); + ATSD(MA_until); + ATSD(MM_until); + + for(unsigned i = 0; i < 16; i++) + ATSD(WB_until[i]); + + ATSD(write_finish_timestamp); + ATSD(divide_finish_timestamp); + + ATSD(BSC.sdram_finish_time); + ATSD(BSC.last_mem_time); +#undef ATSD + + FRT_WDT_ClockDivider &= 0x00FFFFFF; + FRT_WDT_Recalc_NET(); +} // de=1, dme=1, te=0, nmif=0, ae=0 @@ -360,8 +559,8 @@ { uint8 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFF, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFF, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFF, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFF, buffer, false, &DMA_Timestamp); sar += ainc[0][sm]; dar += ainc[0][dm]; @@ -373,8 +572,8 @@ { uint16 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFE, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFE, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFE, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFE, buffer, false, &DMA_Timestamp); if(MDFN_UNLIKELY((sar | dar) & 0x1)) { @@ -394,8 +593,8 @@ { uint32 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFC, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFC, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFC, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFC, buffer, false, &DMA_Timestamp); if(MDFN_UNLIKELY((sar | dar) & 0x3)) { @@ -425,14 +624,14 @@ for(unsigned i = 0; i < 4; i++) { - buffer[i] = SH7095_BusRead((sar + (i << 2)) & 0x07FFFFFC, (bool)i, &DMA_ClockCounter); + buffer[i] = BSC_BusRead((sar + (i << 2)) & 0x07FFFFFC, (bool)i, &DMA_Timestamp); } sar += 0x10; for(unsigned i = 0; i < 4; i++) { - SH7095_BusWrite(dar & 0x07FFFFFC, buffer[i], false, &DMA_ClockCounter); + BSC_BusWrite(dar & 0x07FFFFFC, buffer[i], false, &DMA_Timestamp); dar += ainc[2][dm]; tcr = (tcr - 1) & 0xFFFFFF; if(MDFN_UNLIKELY(!tcr)) @@ -458,38 +657,33 @@ sscpu_timestamp_t SH7095::DMA_Update(sscpu_timestamp_t et) { - if(MDFN_UNLIKELY(et < dma_lastts)) +#ifdef MDFN_ENABLE_DEV_BUILD + assert(timestamp != SS_EVENT_DISABLED_TS); +#endif + + if(MDFN_UNLIKELY(et < DMA_Timestamp)) { - // et < dma_lastts may happen...look into it. - if(et < dma_lastts) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA_Update called with et(%u) < dma_lastts(%u).\n", cpu_name, et, dma_lastts); + // may happen...look into it. + // SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA_Update called with et(%d) < DMA_Timestamp(%d).\n", cpu_name, et, DMA_Timestamp); + return DMA_Timestamp + 32; } else if(MDFN_UNLIKELY(ExtHaltDMA)) { //printf("%s ExtHaltDMA 0x%02x!\n", cpu_name, ExtHaltDMA); - dma_lastts = et; - return dma_lastts + 128; + DMA_Timestamp = et; + return DMA_Timestamp + 128; } else { - uint32 clocks = et - dma_lastts; - dma_lastts = et; - - // - // - // bool rr = DMA_RoundRobinRockinBoppin; - DMA_ClockCounter += clocks; - DMA_SGCounter += clocks; - if(DMAOR & 0x08) // Round robin { while(DMA_RunCond(0) || DMA_RunCond(1)) { if(DMA_RunCond(rr)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(rr); @@ -501,7 +695,7 @@ { while(DMA_RunCond(0)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(0); @@ -509,7 +703,7 @@ while(DMA_RunCond(1)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(1); @@ -521,26 +715,69 @@ TimeOver:; DMA_RoundRobinRockinBoppin = rr; - DMA_ClockCounter = std::min(DMA_ClockCounter, 128); - DMA_SGCounter = std::min(DMA_SGCounter, 0); + DMA_Timestamp = std::max(DMA_Timestamp, et - 128); DMA_CheckEnterBurstHack(); RecalcPendingIntPEX(); // TODO: conditionalize(or make RecalcPendingIntPEX() less expensive). } - return dma_lastts + ((DMA_SGCounter < 0) ? 32 : 128); + return et + ((et < DMA_SGEndTimestamp) ? 32 : 128); } + +#ifdef MDFN_ENABLE_DEV_BUILD +void SH7095::CheckDMARace(uint32 addr, uint32 size, bool write) +{ + for(unsigned cpu = 0; cpu < 2; cpu++) + { + for(unsigned ch = 0; ch < 2; ch++) + { + auto& dd = CPU[cpu].DMADebug[ch]; + + if(dd.rw[0][0] == ~0U) + continue; + + for(uint32 A = addr; A != ((addr + size) & 0x07FFFFFF); A = (A + 1) & 0x07FFFFFF) + { + bool match = false; + + if(dd.rw[1][1] < dd.rw[1][0]) + match |= (A >= dd.rw[1][0] || A < dd.rw[1][1]); + else + match |= (A >= dd.rw[1][0] && A < dd.rw[1][1]); + + if(write) + { + if(dd.rw[0][1] < dd.rw[0][0]) + match |= (A >= dd.rw[0][0] || A < dd.rw[0][1]); + else + match |= (A >= dd.rw[0][0] && A < dd.rw[0][1]); + } + + if(match) + { + SS_DBG(SS_DBG_SH2_DMARACE, "[%s] %u-byte %s 0x%07x races with %s DMA%u; SAR=0x%08x DAR=0x%08x, [0x%07x,0x%07x]->[0x%07x,0x%07x]\n", cpu_name, size, write ? "write to" : "read from", addr, CPU[cpu].cpu_name, ch, CPU[cpu].DMACH[ch].SAR, CPU[cpu].DMACH[ch].DAR, dd.rw[0][0], dd.rw[0][1] - 1, dd.rw[1][0], dd.rw[1][1] - 1); + break; + } + } + } + } +} +#endif + // DMA_StartSG() must be paired with a DMA_Update(SH7095_mem_timestamp) somewhere before. void SH7095::DMA_StartSG(void) { - DMA_SGCounter = DMA_ClockCounter - 128; - SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 32); // fixed + 32, don't evaluate DMA_SGCounter here. + DMA_SGEndTimestamp = DMA_Timestamp + 192; + SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 32); // fixed + 32 DMA_CheckEnterBurstHack(); } // Must be called after DMACH[0].CHCR or DMACH[1].CHCR or DMAOR changes. +// +// If DMA_RunCond(...) returns false, SAR and DAR and TCR for that channel +// should not be used(due to caching of variables in DMA_DoTransfer()). NO_INLINE void SH7095::DMA_RecalcRunning(void) { DMA_PenaltyKludgeAmount = 0; @@ -549,7 +786,7 @@ { if(DMA_RunCond(ch)) { - const int32 npka = (((DMACH[ch].CHCR >> 10) & 3) == 3 && (DMACH[ch].SAR & DMACH[ch].DAR & 0x06000000) != 0x06000000) ? 23 : 18; + const int32 npka = (((DMACH[ch].CHCR >> 10) & 3) == 3 && (DMACH[ch].SAR & DMACH[ch].DAR & 0x06000000) != 0x06000000) ? 23 : 19; DMA_PenaltyKludgeAmount = std::max(DMA_PenaltyKludgeAmount, npka); } @@ -562,16 +799,63 @@ // // // - if(ss_dbg_mask & (SS_DBG_WARNING | SS_DBG_SH2)) +#ifdef MDFN_ENABLE_DEV_BUILD + for(unsigned ch = 0; ch < 2; ch++) { - for(unsigned ch = 0; ch < 2; ch++) + const bool run_cond = DMA_RunCond(ch); + const unsigned ts = (DMACH[ch].CHCR >> 10) & 3; + const unsigned sm = (DMACH[ch].CHCR >> 12) & 3; + const unsigned dm = (DMACH[ch].CHCR >> 14) & 3; + const uint32 sar = DMACH[ch].SAR; + const uint32 dar = DMACH[ch].DAR; + const uint32 count = DMACH[ch].TCR ? DMACH[ch].TCR : 0x1000000; + + if(run_cond && DMADebug[ch].rw[0][0] == ~0U) { - if(DMA_RunCond(ch) && ((DMACH[ch].CHCR >> 10) & 3) == 3 && ((DMACH[ch].SAR | DMACH[ch].DAR) & 0xF)) + auto& dd = DMADebug[ch]; + + if(ts == 3) + { + dd.rw[0][0] = sar & 0x07FFFFFF; + dd.rw[0][1] = (dd.rw[0][0] + (count << 2)) & 0x07FFFFFF; + } + else + { + if(sm & 2) + { + dd.rw[0][1] = (sar + (1 << ts)) & 0x07FFFFFF; + dd.rw[0][0] = (dd.rw[0][1] - (count << ts)) & 0x07FFFFFF; + } + else + { + dd.rw[0][0] = sar & 0x07FFFFFF; + dd.rw[0][1] = (dd.rw[0][0] + ((sm ? count : 1) << ts)) & 0x07FFFFFF; + } + } + // + const unsigned ts_adj = std::min(2, ts); + + if(dm & 2) + { + dd.rw[1][1] = (dar + (1 << ts_adj)) & 0x07FFFFFF; + dd.rw[1][0] = (dd.rw[1][1] - (count << ts_adj)) & 0x07FFFFFF; + } + else { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA channel %u, 16-byte transfer size address misalignment, SAR=0x%08x DAR=0x%08x", cpu_name, ch, DMACH[ch].SAR, DMACH[ch].DAR); + dd.rw[1][0] = dar & 0x07FFFFFF; + dd.rw[1][1] = (dd.rw[1][0] + ((dm ? count : 1) << ts_adj)) & 0x07FFFFFF; } + //printf("%u, read:[0x%07x, 0x%07x) write:[0x%07x, 0x%07x)\n", ch, dd.rw[0][0], dd.rw[0][1], dd.rw[1][0], dd.rw[1][1]); + } + else if(!run_cond) + DMADebug[ch].rw[0][0] = ~0U; + + if(run_cond && ts == 0x3 && ((sar | dar) & 0xF)) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA channel %u, 16-byte transfer size address misalignment, SAR=0x%08x DAR=0x%08x", cpu_name, ch, sar, dar); } } +#endif } INLINE void SH7095::DMA_BusTimingKludge(void) @@ -758,6 +1042,12 @@ void SH7095::SetFTI(bool state) { + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + { + FRT.FTI = state; + return; + } + FRT_WDT_Update(); // // @@ -963,9 +1253,9 @@ // Misaligned/wrong-sized accesses aren't handled correctly, it's a mess, but probably doesn't matter. // template -NO_INLINE void SH7095::OnChipRegWrite(uint32 A, uint32 V) +NO_INLINE MDFN_HOT void SH7095::OnChipRegWrite(uint32 A, uint32 V) { - //SS_DBG(SS_DBG_SH2_REGW, "[%s] %zu-byte write to on-chip register area; address=0x%08x value=0x%08x\n", cpu_name, sizeof(T), A, V); + SS_DBGTI(SS_DBG_SH2_REGW, "[%s] %zu-byte write to on-chip register area; address=0x%08x value=0x%08x, PC=0x%08x\n", cpu_name, sizeof(T), A, V, PC); if(A & 0x100) { @@ -1405,14 +1695,9 @@ } break; - case 0x92: case 0x93: case 0x94: case 0x95: - case 0x96: case 0x97: case 0x98: case 0x99: - case 0x9A: case 0x9B: case 0x9C: case 0x9D: - case 0x9E: + case 0x92: // No 0x93...0x9F mirrors for writes. SetCCR(V); break; - - // // // @@ -1467,7 +1752,7 @@ } template -INLINE T SH7095::OnChipRegRead(uint32 A) +INLINE T SH7095::OnChipRegRead_INLINE(uint32 A) { if(A & 0x100) { @@ -1804,10 +2089,10 @@ ret = SBYCR; break; - case 0x92: case 0x93: case 0x94: case 0x95: - case 0x96: case 0x97: case 0x98: case 0x99: - case 0x9A: case 0x9B: case 0x9C: case 0x9D: - case 0x9E: + case 0x92 ... 0x9F: + // + // TODO: Emulate jankiness of 16-bit reads from mirror addresses. + // ret = CCR | (CCR << 8); break; // @@ -1869,47 +2154,284 @@ } } -template -INLINE T SH7095::ExtBusRead(uint32 A) +template +void INLINE SH7095::BSC_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax) { - T ret; - - A &= (1U << 27) - 1; - - if(timestamp > SH7095_mem_timestamp) - SH7095_mem_timestamp = timestamp; + uint32 DB = SH7095_DB; - // if(!BurstHax) + SH7095_mem_timestamp += (SH7095_mem_timestamp == BSC.last_mem_time) & BSC.last_mem_type; + + if(A < 0x02000000) // CS0, configured as 16-bit { - DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; - } - // + if(sizeof(T) == 4) + { + // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. + //if(!SH2DMAHax) + // SH7095_BusLock++; - ret = SH7095_BusRead(A, BurstHax, NULL); + DB = (DB & 0xFFFF0000) | (V >> 16); + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - return ret; -} + DB = (DB & 0xFFFF0000) | (uint16)V; + BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); -template -INLINE void SH7095::ExtBusWrite(uint32 A, T V) -{ - A &= (1U << 27) - 1; + //if(!SH2DMAHax) + // SH7095_BusLock--; + } + else + { + const uint32 shift = ((A & 1) ^ (2 - sizeof(T))) << 3; + const uint32 mask = (0xFFFF >> ((2 - sizeof(T)) * 8)) << shift; - if(timestamp > SH7095_mem_timestamp) - SH7095_mem_timestamp = timestamp; + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + } + } + else if(A >= 0x06000000) // CS3; 32-bit + { + const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; + const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; - // + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS3(A, DB, BurstHax, SH2DMAHax); + + if(!BurstHax) + { + if(!SH2DMAHax) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp += 2; + BSC.sdram_finish_time = SH7095_mem_timestamp + 2; + } + else + *SH2DMAHax += 3; + } + } + else // CS1, CS2; 32-bit { - DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; + const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; + + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS12(A, DB, BurstHax, SH2DMAHax); } - // - SH7095_BusWrite(A, V, false, NULL); + SH7095_DB = DB; - write_finish_timestamp = SH7095_mem_timestamp; + if(!BurstHax) + { + BSC.last_mem_addr = A; + BSC.last_mem_type = 0; + BSC.last_mem_time = SH7095_mem_timestamp; + } } +template +T INLINE SH7095::BSC_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax) +{ + // + // + // + uint32 DB = SH7095_DB; + T ret; + + if(!BurstHax) + SH7095_mem_timestamp += (SH7095_mem_timestamp == BSC.last_mem_time) & (bool)((BSC.last_mem_addr ^ A) & 0x06000000); + + if(A < 0x02000000) // CS0, configured as 16-bit + { + if(sizeof(T) == 4) + { + // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. + //if(!SH2DMAHax) + // SH7095_BusLock++; + + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + ret = DB << 16; + + BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); + ret |= (uint16)DB; + + //if(!SH2DMAHax) + // SH7095_BusLock--; + } + else + { + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 1) ^ (2 - sizeof(T))) << 3); + } + } + else if(A >= 0x06000000) // CS3; 32-bit + { + BusRW_DB_CS3(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); + + // SDRAM leaves data bus in a weird state after read... + // DB = 0; + + if(!BurstHax) + { + if(!SH2DMAHax) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp += 7; + } + else + *SH2DMAHax += 6; + } + } + else // CS1, CS2; 32-bit + { + BusRW_DB_CS12(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); + } + + SH7095_DB = DB; + + if(!BurstHax) + { + BSC.last_mem_addr = A; + BSC.last_mem_type = 1; + BSC.last_mem_time = SH7095_mem_timestamp; + } + + return ret; +} + + +template +INLINE T SH7095::ExtBusRead_INLINE(uint32 A) +{ + T ret; + + A &= (1U << 27) - 1; + + if(timestamp > SH7095_mem_timestamp) + SH7095_mem_timestamp = timestamp; + + // + if(!BurstHax) + { + DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + } + // +#ifdef MDFN_ENABLE_DEV_BUILD + CheckDMARace(A, sizeof(T), false); +#endif + if(SlavePenalty && !BurstHax) + { + if(SH7095_mem_timestamp > (BSC.last_mem_time + 1)) + SH7095_mem_timestamp += 2; + else + SH7095_mem_timestamp++; + } + + ret = BSC_BusRead(A, BurstHax, NULL); + + if(SlavePenalty && !BurstHax) + { + SH7095_mem_timestamp++; + } + + return ret; +} + +template +INLINE void SH7095::ExtBusWrite_INLINE(uint32 A, T V) +{ + A &= (1U << 27) - 1; + + if(timestamp > SH7095_mem_timestamp) + SH7095_mem_timestamp = timestamp; + + // + DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + // +#ifdef MDFN_ENABLE_DEV_BUILD + CheckDMARace(A, sizeof(T), true); +#endif + + if(SlavePenalty) + SH7095_mem_timestamp++; + + BSC_BusWrite(A, V, false, NULL); + + if(SlavePenalty) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp++; + } + + write_finish_timestamp = SH7095_mem_timestamp; +} + +template +static NO_INLINE MDFN_HOT T ExtBusRead_NI(uint32 A) +{ + return CPU[w].ExtBusRead_INLINE(A); +} + +template +static NO_INLINE MDFN_HOT void ExtBusWrite_NI(uint32 A, T V) +{ + CPU[w].ExtBusWrite_INLINE(A, V); +} + +template +static NO_INLINE MDFN_HOT T OnChipRegRead_NI(uint32 A) +{ + return CPU[w].OnChipRegRead_INLINE(A); +} + +template +INLINE void SH7095::DevBuild_ReadLog(uint32 A) +{ +#ifdef MDFN_ENABLE_DEV_BUILD + if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + + if(match && !BWMIgnoreAddr[0][A & 0x1FF]) + { + SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); + } + } + + if((A & 0xC7FFFFFF) >= 0x00000200/*0x00000004*//*0x00000000*/ && (A & 0xC7FFFFFF) <= 0x000FFFFF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + + if(match) + SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS ROM 0x%06x; PC=0x%08x\n", cpu_name, A, PC); + } +#endif +} + +template +INLINE void SH7095::DevBuild_WriteLog(uint32 A, T V) +{ +#ifdef MDFN_ENABLE_DEV_BUILD + if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000800); + + if(match && !BWMIgnoreAddr[1][A & 0x1FF]) + { + SS_DBG(SS_DBG_BIOS, "[%s] Write to BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); + } + } +#endif +} // // @@ -1952,399 +2474,380 @@ return var; } -INLINE void SH7095::AssocPurge(const uint32 A) +INLINE void SH7095::Cache_AssocPurge(const uint32 A) { const uint32 ATM = A & (0x7FFFF << 10); auto* cent = &Cache[(A >> 4) & 0x3F]; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] Associative purge; address=0x%08x\n", cpu_name, A); + // Ignore two-way-mode bit in CCR here. - if(ATM == cent->Tag[0]) cent->Tag[0] |= 1U << 31; // Set invalid bit to 1. - if(ATM == cent->Tag[1]) cent->Tag[1] |= 1U << 31; - if(ATM == cent->Tag[2]) cent->Tag[2] |= 1U << 31; - if(ATM == cent->Tag[3]) cent->Tag[3] |= 1U << 31; + cent->Tag[0] |= (ATM == cent->Tag[0]); // Set invalid bit to 1. + cent->Tag[1] |= (ATM == cent->Tag[1]); + cent->Tag[2] |= (ATM == cent->Tag[2]); + cent->Tag[3] |= (ATM == cent->Tag[3]); } -template -INLINE T SH7095::MemReadRT(uint32 A) +INLINE int SH7095::Cache_FindWay(CacheEntry* const cent, const uint32 ATM) { - static_assert(region < 0x8, "Wrong region argument."); - const uint32 unmasked_A = A; - - if(!IsInstr) - { - if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte read from 0x%08x\n", cpu_name, sizeof(T), A); - A &= ~(sizeof(T) - 1); - SetPEX(PEX_CPUADDR); - } - } - - if(!IsInstr) - MA_until = std::max(MA_until, timestamp + 1); - else - timestamp = std::max(MA_until, timestamp); +#if defined(HAVE_SSE2_INTRINSICS) + __m128i atm = _mm_set1_epi32(ATM); + __m128i v1234 = _mm_setr_epi32(1, 2, 3, 4); + __m128i tmp; -#ifdef MDFN_ENABLE_DEV_BUILD - if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + tmp = _mm_cmpeq_epi32(_mm_load_si128((__m128i*)cent->Tag), atm); + tmp = _mm_and_si128(tmp, v1234); + tmp = _mm_max_epi16(tmp, _mm_shuffle_epi32(tmp, (3 << 0) | (2 << 2) | (1 << 4) | (0 << 6))); + tmp = _mm_max_epi16(tmp, _mm_shuffle_epi32(tmp, (1 << 0) | (0 << 2))); - if(match && !BWMIgnoreAddr[0][A & 0x1FF]) - { - SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); - } - } + return _mm_cvtsi128_si32(tmp) - 1; +#else + int way_match = -1; - if((A & 0xC7FFFFFF) >= 0x00000200/*0x00000004*//*0x00000000*/ && (A & 0xC7FFFFFF) <= 0x000FFFFF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); + way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); + way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); + way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); - if(match) - SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS ROM 0x%06x; PC=0x%08x\n", cpu_name, A, PC); - } + return way_match; #endif +} - // - // WARNING: Template arguments CacheEnabled and TwoWayMode are only valid for region==0. In addition, TwoWayMode is only valid for CacheEnabled==true. - // - switch(region) // A >> 29 - { - case 0: - if(CacheEnabled) - { - const uint32 ATM = A & (0x7FFFF << 10); - auto* cent = &Cache[(A >> 4) & 0x3F]; - int way_match = -1; - - way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); - way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); - way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); - way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); - - if(MDFN_UNLIKELY(way_match < 0)) // Cache miss! - { - if(IsInstr) - { - if(MDFN_UNLIKELY(CCR & CCR_ID)) - goto EBRCase; - } - else - { - if(MDFN_UNLIKELY(CCR & CCR_OD)) - goto EBRCase; - } - - if(TwoWayMode) - way_match = 3 ^ (cent->LRU & 0x1); - else - way_match = LRU_Replace_Tab[cent->LRU]; - - if(MDFN_UNLIKELY(way_match < 0)) - goto EBRCase; - - // - // Load cache line. - // - //printf("Cache load line: %08x\n", A); - cent->Tag[way_match] = ATM; - - { - unsigned di = (A + 4 + 0) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead((A &~ 0xF) + di)); - } - for(unsigned i = 4; i < 16; i += 4) - { - unsigned di = (A + 4 + i) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead((A &~ 0xF) + di)); - } - if(!IsInstr) - MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); - else - timestamp = SH7095_mem_timestamp; - } +template +INLINE void SH7095::Cache_WriteUpdate(uint32 A, T V) +{ + const uint32 ATM = A & (0x7FFFF << 10); + const unsigned ena = (A >> 4) & 0x3F; + CacheEntry* cent = &Cache[ena]; + const int way_match = Cache_FindWay(cent, ATM); - if((SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + (A & ~((1U << SH7095_EXT_MAP_GRAN_BITS) - 1))) == (uintptr_t)fmap_dummy) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE, "[%s] Cacheable %zu-byte read from non-RAM address 0x%08x!\n", cpu_name, sizeof(T), A); - else if(ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A) != MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)])) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE, "[%s] Cache incoherency for %zu-byte read from address 0x%08x!\n", cpu_name, sizeof(T), A); - - cent->LRU = (cent->LRU & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; - - // Ugggghhhh.... - if(CacheBypassHack && FMIsWriteable[A >> SH7095_EXT_MAP_GRAN_BITS]) - return ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + if(MDFN_LIKELY(way_match >= 0)) // Cache hit! + { + Cache_LRU[ena] = (Cache_LRU[ena] & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; + MDFN_ennsb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); // Ignore CCR OD bit here. + } +} - return MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); - } - // Fall-through, no break here - case 1: - EBRCase: - { - T ret = ExtBusRead(A); +template +INLINE void SH7095::Cache_WriteAddressArray(uint32 A, T V) +{ + const unsigned way = (CCR >> 6) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - if(!IsInstr) - MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); - else - timestamp = SH7095_mem_timestamp; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte write to cache address array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - return ret; - } + Cache[ena].Tag[way] = (A & (0x7FFFF << 10)) | (!(A & 0x4)); + Cache_LRU[ena] = (V >> 4) & 0x3F; +} - case 2: - case 5: - // - // Associative purge(apparently returns open bus of some sort) - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from associative purge area; address=0x%08x\n", cpu_name, sizeof(T), A); - AssocPurge(A); - return ~0; +template +INLINE void SH7095::Cache_WriteDataArray(uint32 A, T V) +{ + const unsigned way = (A >> 10) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - case 3: - // - // Direct cache address/tag access - // - // Note: bits 0, 1, 3, 29, 30, 31 are some sort of open-bus(unemulated). - // - // SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from cache address array area; address=0x%08x\n", cpu_name, sizeof(T), A); - { - const unsigned way = (CCR >> 6) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte write to cache data array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - return (Cache[ena].Tag[way] & (0x7FFFF << 10)) | (((int32)~Cache[ena].Tag[way] >> 31) & 0x4) | (Cache[ena].LRU << 4); - } + MDFN_ennsb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); +} - case 4: - case 6: - // - // Direct cache data access - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from cache data array area; address=0x%08x\n", cpu_name, sizeof(T), A); - { - const unsigned way = (A >> 10) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; +template +INLINE T SH7095::Cache_ReadAddressArray(uint32 A) +{ + const unsigned way = (CCR >> 6) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - return MDFN_densb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); - } + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte read from cache address array area; address=0x%08x\n", cpu_name, sizeof(T), A); - case 7: - return OnChipRegRead(unmasked_A); - } + return (Cache[ena].Tag[way] & (0x7FFFF << 10)) | ((~Cache[ena].Tag[way] & 1) << 2) | (Cache_LRU[ena] << 4); } template -INLINE T SH7095::MemRead(uint32 A) +INLINE T SH7095::Cache_ReadDataArray(uint32 A) { - if(sizeof(T) == 1) - return MRFP8[A >> 29](A); - else if(sizeof(T) == 2) - return MRFP16[A >> 29](A); - else - return MRFP32[A >> 29](A); + const unsigned way = (A >> 10) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; + + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte read from cache data array area; address=0x%08x\n", cpu_name, sizeof(T), A); + + return MDFN_densb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); } template -INLINE void SH7095::Write_UpdateCache(uint32 A, T V) +INLINE void SH7095::Cache_CheckReadIncoherency(CacheEntry* cent, const int way, const uint32 A) { - const uint32 ATM = A & (0x7FFFF << 10); - auto* cent = &Cache[(A >> 4) & 0x3F]; - int way_match = -1; + if((SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + (A & ~((1U << SH7095_EXT_MAP_GRAN_BITS) - 1))) == (uintptr_t)fmap_dummy) + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] Cacheable %zu-byte read from non-RAM address 0x%08x!\n", cpu_name, sizeof(T), A); + else if(ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A) != MDFN_densb(¢->Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)])) + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] Cache incoherency for %zu-byte read from address 0x%08x!\n", cpu_name, sizeof(T), A); +} + +#define MemRead(IsInstr, T, region, CacheEnabled, A_, outval_, A, unmasked_A, cent, way_match) \ +{ \ + __label__ EBRCase, MemReturn; \ + T retval; \ + retval = 0; \ + A = (A_); \ + unmasked_A = A; \ + \ + if(IsInstr <= 0) \ + { \ + if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) \ + { \ + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte read from 0x%08x\n", cpu_name, sizeof(T), A); \ + A &= ~(sizeof(T) - 1); \ + SetPEX(PEX_CPUADDR); \ + } \ + } \ + \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, timestamp + 1); \ + else \ + timestamp = std::max(MA_until, timestamp); \ + \ + DevBuild_ReadLog(A); \ + \ + switch(region) \ + { \ + case 0: \ + if(MDFN_LIKELY(CacheEnabled)) \ + { \ + uint32 ATM; \ + \ + ATM = A & (0x7FFFF << 10); \ + cent = &Cache[(A >> 4) & 0x3F]; \ + \ + way_match = Cache_FindWay(cent, ATM); \ + \ + if(MDFN_UNLIKELY(way_match < 0)) /* Cache miss! */ \ + { \ + way_match = LRU_Replace_Tab[Cache_LRU[(A >> 4) & 0x3F] & CCRC_Replace_AND] | CCRC_Replace_OR[(bool)IsInstr]; \ + \ + if(MDFN_UNLIKELY(way_match < 0)) \ + goto EBRCase; \ + \ + /* */ \ + /* Load cache line. */ \ + /* */ \ + /*printf("Cache load line: %08x\n", A);*/ \ + cent->Tag[way_match] = ATM; \ + /* Don't use ATM after this point. */ \ + CHECK_EXIT_RESUME(); \ + { \ + unsigned di = (A + 4 + 0) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead(uint32, false, (A &~ 0xF) + di)); \ + } \ + for(unsigned i = 4; i < 16; i += 4) \ + { \ + unsigned di = (A + 4 + i) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead(uint32, true, (A &~ 0xF) + di)); \ + } \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); \ + else \ + timestamp = SH7095_mem_timestamp; \ + } \ + \ + Cache_CheckReadIncoherency(cent, way_match, A); \ + \ + Cache_LRU[(A >> 4) & 0x3F] = (Cache_LRU[(A >> 4) & 0x3F] & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; \ + \ + /* Ugggghhhh.... */ \ + if(CacheBypassHack && FMIsWriteable[A >> SH7095_EXT_MAP_GRAN_BITS]) \ + { \ + retval = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); \ + goto MemReturn; \ + } \ + \ + retval = MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); \ + goto MemReturn; \ + } \ + /* Fall-through, no break here */ \ + case 1: \ + EBRCase: \ + CHECK_EXIT_RESUME(); \ + { \ + retval = ExtBusRead(T, false, A); \ + \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); \ + else \ + { \ + timestamp = SH7095_mem_timestamp; \ + UCRead_IF_Kludge = true; \ + } \ + \ + goto MemReturn; \ + } \ + \ + case 2: \ + case 5: \ + /* */ \ + /* Associative purge(apparently returns open bus of some sort) */ \ + /* */ \ + Cache_AssocPurge(A); \ + retval = ~0; \ + goto MemReturn; \ + \ + case 3: \ + /* */ \ + /* Direct cache address/tag access */ \ + /* */ \ + /* Note: bits 0, 1, 3, 29, 30, 31 are some sort */ \ + /* of open-bus(unemulated). */ \ + /* */ \ + retval = Cache_ReadAddressArray(A); \ + goto MemReturn; \ + \ + case 4: \ + case 6: \ + /* */ \ + /* Direct cache data access */ \ + /* */ \ + retval = Cache_ReadDataArray(A); \ + goto MemReturn; \ + \ + case 7: \ + retval = OnChipRegRead(T, unmasked_A); \ + goto MemReturn; \ + } \ + MemReturn: outval_ = retval; \ +} + +#define MemWrite(T, region, CacheEnabled, A_, V_, A, unmasked_A, V) \ +{ \ + A = (A_); \ + unmasked_A = A; \ + V = (V_); \ + \ + if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) \ + { \ + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte write of 0x%08x to 0x%08x\n", cpu_name, sizeof(T), V, A); \ + A &= ~(sizeof(T) - 1); \ + SetPEX(PEX_CPUADDR); \ + } \ + \ + MA_until = std::max(MA_until, timestamp + 1); \ + \ + DevBuild_WriteLog(A, V); \ + \ + switch(region) \ + { \ + case 0: \ + if(MDFN_LIKELY(CacheEnabled)) \ + Cache_WriteUpdate(A, V); \ + /* Fall-through, no break */ \ + case 1: \ + MA_until = std::max(MA_until, write_finish_timestamp + 1); \ + \ + if(!SH7095_BusLock) { CHECK_EXIT_RESUME(); } \ + ExtBusWrite(T, A, V); \ + break; \ + \ + case 2: \ + case 5: \ + /* */ \ + /* Associative purge. */ \ + /* */ \ + Cache_AssocPurge(A); \ + break; \ + \ + case 3: \ + /* */ \ + /* Direct cache address/tag access */ \ + /* */ \ + /* TODO: Check non-32 bit access */ \ + timestamp++; \ + MA_until = std::max(MA_until, timestamp + 1); \ + \ + Cache_WriteAddressArray(A, V); \ + break; \ + \ + case 4: \ + case 6: \ + /* */ \ + /* Direct cache data access */ \ + /* */ \ + Cache_WriteDataArray(A, V); \ + break; \ + \ + case 7: \ + OnChipRegWrite(unmasked_A, V); \ + break; \ + } \ +} + +#define CHECK_EXIT_RESUME() { if(NeedSlaveCall > 0) CPU[1].RunSlaveUntil(timestamp); if(NeedSlaveCall < 0) CPU[1].RunSlaveUntil_Debug(timestamp); } +#define OnChipRegRead(T, A) OnChipRegRead_INLINE(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI(A, V) +template +INLINE T SH7095::MemReadRT(uint32 A) +{ + static_assert(region < 0x8, "Wrong region argument."); + static_assert(!NeedSlaveCall || (!which && region < 2), "Wrong arguments."); + static_assert(IsInstr >= 0 || (CacheEnabled && region == 0x0), "Wrong arguments."); + T ret; + uint32 unmasked_A; + CacheEntry* cent; + int way_match; - way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); - way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); - way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); - way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); + MemRead(IsInstr, T, region, CacheEnabled, A, ret, A, unmasked_A, cent, way_match); - if(MDFN_LIKELY(way_match >= 0)) // Cache hit! - { - cent->LRU = (cent->LRU & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; - MDFN_ennsb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); // Ignore CCR OD bit here. - } + return ret; } -template +template INLINE void SH7095::MemWriteRT(uint32 A, T V) { static_assert(region < 0x8, "Wrong region argument."); - const uint32 unmasked_A = A; - - if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte write of 0x%08x to 0x%08x\n", cpu_name, sizeof(T), V, A); - A &= ~(sizeof(T) - 1); - SetPEX(PEX_CPUADDR); - } + static_assert(!NeedSlaveCall || (!which && region < 2), "Wrong arguments."); + uint32 unmasked_A; - MA_until = std::max(MA_until, timestamp + 1); + MemWrite(T, region, CacheEnabled, A, V, A, unmasked_A, V); +} +#undef CHECK_EXIT_RESUME +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite -#ifdef MDFN_ENABLE_DEV_BUILD - if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000800); +template +static NO_INLINE MDFN_HOT MDFN_FASTCALL T C_MemReadRT(uint32 A) +{ + return CPU[which].MemReadRT(A); +} - if(match && !BWMIgnoreAddr[1][A & 0x1FF]) - { - SS_DBG(SS_DBG_BIOS, "[%s] Write to BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); - } - } -#endif - - // - // WARNING: Template argument CacheEnabled is only valid for region==0. - // - switch(region) // A >> 29 - { - case 0: - if(CacheEnabled) - Write_UpdateCache(A, V); - // Fall-through, no break - case 1: - MA_until = std::max(MA_until, write_finish_timestamp + 1); - - ExtBusWrite(A, V); - return; - - case 2: - case 5: - // - // Associative purge. - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to associative purge area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - AssocPurge(A); - return; - - case 3: - // - // Direct cache address/tag access - // - // TODO: Check non-32 bit access - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to cache address array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - timestamp++; - MA_until = std::max(MA_until, timestamp + 1); - { - const unsigned way = (CCR >> 6) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; - - Cache[ena].Tag[way] = (A & (0x7FFFF << 10)) | ((!(A & 0x4)) << 31); - Cache[ena].LRU = (V >> 4) & 0x3F; - } - return; - - case 4: - case 6: - // - // Direct cache data access - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to cache data array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - { - const unsigned way = (A >> 10) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; - - MDFN_ennsb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); - } - return; - - case 7: - OnChipRegWrite(unmasked_A, V); - return; - } -} - -template -INLINE void SH7095::MemWrite(uint32 A, T V) -{ - if(sizeof(T) == 1) - MWFP8[A >> 29](A, V); - else if(sizeof(T) == 2) - MWFP16[A >> 29](A, V); - else - MWFP32[A >> 29](A, V); -} - - -template -static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A) +template +static NO_INLINE MDFN_HOT MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) { - return CPU[which].MemReadRT(A); + CPU[which].MemWriteRT(A, V); } -template -static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) -{ - CPU[which].MemWriteRT(A, V); -} - - INLINE void SH7095::SetCCR(uint8 V) { if(CCR != V) - SS_DBG(SS_DBG_SH2_CACHE, "[%s] CCR changed: 0x%02x->0x%02x%s\n", cpu_name, CCR, V, (V & CCR_CP) ? " (CACHE PURGE!)" : ""); + SS_DBG(SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] CCR changed: 0x%02x->0x%02x%s\n", cpu_name, CCR, V, (V & CCR_CP) ? " (CACHE PURGE!)" : ""); if(V & CCR_CP) { for(unsigned entry = 0; entry < 64; entry++) { - Cache[entry].LRU = 0; + Cache_LRU[entry] = 0; for(unsigned way = 0; way < 4; way++) - Cache[entry].Tag[way] |= 1U << 31; // Set invalid bit to 1. + Cache[entry].Tag[way] |= 1; // Set invalid bit to 1. } V &= ~CCR_CP; } - CCR = V; - #define MAHL(bs,w,cbh) \ - if(CCR & CCR_CE) \ - { \ - if(CCR & CCR_TW) \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - } \ - else \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - } \ - MWFP##bs[0] = C_MemWriteRT; \ - } \ - else \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - MWFP##bs[0] = C_MemWriteRT; \ - } - if(this == &CPU[0]) - { - if(CBH_Setting) - { - MAHL( 8, 0, true) - MAHL(16, 0, true) - MAHL(32, 0, true) - } - else - { - MAHL( 8, 0, false) - MAHL(16, 0, false) - MAHL(32, 0, false) - } - } - else + //if(MDFN_LIKELY(CCR != V)) { - if(CBH_Setting) - { - MAHL( 8, 1, true) - MAHL(16, 1, true) - MAHL(32, 1, true) - } - else - { - MAHL( 8, 1, false) - MAHL(16, 1, false) - MAHL(32, 1, false) - } + CCR = V; + // + // + CCRC_Replace_AND = (CCR & CCR_TW) ? 0x1 : 0x3F; + CCRC_Replace_OR[0] = (CCR & CCR_OD) ? -1 : 0; + CCRC_Replace_OR[1] = (CCR & CCR_ID) ? -1 : 0; + + RecalcMRWFP_0(); } - #undef MAHL } @@ -2356,6 +2859,28 @@ */ void NO_INLINE SH7095::Reset(bool power_on_reset, bool from_internal_wdt) { + if(timestamp == SS_EVENT_DISABLED_TS) + return; + + if(power_on_reset) + { + FRT.lastts = timestamp; + + MA_until = timestamp; + MM_until = timestamp; + + for(unsigned i = 0; i < 16; i++) + WB_until[i] = timestamp; + + UCRead_IF_Kludge = 0; + + write_finish_timestamp = timestamp; + divide_finish_timestamp = timestamp; + + DMA_Timestamp = timestamp; + DMA_SGEndTimestamp = timestamp; + } + // VBR = 0; SR |= 0xF << 4; SetCCR(0); @@ -2367,12 +2892,22 @@ BSC.WCR = 0xAAFF; BSC.MCR = 0x0000; + BSC.sdram_finish_time = timestamp; + BSC.last_mem_time = timestamp; + BSC.last_mem_addr = 0; + BSC.last_mem_type = 0; + BSC.RTCSR = 0x00; BSC.RTCSRM = 0x00; BSC.RTCNT = 0x00; BSC.RTCOR = 0x00; } // +#ifdef MDFN_ENABLE_DEV_BUILD + for(unsigned ch = 0; ch < 2; ch++) + DMADebug[ch].rw[0][0] = ~0U; +#endif + for(unsigned ch = 0; ch < 2; ch++) { DMACH[ch].CHCR = 0x00; @@ -2401,6 +2936,7 @@ EPending = 0; SetPEX(power_on_reset ? PEX_POWERON : PEX_RESET); Pipe_ID = EPending; + ResumePoint = nullptr; } void NO_INLINE SH7095::INTC_Reset(void) @@ -2455,6 +2991,9 @@ void SH7095::ForceInternalEventUpdates(void) { + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + return; + FRT_WDT_Update(); FRT_WDT_Recalc_NET(); } @@ -2519,2332 +3058,519 @@ // // - // -#if 0 - { - const uint32 sci_ip_tmp = (SCI.SSR & SCI.SCR & 0xC4) | (SCI.SSR & 0x38); - - if(sci_ip_tmp && (tmp_ipr = ((IPRB >> 12) & 0xF)) > ipr) - { - ipr = tmp_ipr; - - if(sci_ip_tmp & 0x38) // ERI(receive error; ORER, PER, FER) - vecnum = (VCRA >> 8) & 0x7F; - else if(sci_ip_tmp & 0x40)// RXI(receive data full; RDRF) - vecnum = (VCRA >> 0) & 0x7F; - else if(sci_ip_tmp & 0x80)// TXI(transmit data empty; TDRE) - vecnum = (VCRB >> 8) & 0x7F; - else if(sci_ip_tmp & 0x04)// TEI(transmit end; TEND) - vecnum = (VCRB >> 0) & 0x7F; - } - } -#endif - // - // - // - const uint32 frt_ip_tmp = (FRT.FTCSR & FRT.TIER & 0x8E); - if(frt_ip_tmp && (tmp_ipr = ((IPRB >> 8) & 0xF)) > ipr) - { - ipr = tmp_ipr; - - if(frt_ip_tmp & 0x80) // ICI - vecnum = (VCRC >> 8) & 0x7F; - else if(frt_ip_tmp & 0x0C) // OCIA+OCIB - vecnum = (VCRC >> 0) & 0x7F; - else // OVI - vecnum = (VCRD >> 8) & 0x7F; - } - - if(vecnum_out) - { - if(vecnum == ~0U) - vecnum = ExIVecFetch(); - - *vecnum_out = vecnum; - } - - return ipr; -} - -// -// Call after changes to: -// IRL -// SR -// -// IPRA -// IPRB -// -// DMACH[*].CHCR -// -// DVCR -// -// FRT.FTCSR -// FRT.TIER -// -void NO_INLINE SH7095::RecalcPendingIntPEX(void) -{ - if(GetPendingInt(NULL) > ((SR >> 4) & 0xF)) - SetPEX(PEX_INT); - else - ClearPEX(PEX_INT); -} - -static const uint8 InstrDecodeTab[65536] = -{ - #include "sh7095_idecodetab.inc" -}; - -template -INLINE void SH7095::FetchIF(bool ForceIBufferFill) -{ - if(DebugMode) - PC_IF = PC; - - if(EmulateICache) - { - if(ForceIBufferFill) - { - IBuffer = MRFPI[PC >> 29](PC &~ 2); - Pipe_IF = (uint16)(IBuffer >> (((PC & 2) ^ 2) << 3)); - } - else - { - Pipe_IF = (uint16)IBuffer; - if(!(PC & 0x2)) - { - IBuffer = MRFPI[PC >> 29](PC); - Pipe_IF = IBuffer >> 16; - } - } - } - else - { - if(timestamp < (MA_until - (ForceIBufferFill ? 0 : ((int32)(PC & 0x2) << 28)))) - timestamp = MA_until; - - if(MDFN_UNLIKELY((int32)PC < 0)) // Mr. Boooones - { - Pipe_IF = MRFP16[PC >> 29](PC); - timestamp++; - return; - } - - Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); - } - timestamp++; -} - -// -// TODO: Stop reading from memory when an exception is pending? -// -template -INLINE void SH7095::DoIDIF_Real(void) -{ - if(DelaySlot) - { - // - // Redecode the opcode from the 16-bit instruction to makes sure exceptions won't be taken in the delay slot(due - // to op field being forced to 0xFF in the previous call to DoIDIF()), and forces usage of the second half of the opcode - // table so we can generate illegal slot instruction exceptions as appropriate. - // - // Oh, and this effectively discards the previously-fetched instruction in Pipe_IF. Poor, poor instruction. - // - Pipe_ID = (uint16)Pipe_ID; - Pipe_ID |= (InstrDecodeTab[Pipe_ID] | 0x80) << 24; - } - else - { - uint32 op = InstrDecodeTab[Pipe_IF]; - uint32 epo = EPending; - - if(IntPreventNext) - { - epo &= ~(1U << (PEX_INT + EPENDING_PEXBITS_SHIFT)); - if(!(epo & (0xFF << EPENDING_PEXBITS_SHIFT))) - epo = 0; - } - - if(DebugMode) - PC_ID = PC_IF; - - Pipe_ID = Pipe_IF | (op << 24) | epo; - } - - if(!SkipFetchIF) - FetchIF(false); -} - -template -static NO_INLINE void DoIDIF(void) -{ - CPU[which].DoIDIF_Real(); -} - -template -INLINE void SH7095::Branch(uint32 target) -{ - if(DebugMode > 0) - DBG_AddBranchTrace(which, target, -1); - - PC = target; - - // - // Not totally correct, but simplifies things...probably :p - // - if(delayed) - { - if(MDFN_UNLIKELY(PC & 1)) - { - DoIDIF(); - SetPEX(PEX_CPUADDR); // Pending for the instruction after the delay slot instruction. - } - else - { - if(EmulateICache) - { - if(PC & 0x2) - IBuffer = MRFPI[PC >> 29](PC &~ 2); - } - - DoIDIF(); - } - } - else - { - if(MDFN_UNLIKELY(PC & 1)) - { - SetPEX(PEX_CPUADDR); - DoIDIF(); - } - else - { - if(EmulateICache) - { - if(PC & 0x2) - IBuffer = MRFPI[PC >> 29](PC &~ 2); - } - - DoIDIF(); - PC += 2; - DoIDIF(); - } - } -} - -// Remember to use BEGIN_OP_DLYIDIF instead of BEGIN_OP -template -INLINE void SH7095::UCDelayBranch(uint32 target) -{ - if(DebugMode > 0) - DBG_AddBranchTrace(which, target, -1); - - PC = target; - - if(DebugMode) - PC_ID = PC_IF; - - Pipe_ID = Pipe_IF | ((InstrDecodeTab[Pipe_IF] | 0x80) << 24); - - timestamp++; - - if(MDFN_UNLIKELY(PC & 1)) - { - DoIDIF(); - SetPEX(PEX_CPUADDR); // Pending for the instruction after the delay slot instruction. - } - else - { - FetchIF(true); - } -} - -template -INLINE void SH7095::UCRelDelayBranch(uint32 disp) -{ - UCDelayBranch(PC + disp); -} - - -template -INLINE void SH7095::CondRelBranch(bool cond, uint32 disp) -{ - if(cond) - Branch(PC + disp); -} - -template -uint32 NO_INLINE SH7095::Exception(const unsigned exnum, const unsigned vecnum) -{ - uint32 new_PC; - - timestamp += 2; - timestamp = std::max(MA_until, timestamp); - - if(exnum == EXCEPTION_RESET || exnum == EXCEPTION_POWERON) - { - new_PC = MemRead((vecnum + 0) << 2); - R[15] = MemRead((vecnum + 1) << 2); - } - else - { - // Save SR to stack - // Save PC to stack - // Read exception vector table - R[15] -= 4; - MemWrite(R[15], SR); - timestamp++; - R[15] -= 4; - MemWrite(R[15], PC); - timestamp++; - timestamp++; - new_PC = MemRead(VBR + (vecnum << 2)); - timestamp++; - } - - if(DebugMode) - DBG_AddBranchTrace(this - CPU, new_PC, exnum, vecnum); - - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exception %u, vecnum=%u, vbr=%08x, saved PC=0x%08x --- New PC=0x%08x, New R15=0x%08x\n", cpu_name, exnum, vecnum, VBR, PC, new_PC, R[15]); - - return new_PC; -} - - -/* - PC == 0 - instr = [?] - ID = [?] - IF = [0] - - PC == 2 - instr = [?] - ID = [0] - IF = [2] - - PC == 4 - instr = [0] - ID = [2] - IF = [4] - -*/ - -template -INLINE void SH7095::Step(void) -{ - // - // Ideally, we would place SPEPRecover: after the FRT event check, but doing - // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions - // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop - // or something?(even with all our branch hinting!) - // - SPEPRecover:; - - if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) - { - FRT_WDT_Update(); - FRT_WDT_Recalc_NET(); - } - - const uint32 instr = (uint16)Pipe_ID; - const unsigned instr_nyb1 = (instr >> 4) & 0xF; - const unsigned instr_nyb2 = (instr >> 8) & 0xF; -// asm volatile("":: "a"(instr_nyb1), "d"(instr_nyb2)); - switch(Pipe_ID >> 24) - { - #include "sh7095_opdefs.inc" - - #define PART_OP_NORMIDIF DoIDIF(); - - #define BEGIN_OP(x) OP_##x { PART_OP_NORMIDIF - #define BEGIN_OP_DLYIDIF(x) OP_##x { - - // "Interrupt-disabled" instruction(blocks interrupt from being taken for next instruction). - // Use with BEGIN_OP_DLYIDIF() - #define PART_OP_INTDIS DoIDIF(); - - #define END_OP } break; - - #define WB_EX_CHECK(r) { if(EmulateICache) { if(timestamp < WB_until[(r)]) timestamp = WB_until[(r)]; } } - #define WB_WRITE(r, v) { R[(r)] = (v); if(EmulateICache) { WB_until[(r)] = MA_until + 1; } } - // - // - // - // - // MOV #imm,Rn - // - BEGIN_OP(MOV_IMM_REG) - const unsigned n = instr_nyb2; - const uint32 imm = (int8)instr; - - WB_EX_CHECK(n) - - R[n] = imm; - END_OP - - - // - // MOV.W @(disp,PC),Rn - // - BEGIN_OP(MOV_W_PCREL_REG) - const unsigned n = instr_nyb2; - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = PC + (d << 1); - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,PC),Rn - // - BEGIN_OP(MOV_L_PCREL_REG) - const unsigned n = instr_nyb2; - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = (PC &~ 0x3) + (d << 2); - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV Rm,Rn - // - BEGIN_OP(MOV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[m]; - END_OP - - - // - // MOV.B Rm,@Rn - // - BEGIN_OP(MOV_B_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.W Rm,@Rn - // - BEGIN_OP(MOV_W_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.L Rm,@Rn - // - BEGIN_OP(MOV_L_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.B @Rm,Rn - // - BEGIN_OP(MOV_B_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @Rm,Rn - // - BEGIN_OP(MOV_W_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @Rm,Rn - // - BEGIN_OP(MOV_L_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B Rm,@-Rn - // - BEGIN_OP(MOV_B_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 1; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.W Rm,@-Rn - // - BEGIN_OP(MOV_W_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 2; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.L Rm,@-Rn - // - BEGIN_OP(MOV_L_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 4; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.B @Rm+,Rn - // - BEGIN_OP(MOV_B_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 1; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @Rm+,Rn - // - BEGIN_OP(MOV_W_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 2; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @Rm+,Rn - // - BEGIN_OP(MOV_L_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B R0,@(disp,Rn) - // - BEGIN_OP(MOV_B_REG0_REGINDIRDISP) - const unsigned n = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 0); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.W R0,@(disp,Rn) - // - BEGIN_OP(MOV_W_REG0_REGINDIRDISP) - const unsigned n = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 1); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.L Rm,@(disp,Rn) - // - BEGIN_OP(MOV_L_REG_REGINDIRDISP) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 2); - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.B @(disp,Rm),R0 - // - BEGIN_OP(MOV_B_REGINDIRDISP_REG0) - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 0); - - WB_WRITE(0, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(disp,Rm),R0 - // - BEGIN_OP(MOV_W_REGINDIRDISP_REG0) - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 1); - - WB_WRITE(0, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,Rm),Rn - // - BEGIN_OP(MOV_L_REGINDIRDISP_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 2); - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B Rm,@(R0,Rn) - // - BEGIN_OP(MOV_B_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.W Rm,@(R0,Rn) - // - BEGIN_OP(MOV_W_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.L Rm,@(R0,Rn) - // - BEGIN_OP(MOV_L_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.B @(R0,Rm),Rn - // - BEGIN_OP(MOV_B_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(R0,Rm),Rn - // - BEGIN_OP(MOV_W_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(R0,Rm),Rn - // - BEGIN_OP(MOV_L_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B R0,@(disp,GBR) - // - BEGIN_OP(MOV_B_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 0); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.W R0,@(disp,GBR) - // - BEGIN_OP(MOV_W_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 1); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.L R0,@(disp,GBR) - // - BEGIN_OP(MOV_L_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 2); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.B @(disp,GBR),R0 - // - BEGIN_OP(MOV_B_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 0); - - WB_WRITE(0, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(disp,GBR),R0 - // - BEGIN_OP(MOV_W_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 1); - - WB_WRITE(0, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,GBR),R0 - // - BEGIN_OP(MOV_L_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 2); - - WB_WRITE(0, MemRead(ea)); - END_OP - - - // - // MOVA @(disp,PC),R0 - // - BEGIN_OP(MOVA_PCREL_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = (PC &~ 0x3) + (d << 2); - - WB_EX_CHECK(0) - - R[0] = ea; - END_OP - - - // - // MOVT Rn - // - BEGIN_OP(MOVT_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] = GetT(); - END_OP - - - // - // SWAP.B Rm,Rn - // - BEGIN_OP(SWAP_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[m] & 0xFFFF0000) | ((R[m] << 8) & 0xFF00) | ((R[m] >> 8) & 0x00FF); - END_OP - - - // - // SWAP.W Rm,Rn - // - BEGIN_OP(SWAP_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[m] << 16) | (R[m] >> 16); - END_OP - - - // - // XTRCT Rm,Rn - // - BEGIN_OP(XTRCT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[n] >> 16) | (R[m] << 16); - END_OP - - - // - // ADD Rm,Rn - // - BEGIN_OP(ADD_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] + R[m]; - END_OP - - - // - // ADD #imm,Rn - // - BEGIN_OP(ADD_IMM_REG) - const unsigned n = instr_nyb2; - const uint32 imm = (int8)instr; - - WB_EX_CHECK(n) - - R[n] = R[n] + imm; - END_OP - - - // - // ADDC Rm,Rn - // - BEGIN_OP(ADDC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] + R[m] + GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // ADDV Rm,Rn - // - BEGIN_OP(ADDV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 result = R[n] + R[m]; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(((~(R[n] ^ R[m])) & (R[n] ^ result)) >> 31); - R[n] = result; - END_OP - - - // - // CMP/EQ #imm,R0 - // - BEGIN_OP(CMP_EQ_IMM_REG0) - const uint32 imm = (int8)instr; - - WB_EX_CHECK(0) - - SetT(imm == R[0]); - END_OP - - - // - // CMP/EQ Rm,Rn - // - BEGIN_OP(CMP_EQ_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] == R[m]); - END_OP - - - // - // CMP/HS Rm,Rn - // - BEGIN_OP(CMP_HS_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] >= R[m]); - END_OP - - - // - // CMP/GE Rm,Rn - // - BEGIN_OP(CMP_GE_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((int32)R[n] >= (int32)R[m]); - END_OP - - - // - // CMP/HI Rm,Rn - // - BEGIN_OP(CMP_HI_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] > R[m]); - END_OP - - - // - // CMP/GT Rm,Rn - // - BEGIN_OP(CMP_GT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((int32)R[n] > (int32)R[m]); - END_OP - - - // - // CMP/PZ Rn - // - BEGIN_OP(CMP_PZ_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - SetT((int32)R[n] >= 0); - END_OP - - - // - // CMP/PL Rn - // - BEGIN_OP(CMP_PL_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - SetT((int32)R[n] > 0); - END_OP - - - // - // CMP/STR Rm,Rn - // - BEGIN_OP(CMP_STR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 tmp = R[n] ^ R[m]; - unsigned new_T = 0; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - if(!(tmp & 0x000000FF)) new_T = 1; - if(!(tmp & 0x0000FF00)) new_T = 1; - if(!(tmp & 0x00FF0000)) new_T = 1; - if(!(tmp & 0xFF000000)) new_T = 1; - - SetT(new_T); - END_OP - - - // - // DIV1 Rm,Rn - // - BEGIN_OP(DIV1_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 tmp; - bool new_Q; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - new_Q = R[n] >> 31; - R[n] <<= 1; - R[n] |= GetT(); - - tmp = R[n]; - new_Q ^= GetM(); - - if(!(GetQ() ^ GetM())) - { - R[n] -= R[m]; - new_Q ^= (R[n] > tmp); - } - else - { - R[n] += R[m]; - new_Q ^= (R[n] < tmp); - } - - SetQ(new_Q); - SetT(new_Q == GetM()); - END_OP - - - // - // DIV0S Rm,Rn - // - BEGIN_OP(DIV0S_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned new_Q = R[n] >> 31; - const unsigned new_M = R[m] >> 31; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetQ(new_Q); - SetM(new_M); - SetT(new_Q != new_M); - END_OP - - - // - // DIV0U - // - BEGIN_OP(DIV0U) - SetQ(false); - SetM(false); - SetT(false); - END_OP - - - // - // DT - // - BEGIN_OP(DT) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n]--; - SetT(!R[n]); - END_OP - - - // - // EXTS.B Rm,Rn - // - BEGIN_OP(EXTS_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (int8)R[m]; - END_OP - - - // - // EXTS.W Rm,Rn - // - BEGIN_OP(EXTS_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (int16)R[m]; - END_OP - - - // - // EXTU.B Rm,Rn - // - BEGIN_OP(EXTU_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (uint8)R[m]; - END_OP - - - // - // EXTU.W Rm,Rn - // - BEGIN_OP(EXTU_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (uint16)R[m]; - END_OP - - - // - // MAC.L @Rm+,@Rn+ - // - // Pipeline: page 188(not implemented right here) - BEGIN_OP(MAC_L) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint64 a, b, sum; - int32 m0, m1; - - // Order confirmed. - m0 = (int32)MemRead(R[m]); - R[m] += 4; - m1 = (int32)MemRead(R[n]); - R[n] += 4; - - a = GetMAC64(); - b = (int64)m0 * m1; - sum = a + b; - - if(GetS() && sum > 0x00007FFFFFFFFFFFULL && sum < 0xFFFF800000000000ULL) - { - if((int32)(m0 ^ m1) < 0) - sum = 0xFFFF800000000000ULL; - else - sum = 0x00007FFFFFFFFFFFULL; - } - - SetMAC64(sum); - - timestamp++; - END_OP - - - // - // MAC.W @Rm+,@Rn+ - // - // Pipeline: page 180(not implemented right here) - BEGIN_OP(MAC_W) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - int16 m0, m1; - - // Order confirmed. - m0 = (int16)MemRead(R[m]); - R[m] += 2; - m1 = (int16)MemRead(R[n]); - R[n] += 2; - - if(GetS()) - { - int32 b = (int32)m0 * m1; - uint64 sum = (int64)(int32)MACL + b; - - if(sum > 0x000000007FFFFFFFULL && sum < 0xFFFFFFFF80000000ULL) - { - MACH |= 1; - - if(b < 0) - sum = 0x80000000ULL; - else - sum = 0x7FFFFFFFULL; - } - - MACL = sum; - } - else - SetMAC64(GetMAC64() + (int64)m0 * m1); - - timestamp++; - END_OP - - - // - // DMULS.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(DMULS_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (int64)(int32)R[n] * (int32)R[m]; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = result >> 0; - MACH = result >> 32; - END_OP - - - // - // DMULU.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(DMULU_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] * R[m]; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = result >> 0; - MACH = result >> 32; - END_OP - - - // - // MUL.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(MUL_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = R[n] * R[m]; - END_OP - - - // - // MULS.W Rm,Rn - // - // Pipeline: page 207 - BEGIN_OP(MULS_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 2; - - MACL = (int16)R[n] * (int16)R[m]; - END_OP - - - // - // MULU.W Rm,Rn - // - // Pipeline: page 207 - BEGIN_OP(MULU_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 2; - - MACL = (uint32)(uint16)R[n] * (uint32)(uint16)R[m]; - END_OP - - - // - // NEG Rm,Rn - // - BEGIN_OP(NEG_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = -R[m]; - END_OP - - - // - // NEGC Rm,Rn - // - BEGIN_OP(NEGC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)0 - R[m] - GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // SUB Rm,Rn - // - BEGIN_OP(SUB_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] - R[m]; - END_OP - - - // - // SUBC Rm,Rn - // - BEGIN_OP(SUBC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] - R[m] - GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // SUBV Rm,Rn - // - BEGIN_OP(SUBV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 result = R[n] - R[m]; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((((R[n] ^ R[m])) & (R[n] ^ result)) >> 31); - R[n] = result; - END_OP - - - // - // AND Rm,Rn - // - BEGIN_OP(AND_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] & R[m]; - END_OP - - - // - // AND #imm,R0 - // - BEGIN_OP(AND_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] = R[0] & imm; - END_OP - - - // - // AND.B #imm,@(R0,GBR) - // - BEGIN_OP(AND_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp &= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // NOT Rm,Rn - // - BEGIN_OP(NOT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = ~R[m]; - END_OP - - - // - // OR Rm,Rn - // - BEGIN_OP(OR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] |= R[m]; - END_OP - - - // - // OR #imm,R0 - // - BEGIN_OP(OR_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] |= imm; - END_OP - - - // - // OR.B #imm,@(R0,GBR) - // - BEGIN_OP(OR_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp |= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // TAS.B @Rn - // - BEGIN_OP(TAS_B_REGINDIR) - const unsigned n = instr_nyb2; - const uint32 ea = R[n]; - uint8 tmp; - - SH7095_BusLock++; - tmp = ExtBusRead(ea); // FIXME: Address error on invalid address(>= 0x40000000 ?). - timestamp = SH7095_mem_timestamp; - - SetT(!tmp); - - tmp |= 0x80; - - MemWrite(ea, tmp); - SH7095_BusLock--; - - timestamp += 3; - END_OP - - - // - // TST Rm,Rn - // - BEGIN_OP(TST_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(!(R[n] & R[m])); - END_OP - - - // - // TST #imm,R0 - // - BEGIN_OP(TST_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - SetT(!(R[0] & imm)); - END_OP - - - // - // TST.B #imm,@(R0,GBR) - // - BEGIN_OP(TST_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - SetT(!(tmp & imm)); - timestamp++; - END_OP - - - // - // XOR Rm,Rn - // - BEGIN_OP(XOR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] ^ R[m]; - END_OP - - - // - // XOR #imm,R0 - // - BEGIN_OP(XOR_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] = R[0] ^ imm; - END_OP - - - // - // XOR.B #imm,@(R0,GBR) - // - BEGIN_OP(XOR_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp ^= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // ROTL Rn - // - BEGIN_OP(ROTL_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] = (R[n] << 1) | rotbit; - SetT(rotbit); - END_OP - - - // - // ROTR Rn - // - BEGIN_OP(ROTR_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (R[n] >> 1) | (rotbit << 31); - SetT(rotbit); - END_OP - - - // - // ROTCL Rn - // - BEGIN_OP(ROTCL_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] = (R[n] << 1) | GetT(); - SetT(rotbit); - END_OP - - - // - // ROTCR Rn - // - BEGIN_OP(ROTCR_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (R[n] >> 1) | (GetT() << 31); - SetT(rotbit); - END_OP - - - // - // SHAR Rn - // - BEGIN_OP(SHAR_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (int32)R[n] >> 1; - SetT(shbit); - END_OP - - - // - // SHLL Rn - // - BEGIN_OP(SHLL_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] <<= 1; - SetT(shbit); - END_OP - - - // - // SHLR Rn - // - BEGIN_OP(SHLR_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] >>= 1; - SetT(shbit); - END_OP - - - // - // SHLL2 Rn - // - BEGIN_OP(SHLL2_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 2; - END_OP - - - // - // SHLR2 Rn - // - BEGIN_OP(SHLR2_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 2; - END_OP - - - // - // SHLL8 Rn - // - BEGIN_OP(SHLL8_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 8; - END_OP - - - // - // SHLR8 Rn - // - BEGIN_OP(SHLR8_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 8; - END_OP - - - // - // SHLL16 Rn - // - BEGIN_OP(SHLL16_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 16; - END_OP - - - // - // SHLR16 Rn - // - BEGIN_OP(SHLR16_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 16; - END_OP - - - // - // BF - // - BEGIN_OP(BF) - CondRelBranch(!GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BF/S - // - BEGIN_OP(BF_S) - CondRelBranch(!GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BT - // - BEGIN_OP(BT) - CondRelBranch(GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BT/S - // - BEGIN_OP(BT_S) - CondRelBranch(GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BRA - // - BEGIN_OP_DLYIDIF(BRA) - UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); - END_OP - - - // - // BRAF Rm - // - BEGIN_OP_DLYIDIF(BRAF_REG) - const unsigned m = instr_nyb2; - - UCRelDelayBranch(R[m]); - END_OP - - - // - // BSR - // - BEGIN_OP_DLYIDIF(BSR) - PR = PC; - - UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); - END_OP - - - // - // BSRF Rm - // - BEGIN_OP_DLYIDIF(BSRF_REG) - const unsigned m = instr_nyb2; - - PR = PC; - - UCRelDelayBranch(R[m]); - END_OP - - - // - // JMP @Rm - // - BEGIN_OP_DLYIDIF(JMP_REGINDIR) - const unsigned m = instr_nyb2; - - UCDelayBranch(R[m]); - END_OP - - - // - // JSR @Rm - // - BEGIN_OP_DLYIDIF(JSR_REGINDIR) - const unsigned m = instr_nyb2; - - PR = PC; - - UCDelayBranch(R[m]); - END_OP - - - // - // RTS - // - BEGIN_OP_DLYIDIF(RTS) - UCDelayBranch(PR); - END_OP - - - // - // CLRT - // - BEGIN_OP(CLRT) - SetT(false); - END_OP - - - // - // CLRMAC - // - BEGIN_OP(CLRMAC) - MACH = 0; - MACL = 0; - END_OP - - - // - // LDC - // - BEGIN_OP_DLYIDIF(LDC) - const unsigned m = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - - CtrlRegs[cri] = R[m]; - if(cri == 0) - { - SR &= 0x3F3; - RecalcPendingIntPEX(); - } - PART_OP_INTDIS - END_OP - - // - // LDC.L - // - // Pipeline: page 233 - // - BEGIN_OP_DLYIDIF(LDC_L) - const unsigned m = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - timestamp++; - CtrlRegs[cri] = MemRead(ea); - if(cri == 0) - { - SR &= 0x3F3; - RecalcPendingIntPEX(); - } - - timestamp++; - PART_OP_INTDIS - END_OP - - - // - // LDS - // - BEGIN_OP_DLYIDIF(LDS) - const unsigned m = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - - SysRegs[sri] = R[m]; - PART_OP_INTDIS - END_OP - - - // - // LDS.L - // - BEGIN_OP_DLYIDIF(LDS_L) // Pipeline same as ordinary load instruction - const unsigned m = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - PART_OP_INTDIS - - SysRegs[sri] = MemRead(ea); - //printf(" LDS.L: (0x%08x)->0x%08x\n", ea, SysRegs[sri]); - END_OP - - - // - // NOP - // - BEGIN_OP(NOP) - END_OP - - - // - // RTE - // - // Pipeline: page 241 - // - BEGIN_OP(RTE) - uint32 new_PC; - - new_PC = MemRead(R[15]); - R[15] += 4; - - SR = MemRead(R[15]); - RecalcPendingIntPEX(); - R[15] += 4; - - timestamp++; - - Branch(new_PC); - END_OP - - - // - // SETT - // - BEGIN_OP(SETT) - SetT(true); - END_OP - - - // - // SLEEP - // - BEGIN_OP_DLYIDIF(SLEEP) - // - // Standby mode time yay? - // - if(MDFN_UNLIKELY(SBYCR & 0x80)) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Entering standby mode.\n", cpu_name); - - for(unsigned ch = 0; ch < 2; ch++) - { - DMACH[ch].CHCR = 0x00; - DMACH[ch].CHCRM = 0x00; - } - DMAOR = 0x00; - DMA_RecalcRunning(); - RecalcPendingIntPEX(); - // - // - FRT_Reset(); - // - // - WDT_StandbyReset(); - // - // - SCI_Reset(); - // - // - - timestamp++; - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0x7E << 24); - - Standby = true; - - return; - } - - if(MDFN_LIKELY(!EPending)) - { - timestamp += 3; - return; - } - else - { - DoIDIF(); - } - END_OP - - BEGIN_OP_DLYIDIF(PSEUDO_STANDBY) - if(MDFN_LIKELY(Standby)) - { - timestamp += 7; - return; - } - else - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exiting standby mode.\n", cpu_name); - - FRT_Reset(); // Reset again(for the counter) because we didn't stop clocking it. - - DoIDIF(); - } - END_OP - - // - // STC - // - BEGIN_OP_DLYIDIF(STC) - const unsigned n = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - - R[n] = CtrlRegs[cri]; - PART_OP_INTDIS - END_OP - - - // - // STC.L - // - // pipeline: page 234 - BEGIN_OP_DLYIDIF(STC_L) - const unsigned n = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - uint32 ea; - - R[n] -= 4; - ea = R[n]; - - MemWrite(ea, CtrlRegs[cri]); - timestamp++; - PART_OP_INTDIS - END_OP - - - // - // STS - // - BEGIN_OP_DLYIDIF(STS) - const unsigned n = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - - R[n] = SysRegs[sri]; - PART_OP_INTDIS - END_OP + // +#if 0 + { + const uint32 sci_ip_tmp = (SCI.SSR & SCI.SCR & 0xC4) | (SCI.SSR & 0x38); + if(sci_ip_tmp && (tmp_ipr = ((IPRB >> 12) & 0xF)) > ipr) + { + ipr = tmp_ipr; + if(sci_ip_tmp & 0x38) // ERI(receive error; ORER, PER, FER) + vecnum = (VCRA >> 8) & 0x7F; + else if(sci_ip_tmp & 0x40)// RXI(receive data full; RDRF) + vecnum = (VCRA >> 0) & 0x7F; + else if(sci_ip_tmp & 0x80)// TXI(transmit data empty; TDRE) + vecnum = (VCRB >> 8) & 0x7F; + else if(sci_ip_tmp & 0x04)// TEI(transmit end; TEND) + vecnum = (VCRB >> 0) & 0x7F; + } + } +#endif + // // - // STS.L // - BEGIN_OP_DLYIDIF(STS_L) // Pipeline same as ordinary store instruction - const unsigned n = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - uint32 ea; + const uint32 frt_ip_tmp = (FRT.FTCSR & FRT.TIER & 0x8E); + if(frt_ip_tmp && (tmp_ipr = ((IPRB >> 8) & 0xF)) > ipr) + { + ipr = tmp_ipr; - R[n] -= 4; - ea = R[n]; + if(frt_ip_tmp & 0x80) // ICI + vecnum = (VCRC >> 8) & 0x7F; + else if(frt_ip_tmp & 0x0C) // OCIA+OCIB + vecnum = (VCRC >> 0) & 0x7F; + else // OVI + vecnum = (VCRD >> 8) & 0x7F; + } - //printf(" STS.L: 0x%08x->(0x%08x)\n", SysRegs[sri], ea); + if(vecnum_out) + { + if(vecnum == ~0U) + vecnum = ExIVecFetch(); - MemWrite(ea, SysRegs[sri]); + *vecnum_out = vecnum; + } - PART_OP_INTDIS - END_OP + return ipr; +} +// +// Call after changes to: +// IRL +// SR +// +// IPRA +// IPRB +// +// DMACH[*].CHCR +// +// DVCR +// +// FRT.FTCSR +// FRT.TIER +// +void NO_INLINE SH7095::RecalcPendingIntPEX(void) +{ + if(GetPendingInt(NULL) > ((SR >> 4) & 0xF)) + SetPEX(PEX_INT); + else + ClearPEX(PEX_INT); +} - // - // TRAPA #imm - // - // Saved PC is the address of the instruction after the TRAPA instruction - // - BEGIN_OP_DLYIDIF(TRAPA) - const unsigned imm = (uint8)instr; +static const uint8 InstrDecodeTab[65536] = +{ + #include "sh7095_idecodetab.inc" +}; - PC -= 2; - Branch(Exception(EXCEPTION_TRAP, imm)); - END_OP +/* */ +/* TODO: Stop reading from memory when an exception is pending? */ +/* */ +#define FetchIF() \ +{ \ + if(DebugMode) \ + PC_IF = PC; \ + \ + if(EmulateICache) \ + { \ + Pipe_IF = (uint16)IBuffer; \ + \ + if(!(PC & 0x2)) \ + { \ + MemReadInstr(PC, IBuffer); \ + Pipe_IF = IBuffer >> 16; \ + } \ + } \ + else \ + { \ + if(timestamp < (MA_until - ((int32)(PC & 0x2) << 28))) \ + timestamp = MA_until; \ + \ + Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); \ + \ + if(MDFN_UNLIKELY((int32)PC < 0)) /* Mr. Boooones */ \ + Pipe_IF = Cache_ReadDataArray(PC); \ + } \ + timestamp++; \ +} + +#define FetchIF_ForceIBufferFill() \ +{ \ + if(DebugMode) \ + PC_IF = PC; \ + \ + if(EmulateICache) \ + { \ + MemReadInstr(PC &~ 2, IBuffer); \ + /*Pipe_IF = (uint16)(IBuffer >> (((PC & 2) ^ 2) << 3));*/ \ + Pipe_IF = (uint16)IBuffer; \ + if(!(PC & 0x2)) \ + Pipe_IF = IBuffer >> 16; \ + } \ + else \ + { \ + if(timestamp < MA_until) \ + timestamp = MA_until; \ + \ + Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); \ + \ + if(MDFN_UNLIKELY((int32)PC < 0)) /* Mr. Boooones */ \ + Pipe_IF = Cache_ReadDataArray(PC); \ + } \ + timestamp++; \ +} + +#define DoID(IntPreventNext) \ +{ \ + uint32 op = InstrDecodeTab[Pipe_IF]; \ + uint32 epo = EPending; \ + \ + if(IntPreventNext) \ + { \ + epo &= ~(1U << (PEX_INT + EPENDING_PEXBITS_SHIFT)); \ + if(!(epo & (0xFF << EPENDING_PEXBITS_SHIFT))) \ + epo = 0; \ + } \ + \ + if(DebugMode) \ + PC_ID = PC_IF; \ + \ + Pipe_ID = Pipe_IF | (op << 24) | epo; \ +} + +#define DoIDIF_MACRO(IntPreventNext) \ +{ \ + DoID(IntPreventNext); \ + FetchIF(); \ +} + +/* */ +/* Not totally correct, but simplifies things...probably :p */ +/* */ +#define DelayBranch(target_) \ +{ \ + { \ + const uint32 target = (target_); \ + \ + if(DebugMode > 0) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + } \ + \ + /* Redecode the opcode from the 16-bit instruction to makes sure */ \ + /* exceptions won't be taken in the delay slot(due to op field */ \ + /* being forced to 0xFF by OR'ing with EPending in the previous */ \ + /* call to DoID()), and forces usage of the second half of the */ \ + /* opcode table so we can generate illegal slot instruction */ \ + /* exceptions as appropriate. */ \ + Pipe_ID = (uint16)Pipe_ID; \ + Pipe_ID |= (InstrDecodeTab[Pipe_ID] | 0x80) << 24; \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + /* Pending for the instruction after the delay slot instruction. */ \ + SetPEX(PEX_CPUADDR); \ + } \ + else \ + { \ + /* This discards the previously-fetched instruction after the */ \ + /* delay slot instruction. Poor, poor instruction. */ \ + if(EmulateICache) \ + UCRead_IF_Kludge = false; \ + FetchIF_ForceIBufferFill() \ + if(EmulateICache) \ + timestamp -= (PC >> 1) & UCRead_IF_Kludge; /* WTFBBQ?! */ \ + } \ +} + +#define Branch(need_addbt, target_) \ +{ \ + { \ + const uint32 target = (target_); \ + \ + if(need_addbt) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + } \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + SetPEX(PEX_CPUADDR); \ + DoID(false); \ + } \ + else \ + { \ + /* This sequence discards the previously-fetched two instructions */ \ + /* after the branch instruction. */ \ + if(EmulateICache) \ + UCRead_IF_Kludge = false; \ + FetchIF_ForceIBufferFill(); \ + if(EmulateICache) \ + timestamp -= (PC >> 1) & UCRead_IF_Kludge; /* WTFBBQ?! */ \ + PC += 2; \ + DoIDIF(false); \ + } \ +} + + +/* Remember to use with BEGIN_OP_DLYIDIF instead of BEGIN_OP */ +#define UCDelayBranch(target) \ +{ \ + if(DebugMode > 0) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + \ + if(DebugMode) \ + PC_ID = PC_IF; \ + \ + Pipe_ID = Pipe_IF | ((InstrDecodeTab[Pipe_IF] | 0x80) << 24); \ + \ + timestamp++; \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + /* Pending for the instruction after the delay slot instruction. */ \ + SetPEX(PEX_CPUADDR); \ + } \ + else \ + { \ + FetchIF_ForceIBufferFill(); \ + } \ +} + +/* Remember to use with BEGIN_OP_DLYIDIF instead of BEGIN_OP */ +#define UCRelDelayBranch(disp) UCDelayBranch(PC + (disp)) + +#define CondRelBranch(cond, disp) \ +{ \ + if(cond) \ + Branch(true, PC + (disp)); \ +} + +#define CondRelDelayBranch(cond, disp) \ +{ \ + if(cond) \ + DelayBranch(PC + (disp)); \ +} + +/* Reset/Poweron exception handling. */ +#define Exception_ResPow(exnum, vecnum, new_PC) \ +{ \ + timestamp += 2; \ + timestamp = std::max(MA_until, timestamp); \ + \ + MemRead32(((vecnum) + 0) << 2, new_PC); \ + MemRead32(((vecnum) + 1) << 2, R[15]); \ + \ + if(DebugMode) \ + DBG_AddBranchTrace(this - CPU, new_PC, (exnum), (vecnum)); \ + \ + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] Exception %s, New PC=0x%08x, New R15=0x%08x", cpu_name, ((exnum) == EXCEPTION_RESET ? "RESET" : "POWERON"), new_PC, R[15]); \ +} + +#define Exception(exnum, vecnum, new_PC) \ +{ \ + timestamp += 2; \ + timestamp = std::max(MA_until, timestamp); \ + \ + /* Save SR to stack */ \ + /* Save PC to stack */ \ + /* Read exception vector table */ \ + R[15] -= 4; \ + MemWrite32(R[15], SR); \ + timestamp++; \ + R[15] -= 4; \ + MemWrite32(R[15], PC); \ + timestamp++; \ + timestamp++; \ + MemRead32(VBR + ((vecnum) << 2), new_PC); \ + timestamp++; \ + \ + if(DebugMode) \ + DBG_AddBranchTrace(this - CPU, new_PC, (exnum), (vecnum)); \ + \ + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] Exception %u, vecnum=0x%02x, VBR=0x%08x, saved PC=0x%08x, New PC=0x%08x, New R15=0x%08x", cpu_name, (exnum), (vecnum), VBR, PC, new_PC, R[15]); \ +} - /* - ** - ** - */ - // - // Illegal Instruction - // - // Saved PC is the address of the illegal instruction. - // - BEGIN_OP_DLYIDIF(ILLEGAL) - PC -= 4; - Branch(Exception(EXCEPTION_ILLINSTR, VECNUM_ILLINSTR)); - END_OP +/* + PC == 0 + instr = [?] + ID = [?] + IF = [0] - // - // Illegal Slot Instruction - // - // Saved PC is the effective target address of the jump. - // - BEGIN_OP_DLYIDIF(SLOT_ILLEGAL) - PC -= 2; - Branch(Exception(EXCEPTION_ILLSLOT, VECNUM_ILLSLOT)); - END_OP + PC == 2 + instr = [?] + ID = [0] + IF = [2] - // - // Pending exception(address error/interrupt) - // - BEGIN_OP_DLYIDIF(PSEUDO_EPENDING) - uint32 new_PC = 0; + PC == 4 + instr = [0] + ID = [2] + IF = [4] - // - // Priority here(listed highest to lowest): - // External halt - // Power - // Reset - // Pseudo DMA burst(hacky abusey thing to stall the CPU, should be above everything but reset/power and ext halt otherwise kaboom!). - // CPU address error - // DMA address error - // NMI - // Interrupt (final else, may be called quasi-spuriously) - // - #define TPP(x) (Pipe_ID & (1U << ((x) + EPENDING_PEXBITS_SHIFT))) - // - // Test against Pipe_ID, reset bits in EPending(if appropriate). - // - if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_EXTHALT))) - { - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Ext halt begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); - return; - } - else if(MDFN_UNLIKELY(TPP(PEX_POWERON) || TPP(PEX_RESET))) - { - if(TPP(PEX_POWERON)) - { - EPending = 0; - new_PC = Exception(EXCEPTION_POWERON, VECNUM_POWERON); - } - else - { - EPending = 0; - new_PC = Exception(EXCEPTION_RESET, VECNUM_RESET); - } - } - else if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_DMABURST))) - { - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); - return; - } - else if(MDFN_UNLIKELY(TPP(PEX_CPUADDR))) - { - PC -= 4; - ClearPEX(PEX_CPUADDR); - new_PC = Exception(EXCEPTION_CPUADDR, VECNUM_CPUADDR); - ClearPEX(PEX_CPUADDR); // Infinite recursive address errors are not good(stack wraparound could clobber backup memory). - } - else if(MDFN_UNLIKELY(TPP(PEX_DMAADDR))) - { - PC -= 4; - ClearPEX(PEX_DMAADDR); - new_PC = Exception(EXCEPTION_DMAADDR, VECNUM_DMAADDR); - } - else if(TPP(PEX_NMI)) - { - PC -= 4; - ClearPEX(PEX_NMI); - new_PC = Exception(EXCEPTION_NMI, VECNUM_NMI); - // - // - // - SR |= 0xF << 4; - RecalcPendingIntPEX(); - } - else // Int - { - uint8 ipr; +*/ - ipr = GetPendingInt(NULL); +#define DoIDIF(IntPreventNext) DoIDIF_NI() - if(MDFN_LIKELY(ipr > ((SR >> 4) & 0xF))) - { - uint8 vecnum; +#define OnChipRegRead(T, A) OnChipRegRead_INLINE(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI(A, V) - // Note: GetPendingInt() may call ExIVecFetch(), which may call SetIRL with a new value, so be - // careful to use the "old" value here. - GetPendingInt(&vecnum); - - PC -= 4; - new_PC = Exception(EXCEPTION_INT, vecnum); - // - // - // - SR &= ~(0xF << 4); - SR |= ipr << 4; - RecalcPendingIntPEX(); - } - else - { - // - // Can happen like so(note for future testing): - // - // (WDT interval timer IRQ pending here) - // - // WTCSR_R; - // asm volatile( - // "ldc %0,SR\n\t" - // "mov.w %2, @%1\n\t" - // : - // :"r"(0), "r"(0xFFFFFE88), "r"(0xA500 | 0x00) - // : "memory"); - // - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Spurious EPENDING. IPR=0x%02x SR=0x%04x EPending=0x%08x Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, ipr, SR, EPending, Pipe_ID, PC); - - Pipe_ID = (uint16)Pipe_ID; - Pipe_ID |= InstrDecodeTab[Pipe_ID] << 24; - goto SPEPRecover; - } - } - // - // - // - Branch(new_PC); - END_OP +#define MemReadInstr(A, outval) { outval = (MRFPI[(A) >> 29](A)); } +#define MemRead8(A, outval) { outval = (MRFP8[(A) >> 29](A)); } +#define MemRead16(A, outval) { outval = (MRFP16[(A) >> 29](A)); } +#define MemRead32(A, outval) { outval = (MRFP32[(A) >> 29](A)); } +#define MemRead16_I(A, outval) { outval = (MRFP16_I[(A) >> 29](A)); } +#define MemRead32_I(A, outval) { outval = (MRFP32_I[(A) >> 29](A)); } - BEGIN_OP_DLYIDIF(PSEUDO_DMABURST) - if(MDFN_LIKELY(DMA_InBurst() || ExtHalt)) - { - timestamp += 7; - return; - } - else - { - ClearPEX(PEX_PSEUDO_DMABURST); - ClearPEX(PEX_PSEUDO_EXTHALT); +#define MemWrite8(A, V) MWFP8[(A) >> 29]((A), (V)); +#define MemWrite16(A, V) MWFP16[(A) >> 29]((A), (V)); +#define MemWrite32(A, V) MWFP32[(A) >> 29]((A), (V)); +#define CHECK_EXIT_RESUME() { if(EmulateICache && !which) { if(DebugMode) CPU[1].RunSlaveUntil_Debug(timestamp); else CPU[1].RunSlaveUntil(timestamp); } } +#define CONST_VAR(T, n) const T n +#define RESUME_VAR(T, n) T n - // - // Recover Pipe_ID opcode field; only use Pipe_ID for this, not EPending, otherwise - // we may accidentally allow an interrupt to occur immediately after an interrupt-disabled instruction. - // - Pipe_ID &= 0x00FFFFFF; - Pipe_ID &= ~(1U << (PEX_PSEUDO_DMABURST + EPENDING_PEXBITS_SHIFT)); - Pipe_ID &= ~(1U << (PEX_PSEUDO_EXTHALT + EPENDING_PEXBITS_SHIFT)); - Pipe_ID |= InstrDecodeTab[(uint16)Pipe_ID] << 24; - if(Pipe_ID & (0xFF << EPENDING_PEXBITS_SHIFT)) - Pipe_ID |= EPENDING_OP_OR; +template +INLINE void SH7095::DoIDIF_INLINE(void) +{ + DoIDIF_MACRO(IntPreventNext); +} - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst/External halt end: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - return; - } - END_OP +template +static NO_INLINE MDFN_HOT void DoIDIF_NI(void) +{ + CPU[which].DoIDIF_INLINE(); +} +template +INLINE void SH7095::Step(void) +{ + // + // Ideally, we would place SPEPRecover: after the FRT event check, but doing + // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions + // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop + // or something?(even with all our branch hinting!) + // + SPEPRecover:; - #undef BEGIN_OP - #undef BEGIN_OP_DLYIDIF - #undef END_OP + if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) + { + FRT_WDT_Update(); + FRT_WDT_Recalc_NET(); } - PC += 2; + const uint32 instr = (uint16)Pipe_ID; + const unsigned instr_nyb1 = (instr >> 4) & 0xF; + const unsigned instr_nyb2 = (instr >> 8) & 0xF; +// asm volatile("":: "a"(instr_nyb1), "d"(instr_nyb2)); + // + #include "sh7095_ops.inc" + // } - +#undef CHECK_EXIT_RESUME +#undef DoIDIF +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite +#undef MemReadInstr +#undef MemRead8 +#undef MemRead16 +#undef MemRead32 +#undef MemRead16_I +#undef MemRead32_I +#undef MemWrite8 +#undef MemWrite16 +#undef MemWrite32 +#undef CONST_VAR +#undef RESUME_VAR +// +// +// +// +// +#pragma GCC push_options +#pragma GCC optimize("O2,no-gcse") //no-unroll-loops,no-peel-loops,no-crossjumping") + +#define DoIDIF(IntPreventNext) DoIDIF_MACRO(IntPreventNext) + +#define OnChipRegRead(T, A) OnChipRegRead_NI<1, T>(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI<1, true, T, BurstHax>(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI<1, true, T>(A, V) + +#define MemReadInstr(A, outval) MemRead(true, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead8(A, outval) MemRead(false, uint8, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint8_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead16(A, outval) MemRead(false, uint16, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint16_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead32(A, outval) MemRead(false, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead16_I(A, outval) MemRead(-1, uint16, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint16_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead32_I(A, outval) MemRead(-1, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) + +#define MemWrite8(A, V) MemWrite(uint8, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint8_A, Resume_unmasked_A, Resume_uint8_V) +#define MemWrite16(A, V) MemWrite(uint16, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint16_A, Resume_unmasked_A, Resume_uint16_V) +#define MemWrite32(A, V) MemWrite(uint32, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint32_A, Resume_unmasked_A, Resume_uint32_V) + +#define CHECK_EXIT_RESUME__(n) \ + { \ + if(timestamp >= bound_timestamp) \ + { \ + ResumePoint = &&Resume_ ## n; \ + return; \ + } \ + Resume_ ## n:; \ + } + +#define CHECK_EXIT_RESUME_(n) CHECK_EXIT_RESUME__(n) +#define CHECK_EXIT_RESUME() CHECK_EXIT_RESUME_(__COUNTER__) + +#define instr Resume_instr +#define instr_nyb1 ((instr >> 4) & 0xF) +#define instr_nyb2 ((instr >> 8) & 0xF) +#define opexec_MAC_L_m0 Resume_MAC_L_m0 +#define opexec_MAC_L_m1 Resume_MAC_L_m1 +#define opexec_MAC_W_m0 Resume_MAC_W_m0 +#define opexec_MAC_W_m1 Resume_MAC_W_m1 +#define opexec_ea Resume_ea +#define opexec_new_PC Resume_new_PC +#define opexec_new_SR Resume_new_SR +#define opexec_ipr Resume_ipr +#define opexec_exnum Resume_exnum +#define opexec_vecnum Resume_vecnum +#define CONST_VAR(T, n) T n; n +#define RESUME_VAR(T, n) static_assert(std::is_same::value, "Resume variable type mismatch.") +#define SH7095_NEED_RESUME_TABLE_INIT 1 + + +#define SH7095_DEBUG_MODE 0 +#include "sh7095s_cnorm.inc" +static_assert(__COUNTER__ == 5000, "Unexpected __COUNTER__ value."); +NO_CLONE NO_INLINE MDFN_HOT void SH7095::RunSlaveUntil(const sscpu_timestamp_t bound_timestamp) +{ + #include "sh7095s_rsu.inc" +} +#undef SH7095_DEBUG_MODE + +#define SH7095_DEBUG_MODE 1 +#include "sh7095s_cnorm_dm.inc" +static_assert(__COUNTER__ == 10000, "Unexpected __COUNTER__ value."); +NO_CLONE NO_INLINE MDFN_COLD void SH7095::RunSlaveUntil_Debug(const sscpu_timestamp_t bound_timestamp) +{ + #include "sh7095s_rsu.inc" +} +#undef SH7095_DEBUG_MODE + +#pragma GCC pop_options +#undef DoIDIF +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite +#undef MemReadInstr +#undef MemRead8 +#undef MemRead16 +#undef MemRead32 +#undef MemRead16_I +#undef MemRead32_I +#undef MemWrite8 +#undef MemWrite16 +#undef MemWrite32 +#undef CHECK_EXIT_RESUME__ +#undef CHECK_EXIT_RESUME_ +#undef CHECK_EXIT_RESUME +#undef instr +#undef instr_nyb1 +#undef instr_nyb2 +#undef opexec_MAC_L_m0 +#undef opexec_MAC_L_m1 +#undef opexec_MAC_W_m0 +#undef opexec_MAC_W_m1 +#undef opexec_ea +#undef opexec_new_PC +#undef opexec_new_SR +#undef opexec_ipr +#undef opexec_exnum +#undef opexec_vecnum +#undef CONST_VAR +#undef RESUME_VAR +#undef SH7095_NEED_RESUME_TABLE_INIT +// +// +// +// +// +// void SH7095::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname) { SFORMAT StateRegs[] = @@ -4858,6 +3584,7 @@ SFVAR(MM_until), SFVAR(write_finish_timestamp), SFVAR(WB_until), + SFVAR(UCRead_IF_Kludge), SFVAR(SysRegs), SFVAR(EPending), @@ -4867,7 +3594,7 @@ SFVAR(IBuffer), SFPTR32(Cache->Tag, 4, 64, sizeof(*Cache), Cache), - SFVAR(Cache->LRU, 64, sizeof(*Cache), Cache), + SFVARN(Cache_LRU, "Cache->LRU"), SFPTR32((uint32*)Cache->Data, 16, 64, sizeof(*Cache), Cache), // Cast because it's stored as native-endian 32-bit. SFVAR(CCR), @@ -4896,6 +3623,11 @@ SFVAR(BSC.RTCNT), SFVAR(BSC.RTCOR), + SFVAR(BSC.sdram_finish_time), + SFVAR(BSC.last_mem_time), + SFVAR(BSC.last_mem_addr), + SFVAR(BSC.last_mem_type), + SFVAR(SBYCR), SFVAR(Standby), @@ -4922,10 +3654,10 @@ SFVAR(WDT.RSTCSR), SFVAR(WDT.RSTCSRM), - SFVAR(dma_lastts), - - SFVAR(DMA_ClockCounter), - SFVAR(DMA_SGCounter), + // SFVAR(DMA_ClockCounter), + // SFVAR(DMA_SGCounter), + SFVAR(DMA_Timestamp), + SFVAR(DMA_SGEndTimestamp), SFVAR(DMA_RoundRobinRockinBoppin), SFVAR(DMA_PenaltyKludgeAmount), @@ -4974,36 +3706,182 @@ MDFNSS_StateAction(sm, load, data_only, StateRegs, sname); + if(this == &CPU[1]) + StateAction_SlaveResume(sm, load, data_only, "SH2-S-Resume"); +} + +void SH7095::StateAction_SlaveResume(StateMem* sm, const unsigned load, const bool data_only, const char* sname) +{ + int32 ResumePointI = -1; + uint32 Resume_cent_I = 0; + + if(!load) + { + if(ResumePoint) + { + for(uint32 i = 0; i < 512; i++) + { + if(ResumeTableP[DM_Setting][i] == ResumePoint) + { + ResumePointI = i; + break; + } + } + assert(ResumePointI >= 0); + } + //printf("State save resume point: %016llx (%d)\n", (unsigned long long)(uintptr_t)ResumePoint, ResumePointI); + + if(Resume_cent) + { + Resume_cent_I = Resume_cent - Cache; + assert(Resume_cent_I < 0x40); + } + } + + SFORMAT StateRegs[] = + { + SFVAR(ResumePointI), + SFVAR(Resume_uint8_A), + SFVAR(Resume_uint16_A), + SFVAR(Resume_uint32_A), + SFVAR(Resume_unmasked_A), + SFVAR(Resume_cent_I), + SFVAR(Resume_way_match), + SFVAR(Resume_uint8_V), + SFVAR(Resume_uint16_V), + SFVAR(Resume_uint32_V), + SFVAR(Resume_instr), + + SFVAR(Resume_MAC_L_m0), + SFVAR(Resume_MAC_L_m1), + + SFVAR(Resume_MAC_W_m0), + SFVAR(Resume_MAC_W_m1), + + SFVAR(Resume_ea), + SFVAR(Resume_new_PC), + SFVAR(Resume_new_SR), + + SFVAR(Resume_ipr), + SFVAR(Resume_exnum), + SFVAR(Resume_vecnum), + + SFEND + }; + + MDFNSS_StateAction(sm, load, data_only, StateRegs, sname, load < 0x00102600); + if(load) { - SetCCR(CCR); + ResumePoint = nullptr; - if(load < 0x00102300) + if(ResumePointI >= 0) { - ExtHaltDMA = ExtHalt; + ResumePoint = ResumeTableP[DM_Setting][ResumePointI & 511]; + assert(ResumePoint != nullptr); } + //printf("State load resume point: %016llx (%d)\n", (unsigned long long)(uintptr_t)ResumePoint, ResumePointI); + Resume_uint16_A &= ~1; + Resume_uint32_A &= ~3; + Resume_cent = &Cache[Resume_cent_I & 0x3F]; + Resume_way_match = std::max(-1, std::min(3, Resume_way_match)); + Resume_instr &= 0xFFFF; } } // -// Called after loading a state where instruction cache emulation was not previously enabled in the emulator, but is enabled now(e.g. via database). -// -// May not cover all cases, needs more testing. +// Only call after all emulated devices variables and RAM have been loaded from the save state. // -void SH7095::FixupICacheModeState(void) +void SH7095::PostStateLoad(const unsigned state_version, const bool recorded_needicache, const bool needicache) { - for(unsigned i = 0; i < 16; i++) - WB_until[i] = 0; // - //const uint32 old_IBuffer = IBuffer; - const uint32 A = (PC - 2) & ~3; + // Fixup cache tags. + // + for(unsigned entry = 0; entry < 64; entry++) + { + CacheEntry* const ce = &Cache[entry]; - if((int32)A < 0) - IBuffer = MDFN_densb(&Cache[(A >> 4) & 0x3F].Data[(A >> 10) & 0x3][NE32ASU8_IDX_ADJ(uint32, A & 0x0F)]); - else - IBuffer = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + for(unsigned way = 0; way < 4; way++) + { + const uint32 ATM = ce->Tag[way] & (0x7FFFF << 10); + const bool invalid = ce->Tag[way] & ~(0x7FFFF << 10); // Handles backwards compat when invalid was bit31 instead of bit0. + + ce->Tag[way] = ATM | invalid; + } + } + // + SetCCR(CCR); + // + if(!recorded_needicache && state_version < 0x00102600) + { + for(unsigned i = 0; i < 16; i++) + WB_until[i] = timestamp - 100; + } + + if(needicache && !recorded_needicache) + { + // + // Handle loading a state where instruction cache emulation was not previously enabled in the emulator, but is enabled now(e.g. via database). + // + // May not cover all cases, needs more testing. + // + //printf("NeedEmuICache=%d, RecordedNeedEmuICache=%d\n", needicache, recorded_needicache); + // + //const uint32 old_IBuffer = IBuffer; + const uint32 A = (PC - 2) & ~3; + + if((int32)A < 0) + IBuffer = MDFN_densb(&Cache[(A >> 4) & 0x3F].Data[(A >> 10) & 0x3][NE32ASU8_IDX_ADJ(uint32, A & 0x0F)]); + else + IBuffer = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + + //printf("[%s] PC=0x%08x, IBuffer=0x%08x old_IBuffer=0x%08x --- 0x%08x\n", cpu_name, PC, IBuffer, old_IBuffer, ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A)); + } + // + // + // + if(state_version < 0x00102300) + { + ExtHaltDMA = ExtHalt; + } + + if(state_version < 0x00102600 && timestamp >= 0x40000000) + { + timestamp = SS_EVENT_DISABLED_TS; + } + + if(timestamp != SS_EVENT_DISABLED_TS) + { + if(state_version < 0x00102600) + { + DMA_Timestamp = SH7095_mem_timestamp - 128; + DMA_SGEndTimestamp = SH7095_mem_timestamp + 192; + + BSC.sdram_finish_time = SH7095_mem_timestamp - 100; + BSC.last_mem_time = SH7095_mem_timestamp - 100; + } + + clamp(×tamp, -1000000, 1000000); + clamp(&FRT.lastts, -1000000, 1000000); + clamp(&DMA_Timestamp, -1000000, 1000000); + clamp(&DMA_SGEndTimestamp, -1000000, 1000000); + + clamp(&MA_until, -1000000, 1000000); + clamp(&MM_until, -1000000, 1000000); + + for(unsigned i = 0; i < 16; i++) + clamp(&WB_until[i], -1000000, 1000000); - //printf("[%s] PC=0x%08x, IBuffer=0x%08x old_IBuffer=0x%08x --- 0x%08x\n", cpu_name, PC, IBuffer, old_IBuffer, ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A)); + clamp(&write_finish_timestamp, -1000000, 1000000); + clamp(÷_finish_timestamp, -1000000, 1000000); + + clamp(&BSC.sdram_finish_time, -1000000, 1000000); + clamp(&BSC.last_mem_time, -1000000, 1000000); + } + // + // + // + UCRead_IF_Kludge &= 1; } // @@ -5263,6 +4141,25 @@ case GSREG_RWT: ret = FRT.RW_Temp; break; + // + // + // + case GSREG_CCR: + ret = CCR; + if(special) + { + trio_snprintf(special, special_len, "CE: %d, ID: %d, OD: %d, TW: %d, WS: %d", + (bool)(CCR & CCR_CE), + (bool)(CCR & CCR_ID), + (bool)(CCR & CCR_OD), + (bool)(CCR & CCR_TW), + (CCR >> 6) & 0x3); + } + break; + + case GSREG_SBYCR: + ret = SBYCR; + break; } return ret; @@ -5332,6 +4229,18 @@ case GSREG_FTCSRM: FRT.FTCSRM = value & 0x8F; break; +/* + case GSREG_TCR: + FRT.TCR = value; + FRT_WDT_Recalc_NET(); + break; +*/ + // + // + // + case GSREG_CCR: + SetCCR(value); + break; } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095_ops.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095_ops.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095_ops.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095_ops.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,2065 @@ +switch(Pipe_ID >> 24) +{ + #include "sh7095_opdefs.inc" + + #define PART_OP_NORMIDIF { DoIDIF(false); } + + #define BEGIN_OP(x) OP_##x { PART_OP_NORMIDIF + #define BEGIN_OP_FUDGEIF(x) OP_##x { if(EmulateICache) { UCRead_IF_Kludge = false; } DoIDIF(false); if(EmulateICache) { timestamp -= UCRead_IF_Kludge; } + #define BEGIN_OP_DLYIDIF(x) OP_##x { + + // "Interrupt-disabled" instruction(blocks interrupt from being taken for next instruction). + // Use with BEGIN_OP_DLYIDIF() + #define PART_OP_INTDIS { DoIDIF(true); } + + #define END_OP } break; + + #define WB_EX_CHECK(r) { if(timestamp < WB_until[(r)]) timestamp = WB_until[(r)]; } + #define WB_WRITE(r, v) { R[(r)] = (v); WB_until[(r)] = MA_until + 1; } + #define WB_READ8(r, A) { uint8 memrv; MemRead8(A, memrv); WB_WRITE((r), (int8)memrv); } + #define WB_READ16(r, A) { uint16 memrv; MemRead16(A, memrv); WB_WRITE((r), (int16)memrv); } + #define WB_READ32(r, A) { uint32 memrv; MemRead32(A, memrv); WB_WRITE((r), memrv); } + #define WB_READ16_I(r, A) { uint16 memrv; MemRead16_I(A, memrv); WB_WRITE((r), (int16)memrv); } + #define WB_READ32_I(r, A) { uint32 memrv; MemRead32_I(A, memrv); WB_WRITE((r), memrv); } + // + // + // + // + // MOV #imm,Rn + // + BEGIN_OP(MOV_IMM_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(n) + + R[n] = imm; + END_OP + + + // + // MOV.W @(disp,PC),Rn + // + BEGIN_OP(MOV_W_PCREL_REG) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = PC + (d << 1); + + WB_READ16_I(instr_nyb2, ea); + END_OP + + + // + // MOV.L @(disp,PC),Rn + // + BEGIN_OP(MOV_L_PCREL_REG) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = (PC &~ 0x3) + (d << 2); + + WB_READ32_I(instr_nyb2, ea); + END_OP + + + // + // MOV Rm,Rn + // + BEGIN_OP(MOV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[m]; + END_OP + + + // + // MOV.B Rm,@Rn + // + BEGIN_OP(MOV_B_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite8(ea, val); + END_OP + + + // + // MOV.W Rm,@Rn + // + BEGIN_OP(MOV_W_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite16(ea, val); + END_OP + + + // + // MOV.L Rm,@Rn + // + BEGIN_OP(MOV_L_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite32(ea, val); + END_OP + + + // + // MOV.B @Rm,Rn + // + BEGIN_OP(MOV_B_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @Rm,Rn + // + BEGIN_OP(MOV_W_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @Rm,Rn + // + BEGIN_OP(MOV_L_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B Rm,@-Rn + // + BEGIN_OP(MOV_B_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 1; + ea = R[n]; + + MemWrite8(ea, val); + END_OP + + + // + // MOV.W Rm,@-Rn + // + BEGIN_OP(MOV_W_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 2; + ea = R[n]; + + MemWrite16(ea, val); + END_OP + + + // + // MOV.L Rm,@-Rn + // + BEGIN_OP(MOV_L_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + MemWrite32(ea, val); + END_OP + + + // + // MOV.B @Rm+,Rn + // + BEGIN_OP(MOV_B_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 1; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @Rm+,Rn + // + BEGIN_OP(MOV_W_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 2; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @Rm+,Rn + // + BEGIN_OP(MOV_L_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 4; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B R0,@(disp,Rn) + // + BEGIN_OP(MOV_B_REG0_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 0); + + MemWrite8(ea, R[0]); + END_OP + + + // + // MOV.W R0,@(disp,Rn) + // + BEGIN_OP(MOV_W_REG0_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 1); + + MemWrite16(ea, R[0]); + END_OP + + + // + // MOV.L Rm,@(disp,Rn) + // + BEGIN_OP(MOV_L_REG_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 2); + + MemWrite32(ea, R[m]); + END_OP + + + // + // MOV.B @(disp,Rm),R0 + // + BEGIN_OP(MOV_B_REGINDIRDISP_REG0) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 0); + + WB_READ8(0, ea); + END_OP + + + // + // MOV.W @(disp,Rm),R0 + // + BEGIN_OP(MOV_W_REGINDIRDISP_REG0) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 1); + + WB_READ16(0, ea); + END_OP + + + // + // MOV.L @(disp,Rm),Rn + // + BEGIN_OP(MOV_L_REGINDIRDISP_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 2); + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B Rm,@(R0,Rn) + // + BEGIN_OP(MOV_B_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite8(ea, R[m]); + END_OP + + + // + // MOV.W Rm,@(R0,Rn) + // + BEGIN_OP(MOV_W_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite16(ea, R[m]); + END_OP + + + // + // MOV.L Rm,@(R0,Rn) + // + BEGIN_OP(MOV_L_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite32(ea, R[m]); + END_OP + + + // + // MOV.B @(R0,Rm),Rn + // + BEGIN_OP(MOV_B_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @(R0,Rm),Rn + // + BEGIN_OP(MOV_W_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @(R0,Rm),Rn + // + BEGIN_OP(MOV_L_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B R0,@(disp,GBR) + // + BEGIN_OP(MOV_B_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 0); + + MemWrite8(ea, R[0]); + END_OP + + + // + // MOV.W R0,@(disp,GBR) + // + BEGIN_OP(MOV_W_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 1); + + MemWrite16(ea, R[0]); + END_OP + + + // + // MOV.L R0,@(disp,GBR) + // + BEGIN_OP(MOV_L_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 2); + + MemWrite32(ea, R[0]); + END_OP + + + // + // MOV.B @(disp,GBR),R0 + // + BEGIN_OP(MOV_B_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 0); + + WB_READ8(0, ea); + END_OP + + + // + // MOV.W @(disp,GBR),R0 + // + BEGIN_OP(MOV_W_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 1); + + WB_READ16(0, ea); + END_OP + + + // + // MOV.L @(disp,GBR),R0 + // + BEGIN_OP(MOV_L_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 2); + + WB_READ32(0, ea); + END_OP + + + // + // MOVA @(disp,PC),R0 + // + BEGIN_OP(MOVA_PCREL_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = (PC &~ 0x3) + (d << 2); + + WB_EX_CHECK(0) + + R[0] = ea; + END_OP + + + // + // MOVT Rn + // + BEGIN_OP(MOVT_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] = GetT(); + END_OP + + + // + // SWAP.B Rm,Rn + // + BEGIN_OP(SWAP_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[m] & 0xFFFF0000) | ((R[m] << 8) & 0xFF00) | ((R[m] >> 8) & 0x00FF); + END_OP + + + // + // SWAP.W Rm,Rn + // + BEGIN_OP(SWAP_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[m] << 16) | (R[m] >> 16); + END_OP + + + // + // XTRCT Rm,Rn + // + BEGIN_OP(XTRCT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[n] >> 16) | (R[m] << 16); + END_OP + + + // + // ADD Rm,Rn + // + BEGIN_OP(ADD_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] + R[m]; + END_OP + + + // + // ADD #imm,Rn + // + BEGIN_OP(ADD_IMM_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(n) + + R[n] = R[n] + imm; + END_OP + + + // + // ADDC Rm,Rn + // + BEGIN_OP(ADDC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] + R[m] + GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // ADDV Rm,Rn + // + BEGIN_OP(ADDV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 result = R[n] + R[m]; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(((~(R[n] ^ R[m])) & (R[n] ^ result)) >> 31); + R[n] = result; + END_OP + + + // + // CMP/EQ #imm,R0 + // + BEGIN_OP(CMP_EQ_IMM_REG0) + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(0) + + SetT(imm == R[0]); + END_OP + + + // + // CMP/EQ Rm,Rn + // + BEGIN_OP(CMP_EQ_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] == R[m]); + END_OP + + + // + // CMP/HS Rm,Rn + // + BEGIN_OP(CMP_HS_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] >= R[m]); + END_OP + + + // + // CMP/GE Rm,Rn + // + BEGIN_OP(CMP_GE_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((int32)R[n] >= (int32)R[m]); + END_OP + + + // + // CMP/HI Rm,Rn + // + BEGIN_OP(CMP_HI_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] > R[m]); + END_OP + + + // + // CMP/GT Rm,Rn + // + BEGIN_OP(CMP_GT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((int32)R[n] > (int32)R[m]); + END_OP + + + // + // CMP/PZ Rn + // + BEGIN_OP(CMP_PZ_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + SetT((int32)R[n] >= 0); + END_OP + + + // + // CMP/PL Rn + // + BEGIN_OP(CMP_PL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + SetT((int32)R[n] > 0); + END_OP + + + // + // CMP/STR Rm,Rn + // + BEGIN_OP(CMP_STR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 tmp = R[n] ^ R[m]; + unsigned new_T = 0; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + if(!(tmp & 0x000000FF)) new_T = 1; + if(!(tmp & 0x0000FF00)) new_T = 1; + if(!(tmp & 0x00FF0000)) new_T = 1; + if(!(tmp & 0xFF000000)) new_T = 1; + + SetT(new_T); + END_OP + + + // + // DIV1 Rm,Rn + // + BEGIN_OP(DIV1_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 tmp; + bool new_Q; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + new_Q = R[n] >> 31; + R[n] <<= 1; + R[n] |= GetT(); + + tmp = R[n]; + new_Q ^= GetM(); + + if(!(GetQ() ^ GetM())) + { + R[n] -= R[m]; + new_Q ^= (R[n] > tmp); + } + else + { + R[n] += R[m]; + new_Q ^= (R[n] < tmp); + } + + SetQ(new_Q); + SetT(new_Q == GetM()); + END_OP + + + // + // DIV0S Rm,Rn + // + BEGIN_OP(DIV0S_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const unsigned new_Q = R[n] >> 31; + const unsigned new_M = R[m] >> 31; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetQ(new_Q); + SetM(new_M); + SetT(new_Q != new_M); + END_OP + + + // + // DIV0U + // + BEGIN_OP(DIV0U) + SetQ(false); + SetM(false); + SetT(false); + END_OP + + + // + // DT + // + BEGIN_OP(DT) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n]--; + SetT(!R[n]); + END_OP + + + // + // EXTS.B Rm,Rn + // + BEGIN_OP(EXTS_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (int8)R[m]; + END_OP + + + // + // EXTS.W Rm,Rn + // + BEGIN_OP(EXTS_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (int16)R[m]; + END_OP + + + // + // EXTU.B Rm,Rn + // + BEGIN_OP(EXTU_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (uint8)R[m]; + END_OP + + + // + // EXTU.W Rm,Rn + // + BEGIN_OP(EXTU_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (uint16)R[m]; + END_OP + + + // + // MAC.L @Rm+,@Rn+ + // + // Pipeline: page 188(not implemented right here) + BEGIN_OP(MAC_L) + RESUME_VAR(int32, opexec_MAC_L_m0); + RESUME_VAR(int32, opexec_MAC_L_m1); + { + // Order confirmed. + MemRead32(R[instr_nyb1], opexec_MAC_L_m0); + R[instr_nyb1] += 4; + MemRead32(R[instr_nyb2], opexec_MAC_L_m1); + R[instr_nyb2] += 4; + } + uint64 a, b, sum; + + a = GetMAC64(); + b = (int64)opexec_MAC_L_m0 * opexec_MAC_L_m1; + sum = a + b; + + if(GetS() && sum > 0x00007FFFFFFFFFFFULL && sum < 0xFFFF800000000000ULL) + { + if((int32)(opexec_MAC_L_m0 ^ opexec_MAC_L_m1) < 0) + sum = 0xFFFF800000000000ULL; + else + sum = 0x00007FFFFFFFFFFFULL; + } + + SetMAC64(sum); + + timestamp++; + END_OP + + + // + // MAC.W @Rm+,@Rn+ + // + // Pipeline: page 180(not implemented right here) + BEGIN_OP(MAC_W) + RESUME_VAR(int16, opexec_MAC_W_m0); + RESUME_VAR(int16, opexec_MAC_W_m1); + { + // Order confirmed. + MemRead16(R[instr_nyb1], opexec_MAC_W_m0); + R[instr_nyb1] += 2; + MemRead16(R[instr_nyb2], opexec_MAC_W_m1); + R[instr_nyb2] += 2; + } + + if(GetS()) + { + int32 b = (int32)opexec_MAC_W_m0 * opexec_MAC_W_m1; + uint64 sum = (int64)(int32)MACL + b; + + if(sum > 0x000000007FFFFFFFULL && sum < 0xFFFFFFFF80000000ULL) + { + MACH |= 1; + + if(b < 0) + sum = 0x80000000ULL; + else + sum = 0x7FFFFFFFULL; + } + + MACL = sum; + } + else + SetMAC64(GetMAC64() + (int64)opexec_MAC_W_m0 * opexec_MAC_W_m1); + + timestamp++; + END_OP + + + // + // DMULS.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(DMULS_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (int64)(int32)R[n] * (int32)R[m]; + + MACL = result >> 0; + MACH = result >> 32; + END_OP + + + // + // DMULU.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(DMULU_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] * R[m]; + + MACL = result >> 0; + MACH = result >> 32; + END_OP + + + // + // MUL.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(MUL_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MACL = R[n] * R[m]; + END_OP + + + // + // MULS.W Rm,Rn + // + // Pipeline: page 207 + BEGIN_OP(MULS_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 2; + + MACL = (int16)R[n] * (int16)R[m]; + END_OP + + + // + // MULU.W Rm,Rn + // + // Pipeline: page 207 + BEGIN_OP(MULU_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 2; + + MACL = (uint32)(uint16)R[n] * (uint32)(uint16)R[m]; + END_OP + + + // + // NEG Rm,Rn + // + BEGIN_OP(NEG_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = -R[m]; + END_OP + + + // + // NEGC Rm,Rn + // + BEGIN_OP(NEGC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)0 - R[m] - GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // SUB Rm,Rn + // + BEGIN_OP(SUB_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] - R[m]; + END_OP + + + // + // SUBC Rm,Rn + // + BEGIN_OP(SUBC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] - R[m] - GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // SUBV Rm,Rn + // + BEGIN_OP(SUBV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 result = R[n] - R[m]; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((((R[n] ^ R[m])) & (R[n] ^ result)) >> 31); + R[n] = result; + END_OP + + + // + // AND Rm,Rn + // + BEGIN_OP(AND_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] & R[m]; + END_OP + + + // + // AND #imm,R0 + // + BEGIN_OP(AND_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] = R[0] & imm; + END_OP + + + // + // AND.B #imm,@(R0,GBR) + // + BEGIN_OP(AND_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp &= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // NOT Rm,Rn + // + BEGIN_OP(NOT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = ~R[m]; + END_OP + + + // + // OR Rm,Rn + // + BEGIN_OP(OR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] |= R[m]; + END_OP + + + // + // OR #imm,R0 + // + BEGIN_OP(OR_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] |= imm; + END_OP + + + // + // OR.B #imm,@(R0,GBR) + // + BEGIN_OP(OR_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp |= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // TAS.B @Rn + // + BEGIN_OP(TAS_B_REGINDIR) + uint8 tmp; + RESUME_VAR(uint32, opexec_ea); + + opexec_ea = R[instr_nyb2]; + + CHECK_EXIT_RESUME(); + + SH7095_BusLock++; + tmp = ExtBusRead(uint8, false, opexec_ea); // FIXME: Address error on invalid address(>= 0x40000000 ?). + timestamp = SH7095_mem_timestamp; + + SetT(!tmp); + + tmp |= 0x80; + + MemWrite8(opexec_ea, tmp); + SH7095_BusLock--; + + timestamp += 3; + END_OP + + + // + // TST Rm,Rn + // + BEGIN_OP(TST_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(!(R[n] & R[m])); + END_OP + + + // + // TST #imm,R0 + // + BEGIN_OP(TST_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + SetT(!(R[0] & imm)); + END_OP + + + // + // TST.B #imm,@(R0,GBR) + // + BEGIN_OP(TST_B_IMM_IDXGBRINDIR) + CONST_VAR(uint32, ea) = R[0] + GBR; + uint32 tmp; + + MemRead8(ea, tmp); + timestamp++; + SetT(!(tmp & (uint8)instr)); + timestamp++; + END_OP + + + // + // XOR Rm,Rn + // + BEGIN_OP(XOR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] ^ R[m]; + END_OP + + + // + // XOR #imm,R0 + // + BEGIN_OP(XOR_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] = R[0] ^ imm; + END_OP + + + // + // XOR.B #imm,@(R0,GBR) + // + BEGIN_OP(XOR_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp ^= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // ROTL Rn + // + BEGIN_OP(ROTL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] = (R[n] << 1) | rotbit; + SetT(rotbit); + END_OP + + + // + // ROTR Rn + // + BEGIN_OP(ROTR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (R[n] >> 1) | (rotbit << 31); + SetT(rotbit); + END_OP + + + // + // ROTCL Rn + // + BEGIN_OP(ROTCL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] = (R[n] << 1) | GetT(); + SetT(rotbit); + END_OP + + + // + // ROTCR Rn + // + BEGIN_OP(ROTCR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (R[n] >> 1) | (GetT() << 31); + SetT(rotbit); + END_OP + + + // + // SHAR Rn + // + BEGIN_OP(SHAR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (int32)R[n] >> 1; + SetT(shbit); + END_OP + + + // + // SHLL Rn + // + BEGIN_OP(SHLL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] <<= 1; + SetT(shbit); + END_OP + + + // + // SHLR Rn + // + BEGIN_OP(SHLR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] >>= 1; + SetT(shbit); + END_OP + + + // + // SHLL2 Rn + // + BEGIN_OP(SHLL2_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 2; + END_OP + + + // + // SHLR2 Rn + // + BEGIN_OP(SHLR2_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 2; + END_OP + + + // + // SHLL8 Rn + // + BEGIN_OP(SHLL8_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 8; + END_OP + + + // + // SHLR8 Rn + // + BEGIN_OP(SHLR8_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 8; + END_OP + + + // + // SHLL16 Rn + // + BEGIN_OP(SHLL16_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 16; + END_OP + + + // + // SHLR16 Rn + // + BEGIN_OP(SHLR16_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 16; + END_OP + + + // + // BF + // + BEGIN_OP_FUDGEIF(BF) + CondRelBranch(!GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BF/S + // + BEGIN_OP_FUDGEIF(BF_S) + CondRelDelayBranch(!GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BT + // + BEGIN_OP_FUDGEIF(BT) + CondRelBranch(GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BT/S + // + BEGIN_OP_FUDGEIF(BT_S) + CondRelDelayBranch(GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BRA + // + BEGIN_OP_DLYIDIF(BRA) + UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); + END_OP + + + // + // BRAF Rm + // + BEGIN_OP_DLYIDIF(BRAF_REG) + UCRelDelayBranch(R[instr_nyb2]); + END_OP + + + // + // BSR + // + BEGIN_OP_DLYIDIF(BSR) + PR = PC; + + UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); + END_OP + + + // + // BSRF Rm + // + BEGIN_OP_DLYIDIF(BSRF_REG) + PR = PC; + + UCRelDelayBranch(R[instr_nyb2]); + END_OP + + + // + // JMP @Rm + // + BEGIN_OP_DLYIDIF(JMP_REGINDIR) + UCDelayBranch(R[instr_nyb2]); + END_OP + + + // + // JSR @Rm + // + BEGIN_OP_DLYIDIF(JSR_REGINDIR) + PR = PC; + + UCDelayBranch(R[instr_nyb2]); + END_OP + + + // + // RTS + // + BEGIN_OP_DLYIDIF(RTS) + UCDelayBranch(PR); + END_OP + + + // + // CLRT + // + BEGIN_OP(CLRT) + SetT(false); + END_OP + + + // + // CLRMAC + // + BEGIN_OP(CLRMAC) + MACH = 0; + MACL = 0; + END_OP + + + // + // LDC + // + BEGIN_OP_DLYIDIF(LDC) + { + CONST_VAR(unsigned, m) = instr_nyb2; + const unsigned cri = (instr >> 4) & 0x3; +#ifdef MDFN_ENABLE_DEV_BUILD + const uint32 old_SR = SR; +#endif + + CtrlRegs[cri] = R[m]; + if(cri == 0) + { + SR &= 0x3F3; +#ifdef MDFN_ENABLE_DEV_BUILD + if((old_SR ^ SR) & 0xF0) + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] LDC IMask; 0x%01x->0x%01x, PC=0x%08x", cpu_name, (old_SR >> 4) & 0xF, (SR >> 4) & 0xF, PC); +#endif + RecalcPendingIntPEX(); + } + } + PART_OP_INTDIS + END_OP + + // + // LDC.L + // + // Pipeline: page 233 + // + BEGIN_OP_DLYIDIF(LDC_L) + { + uint32 ea; +#ifdef MDFN_ENABLE_DEV_BUILD + //static uint32 old_SR; + //old_SR = SR; + Resume_new_PC = SR; +#endif + ea = R[instr_nyb2]; + R[instr_nyb2] += 4; + + timestamp++; + MemRead32(ea, CtrlRegs[(instr >> 4) & 0x3]); + if(((instr >> 4) & 0x3) == 0) + { + SR &= 0x3F3; +#ifdef MDFN_ENABLE_DEV_BUILD + if((/*old_SR*/Resume_new_PC ^ SR) & 0xF0) + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] LDC.L IMask; 0x%01x->0x%01x, PC=0x%08x", cpu_name, (/*old_SR*/Resume_new_PC >> 4) & 0xF, (SR >> 4) & 0xF, PC); +#endif + RecalcPendingIntPEX(); + } + + timestamp++; + } + PART_OP_INTDIS + END_OP + + + // + // LDS + // + BEGIN_OP_DLYIDIF(LDS) + { + CONST_VAR(unsigned, m) = instr_nyb2; + const unsigned sri = (instr >> 4) & 0x3; + + SysRegs[sri] = R[m]; + } + PART_OP_INTDIS + END_OP + + + // + // LDS.L + // + BEGIN_OP_DLYIDIF(LDS_L) // Pipeline same as ordinary load instruction + { + uint32 ea; + + ea = R[instr_nyb2]; + R[instr_nyb2] += 4; + + MemRead32(ea, SysRegs[(instr >> 4) & 0x3]); + } + PART_OP_INTDIS + //printf(" LDS.L: (0x%08x)->0x%08x\n", ea, SysRegs[sri]); + END_OP + + + // + // NOP + // + BEGIN_OP(NOP) + END_OP + + + // + // RTE + // + // Pipeline: page 241 + // + BEGIN_OP(RTE) + RESUME_VAR(uint32, opexec_new_PC); + RESUME_VAR(uint32, opexec_new_SR); + + MemRead32(R[15], opexec_new_PC); + R[15] += 4; + + MemRead32(R[15], opexec_new_SR) + R[15] += 4; + +#ifdef MDFN_ENABLE_DEV_BUILD + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] RTE; PC: 0x%08x->0x%08x, SR: 0x%03x->0x%03x", cpu_name, PC, opexec_new_PC, SR, opexec_new_SR & 0x3F3); +#endif + + SR = opexec_new_SR & 0x3F3; + RecalcPendingIntPEX(); + + timestamp++; + + DelayBranch(opexec_new_PC); + END_OP + + + // + // SETT + // + BEGIN_OP(SETT) + SetT(true); + END_OP + + + // + // SLEEP + // + BEGIN_OP_DLYIDIF(SLEEP) + // + // Standby mode time yay? + // + if(MDFN_UNLIKELY(SBYCR & 0x80)) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Entering standby mode.\n", cpu_name); + + for(unsigned ch = 0; ch < 2; ch++) + { + DMACH[ch].CHCR = 0x00; + DMACH[ch].CHCRM = 0x00; + } + DMAOR = 0x00; + DMA_RecalcRunning(); + RecalcPendingIntPEX(); + // + // + FRT_Reset(); + // + // + WDT_StandbyReset(); + // + // + SCI_Reset(); + // + // + + timestamp++; + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0x7E << 24); + + Standby = true; + + goto SkipPCInc; + } + + if(MDFN_LIKELY(!EPending)) + { + timestamp += 3; + goto SkipPCInc; + } + else + { + DoID(false); + FetchIF(); + } + END_OP + + BEGIN_OP_DLYIDIF(PSEUDO_STANDBY) + if(MDFN_LIKELY(Standby)) + { + timestamp += 7; + goto SkipPCInc; + } + else + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exiting standby mode.\n", cpu_name); + + FRT_Reset(); // Reset again(for the counter) because we didn't stop clocking it. + + DoID(false); + FetchIF(); + } + END_OP + + // + // STC + // + BEGIN_OP_DLYIDIF(STC) + { + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned cri = (instr >> 4) & 0x3; + + R[n] = CtrlRegs[cri]; + } + PART_OP_INTDIS + END_OP + + + // + // STC.L + // + // pipeline: page 234 + BEGIN_OP_DLYIDIF(STC_L) + { + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, cri) = (instr >> 4) & 0x3; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + MemWrite32(ea, CtrlRegs[cri]); + timestamp++; + } + PART_OP_INTDIS + END_OP + + + // + // STS + // + BEGIN_OP_DLYIDIF(STS) + { + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned sri = (instr >> 4) & 0x3; + + R[n] = SysRegs[sri]; + } + PART_OP_INTDIS + END_OP + + + // + // STS.L + // + BEGIN_OP_DLYIDIF(STS_L) // Pipeline same as ordinary store instruction + { + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, sri) = (instr >> 4) & 0x3; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + //printf(" STS.L: 0x%08x->(0x%08x)\n", SysRegs[sri], ea); + + MemWrite32(ea, SysRegs[sri]); + } + PART_OP_INTDIS + END_OP + + + // + // TRAPA #imm + // + // Saved PC is the address of the instruction after the TRAPA instruction + // + BEGIN_OP_DLYIDIF(TRAPA) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 2; + Exception(EXCEPTION_TRAP, (uint8)instr, opexec_new_PC) + Branch(false, opexec_new_PC); + END_OP + + + /* + ** + ** + */ + // + // Illegal Instruction + // + // Saved PC is the address of the illegal instruction. + // + BEGIN_OP_DLYIDIF(ILLEGAL) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 4; + Exception(EXCEPTION_ILLINSTR, VECNUM_ILLINSTR, opexec_new_PC); + Branch(false, opexec_new_PC); + END_OP + + // + // Illegal Slot Instruction + // + // Saved PC is the effective target address of the jump. + // + BEGIN_OP_DLYIDIF(SLOT_ILLEGAL) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 2; + Exception(EXCEPTION_ILLSLOT, VECNUM_ILLSLOT, opexec_new_PC); + Branch(false, opexec_new_PC); + END_OP + + // + // Pending exception(address error/interrupt) + // + BEGIN_OP_DLYIDIF(PSEUDO_EPENDING) + RESUME_VAR(uint32, opexec_new_PC); + RESUME_VAR(uint8, opexec_exnum); + RESUME_VAR(uint8, opexec_vecnum); + + opexec_new_PC = 0; + + // + // Priority here(listed highest to lowest): + // External halt + // Power + // Reset + // Pseudo DMA burst(hacky abusey thing to stall the CPU, should be above everything but reset/power and ext halt otherwise kaboom!). + // CPU address error + // DMA address error + // NMI + // Interrupt (final else, may be called quasi-spuriously) + // + #define TPP(x) (Pipe_ID & (1U << ((x) + EPENDING_PEXBITS_SHIFT))) + // + // Test against Pipe_ID, reset bits in EPending(if appropriate). + // + if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_EXTHALT))) + { + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Ext halt begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); + goto SkipPCInc; + } + else if(MDFN_UNLIKELY(TPP(PEX_POWERON) || TPP(PEX_RESET))) + { + EPending = 0; + opexec_exnum = EXCEPTION_POWERON; + opexec_vecnum = VECNUM_POWERON; + + if(TPP(PEX_RESET)) + { + opexec_exnum = EXCEPTION_RESET; + opexec_vecnum = VECNUM_RESET; + } + + Exception_ResPow(opexec_exnum, opexec_vecnum, opexec_new_PC); + } + else if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_DMABURST))) + { + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); + goto SkipPCInc; + } + else if(MDFN_UNLIKELY(TPP(PEX_CPUADDR))) + { + PC -= 4; + ClearPEX(PEX_CPUADDR); + Exception(EXCEPTION_CPUADDR, VECNUM_CPUADDR, opexec_new_PC); + ClearPEX(PEX_CPUADDR); // Infinite recursive address errors are not good(stack wraparound could clobber backup memory). + } + else if(MDFN_UNLIKELY(TPP(PEX_DMAADDR))) + { + PC -= 4; + ClearPEX(PEX_DMAADDR); + Exception(EXCEPTION_DMAADDR, VECNUM_DMAADDR, opexec_new_PC); + } + else if(TPP(PEX_NMI)) + { + PC -= 4; + ClearPEX(PEX_NMI); + Exception(EXCEPTION_NMI, VECNUM_NMI, opexec_new_PC); + // + // + // + SR |= 0xF << 4; + RecalcPendingIntPEX(); + } + else // Int + { + RESUME_VAR(uint8, opexec_ipr); + + opexec_ipr = GetPendingInt(NULL); + + if(MDFN_LIKELY(opexec_ipr > ((SR >> 4) & 0xF))) + { + // Note: GetPendingInt() may call ExIVecFetch(), which may call SetIRL with a new value, so be + // careful to use the "old" value here. + GetPendingInt(&opexec_vecnum); + + PC -= 4; + Exception(EXCEPTION_INT, opexec_vecnum, opexec_new_PC); + // + // + // + SR &= ~(0xF << 4); + SR |= opexec_ipr << 4; + RecalcPendingIntPEX(); + } + else + { + // + // Can happen like so(note for future testing): + // + // (WDT interval timer IRQ pending here) + // + // WTCSR_R; + // asm volatile( + // "ldc %0,SR\n\t" + // "mov.w %2, @%1\n\t" + // : + // :"r"(0), "r"(0xFFFFFE88), "r"(0xA500 | 0x00) + // : "memory"); + // + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2 | SS_DBG_SH2_EXCEPT, "[%s] Spurious EPENDING. IPR=0x%02x SR=0x%04x EPending=0x%08x Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, opexec_ipr, SR, EPending, Pipe_ID, PC); + + Pipe_ID = (uint16)Pipe_ID; + Pipe_ID |= InstrDecodeTab[Pipe_ID] << 24; + goto SPEPRecover; + } + } + #undef TPP + // + // + // + Branch(false, opexec_new_PC); + END_OP + + BEGIN_OP_DLYIDIF(PSEUDO_DMABURST) +#ifdef SH7095_NEED_RESUME_TABLE_INIT + if(MDFN_UNLIKELY(!ResumeTableP[DebugMode])) + { + static_assert(__COUNTER__ == ((DebugMode ? 10000 : 5000) + 393), "Unexpected __COUNTER__"); + + static const void* const ResumeTable[512] = + { +#if SH7095_DEBUG_MODE + #include "sh7095s_ctable_dm.inc" +#else + #include "sh7095s_ctable.inc" +#endif + }; + //static_assert(__COUNTER__ <= 11025, "Unexpected __COUNTER__"); + + assert(this == &CPU[1]); + + ResumeTableP[DebugMode] = ResumeTable; + return; + } +#endif + if(MDFN_LIKELY(DMA_InBurst() || ExtHalt)) + { + timestamp += 7; + goto SkipPCInc; + } + else + { + ClearPEX(PEX_PSEUDO_DMABURST); + ClearPEX(PEX_PSEUDO_EXTHALT); + + // + // Recover Pipe_ID opcode field; only use Pipe_ID for this, not EPending, otherwise + // we may accidentally allow an interrupt to occur immediately after an interrupt-disabled instruction. + // + Pipe_ID &= 0x00FFFFFF; + Pipe_ID &= ~(1U << (PEX_PSEUDO_DMABURST + EPENDING_PEXBITS_SHIFT)); + Pipe_ID &= ~(1U << (PEX_PSEUDO_EXTHALT + EPENDING_PEXBITS_SHIFT)); + Pipe_ID |= InstrDecodeTab[(uint16)Pipe_ID] << 24; + if(Pipe_ID & (0xFF << EPENDING_PEXBITS_SHIFT)) + Pipe_ID |= EPENDING_OP_OR; + + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst/External halt end: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + goto SkipPCInc; + } + END_OP +} + +PC += 2; +SkipPCInc:; + +#ifdef SH7095_NEED_RESUME_TABLE_INIT +static_assert(__COUNTER__ == ((DebugMode ? 10000 : 5000) + 393 + 512 + 1), "Unexpected __COUNTER__"); +#endif + +#undef PART_OP_NORMIDIF +#undef BEGIN_OP +#undef BEGIN_OP_FUDGEIF +#undef BEGIN_OP_DLYIDIF +#undef PART_OP_INTDIS +#undef END_OP +#undef WB_EX_CHECK +#undef WB_WRITE +#undef WB_READ8 +#undef WB_READ16 +#undef WB_READ32 +#undef WB_READ16_I +#undef WB_READ32_I + diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_cnorm_dm.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_cnorm_dm.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_cnorm_dm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_cnorm_dm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,20000 @@ +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_cnorm.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_cnorm.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_cnorm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_cnorm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,10000 @@ +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_ctable_dm.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_ctable_dm.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_ctable_dm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_ctable_dm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,1536 @@ +#if __COUNTER__ >= 10514 + &&Resume_10512, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10511, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10510, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10509, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10508, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10507, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10506, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10505, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10504, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10503, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10502, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10501, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10500, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10499, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10498, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10497, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10496, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10495, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10494, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10493, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10492, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10491, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10490, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10489, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10488, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10487, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10486, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10485, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10484, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10483, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10482, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10481, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10480, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10479, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10478, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10477, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10476, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10475, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10474, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10473, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10472, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10471, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10470, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10469, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10468, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10467, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10466, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10465, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10464, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10463, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10462, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10461, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10460, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10459, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10458, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10457, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10456, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10455, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10454, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10453, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10452, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10451, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10450, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10449, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10448, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10447, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10446, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10445, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10444, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10443, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10442, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10441, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10440, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10439, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10438, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10437, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10436, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10435, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10434, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10433, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10432, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10431, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10430, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10429, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10428, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10427, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10426, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10425, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10424, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10423, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10422, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10421, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10420, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10419, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10418, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10417, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10416, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10415, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10414, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10413, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10412, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10411, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10410, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10409, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10408, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10407, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10406, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10405, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10404, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10403, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10402, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10401, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10400, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10399, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10398, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10397, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10396, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10395, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10394, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10393, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10392, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10391, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10390, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10389, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10388, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10387, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10386, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10385, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10384, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10383, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10382, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10381, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10380, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10379, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10378, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10377, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10376, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10375, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10374, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10373, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10372, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10371, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10370, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10369, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10368, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10367, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10366, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10365, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10364, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10363, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10362, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10361, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10360, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10359, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10358, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10357, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10356, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10355, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10354, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10353, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10352, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10351, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10350, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10349, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10348, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10347, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10346, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10345, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10344, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10343, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10342, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10341, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10340, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10339, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10338, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10337, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10336, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10335, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10334, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10333, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10332, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10331, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10330, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10329, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10328, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10327, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10326, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10325, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10324, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10323, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10322, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10321, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10320, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10319, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10318, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10317, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10316, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10315, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10314, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10313, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10312, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10311, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10310, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10309, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10308, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10307, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10306, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10305, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10304, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10303, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10302, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10301, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10300, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10299, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10298, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10297, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10296, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10295, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10294, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10293, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10292, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10291, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10290, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10289, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10288, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10287, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10286, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10285, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10284, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10283, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10282, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10281, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10280, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10279, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10278, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10277, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10276, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10275, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10274, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10273, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10272, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10271, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10270, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10269, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10268, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10267, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10266, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10265, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10264, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10263, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10262, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10261, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10260, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10259, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10258, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10257, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10256, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10255, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10254, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10253, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10252, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10251, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10250, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10249, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10248, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10247, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10246, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10245, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10244, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10243, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10242, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10241, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10240, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10239, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10238, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10237, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10236, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10235, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10234, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10233, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10232, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10231, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10230, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10229, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10228, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10227, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10226, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10225, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10224, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10223, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10222, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10221, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10220, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10219, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10218, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10217, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10216, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10215, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10214, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10213, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10212, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10211, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10210, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10209, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10208, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10207, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10206, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10205, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10204, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10203, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10202, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10201, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10200, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10199, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10198, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10197, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10196, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10195, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10194, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10193, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10192, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10191, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10190, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10189, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10188, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10187, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10186, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10185, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10184, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10183, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10182, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10181, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10180, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10179, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10178, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10177, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10176, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10175, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10174, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10173, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10172, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10171, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10170, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10169, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10168, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10167, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10166, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10165, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10164, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10163, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10162, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10161, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10160, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10159, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10158, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10157, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10156, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10155, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10154, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10153, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10152, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10151, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10150, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10149, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10148, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10147, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10146, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10145, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10144, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10143, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10142, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10141, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10140, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10139, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10138, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10137, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10136, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10135, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10134, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10133, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10132, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10131, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10130, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10129, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10128, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10127, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10126, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10125, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10124, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10123, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10122, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10121, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10120, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10119, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10118, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10117, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10116, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10115, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10114, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10113, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10112, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10111, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10110, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10109, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10108, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10107, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10106, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10105, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10104, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10103, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10102, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10101, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10100, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10099, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10098, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10097, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10096, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10095, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10094, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10093, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10092, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10091, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10090, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10089, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10088, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10087, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10086, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10085, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10084, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10083, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10082, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10081, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10080, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10079, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10078, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10077, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10076, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10075, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10074, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10073, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10072, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10071, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10070, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10069, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10068, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10067, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10066, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10065, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10064, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10063, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10062, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10061, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10060, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10059, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10058, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10057, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10056, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10055, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10054, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10053, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10052, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10051, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10050, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10049, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10048, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10047, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10046, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10045, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10044, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10043, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10042, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10041, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10040, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10039, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10038, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10037, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10036, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10035, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10034, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10033, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10032, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10031, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10030, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10029, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10028, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10027, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10026, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10025, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10024, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10023, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10022, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10021, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10020, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10019, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10018, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10017, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10016, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10015, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10014, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10013, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10012, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10011, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10010, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10009, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10008, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10007, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10006, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10005, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10004, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10003, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10002, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10001, +#endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_ctable.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_ctable.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_ctable.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_ctable.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,1536 @@ +#if __COUNTER__ >= 5514 + &&Resume_5512, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5511, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5510, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5509, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5508, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5507, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5506, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5505, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5504, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5503, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5502, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5501, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5500, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5499, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5498, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5497, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5496, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5495, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5494, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5493, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5492, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5491, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5490, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5489, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5488, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5487, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5486, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5485, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5484, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5483, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5482, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5481, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5480, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5479, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5478, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5477, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5476, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5475, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5474, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5473, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5472, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5471, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5470, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5469, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5468, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5467, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5466, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5465, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5464, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5463, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5462, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5461, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5460, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5459, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5458, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5457, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5456, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5455, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5454, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5453, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5452, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5451, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5450, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5449, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5448, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5447, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5446, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5445, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5444, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5443, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5442, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5441, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5440, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5439, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5438, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5437, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5436, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5435, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5434, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5433, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5432, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5431, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5430, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5429, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5428, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5427, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5426, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5425, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5424, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5423, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5422, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5421, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5420, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5419, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5418, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5417, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5416, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5415, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5414, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5413, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5412, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5411, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5410, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5409, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5408, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5407, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5406, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5405, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5404, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5403, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5402, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5401, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5400, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5399, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5398, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5397, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5396, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5395, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5394, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5393, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5392, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5391, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5390, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5389, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5388, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5387, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5386, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5385, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5384, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5383, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5382, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5381, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5380, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5379, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5378, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5377, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5376, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5375, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5374, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5373, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5372, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5371, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5370, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5369, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5368, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5367, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5366, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5365, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5364, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5363, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5362, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5361, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5360, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5359, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5358, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5357, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5356, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5355, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5354, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5353, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5352, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5351, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5350, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5349, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5348, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5347, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5346, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5345, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5344, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5343, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5342, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5341, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5340, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5339, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5338, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5337, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5336, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5335, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5334, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5333, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5332, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5331, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5330, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5329, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5328, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5327, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5326, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5325, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5324, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5323, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5322, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5321, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5320, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5319, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5318, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5317, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5316, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5315, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5314, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5313, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5312, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5311, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5310, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5309, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5308, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5307, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5306, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5305, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5304, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5303, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5302, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5301, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5300, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5299, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5298, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5297, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5296, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5295, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5294, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5293, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5292, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5291, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5290, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5289, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5288, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5287, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5286, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5285, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5284, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5283, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5282, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5281, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5280, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5279, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5278, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5277, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5276, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5275, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5274, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5273, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5272, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5271, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5270, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5269, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5268, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5267, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5266, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5265, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5264, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5263, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5262, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5261, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5260, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5259, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5258, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5257, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5256, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5255, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5254, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5253, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5252, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5251, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5250, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5249, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5248, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5247, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5246, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5245, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5244, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5243, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5242, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5241, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5240, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5239, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5238, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5237, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5236, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5235, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5234, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5233, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5232, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5231, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5230, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5229, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5228, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5227, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5226, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5225, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5224, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5223, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5222, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5221, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5220, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5219, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5218, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5217, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5216, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5215, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5214, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5213, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5212, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5211, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5210, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5209, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5208, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5207, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5206, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5205, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5204, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5203, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5202, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5201, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5200, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5199, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5198, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5197, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5196, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5195, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5194, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5193, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5192, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5191, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5190, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5189, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5188, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5187, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5186, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5185, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5184, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5183, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5182, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5181, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5180, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5179, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5178, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5177, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5176, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5175, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5174, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5173, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5172, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5171, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5170, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5169, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5168, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5167, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5166, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5165, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5164, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5163, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5162, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5161, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5160, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5159, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5158, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5157, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5156, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5155, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5154, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5153, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5152, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5151, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5150, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5149, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5148, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5147, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5146, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5145, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5144, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5143, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5142, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5141, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5140, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5139, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5138, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5137, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5136, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5135, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5134, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5133, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5132, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5131, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5130, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5129, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5128, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5127, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5126, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5125, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5124, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5123, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5122, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5121, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5120, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5119, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5118, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5117, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5116, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5115, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5114, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5113, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5112, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5111, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5110, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5109, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5108, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5107, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5106, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5105, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5104, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5103, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5102, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5101, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5100, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5099, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5098, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5097, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5096, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5095, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5094, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5093, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5092, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5091, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5090, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5089, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5088, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5087, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5086, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5085, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5084, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5083, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5082, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5081, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5080, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5079, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5078, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5077, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5076, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5075, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5074, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5073, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5072, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5071, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5070, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5069, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5068, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5067, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5066, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5065, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5064, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5063, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5062, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5061, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5060, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5059, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5058, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5057, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5056, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5055, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5054, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5053, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5052, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5051, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5050, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5049, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5048, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5047, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5046, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5045, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5044, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5043, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5042, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5041, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5040, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5039, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5038, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5037, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5036, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5035, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5034, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5033, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5032, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5031, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5030, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5029, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5028, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5027, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5026, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5025, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5024, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5023, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5022, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5021, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5020, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5019, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5018, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5017, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5016, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5015, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5014, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5013, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5012, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5011, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5010, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5009, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5008, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5007, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5006, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5005, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5004, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5003, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5002, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5001, +#endif diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_rsu.inc mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_rsu.inc --- mednafen-1.24.3+dfsg/include/mednafen/ss/sh7095s_rsu.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sh7095s_rsu.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,50 @@ + enum : unsigned { which = 1 }; + enum : bool { EmulateICache = true }; + enum : bool { DebugMode = SH7095_DEBUG_MODE }; + enum : bool { CacheBypassHack = false }; + +#ifdef MDFN_ENABLE_DEV_BUILD + assert(!ResumeTableP[DebugMode] || DebugMode == DM_Setting); +#endif + //if(this != &CPU[1]) + // __builtin_unreachable(); + + if(MDFN_UNLIKELY(timestamp >= bound_timestamp)) + return; + + if(ResumePoint) + { + //printf("Resume: 0x%016llx\n", (unsigned long long)(uintptr_t)ResumePoint); + const void* const tmp = ResumePoint; + ResumePoint = nullptr; + goto *tmp; + } + + do + { + if(DebugMode) + { + if(MDFN_LIKELY(ResumeTableP[DebugMode])) + DBG_CPUHandler<1>(); + } + + // + // Ideally, we would place SPEPRecover: after the FRT event check, but doing + // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions + // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop + // or something?(even with all our branch hinting!) + // + SPEPRecover:; + + if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) + { + FRT_WDT_Update(); + FRT_WDT_Recalc_NET(); + } + + instr = (uint16)Pipe_ID; + // + #include "sh7095_ops.inc" + // + } while(timestamp < bound_timestamp); + diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/smpc.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/smpc.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/smpc.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/smpc.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* smpc.cpp - SMPC Emulation -** Copyright (C) 2015-2017 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -153,6 +153,7 @@ static bool SoundCPUOn; static bool SlaveSH2On; +static int SlaveSH2Pending; static bool CDOn; static uint8 BusBuffer; @@ -409,6 +410,8 @@ MasterClock = master_clock_arg; SMPC_ClockRatio = 0; + SlaveSH2Pending = false; + ResetButtonPhysStatus = false; ResetPending = false; vb = false; @@ -427,27 +430,6 @@ SMPC_SetRTC(NULL, 0); } -bool SMPC_IsSlaveOn(void) -{ - return SlaveSH2On; -} - -static void SlaveOn(void) -{ - SlaveSH2On = true; - CPU[1].AdjustTS(SH7095_mem_timestamp, true); - CPU[1].Reset(true); - SS_SetEventNT(&events[SS_EVENT_SH2_S_DMA], SH7095_mem_timestamp + 1); -} - -static void SlaveOff(void) -{ - SlaveSH2On = false; - CPU[1].Reset(true); - CPU[1].AdjustTS(0x7FFFFFFF, true); - SS_SetEventNT(&events[SS_EVENT_SH2_S_DMA], SS_EVENT_DISABLED_TS); -} - static void TurnSoundCPUOn(void) { SOUND_Reset68K(); @@ -464,7 +446,10 @@ void SMPC_Reset(bool powering_up) { - SlaveOff(); + SlaveSH2Pending = 0; + SlaveSH2On = false; + CPU[1].SetActive(SlaveSH2On); + // TurnSoundCPUOff(); CDOn = true; // ? false; @@ -546,6 +531,7 @@ SFVAR(SoundCPUOn), SFVAR(SlaveSH2On), + SFVAR(SlaveSH2Pending), SFVAR(CDOn), SFVAR(BusBuffer), @@ -607,6 +593,16 @@ { JRS.CurPort &= 0x1; JRS.OWP &= 0x3F; + + for(unsigned vp = 0; vp < 12; vp++) + { + IODevice* const p = VirtualPorts[vp]; + + if(load < 0x00102600 && p->NextEventTS >= 0x40000000) + p->NextEventTS = SS_EVENT_DISABLED_TS; + else + p->NextEventTS = std::max(0, p->NextEventTS); + } } } @@ -620,6 +616,18 @@ VirtualPorts[vp]->TransformInput(VirtualPortsDPtr[vp], gun_x_scale, gun_x_offs); } +void SMPC_ProcessSlaveOffOn(void) +{ + if(SlaveSH2Pending) + { + SlaveSH2On = (SlaveSH2Pending > 0); + CPU[1].SetActive(SlaveSH2On); + SlaveSH2Pending = 0; + // + SS_DBGTI(SS_DBG_SMPC, "[SMPC] Slave pending processed; SlaveSH2On=%d", SlaveSH2On); + } +} + int32 SMPC_StartFrame(EmulateSpecStruct* espec) { if(ResetPending) @@ -631,9 +639,6 @@ PendingClockDivisor = 0; } - if(!SlaveSH2On) - CPU[1].AdjustTS(0x7FFFFFFF, true); - SMPC_ClockRatio = (1ULL << 32) * 4000000 * CurrentClockDivisor / MasterClock; SOUND_SetClockRatio((1ULL << 32) * 11289600 * CurrentClockDivisor / MasterClock); CDB_SetClockRatio((1ULL << 32) * 11289600 * CurrentClockDivisor / MasterClock); @@ -846,6 +851,17 @@ lastts = 0; } +#define SMPC_WAIT_UNTIL_COND_SHORT(cond) { \ + case __COUNTER__: \ + ClockCounter = 0; /* before if(), not after, otherwise the variable will overflow eventually. */ \ + if(!(cond)) \ + { \ + SubPhase = __COUNTER__ - SubPhaseBias - 1; \ + next_event_ts = timestamp + 8; \ + goto Breakout; \ + } \ + } + #define SMPC_WAIT_UNTIL_COND(cond) { \ case __COUNTER__: \ ClockCounter = 0; /* before if(), not after, otherwise the variable will overflow eventually. */ \ @@ -1062,16 +1078,6 @@ { } - else if(ExecutingCommand == CMD_SSHON) - { - if(!SlaveSH2On) - SlaveOn(); - } - else if(ExecutingCommand == CMD_SSHOFF) - { - if(SlaveSH2On) - SlaveOff(); - } else if(ExecutingCommand == CMD_SNDON) { if(!SoundCPUOn) @@ -1094,7 +1100,6 @@ { ResetPending = true; SMPC_WAIT_UNTIL_COND(!ResetPending); - // TODO/FIXME(unreachable currently?): } else if(ExecutingCommand == CMD_CKCHG352 || ExecutingCommand == CMD_CKCHG320) @@ -1102,7 +1107,10 @@ // Devour some time if(SlaveSH2On) - SlaveOff(); + { + SlaveSH2Pending = -1; + SS_RequestEHLExit(); + } if(SoundCPUOn) TurnSoundCPUOff(); @@ -1211,7 +1219,14 @@ UpdateIOBus(JRS.CurPort, timestamp); \ } - JR_WAIT(!vb); + JR_WAIT(!vb || (IREG[0] & 0x40)); + + if(IREG[0] & 0x40) + { + SS_DBGTI(SS_DBG_SMPC, "[SMPC] Break (early)"); + goto AbortJR; + } + JRS.NextContBit = true; if(SR & SR_NPE) { @@ -1462,6 +1477,26 @@ { ResetNMIEnable = false; } + else if(ExecutingCommand == CMD_SSHON) + { + if(!SlaveSH2On) + { + SlaveSH2Pending = 1; + SS_RequestEHLExit(); + SMPC_WAIT_UNTIL_COND_SHORT(!SlaveSH2Pending); + SS_DBGTI(SS_DBG_SMPC, "[SMPC] SlaveSH2Pending wait loop end."); + } + } + else if(ExecutingCommand == CMD_SSHOFF) + { + if(SlaveSH2On) + { + SlaveSH2Pending = -1; + SS_RequestEHLExit(); + SMPC_WAIT_UNTIL_COND_SHORT(!SlaveSH2Pending); + SS_DBGTI(SS_DBG_SMPC, "[SMPC] SlaveSH2Pending wait loop end."); + } + } } ExecutingCommand = -1; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/smpc.h mednafen-1.26.1+dfsg/include/mednafen/ss/smpc.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/smpc.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/smpc.h 2020-11-10 06:04:17.000000000 +0000 @@ -55,7 +55,6 @@ }; void SMPC_Init(const uint8 area_code, const int32 master_clock) MDFN_COLD; -bool SMPC_IsSlaveOn(void); void SMPC_Reset(bool powering_up) MDFN_COLD; void SMPC_LoadNV(Stream* s) MDFN_COLD; void SMPC_SaveNV(Stream* s) MDFN_COLD; @@ -69,6 +68,7 @@ sscpu_timestamp_t SMPC_Update(sscpu_timestamp_t timestamp); void SMPC_ResetTS(void); +void SMPC_ProcessSlaveOffOn(void); int32 SMPC_StartFrame(EmulateSpecStruct* espec); void SMPC_EndFrame(EmulateSpecStruct* espec, sscpu_timestamp_t timestamp); void SMPC_TransformInput(void); diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sound.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/sound.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/sound.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sound.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -132,13 +132,19 @@ ne16_wbo_be(SCSP.GetRAMPtr(), A & 0x7FFFF, V); } -void SOUND_ResetTS(void) +static INLINE void ResetTS_68K(void) { next_scsp_time -= SoundCPU.timestamp; run_until_time -= (int64)SoundCPU.timestamp << 32; SoundCPU.timestamp = 0; +} - lastts = 0; +void SOUND_AdjustTS(const int32 delta) +{ + ResetTS_68K(); + // + // + lastts += delta; } void SOUND_Reset(bool powering_up) @@ -375,10 +381,13 @@ template static MDFN_FASTCALL void SoundCPU_BusWrite(uint32 A, T V) { + SoundCPU.timestamp += 2; + if(MDFN_UNLIKELY(SoundCPU.timestamp >= next_scsp_time)) RunSCSP(); SoundCPU.timestamp += 2; + SCSP.RW(A & 0x1FFFFF, V); SoundCPU.timestamp += 2; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/sound.h mednafen-1.26.1+dfsg/include/mednafen/ss/sound.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/sound.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/sound.h 2020-11-10 06:04:17.000000000 +0000 @@ -34,7 +34,7 @@ void SOUND_SetClockRatio(uint32 ratio); // Ratio between SH-2 clock and 68K clock (sound clock / 2) sscpu_timestamp_t SOUND_Update(sscpu_timestamp_t timestamp); -void SOUND_ResetTS(void); +void SOUND_AdjustTS(const int32 delta); void SOUND_StartFrame(double rate, uint32 quality); int32 SOUND_FlushOutput(int16* SoundBuf, const int32 SoundBufMaxSize, const bool reverse); void SOUND_StateAction(StateMem* sm, const unsigned load, const bool data_only) MDFN_COLD; diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/ss.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/ss.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/ss.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/ss.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* ss.cpp - Saturn Core Emulation and Support Functions -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -37,6 +37,11 @@ #include +#if defined(HAVE_SSE2_INTRINSICS) + #include + #include +#endif + using namespace Mednafen; MDFN_HIDE extern MDFNGI EmulatedSS; @@ -60,6 +65,30 @@ #ifdef MDFN_ENABLE_DEV_BUILD uint32 ss_dbg_mask; static std::bitset<0x200> BWMIgnoreAddr[2]; // 0=read, 1=write + +void SS_DBG(uint32 which, const char* format, ...) +{ + if(MDFN_LIKELY(!(ss_dbg_mask & which))) + return; + // + va_list ap; + va_start(ap, format); + trio_vprintf(format, ap); + va_end(ap); +} + +void SS_DBGTI(uint32 which, const char* format, ...) +{ + if(MDFN_LIKELY(!(ss_dbg_mask & which))) + return; + // + va_list ap; + va_start(ap, format); + trio_vprintf(format, ap); + va_end(ap); + // + trio_printf(" @Line=0x%03x, HPos=0x%03x, memts=%d\n", VDP2::PeekLine(), VDP2::PeekHPos(), SH7095_mem_timestamp); +} #endif uint32 ss_horrible_hacks; @@ -76,7 +105,6 @@ static MDFN_COLD void BackupBackupRAM(void); static MDFN_COLD void BackupCartNV(void); - #include "sh7095.h" static uint8 SCU_MSH2VectorFetch(void); @@ -107,12 +135,7 @@ static int ActiveCartType; // Used in save states. static std::vector *cdifs = NULL; static std::bitset<1U << (27 - SH7095_EXT_MAP_GRAN_BITS)> FMIsWriteable; - -template -static void INLINE SH7095_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax); - -template -static T INLINE SH7095_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax); +static uint16 fmap_dummy[(1U << SH7095_EXT_MAP_GRAN_BITS) / sizeof(uint16)]; /* SH-2 external bus address map: @@ -158,6 +181,14 @@ // if(A >= 0x00200000 && A <= 0x003FFFFF) { + if(A & 0x100000) + { + if(IsWrite) + SS_DBG(SS_DBG_WARNING, "[RAM] %zu-byte write of 0x%08x to mirrored address 0x%08x\n", sizeof(T), DB >> (((A & 1) ^ (2 - sizeof(T))) << 3), A); + else + SS_DBG(SS_DBG_WARNING, "[RAM] %zu-byte read from mirrored address 0x%08x\n", sizeof(T), A); + } + if(IsWrite) ne16_wbo_be(WorkRAML, A & 0xFFFFF, DB >> (((A & 1) ^ (2 - sizeof(T))) << 3)); else @@ -166,7 +197,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 7; else - *SH2DMAHax -= 7; + *SH2DMAHax += 7; return; } @@ -179,7 +210,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; if(!IsWrite) DB = (DB & 0xFFFF0000) | ne16_rbo_be(BIOSROM, A & 0x7FFFE); @@ -219,7 +250,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; if(IsWrite) { @@ -243,20 +274,16 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; - //printf("FT FRT%08x %zu %08x %04x %d %d\n", A, sizeof(T), A, V, SMPC_IsSlaveOn(), SH7095_mem_timestamp); if(IsWrite) { if(sizeof(T) != 1) { const unsigned c = ((A >> 23) & 1) ^ 1; - if(!c || SMPC_IsSlaveOn()) - { - CPU[c].SetFTI(true); - CPU[c].SetFTI(false); - } + CPU[c].SetFTI(true); + CPU[c].SetFTI(false); } } return; @@ -268,7 +295,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 4; else - *SH2DMAHax -= 4; + *SH2DMAHax += 4; if(IsWrite) SS_DBG(SS_DBG_WARNING, "[SH2 BUS] Unknown %zu-byte write of 0x%08x to 0x%08x\n", sizeof(T), DB >> (((A & 1) ^ (2 - sizeof(T))) << 3), A); @@ -277,38 +304,9 @@ } template -static INLINE void BusRW_DB_CS123(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) +static INLINE void BusRW_DB_CS12(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) { // - // CS3: High work RAM/SDRAM, 0x06000000 ... 0x07FFFFFF - // - if(A >= 0x06000000) - { - if(!IsWrite || sizeof(T) == 4) - ne16_rwbo_be(WorkRAMH, A & 0xFFFFC, &DB); - else - ne16_wbo_be(WorkRAMH, A & 0xFFFFF, DB >> (((A & 3) ^ (4 - sizeof(T))) << 3)); - - if(!BurstHax) - { - if(!SH2DMAHax) - { - if(IsWrite) - { - SH7095_mem_timestamp = (SH7095_mem_timestamp + 4) &~ 3; - } - else - { - SH7095_mem_timestamp += 7; - } - } - else - *SH2DMAHax -= IsWrite ? 3 : 6; - } - return; - } - - // // CS1 and CS2: SCU // if(!IsWrite) @@ -317,90 +315,18 @@ SCU_FromSH2_BusRW_DB(A, &DB, SH2DMAHax); } -template -static void INLINE SH7095_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax) -{ - uint32 DB = SH7095_DB; - - if(A < 0x02000000) // CS0, configured as 16-bit - { - if(sizeof(T) == 4) - { - // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. - //if(!SH2DMAHax) - // SH7095_BusLock++; - - DB = (DB & 0xFFFF0000) | (V >> 16); - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - - DB = (DB & 0xFFFF0000) | (uint16)V; - BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); - - //if(!SH2DMAHax) - // SH7095_BusLock--; - } - else - { - const uint32 shift = ((A & 1) ^ (2 - sizeof(T))) << 3; - const uint32 mask = (0xFFFF >> ((2 - sizeof(T)) * 8)) << shift; - - DB = (DB & ~mask) | (V << shift); - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - } - } - else // CS1, CS2, CS3; 32-bit - { - const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; - const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; - - DB = (DB & ~mask) | (V << shift); // //ne32_wbo_be(&DB, A & 0x3, V); - BusRW_DB_CS123(A, DB, BurstHax, SH2DMAHax); - } - - SH7095_DB = DB; -} - -template -static T INLINE SH7095_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax) +template +static INLINE void BusRW_DB_CS3(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) { - uint32 DB = SH7095_DB; - T ret; - - if(A < 0x02000000) // CS0, configured as 16-bit - { - if(sizeof(T) == 4) - { - // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. - //if(!SH2DMAHax) - // SH7095_BusLock++; - - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - ret = DB << 16; - - BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); - ret |= (uint16)DB; - - //if(!SH2DMAHax) - // SH7095_BusLock--; - } - else - { - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - ret = DB >> (((A & 1) ^ (2 - sizeof(T))) << 3); - } - } - else // CS1, CS2, CS3; 32-bit - { - BusRW_DB_CS123(A, DB, BurstHax, SH2DMAHax); - ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); - - // SDRAM leaves data bus in a weird state after read... - //if(A >= 0x06000000) - // DB = 0; - } - - SH7095_DB = DB; - return ret; + // + // CS3: High work RAM/SDRAM, 0x06000000 ... 0x07FFFFFF + // + // Timing is handled in BSC_BusWrite() and BSC_BusRead() in sh7095.inc + // + if(!IsWrite || sizeof(T) == 4) + ne16_rwbo_be(WorkRAMH, A & 0xFFFFC, &DB); + else + ne16_wbo_be(WorkRAMH, A & 0xFFFFF, DB >> (((A & 3) ^ (4 - sizeof(T))) << 3)); } // @@ -427,7 +353,7 @@ { for(uint32 Abase = 0x00000000; Abase < 0x20000000; Abase += 0x08000000) { - CPU[c].Write_UpdateCache(Abase + A, V); + CPU[c].Cache_WriteUpdate(Abase + A, V); } } } @@ -456,8 +382,6 @@ } } -static uint16 fmap_dummy[(1U << SH7095_EXT_MAP_GRAN_BITS) / sizeof(uint16)]; - static MDFN_COLD void InitFastMemMap(void) { for(unsigned i = 0; i < sizeof(fmap_dummy) / sizeof(fmap_dummy[0]); i++) @@ -491,7 +415,19 @@ #include "sh7095.inc" -static bool Running; +// +// Running is: +// 0 at end of (emulation) frame +// +// 1 during normal execution +// +// -1 when we need to temporarily break out of the execution loop to +// e.g. handle turning the slave CPU on or off, which we can't +// safely do from an event handler due to the event handler +// potentially being called from deep within the memory read/write +// functions. +// +static int Running; event_list_entry events[SS_EVENT__COUNT]; static sscpu_timestamp_t next_event_ts; @@ -569,6 +505,14 @@ void SS_SetEventNT(event_list_entry* e, const sscpu_timestamp_t next_timestamp) { +#ifdef MDFN_ENABLE_DEV_BUILD + if(next_timestamp < SS_EVENT_DISABLED_TS && (next_timestamp < 0 || next_timestamp >= 0x40000000)) + { + fprintf(stderr, "Event %u, bad next timestamp 0x%08x\n", (unsigned)(e - events), next_timestamp); + abort(); + } +#endif + if(next_timestamp < e->event_time) { event_list_entry *fe = e; @@ -612,16 +556,14 @@ e->event_time = next_timestamp; } - next_event_ts = (Running ? events[SS_EVENT__SYNFIRST].next->event_time : 0); + next_event_ts = ((Running > 0) ? events[SS_EVENT__SYNFIRST].next->event_time : 0); } // Called from debug.cpp too. void ForceEventUpdates(const sscpu_timestamp_t timestamp) { - CPU[0].ForceInternalEventUpdates(); - - if(SMPC_IsSlaveOn()) - CPU[1].ForceInternalEventUpdates(); + for(unsigned c = 0; c < 2; c++) + CPU[c].ForceInternalEventUpdates(); for(unsigned evnum = SS_EVENT__SYNFIRST + 1; evnum < SS_EVENT__SYNLAST; evnum++) { @@ -629,7 +571,7 @@ SS_SetEventNT(&events[evnum], events[evnum].event_handler(timestamp)); } - next_event_ts = (Running ? events[SS_EVENT__SYNFIRST].next->event_time : 0); + next_event_ts = ((Running > 0) ? events[SS_EVENT__SYNFIRST].next->event_time : 0); } static INLINE bool EventHandler(const sscpu_timestamp_t timestamp) @@ -656,7 +598,7 @@ SS_SetEventNT(e, nt); } - return(Running); + return Running > 0; } static void NO_INLINE MDFN_HOT CheckEventsByMemTS_Sub(void) @@ -673,6 +615,15 @@ } } +void SS_RequestEHLExit(void) +{ + if(Running) + { + Running = -1; + next_event_ts = 0; + } +} + void SS_RequestMLExit(void) { Running = 0; @@ -680,48 +631,79 @@ } #pragma GCC push_options -#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 5 - // gcc 5.3.0 and 6.1.0 produce some braindead code for the big switch() statement at -Os. - #pragma GCC optimize("Os,no-unroll-loops,no-peel-loops,no-crossjumping") -#else - #pragma GCC optimize("O2,no-unroll-loops,no-peel-loops,no-crossjumping") -#endif +#pragma GCC optimize("O2,no-unroll-loops,no-peel-loops,no-crossjumping") template -static int32 NO_INLINE MDFN_HOT RunLoop(EmulateSpecStruct* espec) +static INLINE int32 RunLoop_INLINE(EmulateSpecStruct* espec) { sscpu_timestamp_t eff_ts = 0; - //printf("%d %d\n", SH7095_mem_timestamp, CPU[0].timestamp); + for(unsigned c = 0; c < 2; c++) + CPU[c].SetDebugMode(DebugMode); + //printf("%d %d\n", SH7095_mem_timestamp, CPU[0].timestamp); do { + SMPC_ProcessSlaveOffOn(); + // + // + Running = true; + ForceEventUpdates(eff_ts); do { - if(DebugMode) - DBG_CPUHandler<0>(eff_ts); - - CPU[0].Step<0, EmulateICache, DebugMode>(); - CPU[0].DMA_BusTimingKludge(); - - while(MDFN_LIKELY(CPU[0].timestamp > CPU[1].timestamp)) + do { if(DebugMode) - DBG_CPUHandler<1>(eff_ts); + { + DBG_SetEffTS(eff_ts); + DBG_CPUHandler<0>(); + } - CPU[1].Step<1, EmulateICache, DebugMode>(); - } + CPU[0].Step<0, EmulateICache, DebugMode>(); + CPU[0].DMA_BusTimingKludge(); - eff_ts = CPU[0].timestamp; - if(SH7095_mem_timestamp > eff_ts) - eff_ts = SH7095_mem_timestamp; - else - SH7095_mem_timestamp = eff_ts; - } while(MDFN_LIKELY(eff_ts < next_event_ts)); - } while(MDFN_LIKELY(EventHandler(eff_ts))); + if(EmulateICache) + { + if(DebugMode) + CPU[1].RunSlaveUntil_Debug(CPU[0].timestamp); + else + CPU[1].RunSlaveUntil(CPU[0].timestamp); + } + else + { + while(MDFN_LIKELY(CPU[0].timestamp > CPU[1].timestamp)) + { + if(DebugMode) + DBG_CPUHandler<1>(); + + CPU[1].Step<1, false, DebugMode>(); + } + } + + eff_ts = CPU[0].timestamp; + if(SH7095_mem_timestamp > eff_ts) + eff_ts = SH7095_mem_timestamp; + else + SH7095_mem_timestamp = eff_ts; + } while(MDFN_LIKELY(eff_ts < next_event_ts)); + } while(MDFN_LIKELY(EventHandler(eff_ts))); + } while(MDFN_LIKELY(Running != 0)); //printf(" End: %d %d -- %d\n", SH7095_mem_timestamp, CPU[0].timestamp, eff_ts); return eff_ts; } + +template +static NO_INLINE MDFN_HOT int32 RunLoop(EmulateSpecStruct* espec) +{ + return RunLoop_INLINE(espec); +} + +template +static NO_INLINE MDFN_COLD int32 RunLoop_Debug(EmulateSpecStruct* espec) +{ + return RunLoop_INLINE(espec); +} + #pragma GCC pop_options // Must not be called within an event or read/write handler. @@ -819,23 +801,20 @@ // // // - Running = true; // Set before ForceEventUpdates() - ForceEventUpdates(0); - #ifdef WANT_DEBUGGER - #define RLTDAT true + #define RLTDAT(eic) RunLoop_Debug #else - #define RLTDAT false + #define RLTDAT(eic) RunLoop #endif static int32 (*const rltab[2][2])(EmulateSpecStruct*) = { - // DebugMode=false DebugMode=true - { RunLoop, RunLoop }, // EmulateICache=false - { RunLoop, RunLoop }, // EmulateICache=true + //DebugMode=false DebugMode=true + { RunLoop, RLTDAT(false) }, // EmulateICache=false + { RunLoop, RLTDAT(true) }, // EmulateICache=true }; #undef RLTDAT end_ts = rltab[NeedEmuICache][DBG_NeedCPUHooks()](espec); - + assert(end_ts >= 0); ForceEventUpdates(end_ts); // SMPC_EndFrame(espec, end_ts); @@ -845,7 +824,7 @@ RebaseTS(end_ts); CDB_ResetTS(); - SOUND_ResetTS(); + SOUND_AdjustTS(-end_ts); VDP1::AdjustTS(-end_ts); VDP2::AdjustTS(-end_ts); SMPC_ResetTS(); @@ -853,14 +832,13 @@ CART_AdjustTS(-end_ts); UpdateInputLastBigTS -= (int64)end_ts * cur_clock_div * 1000 * 1000; + // + SH7095_mem_timestamp -= end_ts; // Update before CPU[n].AdjustTS() + // + for(unsigned c = 0; c < 2; c++) + CPU[c].AdjustTS(-end_ts); - if(!(SH7095_mem_timestamp & 0x40000000)) // or maybe >= 0 instead? - SH7095_mem_timestamp -= end_ts; - - CPU[0].AdjustTS(-end_ts); - - if(SMPC_IsSlaveOn()) - CPU[1].AdjustTS(-end_ts); + //printf("B=% 7d M=% 7d S=% 7d\n", SH7095_mem_timestamp, CPU[0].timestamp, CPU[1].timestamp); // // // @@ -946,7 +924,7 @@ return true; } -static INLINE void CalcGameID(uint8* id_out16, uint8* fd_id_out16, char* sgid) +static INLINE void CalcGameID(uint8* id_out16, uint8* fd_id_out16, char* sgid, char* sgname, char* sgarea) { std::unique_ptr buf(new uint8[2048]); md5_context mctx; @@ -990,6 +968,15 @@ *tmp = 0; } while(tmp-- != sgid && (signed char)*tmp <= 0x20); } + memcpy(sgname, &buf[0x60], 0x70); + sgname[0x70] = 0; + MDFN_zapctrlchars(sgname); + MDFN_trim(sgname); + + memcpy(sgarea, &buf[0x40], 0x10); + sgarea[0x10] = 0; + MDFN_zapctrlchars(sgarea); + MDFN_trim(sgarea); } mctx.update(&buf[0], 2048); @@ -1193,7 +1180,7 @@ } // if(horrible_hacks) - MDFN_printf(_("Horrible hacks: 0x%08x\n"), horrible_hacks); + MDFN_printf(_("Horrible hacks: %s\n"), DB_GetHHDescriptions(horrible_hacks).c_str()); // { MDFN_printf(_("Region: 0x%01x\n"), smpc_area); @@ -1232,7 +1219,7 @@ NeedEmuICache = (cpucache_emumode == CPUCACHE_EMUMODE_FULL); for(unsigned c = 0; c < 2; c++) { - CPU[c].Init(cpucache_emumode == CPUCACHE_EMUMODE_DATA_CB); + CPU[c].Init((cpucache_emumode == CPUCACHE_EMUMODE_FULL), (cpucache_emumode == CPUCACHE_EMUMODE_DATA_CB)); CPU[c].SetMD5((bool)c); } SH7095_mem_timestamp = 0; @@ -1629,17 +1616,21 @@ unsigned horrible_hacks; uint8 fd_id[16]; char sgid[16 + 1] = { 0 }; + char sgname[0x70 + 1] = { 0 }; + char sgarea[0x10 + 1] = { 0 }; cdifs = CDInterfaces; - CalcGameID(MDFNGameInfo->MD5, fd_id, sgid); + CalcGameID(MDFNGameInfo->MD5, fd_id, sgid, sgname, sgarea); MDFN_printf("SGID: %s\n", sgid); + MDFN_printf("SGNAME: %s\n", sgname); + MDFN_printf("SGAREA: %s\n", sgarea); region = region_default; cart_type = MDFN_GetSettingI("ss.cart.auto_default"); cpucache_emumode = CPUCACHE_EMUMODE_DATA; DetectRegion(®ion); - DB_Lookup(nullptr, sgid, fd_id, ®ion, &cart_type, &cpucache_emumode); + DB_Lookup(nullptr, sgid, sgname, sgarea, fd_id, ®ion, &cart_type, &cpucache_emumode); horrible_hacks = DB_LookupHH(sgid, fd_id); // if(!MDFN_GetSettingB("ss.region_autodetect")) @@ -1790,7 +1781,7 @@ enum : size_t { eventcopy_first = SS_EVENT__SYNFIRST + 1 }; enum : size_t { eventcopy_bound = SS_EVENT__SYNLAST }; - bool Restore(void); + bool Restore(const unsigned state_version); void Save(void); int32 event_times[eventcopy_bound - eventcopy_first]; @@ -1810,7 +1801,7 @@ } } -INLINE bool EventsPacker::Restore(void) +INLINE bool EventsPacker::Restore(const unsigned state_version) { bool used[SS_EVENT__COUNT] = { 0 }; event_list_entry* evt = &events[SS_EVENT__SYNFIRST]; @@ -1819,6 +1810,11 @@ int32 et = event_times[i - eventcopy_first]; uint8 eo = event_order[i - eventcopy_first]; + if(state_version < 0x00102600 && et >= 0x40000000) + { + et = SS_EVENT_DISABLED_TS; + } + if(eo < eventcopy_first || eo >= eventcopy_bound) return false; @@ -1880,6 +1876,9 @@ sha256_digest sr_dig = BIOS_SHA256; int cart_type = ActiveCartType; + if(DBG_InSlaveStep()) + throw MDFN_Error(0, _("Slave step mode is incompatible with save states.")); + SFORMAT SRDStateRegs[] = { SFPTR8(sr_dig.data(), sr_dig.size()), @@ -1953,19 +1952,14 @@ { BackupRAM_Dirty = true; - if(!ep.Restore()) + if(!ep.Restore(load)) { printf("Bad state events data."); InitEvents(); } - if(NeedEmuICache && !RecordedNeedEmuICache) - { - //printf("NeedEmuICache=%d, RecordedNeedEmuICache=%d\n", NeedEmuICache, RecordedNeedEmuICache); - - for(size_t i = 0; i < 2; i++) - CPU[i].FixupICacheModeState(); // Only call it after all RAM has been loaded from the save state. - } + CPU[0].PostStateLoad(load, RecordedNeedEmuICache, NeedEmuICache); + CPU[1].PostStateLoad(load, RecordedNeedEmuICache, NeedEmuICache); } } @@ -1987,7 +1981,12 @@ { switch(cmd) { - case MDFN_MSC_POWER: SS_Reset(true); break; + case MDFN_MSC_POWER: + if(DBG_InSlaveStep()) + MDFN_Notify(MDFN_NOTICE_ERROR, _("Slave step mode is incompatible with hard resets.")); + else + SS_Reset(true); + break; // MDFN_MSC_RESET is not handled here; special reset button handling in smpc.cpp. } } @@ -2073,6 +2072,9 @@ { "sh2", SS_DBG_SH2, gettext_noop("SH-2") }, { "sh2_regw", SS_DBG_SH2_REGW, gettext_noop("SH-2 (peripherals) register writes") }, { "sh2_cache", SS_DBG_SH2_CACHE, gettext_noop("SH-2 cache") }, + { "sh2_cache_noisy",SS_DBG_SH2_CACHE_NOISY, gettext_noop("SH-2 cache, with assoc purge/addr/data array logging") }, + { "sh2_except",SS_DBG_SH2_EXCEPT, gettext_noop("SH-2 exceptions and interrupts") }, + { "sh2_dmarace",SS_DBG_SH2_DMARACE, gettext_noop("SH-2 DMA/CPU RW races") }, { "scu", SS_DBG_SCU, gettext_noop("SCU") }, { "scu_regw", SS_DBG_SCU_REGW, gettext_noop("SCU register writes") }, @@ -2089,6 +2091,7 @@ { "vdp1_regw", SS_DBG_VDP1_REGW, gettext_noop("VDP1 register writes") }, { "vdp1_vramw",SS_DBG_VDP1_VRAMW, gettext_noop("VDP1 VRAM writes") }, { "vdp1_fbw", SS_DBG_VDP1_FBW, gettext_noop("VDP1 FB writes") }, + { "vdp1_race", SS_DBG_VDP1_RACE, gettext_noop("VDP1 draw/VRAM write races") }, { "vdp2", SS_DBG_VDP2, gettext_noop("VDP2") }, { "vdp2_regw", SS_DBG_VDP2_REGW, gettext_noop("VDP2 register writes") }, diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/ssf.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/ssf.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/ssf.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/ssf.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -52,11 +52,12 @@ SOUND_StartFrame(espec->SoundRate / espec->soundmultiplier, MDFN_GetSettingUI("ssfplay.resamp_quality")); espec->soundmultiplier = 1; - SOUND_Update(588 * 512); - espec->MasterCycles = 588 * 256; + const int32 target_timestamp = 588 * 512; + SOUND_Update(target_timestamp); + espec->MasterCycles = target_timestamp >> 1; espec->SoundBufSize = SOUND_FlushOutput(espec->SoundBuf, espec->SoundBufMaxSize, espec->NeedSoundReverse); espec->NeedSoundReverse = false; - SOUND_ResetTS(); + SOUND_AdjustTS(-target_timestamp); if(!espec->skip) { @@ -65,7 +66,7 @@ } } -static void Cleanup(void) +static MDFN_COLD void Cleanup(void) { if(ssf_loader) { @@ -77,7 +78,7 @@ } -static bool TestMagic(GameFile* gf) +static MDFN_COLD bool TestMagic(GameFile* gf) { if(SSFLoader::TestMagic(gf->stream)) return true; @@ -85,7 +86,7 @@ return false; } -static void Reset(void) +static MDFN_COLD void Reset(void) { SOUND_Reset(true); //{ @@ -99,7 +100,7 @@ } } -static void Load(GameFile* gf) +static MDFN_COLD void Load(GameFile* gf) { try { @@ -124,12 +125,12 @@ } } -static void CloseGame(void) +static MDFN_COLD void CloseGame(void) { Cleanup(); } -static void DoSimpleCommand(int cmd) +static MDFN_COLD void DoSimpleCommand(int cmd) { switch(cmd) { diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/ss.h mednafen-1.26.1+dfsg/include/mednafen/ss/ss.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/ss.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/ss.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* ss.h: -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -32,38 +32,43 @@ { enum { - SS_DBG_ERROR = (1U << 0), - SS_DBG_WARNING = (1U << 1), + SS_DBG_ERROR = (1U << 0), + SS_DBG_WARNING = (1U << 1), - SS_DBG_M68K = (1U << 2), + SS_DBG_M68K = (1U << 2), - SS_DBG_SH2 = (1U << 4), - SS_DBG_SH2_REGW = (1U << 5), - SS_DBG_SH2_CACHE = (1U << 6), - - SS_DBG_SCU = (1U << 8), - SS_DBG_SCU_REGW = (1U << 9), - SS_DBG_SCU_INT = (1U << 10), - SS_DBG_SCU_DSP = (1U << 11), - - SS_DBG_SMPC = (1U << 12), - SS_DBG_SMPC_REGW = (1U << 13), - - SS_DBG_BIOS = (1U << 15), - - SS_DBG_CDB = (1U << 16), - SS_DBG_CDB_REGW = (1U << 17), - - SS_DBG_VDP1 = (1U << 20), - SS_DBG_VDP1_REGW = (1U << 21), - SS_DBG_VDP1_VRAMW= (1U << 22), - SS_DBG_VDP1_FBW = (1U << 23), + SS_DBG_SH2 = (1U << 3), + SS_DBG_SH2_REGW = (1U << 4), + SS_DBG_SH2_CACHE = (1U << 5), + SS_DBG_SH2_CACHE_NOISY = (1U << 6), + SS_DBG_SH2_EXCEPT= (1U << 7), + SS_DBG_SH2_DMARACE=(1U << 8), + + SS_DBG_SCU = (1U << 9), + SS_DBG_SCU_REGW = (1U << 10), + SS_DBG_SCU_INT = (1U << 11), + //SS_DBG_SCU_TIMER = (1U << 12), + SS_DBG_SCU_DSP = (1U << 13), + + SS_DBG_SMPC = (1U << 14), + SS_DBG_SMPC_REGW = (1U << 15), + + SS_DBG_BIOS = (1U << 16), + + SS_DBG_CDB = (1U << 17), + SS_DBG_CDB_REGW = (1U << 18), + + SS_DBG_VDP1 = (1U << 19), + SS_DBG_VDP1_REGW = (1U << 20), + SS_DBG_VDP1_VRAMW= (1U << 21), + SS_DBG_VDP1_FBW = (1U << 22), + SS_DBG_VDP1_RACE = (1U << 23), SS_DBG_VDP2 = (1U << 24), SS_DBG_VDP2_REGW = (1U << 25), - SS_DBG_SCSP = (1U << 28), - SS_DBG_SCSP_REGW = (1U << 29), + SS_DBG_SCSP = (1U << 26), + SS_DBG_SCSP_REGW = (1U << 27), }; #ifdef MDFN_ENABLE_DEV_BUILD MDFN_HIDE extern uint32 ss_dbg_mask; @@ -83,9 +88,13 @@ MDFN_HIDE extern uint32 ss_horrible_hacks; #endif - static INLINE void SS_DBG_Dummy(const char* format, ...) { } - #define SS_DBG(which, ...) ((MDFN_UNLIKELY(ss_dbg_mask & (which))) ? (void)trio_printf(__VA_ARGS__) : SS_DBG_Dummy(__VA_ARGS__)) - #define SS_DBGTI(which, ...) ((MDFN_UNLIKELY(ss_dbg_mask & (which))) ? ((void)trio_printf(__VA_ARGS__), (void)trio_printf(" @Line=0x%03x, HPos=0x%03x, memts=%d\n", VDP2::PeekLine(), VDP2::PeekHPos(), SH7095_mem_timestamp)) : SS_DBG_Dummy(__VA_ARGS__)) +#ifdef MDFN_ENABLE_DEV_BUILD + void SS_DBG(uint32 which, const char* format, ...); + void SS_DBGTI(uint32 which, const char* format, ...); +#else + static INLINE void SS_DBG(uint32 which, const char* format, ...) { } + static INLINE void SS_DBGTI(uint32 which, const char* format, ...) { } +#endif template static void SS_DBG_Wrap(const char* format, ...) noexcept @@ -111,6 +120,7 @@ MDFN_HIDE extern int32 SH7095_mem_timestamp; void SS_RequestMLExit(void); + void SS_RequestEHLExit(void); void ForceEventUpdates(const sscpu_timestamp_t timestamp); enum @@ -152,14 +162,15 @@ MDFN_HIDE extern event_list_entry events[SS_EVENT__COUNT]; - #define SS_EVENT_DISABLED_TS 0x40000000 + enum : sscpu_timestamp_t { SS_EVENT_DISABLED_TS = 0x7FFFFFFF }; + void SS_SetEventNT(event_list_entry* e, const sscpu_timestamp_t next_timestamp); // Call from init code, or power/reset code, as appropriate. // (length is in units of bytes, not 16-bit units) // // is_writeable is mostly for cheat stuff. - void SS_SetPhysMemMap(uint32 Astart, uint32 Aend, uint16* ptr, uint32 length, bool is_writeable = false); + void SS_SetPhysMemMap(uint32 Astart, uint32 Aend, uint16* ptr, uint32 length, bool is_writeable = false) MDFN_COLD; void SS_Reset(bool powering_up) MDFN_COLD; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_common.h mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_common.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_common.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_common.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_common.h: -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,17 +28,24 @@ namespace VDP1 { +enum : int { VDP1_SuspendResumeThreshold = 1000 }; +static_assert(VDP1_SuspendResumeThreshold >= 1, "out of acceptable range"); + int32 CMD_NormalSprite(const uint16*); int32 CMD_ScaledSprite(const uint16*); int32 CMD_DistortedSprite(const uint16*); +int32 RESUME_Sprite(const uint16*); int32 CMD_Polygon(const uint16*); +int32 RESUME_Polygon(const uint16*); + int32 CMD_Polyline(const uint16*); int32 CMD_Line(const uint16*); +int32 RESUME_Line(const uint16*); MDFN_HIDE extern uint16 VRAM[0x40000]; MDFN_HIDE extern uint16 FB[2][0x20000]; -MDFN_HIDE extern bool FBDrawWhich; +MDFN_HIDE extern uint16* FBDrawWhichPtr; MDFN_HIDE extern int32 SysClipX, SysClipY; MDFN_HIDE extern int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; @@ -200,21 +207,22 @@ // // // -template +template static INLINE int32 PlotPixel(int32 x, int32 y, uint16 pix, bool transparent, GourauderTheTerrible* g) { + //printf("%d %d %d %d %d %d %d\n", bpp8, die, MeshEn, MSBOn, GouraudEn, HalfFGEn, HalfBGEn); static_assert(!MSBOn || (!HalfFGEn && !HalfBGEn), "Table error; sub-optimal template arguments."); int32 ret = 0; uint16* fbyptr; if(die) { - fbyptr = &FB[FBDrawWhich][((y >> 1) & 0xFF) << 9]; + fbyptr = &FBDrawWhichPtr[((y >> 1) & 0xFF) << 9]; transparent |= ((y & 1) != (bool)(FBCR & FBCR_DIL)); } else { - fbyptr = &FB[FBDrawWhich][(y & 0xFF) << 9]; + fbyptr = &FBDrawWhichPtr[(y & 0xFF) << 9]; } if(MeshEn) @@ -259,14 +267,14 @@ { if(HalfFGEn) { - if(g) + if(GouraudEn) pix = g->Apply(pix); pix = ((pix + bg_pix) - ((pix ^ bg_pix) & 0x8421)) >> 1; } else { - if(g) + if(GouraudEn) pix = 0; else pix = ((bg_pix & 0x7BDE) >> 1) | (bg_pix & 0x8000); @@ -276,14 +284,14 @@ { if(HalfFGEn) { - if(g) + if(GouraudEn) pix = g->Apply(pix); else pix = pix; } else { - if(g) + if(GouraudEn) pix = 0; else pix = bg_pix; @@ -292,7 +300,7 @@ } else { - if(g) + if(GouraudEn) pix = g->Apply(pix); if(HalfFGEn) @@ -308,17 +316,6 @@ return ret; } - - -static INLINE void CheckUndefClipping(void) -{ - if(SysClipX < UserClipX1 || SysClipY < UserClipY1 || UserClipX0 > UserClipX1 || UserClipY0 > UserClipY1) - { - //SS_DBG(SS_DBG_WARNING, "[VDP1] Illegal clipping windows; Sys=%u:%u -- User=%u:%u - %u:%u\n", SysClipX, SysClipY, UserClipX0, UserClipY0, UserClipX1, UserClipY1); - } -} - - // // struct line_vertex @@ -328,336 +325,283 @@ int32 t; }; -struct line_data -{ - line_vertex p[2]; - bool PCD; - bool HSS; - uint16 color; - int32 ec_count; - uint32 (MDFN_FASTCALL *tffn)(uint32); - uint16 CLUT[0x10]; - uint32 cb_or; - uint32 tex_base; -}; - -MDFN_HIDE extern line_data LineSetup; - -template -static int32 DrawLine(void) +struct EdgeStepper { - const uint16 color = LineSetup.color; - line_vertex p0 = LineSetup.p[0]; - line_vertex p1 = LineSetup.p[1]; - int32 ret = 0; + void Setup(const bool gourauden, const line_vertex& p0, const line_vertex& p1, const int32 dmax); - if(!LineSetup.PCD) + template + INLINE void GetVertex(line_vertex* p) { - // TODO: - // Plain clipping treats system clip X as an unsigned 10-bit quantity... - // Pre-clipping treats system clip X as a signed 13-bit quantity... - // - bool clipped = false; - bool swapped = false; + p->x = x; + p->y = y; - ret += 4; + if(gourauden) + p->g = g.Current(); + } - if(UserClipEn) + template + INLINE void Step(void) + { + d_error += d_error_inc; + if((int32)d_error >= d_error_cmp) { - if(UserClipMode) - { - // not correct: clipped |= (p0.x >= UserClipX0) & (p1.x <= UserClipX1) & (p0.y >= UserClipY0) & (p1.y <= UserClipY1); - clipped |= (p0.x < 0) & (p1.x < 0); - clipped |= (p0.x > SysClipX) & (p1.x > SysClipX); - clipped |= (p0.y < 0) & (p1.y < 0); - clipped |= (p0.y > SysClipY) & (p1.y > SysClipY); + d_error += d_error_adj; - swapped = (p0.y == p1.y) & ((p0.x < 0) | (p0.x > SysClipX)); - } - else + x_error += x_error_inc; { - // Ignore system clipping WRT pre-clip for UserClipEn == 1 && UserClipMode == 0 - clipped |= (p0.x < UserClipX0) & (p1.x < UserClipX0); - clipped |= (p0.x > UserClipX1) & (p1.x > UserClipX1); - clipped |= (p0.y < UserClipY0) & (p1.y < UserClipY0); - clipped |= (p0.y > UserClipY1) & (p1.y > UserClipY1); + const uint32 x_mask = -((int32)x_error >= x_error_cmp); + x += x_inc & x_mask; + x_error += x_error_adj & x_mask; + } - swapped = (p0.y == p1.y) & ((p0.x < UserClipX0) | (p0.x > UserClipX1)); + y_error += y_error_inc; + { + const uint32 y_mask = -((int32)y_error >= y_error_cmp); + y += y_inc & y_mask; + y_error += y_error_adj & y_mask; } - } - else - { - clipped |= (p0.x < 0) & (p1.x < 0); - clipped |= (p0.x > SysClipX) & (p1.x > SysClipX); - clipped |= (p0.y < 0) & (p1.y < 0); - clipped |= (p0.y > SysClipY) & (p1.y > SysClipY); - swapped = (p0.y == p1.y) & ((p0.x < 0) | (p0.x > SysClipX)); + if(gourauden) + g.Step(); } + } - if(clipped) - return ret; + uint32 d_error, d_error_inc, d_error_adj; + int32 d_error_cmp; - if(swapped) - std::swap(p0, p1); - } + uint32 x, x_inc; + uint32 x_error, x_error_inc, x_error_adj; + int32 x_error_cmp; + + uint32 y, y_inc; + uint32 y_error, y_error_inc, y_error_adj; + int32 y_error_cmp; - ret += 8; + GourauderTheTerrible g; +}; + +struct line_inner_data +{ + uint32 xy; + uint32 error; + bool drawn_ac; + uint32 texel; // must be 32-bit + VileTex t; + GourauderTheTerrible g; // // - const int32 dx = p1.x - p0.x; - const int32 dy = p1.y - p0.y; - const int32 abs_dx = abs(dx); - const int32 abs_dy = abs(dy); - const int32 max_adx_ady = std::max(abs_dx, abs_dy); - int32 x_inc = (dx >= 0) ? 1 : -1; - int32 y_inc = (dy >= 0) ? 1 : -1; - int32 x = p0.x; - int32 y = p0.y; - bool drawn_ac = true; // Drawn all-clipped - uint32 texel; - GourauderTheTerrible g; - VileTex t; + // + int32 x_inc; + int32 y_inc; + uint32 aa_xy_inc; + uint32 term_xy; + + int32 error_cmp; + uint32 error_inc; + uint32 error_adj; - if(GouraudEn) - g.Setup(max_adx_ady + 1, p0.g, p1.g); + uint16 color; - if(Textured) - { - LineSetup.ec_count = 2; // Call before tffn() + bool abs_dy_gt_abs_dx; +}; - if(MDFN_UNLIKELY(max_adx_ady < abs(p1.t - p0.t) && LineSetup.HSS)) - { - LineSetup.ec_count = 0x7FFFFFFF; - t.Setup(max_adx_ady + 1, p0.t >> 1, p1.t >> 1, 2, (bool)(FBCR & FBCR_EOS)); - } - else - t.Setup(max_adx_ady + 1, p0.t, p1.t); +struct line_data +{ + line_vertex p[2]; + // + uint16 color; + int32 ec_count; + uint32 (MDFN_FASTCALL *tffn)(uint32); + uint16 CLUT[0x10]; + uint32 cb_or; + uint32 tex_base; +}; - texel = LineSetup.tffn(t.Current()); - } +MDFN_HIDE extern line_data LineData; + +MDFN_HIDE extern line_inner_data LineInnerData; + +struct prim_data +{ + EdgeStepper e[2]; + VileTex big_t; + uint32 tex_base; + int32 iter; + bool need_line_resume; +}; + +MDFN_HIDE extern prim_data PrimData; + +// Not sure the exact nature of this overhead, probably the combined effects of FBRAM and VRAM refresh, and something else. +// 8bpp mode timing is best-caseish, performance is different between horizontal and vertical lines. +// +// Must always return 0 if 'cycles' argument is zero. +static INLINE int32 AdjustDrawTiming(const int32 cycles) +{ + MDFN_HIDE extern uint32 DTACounter; + uint32 extra_cycles; + + DTACounter += cycles * ((TVMR & TVMR_8BPP) ? 24 : 48); + extra_cycles = DTACounter >> 8; + DTACounter &= 0xFF; + + return cycles + extra_cycles; +} - #define PSTART \ +bool SetupDrawLine(int32* const cycle_counter, const bool AA, const bool Textured, const uint16 mode); + +#define PSTART \ bool transparent; \ uint16 pix; \ \ if(Textured) \ { \ - /*ret++;*/ \ - while(t.IncPending()) \ + /*ret++;*/ \ + while(lid.t.IncPending()) \ { \ - int32 tx = t.DoPendingInc(); \ + int32 tx = lid.t.DoPendingInc(); \ \ - /*ret += (bool)t.IncPending();*/ \ + /*ret += (bool)t.IncPending();*/ \ \ - texel = LineSetup.tffn(tx); \ + lid.texel = LineData.tffn(tx); \ \ - if(!ECD && MDFN_UNLIKELY(LineSetup.ec_count <= 0)) \ + if(!ECD && MDFN_UNLIKELY(LineData.ec_count <= 0)) \ return ret; \ } \ - t.AddError(); \ + lid.t.AddError(); \ \ - transparent = (SPD && ECD) ? false : (texel >> 31); \ - pix = texel; \ + transparent = (SPD && ECD) ? false : (lid.texel >> 31);\ + pix = lid.texel; \ } \ else \ { \ - pix = color; \ + pix = lid.color; \ transparent = !SPD; \ } /* hmm, possible problem with AA and drawn_ac...*/ - #define PBODY(px, py) \ + #define PBODY(pxy) \ { \ - bool clipped = ((uint32)px > (uint32)SysClipX) | ((uint32)py > (uint32)SysClipY); \ + const uint32 px = (uint16)(pxy); \ + const uint32 py = (pxy) >> 16; \ + bool clipped; \ \ if(UserClipEn && !UserClipMode) \ - clipped |= (px < UserClipX0) | (px > UserClipX1) | (py < UserClipY0) | (py > UserClipY1); \ + clipped = ((uclipo1 - pxy) | (pxy - uclipo0)) & 0x80008000; \ + else \ + clipped = (clipo - pxy) & 0x80008000; \ \ - if(MDFN_UNLIKELY((clipped ^ drawn_ac) & clipped)) \ + if(MDFN_UNLIKELY((clipped ^ lid.drawn_ac) & clipped)) \ return ret; \ \ - drawn_ac &= clipped; \ + lid.drawn_ac &= clipped; \ \ - if(UserClipEn && UserClipMode) \ - clipped |= (px >= UserClipX0) & (px <= UserClipX1) & (py >= UserClipY0) & (py <= UserClipY1); \ + if(UserClipEn) \ + { \ + if(!UserClipMode) \ + clipped |= (clipo - pxy) & 0x80008000; \ + else \ + clipped |= !(((uclipo1 - pxy) | (pxy - uclipo0)) & 0x80008000); \ + } \ \ - ret += PlotPixel(px, py, pix, transparent | clipped, (GouraudEn ? &g : NULL)); \ + ret += PlotPixel(px, py, pix, transparent | clipped, (GouraudEn ? &lid.g : NULL)); \ } - #define PEND \ - { \ - if(GouraudEn) \ - g.Step(); \ - } + #define PEND \ + { \ + if(GouraudEn) \ + lid.g.Step(); \ + \ + if(MDFN_UNLIKELY(ret >= VDP1_SuspendResumeThreshold) && lid.xy != lid.term_xy) \ + { \ + LineInnerData.xy = lid.xy; \ + LineInnerData.error = lid.error; \ + LineInnerData.drawn_ac = lid.drawn_ac; \ + \ + if(Textured) \ + { \ + LineInnerData.texel = lid.texel; \ + LineInnerData.t = lid.t; \ + } \ + \ + if(GouraudEn) \ + LineInnerData.g = lid.g; \ + \ + *need_line_resume = true; \ + return ret; \ + } \ + } +template +static int32 DrawLine(bool* need_line_resume) +{ + //printf("Textured=%d, AA=%d, UserClipEn=%d, UserClipMode=%d, ECD=%d, SPD=%d, GouraudEn=%d\n", Textured, AA, UserClipEn, UserClipMode, ECD, SPD, GouraudEn); + const uint32 clipo = ((SysClipY & 0x3FF) << 16) | (SysClipX & 0x3FF); + const uint32 uclipo0 = ((UserClipY0 & 0x3FF) << 16) | (UserClipX0 & 0x3FF); + const uint32 uclipo1 = ((UserClipY1 & 0x3FF) << 16) | (UserClipX1 & 0x3FF); + line_inner_data lid = LineInnerData; + int32 ret = 0; - if(abs_dy > abs_dx) + if(lid.abs_dy_gt_abs_dx) + //if(abs_dy > abs_dx) { - int32 error_inc = 2 * abs_dx; - int32 error_adj = -(2 * abs_dy); - int32 error = abs_dy - (2 * abs_dy + (dy >= 0 || AA)); - - y -= y_inc; - do { PSTART; - y += y_inc; - if(error >= 0) + lid.xy = (lid.xy + lid.y_inc) & 0x07FF07FF; + lid.error += lid.error_inc; + if((int32)lid.error >= lid.error_cmp) { + lid.error += lid.error_adj; + if(AA) { - int32 aa_x = x, aa_y = y; - - if(y_inc < 0) - { - aa_x += (x_inc >> 31); - aa_y -= (x_inc >> 31); - } - else - { - aa_x -= (~x_inc >> 31); - aa_y += (~x_inc >> 31); - } + const uint32 aa_xy = (lid.xy + lid.aa_xy_inc) & 0x07FF07FF; - PBODY(aa_x, aa_y); + PBODY(aa_xy); } - error += error_adj; - x += x_inc; + lid.xy = (lid.xy + lid.x_inc) & 0x07FF07FF; } - error += error_inc; - PBODY(x, y); + PBODY(lid.xy); PEND; - } while(MDFN_LIKELY(y != p1.y)); + } while(MDFN_LIKELY(lid.xy != lid.term_xy)); } else { - int32 error_inc = 2 * abs_dy; - int32 error_adj = -(2 * abs_dx); - int32 error = abs_dx - (2 * abs_dx + (dx >= 0 || AA)); - - x -= x_inc; - do { PSTART; - x += x_inc; - if(error >= 0) + lid.xy = (lid.xy + lid.x_inc) & 0x07FF07FF; + lid.error += lid.error_inc; + if((int32)lid.error >= lid.error_cmp) { + lid.error += lid.error_adj; + if(AA) { - int32 aa_x = x, aa_y = y; - - if(x_inc < 0) - { - aa_x -= (~y_inc >> 31); - aa_y -= (~y_inc >> 31); - } - else - { - aa_x += (y_inc >> 31); - aa_y += (y_inc >> 31); - } + const uint32 aa_xy = (lid.xy + lid.aa_xy_inc) & 0x07FF07FF; - PBODY(aa_x, aa_y); + PBODY(aa_xy); } - error += error_adj; - y += y_inc; + lid.xy = (lid.xy + lid.y_inc) & 0x07FF07FF; } - error += error_inc; - PBODY(x, y); + PBODY(lid.xy); PEND; - } while(MDFN_LIKELY(x != p1.x)); + } while(MDFN_LIKELY(lid.xy != lid.term_xy)); } return ret; } -template -struct EdgeStepper -{ - INLINE void Setup(const line_vertex& p0, const line_vertex& p1, const int32 dmax) - { - int32 dx = p1.x - p0.x; - int32 dy = p1.y - p0.y; - int32 abs_dx = abs(dx); - int32 abs_dy = abs(dy); - int32 max_adxdy = std::max(abs_dx, abs_dy); - - x = p0.x; - x_inc = (dx >= 0) ? 1 : -1; - x_error = ~(max_adxdy - (2 * max_adxdy + (dy >= 0))); - x_error_inc = 2 * abs_dx; - x_error_adj = 2 * max_adxdy; - - y = p0.y; - y_inc = (dy >= 0) ? 1 : -1; - y_error = ~(max_adxdy - (2 * max_adxdy + (dx >= 0))); - y_error_inc = 2 * abs_dy; - y_error_adj = 2 * max_adxdy; - - d_error = -dmax; - d_error_inc = 2 *max_adxdy; - d_error_adj = 2 * dmax; - - if(gourauden) - g.Setup(max_adxdy + 1, p0.g, p1.g); - } - - INLINE void GetVertex(line_vertex* p) - { - p->x = x; - p->y = y; - - if(gourauden) - p->g = g.Current(); - } - - INLINE void Step(void) - { - uint32 mask; - - d_error += d_error_inc; - if(d_error >= 0) - { - d_error -= d_error_adj; - - x_error -= x_error_inc; - mask = (int32)x_error >> 31; - x += x_inc & mask; - x_error += x_error_adj & mask; - - y_error -= y_error_inc; - mask = (int32)y_error >> 31; - y += y_inc & mask; - y_error += y_error_adj & mask; - - if(gourauden) - g.Step(); - } - } - - int32 d_error, d_error_inc, d_error_adj; - - int32 x, x_inc; - int32 x_error, x_error_inc, x_error_adj; - - int32 y, y_inc; - int32 y_error, y_error_inc, y_error_adj; - - GourauderTheTerrible g; -}; - // // } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1.cpp - VDP1 Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -19,13 +19,16 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -// TODO: 32-bit writes from the SH-2 CPUs to VDP1 registers seem to be broken on a Saturn; test, and implement here. +// TODO: Draw timing for small lines(somewhere between 2 and 15 pixels wide) on the VDP1 seems weird; investigate further +// before making timing changes to the drawing code. -// TODO: COPR shouldn't be updated(from the view of the program) until the current command finishes. +// TODO: Draw timing for (large) primitives should be about 20% higher. -// TODO: Check to see what registers are reset on reset. +// TODO: Draw timing for shrunken(even just slightly) sprite lines with HSS disabled should be 100% higher. + +// TODO: 32-bit writes from the SH-2 CPUs to VDP1 registers seem to be broken on a Saturn; test, and implement here. -// TODO: Fix preclipping when raw system clipping values have bit12==1(sign bit?). +// TODO: Check to see what registers are reset on reset. // TODO: SS_SetPhysMemMap(0x05C80000, 0x05CFFFFF, FB[FBDrawWhich], sizeof(FB[0])); // (...but goes weird in 8bpp rotated mode...) @@ -51,7 +54,74 @@ namespace VDP1 { -#if 0 +uint8 spr_w_shift_tab[8]; +uint8 gouraud_lut[0x40]; +line_data LineData; +line_inner_data LineInnerData; +prim_data PrimData; + +int32 SysClipX, SysClipY; +int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; + +int32 LocalX, LocalY; + +uint8 TVMR; +uint8 FBCR; +static uint8 PTMR; +static uint8 EDSR; + +uint16* FBDrawWhichPtr; +static bool FBDrawWhich; + +static bool DrawingActive; +static uint32 CurCommandAddr; +static int32 RetCommandAddr; +static uint16 LOPR; + +static sscpu_timestamp_t lastts; +static int32 CycleCounter; +static int32 CommandPhase; +static uint16 CommandData[0x10]; +uint32 DTACounter; + +static bool vb_status, hb_status; +static bool vbcdpending; +static bool FBManualPending; +static bool FBVBErasePending; +static bool FBVBEraseActive; +static sscpu_timestamp_t FBVBEraseLastTS; +static sscpu_timestamp_t LastRWTS; + +static uint16 EWDR; // Erase/Write Data +static uint16 EWLR; // Erase/Write Upper Left Coordinate +static uint16 EWRR; // Erase/Write Lower Right Coordinate + +static struct +{ + bool rot8; + uint32 fb_x_mask; + + uint32 y_start; + uint32 x_start; + + uint32 y_end; + uint32 x_bound; + + uint16 fill_data; +} EraseParams; + +static uint32 EraseYCounter; + +#if 1 +static uint32 InstantDrawSanityLimit; // ss_horrible_hacks +#endif + +uint16 VRAM[0x40000]; +uint16 FB[2][0x20000]; +// +// +// +#ifdef MDFN_ENABLE_DEV_BUILD struct VRAMUsageInfo { uint64 earliest; @@ -75,46 +145,58 @@ static void VRAMUsageStart(void) { - for(size_t i = 0; i < 0x40000; i++) + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) { - VRAMDrawReads[i].earliest = ~(uint64)0; - VRAMDrawReads[i].latest = ~(uint64)0; + for(size_t i = 0; i < 0x40000; i++) + { + VRAMDrawReads[i].earliest = ~(uint64)0; + VRAMDrawReads[i].latest = ~(uint64)0; - VRAMWrites[i].earliest = ~(uint64)0; - VRAMWrites[i].latest = ~(uint64)0; + VRAMWrites[i].earliest = ~(uint64)0; + VRAMWrites[i].latest = ~(uint64)0; + } } VRAMUsageStartTS = VRAMUsageTSBase; } static void VRAMUsageWrite(uint32 A) { - const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; - const size_t index = (A >> 1) & 0x3FFFF; + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) + { + const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; + const size_t index = A & 0x3FFFF; - if(VRAMWrites[index].earliest == ~(uint64)0) - VRAMWrites[index].earliest = fullts; + if(VRAMWrites[index].earliest == ~(uint64)0) + VRAMWrites[index].earliest = fullts; - VRAMWrites[index].latest = fullts; + VRAMWrites[index].latest = fullts; + } } static void VRAMUsageDrawRead(uint32 A) { - const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; - const size_t index = (A >> 1) & 0x3FFFF; + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) + { + const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; + const size_t index = A & 0x3FFFF; - if(VRAMDrawReads[index].earliest == ~(uint64)0) - VRAMDrawReads[index].earliest = fullts; + if(VRAMDrawReads[index].earliest == ~(uint64)0) + VRAMDrawReads[index].earliest = fullts; - VRAMDrawReads[index].latest = fullts; + VRAMDrawReads[index].latest = fullts; + } } static void VRAMUsageEnd(void) { - for(unsigned i = 0; i < 0x40000; i++) + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) { - if(VRAMWrites[i].latest != ~(uint64)0 && VRAMDrawReads[i].latest != ~(uint64)0) + for(unsigned i = 0; i < 0x40000; i++) { - printf("VRAM[0x%06x] Race --- Write, earliest=%llu, latest=%llu --- Draw Read, earliest=%llu, latest=%llu\n", i * 2, (unsigned long long)(VRAMWrites[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMWrites[i].latest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].latest - VRAMUsageStartTS)); + if(VRAMWrites[i].latest != ~(uint64)0 && VRAMDrawReads[i].latest != ~(uint64)0) + { + SS_DBG(SS_DBG_VDP1_RACE, "[VDP1] VRAM[0x%06x] Race --- Write, earliest=%llu, latest=%llu --- Draw Read, earliest=%llu, latest=%llu\n", i * 2, (unsigned long long)(VRAMWrites[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMWrites[i].latest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].latest - VRAMUsageStartTS)); + } } } } @@ -126,67 +208,9 @@ static INLINE void VRAMUsageDrawRead(uint32 A) { } static INLINE void VRAMUsageEnd(void) { } #endif - -uint8 spr_w_shift_tab[8]; -line_data LineSetup; -uint8 gouraud_lut[0x40]; - -uint16 VRAM[0x40000]; -uint16 FB[2][0x20000]; -bool FBDrawWhich; - -static bool FBManualPending; - -static bool FBVBErasePending; -static bool FBVBEraseActive; -static sscpu_timestamp_t FBVBEraseLastTS; -static sscpu_timestamp_t LastRWTS; // ss_horrible_hacks - -int32 SysClipX, SysClipY; -int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; -int32 LocalX, LocalY; - -static uint32 CurCommandAddr; -static int32 RetCommandAddr; -static bool DrawingActive; - -static uint16 LOPR; - -static uint16 EWDR; // Erase/Write Data -static uint16 EWLR; // Erase/Write Upper Left Coordinate -static uint16 EWRR; // Erase/Write Lower Right Coordinate - -static struct -{ - bool rot8; - uint32 fb_x_mask; - - uint32 y_start; - uint32 x_start; - - uint32 y_end; - uint32 x_bound; - - uint16 fill_data; -} EraseParams; - -static uint32 EraseYCounter; - -uint8 TVMR; -uint8 FBCR; -static uint8 PTMR; -static uint8 EDSR; - -static bool vb_status, hb_status; -static sscpu_timestamp_t lastts; -static int32 CycleCounter; - -#if 1 -static uint32 InstantDrawSanityLimit; // ss_horrible_hacks -#endif - -static bool vbcdpending; - +// +// +// void Init(void) { vbcdpending = false; @@ -243,7 +267,9 @@ for(unsigned i = 0; i < 0x20000; i++) FB[fb][i] = 0xFFFF; - memset(&LineSetup, 0, sizeof(LineSetup)); + memset(&LineData, 0, sizeof(LineData)); + memset(&LineInnerData, 0, sizeof(LineInnerData)); + memset(&PrimData, 0, sizeof(PrimData)); // // Registers with somewhat undefined state on power-on: @@ -265,6 +291,7 @@ } FBDrawWhich = 0; + FBDrawWhichPtr = FB[FBDrawWhich]; //SS_SetPhysMemMap(0x05C80000, 0x05CFFFFF, FB[FBDrawWhich], sizeof(FB[0]), true); FBManualPending = false; @@ -275,6 +302,11 @@ CurCommandAddr = 0; RetCommandAddr = -1; DrawingActive = false; + CycleCounter = 0; + CommandPhase = 0; + memset(CommandData, 0, sizeof(CommandData)); + InstantDrawSanityLimit = 0; + DTACounter = 0; // // Begin registers/variables confirmed to be initialized on reset. @@ -287,26 +319,23 @@ memset(&EraseParams, 0, sizeof(EraseParams)); EraseYCounter = ~0U; - - CycleCounter = 0; - InstantDrawSanityLimit = 0; } static int32 CMD_SetUserClip(const uint16* cmd_data) { - UserClipX0 = cmd_data[0x6] & 0x3FF; - UserClipY0 = cmd_data[0x7] & 0x1FF; + UserClipX0 = cmd_data[0x6] & 0x1FFF; + UserClipY0 = cmd_data[0x7] & 0x1FFF; - UserClipX1 = cmd_data[0xA] & 0x3FF; - UserClipY1 = cmd_data[0xB] & 0x1FF; + UserClipX1 = cmd_data[0xA] & 0x1FFF; + UserClipY1 = cmd_data[0xB] & 0x1FFF; return 0; } int32 CMD_SetSystemClip(const uint16* cmd_data) { - SysClipX = cmd_data[0xA] & 0x3FF; - SysClipY = cmd_data[0xB] & 0x1FF; + SysClipX = cmd_data[0xA] & 0x1FFF; + SysClipY = cmd_data[0xB] & 0x1FFF; return 0; } @@ -322,7 +351,7 @@ template static uint32 MDFN_FASTCALL TexFetch(uint32 x) { - const uint32 base = LineSetup.tex_base; + const uint32 base = LineData.tex_base; const bool ECD = ECDSPDMode & 0x10; const bool SPD = ECDSPDMode & 0x08; const unsigned ColorMode = ECDSPDMode & 0x07; @@ -338,10 +367,10 @@ if(!ECD && rtd == 0xF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -353,13 +382,13 @@ if(!ECD && rtd == 0xF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; - return LineSetup.CLUT[rtd] | ret_or; + return LineData.CLUT[rtd] | ret_or; case 2: // 64 colors, color bank rtd = (VRAM[(base + (x >> 1)) & 0x3FFFF] >> (((x & 0x1) ^ 0x1) << 3)) & 0xFF; @@ -367,11 +396,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -383,11 +412,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -399,11 +428,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -420,7 +449,7 @@ if(!ECD && (rtd & 0xC000) == 0x4000) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } @@ -450,79 +479,312 @@ #undef TF }; -sscpu_timestamp_t Update(sscpu_timestamp_t timestamp) +bool SetupDrawLine(int32* const cycle_counter, const bool AA, const bool Textured, const uint16 mode) { - if(MDFN_UNLIKELY(timestamp < lastts)) + const bool HSS = (mode & 0x1000); + const bool PCD = (mode & 0x800); + const bool UserClipEn = (mode & 0x400); + const bool UserClipMode = (mode & 0x200); + //const bool ECD = (mode & 0x80); + //const bool SPD = (mode & 0x40); + const bool GouraudEn = (mode & 0x8004) == 0x4; + line_vertex p0 = LineData.p[0]; + line_vertex p1 = LineData.p[1]; + line_inner_data& lid = LineInnerData; + bool clipped = false; + + p0.x &= 0x1FFF; + p0.y &= 0x1FFF; + p1.x &= 0x1FFF; + p1.y &= 0x1FFF; + + //printf("(0x%04x,0x%04x) -> (0x%04x,0x%04x)\n", p0.x, p0.y, p1.x, p1.y); + + if(!PCD) { - // Don't else { } normal execution, since this bug condition miiight occur in the call from SetHBVB(), - // and we need drawing to start ASAP before silly games overwrite the beginning of the command table. + bool swapped = false; + + *cycle_counter += 4; + + if(UserClipEn && !UserClipMode) + { + // Ignore system clipping WRT pre-clip for UserClipEn == 1 && UserClipMode == 0 + clipped |= (((UserClipX1 - p0.x) & (UserClipX1 - p1.x)) | ((p0.x - UserClipX0) & (p1.x - UserClipX0))) & 0x1000; + clipped |= (((UserClipY1 - p0.y) & (UserClipY1 - p1.y)) | ((p0.y - UserClipY0) & (p1.y - UserClipY0))) & 0x1000; + + swapped = (p0.y == p1.y) & ((p0.x < UserClipX0) | (p0.x > UserClipX1)); + } + else + { + clipped |= (((SysClipX - p0.x) & (SysClipX - p1.x)) | (p0.x & p1.x)) & 0x1000; + clipped |= (((SysClipY - p0.y) & (SysClipY - p1.y)) | (p0.y & p1.y)) & 0x1000; + + swapped = (p0.y == p1.y) & (p0.x > SysClipX); + } // - SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] [BUG] timestamp(%d) < lastts(%d)", timestamp, lastts); - timestamp = lastts; + // VDP1 reduces the line into a point to clip it, and it can be seen in the framebuffer under + // certain conditions relating to coordinate precision. + // + if(clipped) + p1 = p0; + else if(swapped) + std::swap(p0, p1); } + + *cycle_counter += 8; + // - // // - int32 cycles = timestamp - lastts; - lastts = timestamp; + const int32 dx = sign_x_to_s32(13, p1.x - p0.x); + const int32 dy = sign_x_to_s32(13, p1.y - p0.y); + const int32 abs_dx = abs(dx); // & 0xFFF; + const int32 abs_dy = abs(dy); // & 0xFFF; + const int32 max_adx_ady = std::max(abs_dx, abs_dy); + const int32 x_inc = (dx >= 0) ? 1 : -1; + const int32 y_inc = (dy >= 0) ? 1 : -1; + + lid.x_inc = (x_inc & 0x7FF) << 0; + lid.y_inc = (y_inc & 0x7FF) << 16; + lid.xy = (p0.x & 0x7FF) + ((p0.y & 0x7FF) << 16); + lid.term_xy = (p1.x & 0x7FF) + ((p1.y & 0x7FF) << 16); + lid.drawn_ac = true; // Drawn all-clipped + lid.color = LineData.color; + + //if(max_adx_ady >= 2048) + // printf("%d,%d -> %d, %d\n", p0.x, p0.y, p1.x, p1.y); - CycleCounter += cycles; - if(CycleCounter > VDP1_UpdateTimingGran) - CycleCounter = VDP1_UpdateTimingGran; + if(GouraudEn) + lid.g.Setup(max_adx_ady + 1, p0.g, p1.g); - if(CycleCounter > 0 && SCU_CheckVDP1HaltKludge()) + if(Textured) { - //puts("Kludge"); - CycleCounter = 0; + LineData.ec_count = 2; // Call before tffn() + + if(MDFN_UNLIKELY(max_adx_ady < abs(p1.t - p0.t) && HSS)) + { + LineData.ec_count = 0x7FFFFFFF; + lid.t.Setup(max_adx_ady + 1, p0.t >> 1, p1.t >> 1, 2, (bool)(FBCR & FBCR_EOS)); + } + else + lid.t.Setup(max_adx_ady + 1, p0.t, p1.t); + + lid.texel = LineData.tffn(lid.t.Current()); } - else if(DrawingActive) + { + int32 aa_x_inc; + int32 aa_y_inc; + + if(abs_dy > abs_dx) + { + if(y_inc < 0) + { + aa_x_inc = (x_inc >> 31); + aa_y_inc = -(x_inc >> 31); + } + else + { + aa_x_inc = -(~x_inc >> 31); + aa_y_inc = (~x_inc >> 31); + } + } + else + { + if(x_inc < 0) + { + aa_x_inc = -(~y_inc >> 31); + aa_y_inc = -(~y_inc >> 31); + } + else + { + aa_x_inc = (y_inc >> 31); + aa_y_inc = (y_inc >> 31); + } + } + lid.aa_xy_inc = (aa_x_inc & 0x7FF) + ((aa_y_inc & 0x7FF) << 16); + } + + // x, y, x_inc, y_inc, aa_x_inc, aa_y_inc, term_x, term_y, error, error_inc, error_adj, t, g, color + lid.abs_dy_gt_abs_dx = abs_dy > abs_dx; + + if(abs_dy > abs_dx) + { + lid.error_inc = (2 * abs_dx); + lid.error_adj = -(2 * abs_dy); + lid.error = (abs_dy - (2 * abs_dy)) - 1; + lid.error_cmp = 0; + + if(dy < 0 && !AA) + lid.error_cmp--; + + lid.error -= lid.error_inc; + lid.xy = (lid.xy + (0x8000000 - lid.y_inc)) & 0x07FF07FF; + } + else + { + lid.error_inc = (2 * abs_dy); + lid.error_adj = -(2 * abs_dx); + lid.error = (abs_dx - (2 * abs_dx)) - 1; + lid.error_cmp = 0; + + if(dx < 0 && !AA) + lid.error_cmp--; + + lid.error -= lid.error_inc; + lid.xy = (lid.xy + (0x800 - lid.x_inc)) & 0x07FF07FF; + } + if(AA) + { + lid.error++; + lid.error_cmp++; + } + + // + lid.error_inc <<= 32 - 13; + lid.error_adj <<= 32 - 13; + lid.error <<= 32 - 13; + lid.error_cmp <<= 32 - 13; + + return clipped; +} + +void EdgeStepper::Setup(const bool gourauden, const line_vertex& p0, const line_vertex& p1, const int32 dmax) +{ + int32 dx = sign_x_to_s32(13, p1.x - p0.x); + int32 dy = sign_x_to_s32(13, p1.y - p0.y); + int32 abs_dx = abs(dx); + int32 abs_dy = abs(dy); + int32 max_adxdy = std::max(abs_dx, abs_dy); + + //if(abs_dy == abs_dx) + // printf("edge abs_dy == abs_dx; dy=%d dx=%d\n", dy, dx); + + //printf("%d %d, %d\n", dx, dy, dmax); + + x = p0.x; + x_inc = (dx >= 0) ? 1 : -1; + x_error_inc = (2 * abs_dx); + x_error_adj = -(2 * max_adxdy); + x_error = (max_adxdy - (2 * max_adxdy)) - 1; + x_error_cmp = (dy < 0) ? -1 : 0; + + y = p0.y; + y_inc = (dy >= 0) ? 1 : -1; + y_error_inc = (2 * abs_dy); + y_error_adj = -(2 * max_adxdy); + y_error = (max_adxdy - (2 * max_adxdy)) - 1; + y_error_cmp = (dx < 0) ? -1 : 0; + + d_error = dmax - (2 * dmax) - 1; + d_error_inc = (2 * max_adxdy); + d_error_adj = -(2 * dmax); + d_error_cmp = (((abs_dy > abs_dx) ? dy : dx) < 0) ? -1 : 0; + // + x_error <<= (32 - 13); + x_error_inc <<= (32 - 13); + x_error_adj <<= (32 - 13); + x_error_cmp <<= (32 - 13); + + y_error <<= (32 - 13); + y_error_inc <<= (32 - 13); + y_error_adj <<= (32 - 13); + y_error_cmp <<= (32 - 13); + + d_error <<= (32 - 13); + d_error_inc <<= (32 - 13); + d_error_adj <<= (32 - 13); + d_error_cmp <<= (32 - 13); + // + if(gourauden) + g.Setup(max_adxdy + 1, p0.g, p1.g); +} + +enum : int { CommandPhaseBias = __COUNTER__ + 1 }; +#define VDP1_EAT_CLOCKS(n) \ + { \ + CycleCounter -= (n); \ + case __COUNTER__: \ + if(CycleCounter <= 0) \ + { \ + CommandPhase = __COUNTER__ - CommandPhaseBias - 1; \ + goto Breakout; \ + } \ + } \ + + +static INLINE void DoDrawing(void) +{ #if 1 - if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) - CycleCounter = InstantDrawSanityLimit; + if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) + CycleCounter = InstantDrawSanityLimit; #endif - while(CycleCounter > 0) + switch(CommandPhase + CommandPhaseBias) + { + for(;;) { - uint16 cmd_data[0x10]; + default: + VDP1_EAT_CLOCKS(0); // Fetch command data - memcpy(cmd_data, &VRAM[CurCommandAddr], sizeof(cmd_data)); - CycleCounter -= 16; + memcpy(CommandData, &VRAM[CurCommandAddr], sizeof(CommandData)); + + VDP1_EAT_CLOCKS(16); for(unsigned i = 0; i < 16; i++) VRAMUsageDrawRead((CurCommandAddr + i) * 2); //SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] Command @ 0x%06x: 0x%04x\n", CurCommandAddr, cmd_data[0]); - if(MDFN_LIKELY(!(cmd_data[0] & 0xC000))) + if(MDFN_LIKELY(!(CommandData[0] & 0xC000))) { - const unsigned cc = cmd_data[0] & 0xF; - - if(MDFN_UNLIKELY(cc >= 0xC)) + if(MDFN_UNLIKELY((CommandData[0] & 0xF) >= 0xC)) { DrawingActive = false; VRAMUsageEnd(); - break; + goto Breakout; } else { static int32 (*const command_table[0xC])(const uint16* cmd_data) = { + /* 0x0 */ /* 0x1 */ /* 0x2 */ /* 0x3 */ + CMD_NormalSprite, CMD_ScaledSprite, CMD_DistortedSprite, CMD_DistortedSprite, + + /* 0x4 */ /* 0x5 (polyline) *//* 0x6 */ /* 0x7 (polyline) */ + CMD_Polygon, CMD_Line, CMD_Line, CMD_Line, + + /* 0x8*/ /* 0x9 */ /* 0xA */ /* 0xB */ + CMD_SetUserClip, CMD_SetSystemClip, CMD_SetLocalCoord, CMD_SetUserClip + }; + + static int32 (*const resume_table[0x8])(const uint16* cmd_data) = + { /* 0x0 */ /* 0x1 */ /* 0x2 */ /* 0x3 */ - CMD_NormalSprite, CMD_ScaledSprite, CMD_DistortedSprite, CMD_DistortedSprite, + RESUME_Sprite, RESUME_Sprite, RESUME_Sprite, RESUME_Sprite, /* 0x4 */ /* 0x5 */ /* 0x6 */ /* 0x7 */ - CMD_Polygon, CMD_Polyline, CMD_Line, CMD_Polyline, - - /* 0x8*/ /* 0x9 */ /* 0xA */ /* 0xB */ - CMD_SetUserClip, CMD_SetSystemClip, CMD_SetLocalCoord, CMD_SetUserClip + RESUME_Polygon, RESUME_Line, RESUME_Line, RESUME_Line, }; - CycleCounter -= command_table[cc](cmd_data); + VDP1_EAT_CLOCKS(command_table[CommandData[0] & 0xF](CommandData)); + if(!(CommandData[0] & 0x8)) + { + for(;;) + { + int32 cycles; + + cycles = resume_table[CommandData[0] & 0x7](CommandData); + + if(!cycles) + break; + + VDP1_EAT_CLOCKS(cycles); + } + } } } - else if(MDFN_UNLIKELY(cmd_data[0] & 0x8000)) + else if(MDFN_UNLIKELY(CommandData[0] & 0x8000)) { SS_DBGTI(SS_DBG_VDP1, "[VDP1] Drawing finished at 0x%05x", CurCommandAddr); DrawingActive = false; @@ -532,24 +794,24 @@ SCU_SetInt(SCU_INT_VDP1, true); SCU_SetInt(SCU_INT_VDP1, false); - break; + goto Breakout; } CurCommandAddr = (CurCommandAddr + 0x10) & 0x3FFFF; - switch((cmd_data[0] >> 12) & 0x3) + switch((CommandData[0] >> 12) & 0x3) { case 0: break; case 1: - CurCommandAddr = (cmd_data[1] << 2) &~ 0xF; + CurCommandAddr = (CommandData[1] << 2) &~ 0xF; break; case 2: if(RetCommandAddr < 0) RetCommandAddr = CurCommandAddr; - CurCommandAddr = (cmd_data[1] << 2) &~ 0xF; + CurCommandAddr = (CommandData[1] << 2) &~ 0xF; break; case 3: @@ -560,13 +822,46 @@ } break; } + // + // + // } + } + Breakout:; #if 1 - if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) - InstantDrawSanityLimit = CycleCounter; + if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) + InstantDrawSanityLimit = CycleCounter; #endif +} + +sscpu_timestamp_t Update(sscpu_timestamp_t timestamp) +{ + if(MDFN_UNLIKELY(timestamp < lastts)) + { + // Don't else { } normal execution, since this bug condition miiight occur in the call from SetHBVB(), + // and we need drawing to start ASAP before silly games overwrite the beginning of the command table. + // + SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] [BUG] timestamp(%d) < lastts(%d)", timestamp, lastts); + timestamp = lastts; + } + // + // + // + int32 cycles = timestamp - lastts; + lastts = timestamp; + + CycleCounter += cycles; + if(CycleCounter > VDP1_UpdateTimingGran) + CycleCounter = VDP1_UpdateTimingGran; + + if(CycleCounter > 0 && SCU_CheckVDP1HaltKludge()) + { + //puts("Kludge"); + CycleCounter = 0; } + else if(DrawingActive) + DoDrawing(); return timestamp + (DrawingActive ? std::max(VDP1_UpdateTimingGran, 0 - CycleCounter) : VDP1_IdleTimingGran); } @@ -589,6 +884,7 @@ CurCommandAddr = 0; RetCommandAddr = -1; DrawingActive = true; + CommandPhase = 0; VRAMUsageStart(); CycleCounter = VDP1_UpdateTimingGran; @@ -685,6 +981,7 @@ } FBDrawWhich = !FBDrawWhich; + FBDrawWhichPtr = FB[FBDrawWhich]; SS_DBGTI(SS_DBG_VDP1, "[VDP1] Displayed framebuffer changed to %d.", !FBDrawWhich); @@ -821,8 +1118,7 @@ if(FBVBEraseActive) FBVBEraseLastTS += delta; - if(LastRWTS >= 0) - LastRWTS += delta; + LastRWTS = std::max(-1000000, LastRWTS + delta); VRAMUsageAddBaseTime(-delta); } @@ -917,7 +1213,7 @@ // MDFN_FASTCALL void Write_CheckDrawSlowdown(uint32 A, sscpu_timestamp_t time_thing) { - if(DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) + if(DrawingActive && time_thing > LastRWTS && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) { const int32 count = (A & 0x100000) ? 22 : 25; const uint32 a = std::min(count, time_thing - LastRWTS); @@ -930,7 +1226,7 @@ MDFN_FASTCALL void Read_CheckDrawSlowdown(uint32 A, sscpu_timestamp_t time_thing) { //printf("%08x\n", A); - if(!(A & 0x100000) && DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) + if(!(A & 0x100000) && time_thing > LastRWTS && DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) { const int32 count = (A & 0x80000) ? 44 : 41; const uint32 a = std::min(count, time_thing - LastRWTS); @@ -946,7 +1242,7 @@ if(A < 0x80000) { - VRAMUsageWrite(A); + VRAMUsageWrite(A >> 1); SS_DBGTI(SS_DBG_VDP1_VRAMW, "[VDP1] Write to VRAM: 0x%02x->VRAM[0x%05x]", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, A); ne16_wbo_be(VRAM, A, DB >> (((A & 1) ^ 1) << 3) ); return; @@ -956,7 +1252,7 @@ { uint32 FBA = A; - SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%02x->FB[%d][0x%05x]", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, FBDrawWhich, A & 0x3FFFF); + SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%02x->FB[%d][0x%05x] CycleCounter=%d", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, FBDrawWhich, A & 0x3FFFF, CycleCounter); if((TVMR & (TVMR_8BPP | TVMR_ROTATE)) == (TVMR_8BPP | TVMR_ROTATE)) FBA = (FBA & 0x1FF) | ((FBA << 1) & 0x3FC00) | ((FBA >> 8) & 0x200); @@ -975,7 +1271,7 @@ if(A < 0x80000) { - VRAMUsageWrite(A); + VRAMUsageWrite(A >> 1); SS_DBGTI(SS_DBG_VDP1_VRAMW, "[VDP1] Write to VRAM: 0x%04x->VRAM[0x%05x]", DB, A); VRAM[A >> 1] = DB; return; @@ -985,7 +1281,7 @@ { uint32 FBA = A; - SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%04x->FB[%d][0x%05x]", DB, FBDrawWhich, A & 0x3FFFF); + SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%04x->FB[%d][0x%05x] CycleCounter=%d", DB, FBDrawWhich, A & 0x3FFFF, CycleCounter); if((TVMR & (TVMR_8BPP | TVMR_ROTATE)) == (TVMR_8BPP | TVMR_ROTATE)) FBA = (FBA & 0x1FF) | ((FBA << 1) & 0x3FC00) | ((FBA >> 8) & 0x200); @@ -1019,6 +1315,93 @@ void StateAction(StateMem* sm, const unsigned load, const bool data_only) { + SFORMAT Prim_StateRegs[] = + { + SFVAR(PrimData.e->d_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->x, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->y, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->g.g, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.intinc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.ginc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.big_t.t), + SFVAR(PrimData.big_t.tinc), + SFVAR(PrimData.big_t.error), + SFVAR(PrimData.big_t.error_inc), + SFVAR(PrimData.big_t.error_adj), + + SFVAR(PrimData.iter), + SFVAR(PrimData.tex_base), + SFVAR(PrimData.need_line_resume), + // + // + // + SFVAR(LineInnerData.xy), + SFVAR(LineInnerData.error), + SFVAR(LineInnerData.drawn_ac), + + SFVAR(LineInnerData.texel), + + SFVAR(LineInnerData.t.t), + SFVAR(LineInnerData.t.tinc), + SFVAR(LineInnerData.t.error), + SFVAR(LineInnerData.t.error_inc), + SFVAR(LineInnerData.t.error_adj), + + SFVAR(LineInnerData.g.g), + SFVAR(LineInnerData.g.intinc), + SFVAR(LineInnerData.g.ginc), + SFVAR(LineInnerData.g.error), + SFVAR(LineInnerData.g.error_inc), + SFVAR(LineInnerData.g.error_adj), + + SFVAR(LineInnerData.x_inc), + SFVAR(LineInnerData.y_inc), + SFVAR(LineInnerData.aa_xy_inc), + SFVAR(LineInnerData.term_xy), + + SFVAR(LineInnerData.error_cmp), + SFVAR(LineInnerData.error_inc), + SFVAR(LineInnerData.error_adj), + + SFVAR(LineInnerData.color), + + SFVAR(LineInnerData.abs_dy_gt_abs_dx), + // + // + // + SFVAR(LineData.p->t, 0x2, sizeof(*LineData.p), LineData.p), + SFVAR(LineData.color), + SFVAR(LineData.ec_count), + //uint32 (MDFN_FASTCALL *tffn)(uint32); + SFVAR(LineData.CLUT), + SFVAR(LineData.cb_or), + SFVAR(LineData.tex_base), + // + // + // + SFEND + }; + SFORMAT StateRegs[] = { SFVAR(VRAM), @@ -1072,6 +1455,9 @@ SFVAR(hb_status), SFVAR(lastts), SFVAR(CycleCounter), + SFVAR(CommandPhase), + SFVAR(CommandData), + SFVAR(DTACounter), SFVAR(vbcdpending), @@ -1079,6 +1465,8 @@ SFVAR(InstantDrawSanityLimit), + SFLINK(Prim_StateRegs), + SFEND }; @@ -1090,6 +1478,8 @@ if(RetCommandAddr >= 0) RetCommandAddr &= 0x3FFFF; + DTACounter &= 0xFF; + EraseParams.fb_x_mask = EraseParams.rot8 ? 0xFF : 0x1FF; EraseParams.y_start &= 0x1FF; @@ -1097,6 +1487,13 @@ EraseParams.y_end &= 0x1FF; EraseParams.x_bound &= 0x7F << 3; + // + FBDrawWhichPtr = FB[FBDrawWhich]; + + if(load < 0x00102500) + { + CommandPhase = 0; + } } } @@ -1175,6 +1572,62 @@ void SetRegister(const unsigned id, const uint32 value) { // TODO + switch(id) + { + case GSREG_SYSCLIPX: + SysClipX = value & 0x1FFF; + break; + + case GSREG_SYSCLIPY: + SysClipY = value & 0x1FFF; + break; + + case GSREG_USERCLIPX0: + UserClipX0 = value & 0x1FFF; + break; + + case GSREG_USERCLIPY0: + UserClipY0 = value & 0x1FFF; + break; + + case GSREG_USERCLIPX1: + UserClipX1 = value & 0x1FFF; + break; + + case GSREG_USERCLIPY1: + UserClipY1 = value & 0x1FFF; + break; + +/* + case GSREG_LOCALX: + ret = LocalX; + break; + + case GSREG_LOCALY: + ret = LocalY; + break; + + case GSREG_TVMR: + ret = TVMR; + break; + + case GSREG_FBCR: + ret = FBCR; + break; + + case GSREG_EWDR: + ret = EWDR; + break; + + case GSREG_EWLR: + ret = EWLR; + break; + + case GSREG_EWRR: + ret = EWRR; + break; +*/ + } } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_line.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_line.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_line.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_line.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_line.cpp - VDP1 Line Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,10 +28,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -70,58 +70,67 @@ #undef LINEFN_BC }; -template -static INLINE int32 CMD_Line_Polyline_T(const uint16* cmd_data) +int32 RESUME_Line(const uint16* cmd_data) { const uint16 mode = cmd_data[0x2]; + // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. + const bool SPD_Opaque = (((mode >> 3) & 0x7) < 0x6) ? ((int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0) : true; + auto* const fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + const uint32 num_lines = (cmd_data[0] & 0x1) ? 4 : 1; + uint32 iter = PrimData.iter; int32 ret = 0; - // - // - bool SPD_Opaque = true; // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. - - LineSetup.tex_base = 0; - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x800; - if(((mode >> 3) & 0x7) < 0x6) - SPD_Opaque = (int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0; - // - // - // - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; - - CheckUndefClipping(); - - for(unsigned n = 0; n < num_lines; n++) + if(MDFN_UNLIKELY(PrimData.need_line_resume)) { - LineSetup.p[0].x = sign_x_to_s32(13, cmd_data[0x6 + (((n << 1) + 0) & 0x7)] & 0x1FFF) + LocalX; - LineSetup.p[0].y = sign_x_to_s32(13, cmd_data[0x7 + (((n << 1) + 0) & 0x7)] & 0x1FFF) + LocalY; - LineSetup.p[1].x = sign_x_to_s32(13, cmd_data[0x6 + (((n << 1) + 2) & 0x7)] & 0x1FFF) + LocalX; - LineSetup.p[1].y = sign_x_to_s32(13, cmd_data[0x7 + (((n << 1) + 2) & 0x7)] & 0x1FFF) + LocalY; + PrimData.need_line_resume = false; + goto ResumeLine; + } - if(mode & 0x4) // Gouraud + if(iter < num_lines) + { + do { - const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; - - ret += 2; - LineSetup.p[0].g = gtb[(n + 0) & 0x3]; - LineSetup.p[1].g = gtb[(n + 1) & 0x3]; - } - - ret += fnptr(); + LineData.p[0].x = sign_x_to_s32(13, cmd_data[0x6 + (((iter << 1) + 0) & 0x7)] & 0x1FFF) + LocalX; + LineData.p[0].y = sign_x_to_s32(13, cmd_data[0x7 + (((iter << 1) + 0) & 0x7)] & 0x1FFF) + LocalY; + LineData.p[1].x = sign_x_to_s32(13, cmd_data[0x6 + (((iter << 1) + 2) & 0x7)] & 0x1FFF) + LocalX; + LineData.p[1].y = sign_x_to_s32(13, cmd_data[0x7 + (((iter << 1) + 2) & 0x7)] & 0x1FFF) + LocalY; + + if(mode & 0x4) // Gouraud + { + const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; + + ret += 2; + LineData.p[0].g = gtb[(iter + 0) & 0x3]; + LineData.p[1].g = gtb[(iter + 1) & 0x3]; + } + + SetupDrawLine(&ret, false, false, mode); + // + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } while(++iter < num_lines && ret < VDP1_SuspendResumeThreshold); } - return ret; -} + PrimData.iter = iter; -int32 CMD_Polyline(const uint16* cmd_data) -{ - return CMD_Line_Polyline_T<4>(cmd_data); + return ret; } int32 CMD_Line(const uint16* cmd_data) { - return CMD_Line_Polyline_T<1>(cmd_data); + int32 ret = 1; + // + // + LineData.tex_base = 0; + LineData.color = cmd_data[0x3]; + // + // + PrimData.iter = 0; + PrimData.need_line_resume = false; + + return ret; } } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_poly.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_poly.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_poly.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_poly.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_poly.cpp - VDP1 Polygon Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,10 +28,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -71,28 +71,84 @@ }; template -static INLINE int32 CMD_PolygonG_T(const uint16* cmd_data) +static int32 PolygonResumeBase(const uint16* cmd_data) { const uint16 mode = cmd_data[0x2]; - line_vertex p[4]; + // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. + const bool SPD_Opaque = (((mode >> 3) & 0x7) < 0x6) ? ((int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0) : true; + auto* const fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + // + // + // + EdgeStepper e[2] = { PrimData.e[0], PrimData.e[1] }; + int32 iter = PrimData.iter; int32 ret = 0; // // - bool SPD_Opaque = true; // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. - - LineSetup.tex_base = 0; - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x800; + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + { + PrimData.need_line_resume = false; + goto ResumeLine; + } - if(((mode >> 3) & 0x7) < 0x6) - SPD_Opaque = (int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0; - // + if(iter >= 0) + { + do + { + //printf("x=0x%03x y=0x%03x x_error=0x%04x y_error=0x%04x --- x_error_inc=0x%04x, x_error_adj=0x%04x --- y_error_inc=0x%04x, y_error_adj=0x%04x\n", e[0].x & 0x7FF, e[0].y & 0x7FF, (uint32)e[0].x_error >> (32 - 13), (uint32)e[0].y_error >> (32 - 13), (uint32)e[0].x_error_inc >> (32 - 13), (uint32)e[0].x_error_adj >> (32 - 13), (uint32)e[0].y_error_inc >> (32 - 13), (uint32)e[0].y_error_adj >> (32 - 13)); + + e[0].GetVertex(&LineData.p[0]); + e[1].GetVertex(&LineData.p[1]); + +#if 0 + printf("(Edge0: x=%u y=%u, d_error=0x%04x x_error=0x%04x y_error=0x%04x) ", LineData.p[0].x, LineData.p[0].y, (e[0].d_error + e[0].d_error_inc) >> (32 - 13), (e[0].x_error + e[0].x_error_inc) >> (32 - 13), (e[0].y_error + e[0].y_error_inc) >> (32 - 13)); + printf("(Edge1: x=%u y=%u, d_error=0x%04x x_error=0x%04x y_error=0x%04x)\n", LineData.p[1].x, LineData.p[1].y, (e[1].d_error + e[1].d_error_inc) >> (32 - 13), (e[1].x_error + e[1].x_error_inc) >> (32 - 13), (e[1].y_error + e[1].y_error_inc) >> (32 - 13)); +#endif + //printf("%d,%d %d,%d\n", LineData.p[0].x, LineData.p[0].y, LineData.p[1].x, LineData.p[1].y); + // + if(!SetupDrawLine(&ret, true, false, mode) || !iter) + { + // + //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } + + e[0].Step(); + e[1].Step(); + } while(MDFN_LIKELY(--iter >= 0 && ret < VDP1_SuspendResumeThreshold)); + } // // - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + PrimData.e[0] = e[0]; + PrimData.e[1] = e[1]; + PrimData.iter = iter; + + return ret; +} - CheckUndefClipping(); +int32 RESUME_Polygon(const uint16* cmd_data) +{ + if(cmd_data[0x2] & 0x4) // gouraud + return PolygonResumeBase(cmd_data); + else + return PolygonResumeBase(cmd_data); +} + +template +static INLINE int32 CMD_PolygonG_T(const uint16* cmd_data) +{ + line_vertex p[4]; + int32 ret = 0; + // + // + LineData.tex_base = 0; + LineData.color = cmd_data[0x3]; + // + // for(unsigned i = 0; i < 4; i++) { p[i].x = sign_x_to_s32(13, cmd_data[0x6 + (i << 1)]) + LocalX; @@ -110,24 +166,18 @@ // // // - const int32 dmax = std::max(std::max(abs(p[3].x - p[0].x), abs(p[3].y - p[0].y)), - std::max(abs(p[2].x - p[1].x), abs(p[2].y - p[1].y))); - EdgeStepper e[2]; - - e[0].Setup(p[0], p[3], dmax); - e[1].Setup(p[1], p[2], dmax); - - for(int32 i = 0; i <= dmax; i++) - { - e[0].GetVertex(&LineSetup.p[0]); - e[1].GetVertex(&LineSetup.p[1]); - // - //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); - ret += fnptr(); - // - e[0].Step(); - e[1].Step(); - } + int32 dmax; + + dmax = abs(sign_x_to_s32(13, p[3].x - p[0].x)); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[3].y - p[0].y))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].x - p[1].x))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].y - p[1].y))); + dmax &= 0xFFF; + + PrimData.e[0].Setup(gourauden, p[0], p[3], dmax); + PrimData.e[1].Setup(gourauden, p[1], p[2], dmax); + PrimData.iter = dmax; + PrimData.need_line_resume = false; return ret; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_sprite.cpp mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_sprite.cpp --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp1_sprite.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp1_sprite.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_sprite.cpp - VDP1 Sprite Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -30,10 +30,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -72,22 +72,77 @@ #undef LINEFN_BC }; -/* - Timing notes: - Timing is somewhat complex, and looks like the drawing of the lines of distorted sprites may be terminated - early in some conditions relating to clipping. - - Drawing a 256x1 texture with a 255x1 rectangular distorted sprite takes about twice as much time(even with blending enabled, which is weird...) as drawing - it with a 256x1 or 257x1 rectangular distorted sprite. -*/ enum { - FORMAT_NORMAL, + FORMAT_NORMAL = 0, FORMAT_SCALED, FORMAT_DISTORTED }; -template +template +static int32 SpriteResumeBase(const uint16* cmd_data) +{ + const uint16 mode = cmd_data[0x2]; + auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][(mode >> 6) & 0x1F][(mode & 0x8000) ? 8 : (mode & 0x7)]; + LineData.tffn = TexFetchTab[(mode >> 3) & 0x1F]; + // + // + // + EdgeStepper e[2] = { PrimData.e[0], PrimData.e[1] }; + VileTex big_t = PrimData.big_t; + const uint32 tex_base = PrimData.tex_base; + int32 iter = PrimData.iter; + int32 ret = 0; + // + // + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + { + PrimData.need_line_resume = false; + goto ResumeLine; + } + + if(iter >= 0) + { + do + { + e[0].GetVertex(&LineData.p[0]); + e[1].GetVertex(&LineData.p[1]); + + LineData.tex_base = tex_base + big_t.PreStep(); + // + if(!SetupDrawLine(&ret, true, true, mode) || !iter) + { + // + //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } + + e[0].Step(); + e[1].Step(); + } while(MDFN_LIKELY(--iter >= 0 && ret < VDP1_SuspendResumeThreshold)); + } + // + // + PrimData.e[0] = e[0]; + PrimData.e[1] = e[1]; + PrimData.big_t = big_t; + PrimData.iter = iter; + + return ret; +} + +int32 RESUME_Sprite(const uint16* cmd_data) +{ + if(cmd_data[0x2] & 0x4) // gouraud + return SpriteResumeBase(cmd_data); + else + return SpriteResumeBase(cmd_data); +} + +template static INLINE int32 SpriteBase(const uint16* cmd_data) { const unsigned dir = (cmd_data[0] >> 4) & 0x3; @@ -98,15 +153,9 @@ const uint32 h = cmd_data[0x5] & 0xFF; line_vertex p[4]; int32 ret = 0; - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][(mode >> 6) & 0x1F][(mode & 0x8000) ? 8 : (mode & 0x7)]; - - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x0800; - LineSetup.HSS = mode & 0x1000; - CheckUndefClipping(); + LineData.color = cmd_data[0x3]; - // FIXME: precision is probably not totally right. if(format == FORMAT_DISTORTED) { for(unsigned i = 0; i < 4; i++) @@ -205,7 +254,7 @@ } } - if(gourauden) + if(cmd_data[0x2] & 0x4) // gouraud { const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; @@ -216,33 +265,29 @@ // // // - VileTex big_t; - int32 tex_base; - - LineSetup.tffn = TexFetchTab[(mode >> 3) & 0x1F]; - + // TODO: move? { const bool h_inv = dir & 1; - LineSetup.p[0 ^ h_inv].t = 0; - LineSetup.p[1 ^ h_inv].t = w ? (w - 1) : 0; + LineData.p[0 ^ h_inv].t = 0; + LineData.p[1 ^ h_inv].t = w ? (w - 1) : 0; } switch(cm) { - case 0: LineSetup.cb_or = color &~ 0xF; + case 0: LineData.cb_or = color &~ 0xF; break; case 1: for(unsigned i = 0; i < 16; i++) - LineSetup.CLUT[i] = VRAM[((color &~ 0x3) << 2) | i]; + LineData.CLUT[i] = VRAM[((color &~ 0x3) << 2) | i]; ret += 16; break; - case 2: LineSetup.cb_or = color &~ 0x3F; break; - case 3: LineSetup.cb_or = color &~ 0x7F; break; - case 4: LineSetup.cb_or = color &~ 0xFF; break; + case 2: LineData.cb_or = color &~ 0x3F; break; + case 3: LineData.cb_or = color &~ 0x7F; break; + case 4: LineData.cb_or = color &~ 0xFF; break; case 5: break; case 6: break; case 7: break; @@ -250,17 +295,26 @@ // // // - const int32 dmax = std::max(std::max(abs(p[3].x - p[0].x), abs(p[3].y - p[0].y)), - std::max(abs(p[2].x - p[1].x), abs(p[2].y - p[1].y))); - EdgeStepper e[2]; + int32 dmax; - e[0].Setup(p[0], p[3], dmax); - e[1].Setup(p[1], p[2], dmax); + dmax = abs(sign_x_to_s32(13, p[3].x - p[0].x)); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[3].y - p[0].y))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].x - p[1].x))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].y - p[1].y))); + dmax &= 0xFFF; - tex_base = cmd_data[0x4] << 2; + int32 tex_base = cmd_data[0x4] << 2; + const bool gourauden = (bool)(cmd_data[0x2] & 0x4); if(cm == 5) // RGB tex_base &= ~0x7; + PrimData.e[0].Setup(gourauden, p[0], p[3], dmax); + PrimData.e[1].Setup(gourauden, p[1], p[2], dmax); + PrimData.iter = dmax; + PrimData.tex_base = tex_base; + PrimData.need_line_resume = false; + + //printf("0x%04x %u %d:%d %d:%d %d:%d %d:%d ---- %d %d\n", mode, format, p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y, w >> spr_w_shift_tab[cm], h); { const bool v_inv = dir & 2; int32 tv[2]; @@ -268,21 +322,7 @@ tv[0 ^ v_inv] = 0; tv[1 ^ v_inv] = h ? (h - 1) : 0; - big_t.Setup(dmax + 1, tv[0], tv[1], w >> spr_w_shift_tab[cm]); - } - - for(int32 i = 0; i <= dmax; i++) - { - e[0].GetVertex(&LineSetup.p[0]); - e[1].GetVertex(&LineSetup.p[1]); - - LineSetup.tex_base = tex_base + big_t.PreStep(); - // - //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); - ret += fnptr(); - // - e[0].Step(); - e[1].Step(); + PrimData.big_t.Setup(dmax + 1, tv[0], tv[1], w >> spr_w_shift_tab[cm]); } return ret; @@ -290,27 +330,17 @@ int32 CMD_DistortedSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } - int32 CMD_NormalSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } int32 CMD_ScaledSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp2.h mednafen-1.26.1+dfsg/include/mednafen/ss/vdp2.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp2.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp2.h 2020-11-10 06:04:17.000000000 +0000 @@ -134,10 +134,10 @@ }; -uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len); -void SetRegister(const unsigned id, const uint32 value); -uint8 PeekVRAM(uint32 addr); -void PokeVRAM(uint32 addr, const uint8 val); +uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) MDFN_COLD; +void SetRegister(const unsigned id, const uint32 value) MDFN_COLD; +uint8 PeekVRAM(uint32 addr) MDFN_COLD; +void PokeVRAM(uint32 addr, const uint8 val) MDFN_COLD; void MakeDump(const std::string& path) MDFN_COLD; INLINE uint32 PeekLine(void) { MDFN_HIDE extern int32 VCounter; return VCounter; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/ss/vdp2_render.h mednafen-1.26.1+dfsg/include/mednafen/ss/vdp2_render.h --- mednafen-1.24.3+dfsg/include/mednafen/ss/vdp2_render.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/ss/vdp2_render.h 2020-11-10 06:04:17.000000000 +0000 @@ -55,8 +55,8 @@ VDP2Rend_LIB* VDP2REND_GetLIB(unsigned line); void VDP2REND_DrawLine(int vdp2_line, const uint32 crt_line, const bool field); -void VDP2REND_Write8_DB(uint32 A, uint16 DB); -void VDP2REND_Write16_DB(uint32 A, uint16 DB); +void VDP2REND_Write8_DB(uint32 A, uint16 DB) MDFN_HOT; +void VDP2REND_Write16_DB(uint32 A, uint16 DB) MDFN_HOT; } diff -Nru mednafen-1.24.3+dfsg/include/mednafen/trio/trio.c mednafen-1.26.1+dfsg/include/mednafen/trio/trio.c --- mednafen-1.24.3+dfsg/include/mednafen/trio/trio.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/trio/trio.c 2020-11-10 06:04:17.000000000 +0000 @@ -897,7 +897,7 @@ * *************************************************************************/ -static TRIO_CONST char rcsid[] = "@(#)$Id: trio.c,v 1.129 2009/09/20 11:37:15 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: trio.c,v 1.129 2009/09/20 11:37:15 breese Exp $"; #if TRIO_FEATURE_FLOAT /* diff -Nru mednafen-1.24.3+dfsg/include/mednafen/trio/trionan.c mednafen-1.26.1+dfsg/include/mednafen/trio/trionan.c --- mednafen-1.24.3+dfsg/include/mednafen/trio/trionan.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/trio/trionan.c 2020-11-10 06:04:17.000000000 +0000 @@ -227,7 +227,7 @@ */ #if !defined(TRIO_EMBED_NAN) -static TRIO_CONST char rcsid[] = "@(#)$Id: trionan.c,v 1.33 2005/05/29 11:57:25 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: trionan.c,v 1.33 2005/05/29 11:57:25 breese Exp $"; #endif #if defined(TRIO_FUNC_INTERNAL_MAKE_DOUBLE) \ diff -Nru mednafen-1.24.3+dfsg/include/mednafen/trio/triostr.c mednafen-1.26.1+dfsg/include/mednafen/trio/triostr.c --- mednafen-1.24.3+dfsg/include/mednafen/trio/triostr.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/trio/triostr.c 2020-11-10 06:04:17.000000000 +0000 @@ -160,7 +160,7 @@ */ #if !defined(TRIO_EMBED_STRING) -static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.36 2010/01/26 13:02:02 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.36 2010/01/26 13:02:02 breese Exp $"; #endif /************************************************************************* diff -Nru mednafen-1.24.3+dfsg/include/mednafen/vb/vb.cpp mednafen-1.26.1+dfsg/include/mednafen/vb/vb.cpp --- mednafen-1.24.3+dfsg/include/mednafen/vb/vb.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/vb/vb.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -814,6 +814,7 @@ #ifdef WANT_DEBUGGER static DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 4, 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/include/mednafen/wswan/main.cpp mednafen-1.26.1+dfsg/include/mednafen/wswan/main.cpp --- mednafen-1.24.3+dfsg/include/mednafen/wswan/main.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/include/mednafen/wswan/main.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -618,6 +618,7 @@ #ifdef WANT_DEBUGGER static DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 7 + 1 + 8, // Fixme, probably not right... maximum number of prefixes + 1 for opcode + 4 for operand(go with 8 to be safe) 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/INSTALL mednafen-1.26.1+dfsg/INSTALL --- mednafen-1.24.3+dfsg/INSTALL 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/INSTALL 2020-11-10 06:04:17.000000000 +0000 @@ -1,8 +1,8 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, -Inc. + Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software +Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -12,97 +12,96 @@ Basic Installation ================== - Briefly, the shell command `./configure && make && make install' + Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for +more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented +'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. - The `configure' shell script attempts to guess correct values for + The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that +those values to create a 'Makefile' in each directory of the package. +It may also create one or more '.h' files containing system-dependent +definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). +file 'config.log' containing compiler output (useful mainly for +debugging 'configure'). - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. + It can also use an optional file (typically called 'config.cache' and +enabled with '--cache-file=config.cache' or simply '-C') that saves the +results of its tests to speed up reconfiguring. Caching is disabled by +default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can +to figure out how 'configure' could check whether to do them, and mail +diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you +some point 'config.cache' contains results you don't want to keep, you may remove or edit it. - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. + The file 'configure.ac' (or 'configure.in') is used to create +'configure' by a program called 'autoconf'. You need 'configure.ac' if +you want to change it or regenerate 'configure' using a newer version of +'autoconf'. The simplest way to compile this package is: - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. + 1. 'cd' to the directory containing the package's source code and type + './configure' to configure the package for your system. - Running `configure' might take a while. While running, it prints + Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. - 2. Type `make' to compile the package. + 2. Type 'make' to compile the package. - 3. Optionally, type `make check' to run any self-tests that come with + 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. - 4. Type `make install' to install the programs and any data files and + 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root + user, and only the 'make install' phase executed with root privileges. - 5. Optionally, type `make installcheck' to repeat any self-tests, but + 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required + regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly + source code directory by typing 'make clean'. To also remove the + files that 'configure' created (so you can compile the package for + a different kind of computer), type 'make distclean'. There is + also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. - 7. Often, you can also type `make uninstall' to remove the installed + 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. - 8. Some packages, particularly those that use Automake, provide `make + 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. + targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' +the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: + You can give 'configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here is +an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix @@ -113,21 +112,21 @@ You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the +own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. +the 'configure' script. 'configure' automatically checks for the source +code in the directory that 'configure' is in and in '..'. This is known +as a "VPATH" build. - With a non-GNU `make', it is safer to compile the package for one + With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before +installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like +"universal" binaries--by specifying multiple '-arch' options to the +compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ @@ -136,105 +135,104 @@ This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. +using the 'lipo' tool if you have problems. Installation Names ================== - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an + By default, 'make install' installs the package's commands under +'/usr/local/bin', include files under '/usr/local/include', etc. You +can specify an installation prefix other than '/usr/local' by giving +'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses +pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory +options like '--bindir=DIR' to specify different values for particular +kinds of files. Run 'configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the default +for these options is expressed in terms of '${prefix}', so that +specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or +correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without +'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each -affected directory. For example, `make install +affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and +'${prefix}'. Any directories that were specified during 'configure', +but not in terms of '${prefix}', must each be overridden at install time +for the entire installation to be relocated. The approach of makefile +variable overrides for each directory variable is required by the GNU +Coding Standards, and ideally causes no recompilation. However, some +platforms have known limitations with the semantics of shared libraries +that end up requiring recompilation when using this method, particularly +noticeable in packages that use GNU Libtool. + + The second method involves providing the 'DESTDIR' variable. For +example, 'make install DESTDIR=/alternate/directory' will prepend +'/alternate/directory' before all installation names. The approach of +'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. +when some directory options were not specified in terms of '${prefix}' +at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. +with an extra prefix or suffix on their names by giving 'configure' the +option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the + Some packages pay attention to '--enable-FEATURE' options to +'configure', where FEATURE indicates an optional part of the package. +They may also pay attention to '--with-PACKAGE' options, where PACKAGE +is something like 'gnu-as' or 'x' (for the X Window System). The +'README' should mention any '--enable-' and '--with-' options that the package recognizes. - For packages that use the X Window System, `configure' can usually + For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. +you can use the 'configure' options '--x-includes=DIR' and +'--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure +execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure +overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. +overridden with 'make V=0'. Particular systems ================== - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in + On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC +is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. + HP-UX 'make' updates targets which have the same time stamps as their +prerequisites, which makes it generally unusable when shipped generated +files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try +parse its '' header file. The option '-nodtk' can be used as a +workaround. If GNU CC is not installed, it is therefore recommended to +try ./configure CC="cc" @@ -242,26 +240,26 @@ ./configure CC="cc -nodtk" - On Solaris, don't put `/usr/ucb' early in your `PATH'. This + On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. +these programs are available in '/usr/bin'. So, if you need '/usr/ucb' +in your 'PATH', put it _after_ '/usr/bin'. - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: + On Haiku, software installed for all users goes in '/boot/common', +not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== - There may be some features `configure' cannot figure out + There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints +_same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: +'--build=TYPE' option. TYPE can either be a short name for the system +type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM @@ -270,101 +268,101 @@ OS KERNEL-OS - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't + See the file 'config.sub' for the possible values of each field. If +'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will +use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. +eventually be run) with '--host=TYPE'. Sharing Defaults ================ - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. + If you want to set default values for 'configure' scripts to share, +you can create a site shell script called 'config.site' that gives +default values for variables like 'CC', 'cache_file', and 'prefix'. +'configure' looks for 'PREFIX/share/config.site' if it exists, then +'PREFIX/etc/config.site' if it exists. Or, you can set the +'CONFIG_SITE' environment variable to the location of the site script. +A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run +environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: +them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc -causes the specified `gcc' to be used as the C compiler (unless it is +causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf limitation. Until the limitation is lifted, you can use -this workaround: +Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an +Autoconf limitation. Until the limitation is lifted, you can use this +workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash -`configure' Invocation +'configure' Invocation ====================== - `configure' recognizes the following options to control how it + 'configure' recognizes the following options to control how it operates. -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. +'--help' +'-h' + Print a summary of all of the options to 'configure', and exit. -`--help=short' -`--help=recursive' +'--help=short' +'--help=recursive' Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' + 'configure', and exit. The 'short' variant lists options used only + in the top level, while the 'recursive' variant lists options also + present in any nested packages. + +'--version' +'-V' + Print the version of Autoconf used to generate the 'configure' script, and exit. -`--cache-file=FILE' +'--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to + traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' +'--config-cache' +'-C' + Alias for '--cache-file=config.cache'. + +'--quiet' +'--silent' +'-q' Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error + suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). -`--srcdir=DIR' +'--srcdir=DIR' Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. + 'configure' can determine that directory automatically. -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. +'--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: for + more details, including other options available for fine-tuning the + installation locations. -`--no-create' -`-n' +'--no-create' +'-n' Run the configure checks, but stop before creating any output files. -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. +'configure' also accepts some other, not widely useful, options. Run +'configure --help' for more details. diff -Nru mednafen-1.24.3+dfsg/install-sh mednafen-1.26.1+dfsg/install-sh --- mednafen-1.24.3+dfsg/install-sh 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/install-sh 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -97,7 +82,7 @@ dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -208,6 +204,15 @@ fi if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 @@ -223,16 +228,16 @@ *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -266,129 +271,113 @@ fi dst=$dst_arg - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. + # If destination is a directory, append the input filename. if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst - dst=$dstdir/`basename "$src"` + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # $RANDOM is not portable (e.g. dash); use it when possible to - # lower collision chance - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # As "mkdir -p" follows symlinks and we work in /tmp possibly; so - # create the $tmpdir first (and fail if unsuccessful) to make sure - # that nobody tries to guess the $tmpdir name. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # Note that $RANDOM variable is not portable (e.g. dash); Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p' feature. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -398,53 +387,51 @@ # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue + test X"$d" = X && continue - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -457,8 +444,8 @@ else # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 @@ -479,15 +466,12 @@ # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -500,24 +484,24 @@ # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 @@ -526,9 +510,9 @@ done # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru mednafen-1.24.3+dfsg/Makefile.in mednafen-1.26.1+dfsg/Makefile.in --- mednafen-1.24.3+dfsg/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -78,13 +88,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = . -DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(top_srcdir)/include/config.h.in mkinstalldirs \ - $(top_srcdir)/intl/Makefile.in ABOUT-NLS COPYING TODO compile \ - config.guess config.rpath config.sub depcomp install-sh \ - missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -106,6 +109,8 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -149,7 +154,7 @@ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck + cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -171,6 +176,12 @@ CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/include/config.h.in \ + $(top_srcdir)/intl/Makefile.in ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README TODO compile config.guess \ + config.rpath config.sub depcomp install-sh missing \ + mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -386,6 +397,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -415,15 +427,14 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -558,7 +569,10 @@ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -623,7 +637,7 @@ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -639,17 +653,17 @@ $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -667,7 +681,7 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -677,24 +691,24 @@ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ --with-included-gettext \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -869,6 +883,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru mednafen-1.24.3+dfsg/missing mednafen-1.26.1+dfsg/missing --- mednafen-1.24.3+dfsg/missing 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/missing 2020-11-10 06:04:17.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2013-10-28.13; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # 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, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -207,9 +207,9 @@ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru mednafen-1.24.3+dfsg/mkinstalldirs mednafen-1.26.1+dfsg/mkinstalldirs --- mednafen-1.24.3+dfsg/mkinstalldirs 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/mkinstalldirs 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # mkinstalldirs --- make directory hierarchy -scriptversion=2009-04-28.21; # UTC +scriptversion=2018-03-07.03; # UTC # Original author: Noah Friedman # Created: 1993-05-16 @@ -154,9 +154,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru mednafen-1.24.3+dfsg/mswin/package-mednafen.sh mednafen-1.26.1+dfsg/mswin/package-mednafen.sh --- mednafen-1.24.3+dfsg/mswin/package-mednafen.sh 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/mswin/package-mednafen.sh 2020-11-10 06:04:17.000000000 +0000 @@ -8,9 +8,9 @@ mkdir -p de/LC_MESSAGES ru/LC_MESSAGES && \ cp ../mednafen/po/de.gmo de/LC_MESSAGES/mednafen.mo && \ cp ../mednafen/po/ru.gmo ru/LC_MESSAGES/mednafen.mo && \ -7za a ../mednafen-"$VERSION"-win32.zip mednafen.exe libgcc_s_dw2-1.dll libstdc++-6.dll libcharset-1.dll libiconv-2.dll libFLAC-8.dll libogg-0.dll libsndfile-1.dll libvorbis-0.dll libvorbisenc-2.dll SDL2.dll de/ ru/ && \ +7za a -mtc- -mx9 -mfb=258 -mpass=15 ../mednafen-"$VERSION"-win32.zip mednafen.exe libgcc_s_dw2-1.dll libstdc++-6.dll libcharset-1.dll libiconv-2.dll libFLAC-8.dll libogg-0.dll libsndfile-1.dll libvorbis-0.dll libvorbisenc-2.dll SDL2.dll de/ ru/ && \ cd ../mednafen && \ -7za a ../mednafen-"$VERSION"-win32.zip COPYING ChangeLog Documentation/*.html Documentation/*.css Documentation/*.png Documentation/*.txt && \ +7za a -mtc- -mx9 -mfb=258 -mpass=15 ../mednafen-"$VERSION"-win32.zip COPYING ChangeLog Documentation/*.html Documentation/*.css Documentation/*.png Documentation/*.txt && \ cd .. && \ cd build64 && \ cp src/mednafen.exe . && \ @@ -19,8 +19,8 @@ mkdir -p de/LC_MESSAGES ru/LC_MESSAGES && \ cp ../mednafen/po/de.gmo de/LC_MESSAGES/mednafen.mo && \ cp ../mednafen/po/ru.gmo ru/LC_MESSAGES/mednafen.mo && \ -7za a ../mednafen-"$VERSION"-win64.zip mednafen.exe libgcc_s_seh-1.dll libstdc++-6.dll libcharset-1.dll libiconv-2.dll libFLAC-8.dll libogg-0.dll libsndfile-1.dll libvorbis-0.dll libvorbisenc-2.dll SDL2.dll de/ ru/ && \ +7za a -mtc- -mx9 -mfb=258 -mpass=15 ../mednafen-"$VERSION"-win64.zip mednafen.exe libgcc_s_seh-1.dll libstdc++-6.dll libcharset-1.dll libiconv-2.dll libFLAC-8.dll libogg-0.dll libsndfile-1.dll libvorbis-0.dll libvorbisenc-2.dll SDL2.dll de/ ru/ && \ cd ../mednafen && \ -7za a ../mednafen-"$VERSION"-win64.zip COPYING ChangeLog Documentation/*.html Documentation/*.css Documentation/*.png Documentation/*.txt && \ +7za a -mtc- -mx9 -mfb=258 -mpass=15 ../mednafen-"$VERSION"-win64.zip COPYING ChangeLog Documentation/*.html Documentation/*.css Documentation/*.png Documentation/*.txt && \ cd .. diff -Nru mednafen-1.24.3+dfsg/src/apple2/apple2.cpp mednafen-1.26.1+dfsg/src/apple2/apple2.cpp --- mednafen-1.24.3+dfsg/src/apple2/apple2.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/apple2/apple2.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1450,7 +1450,7 @@ { const std::string& giotype = gio_cfg[1]; - if(gio_cfg.size() != (2 + (giotype == "gamepad" || giotype == "joystick"))) + if(gio_cfg.size() != (unsigned)(2 + (giotype == "gamepad" || giotype == "joystick"))) throw MDFN_Error(0, _("Too many arguments for \"%s\" setting in MAI file."), "gameio"); else { diff -Nru mednafen-1.24.3+dfsg/src/apple2/debug.inc mednafen-1.26.1+dfsg/src/apple2/debug.inc --- mednafen-1.24.3+dfsg/src/apple2/debug.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/apple2/debug.inc 2020-11-10 06:04:17.000000000 +0000 @@ -499,6 +499,7 @@ static DebuggerInfoStruct DBGInfo = { + true, "cp437", 3, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/apple2/disk2.inc mednafen-1.26.1+dfsg/src/apple2/disk2.inc --- mednafen-1.24.3+dfsg/src/apple2/disk2.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/apple2/disk2.inc 2020-11-10 06:04:17.000000000 +0000 @@ -1357,7 +1357,7 @@ { const uint8 header_magic[7] = { 'M', 'D', 'F', 'N', 'A', 'F', 'D' }; uint8 header[16]; - uint32 version; + uint32 version MDFN_NOWARN_UNUSED; bool bigendian; if(sp->read(header, 16, false) != 16 || memcmp(header, header_magic, sizeof(header_magic))) @@ -1840,7 +1840,7 @@ disk->ever_modified = true; } -static bool GetClearDiskDirty(FloppyDisk* disk) +static MDFN_NOWARN_UNUSED bool GetClearDiskDirty(FloppyDisk* disk) { bool ret = disk->dirty; diff -Nru mednafen-1.24.3+dfsg/src/apple2/kbio.inc mednafen-1.26.1+dfsg/src/apple2/kbio.inc --- mednafen-1.24.3+dfsg/src/apple2/kbio.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/apple2/kbio.inc 2020-11-10 06:04:17.000000000 +0000 @@ -447,7 +447,7 @@ /* X8 */ IDIIS_Padding<1>(), /* Y4 */ - /* X0 */ IDIIS_Button("7", "7'", -1), + /* X0 */ IDIIS_Button("7", "7", -1), /* X1 */ IDIIS_Button("t", "T", -1), /* X2 */ IDIIS_Button("j", "J", -1), /* X3 */ IDIIS_Button("b", "B", -1), diff -Nru mednafen-1.24.3+dfsg/src/apple2/video.inc mednafen-1.26.1+dfsg/src/apple2/video.inc --- mednafen-1.24.3+dfsg/src/apple2/video.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/apple2/video.inc 2020-11-10 06:04:17.000000000 +0000 @@ -481,7 +481,7 @@ if(text) { uint8 fd = FontData[((ram_data & 0x3F) << 3) | (VCounter & 0x7)]; - bool invert = !(ram_data & 0x80) & (!(ram_data & 0x40) | !flashything); + bool invert = (!(ram_data & 0x80)) & (!(ram_data & 0x40) | !flashything); if(invert) fd ^= 0x7F; diff -Nru mednafen-1.24.3+dfsg/src/cdrom/scsicd.cpp mednafen-1.26.1+dfsg/src/cdrom/scsicd.cpp --- mednafen-1.24.3+dfsg/src/cdrom/scsicd.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/cdrom/scsicd.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -22,6 +22,21 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* + When changing CD read timing(throughput, and startup/seek delay), be sure to test: + + 4 in 1 Super CD (check for stuck note when starting "Gate of Thunder") + Downtown Nekketsu Monogatari (with text speed set to fast, quickly enter and exit store and listen to ADPCM playback for glitches) + Galaxy Fraulein Yuna HuVideo CD + It Came from the Desert + John Madden Duo Football + Kuusou Kagaku Sekai Gulliver Boy + Magical Fantasy Adventure: Popful Mail (third cutscene, check for glitches and hang) + Mirai Shonen Conan (check for hang after boat sinking cutscene) + Sherlock Holmes Consulting Detective + +*/ + #include #include #include @@ -1939,6 +1954,7 @@ uint32 Offset = sa - toc.tracks[Track].lba; //Cur_CDIF->GetTrackStartPositionLBA(Track); SCSILog("SCSI", "Read: start=0x%08x(track=%d, offs=0x%08x), cnt=0x%08x", sa, Track, Offset, sc); } + //const uint32 PrevSectorAddr = SectorAddr; SectorAddr = sa; SectorCount = sc; @@ -1947,6 +1963,8 @@ Cur_CDIF->HintReadSector(sa); //, sa + sc); CDReadTimer = (uint64)((WhichSystem == SCSICD_PCE) ? 8 : 1) * 2048 * System_Clock / CD_DATA_TRANSFER_RATE; + //printf("%d\n", SectorAddr - PrevSectorAddr); + //TODO?: CDReadTimer = (double)((WhichSystem == SCSICD_PCE) ? ((PrevSectorAddr == SectorAddr) ? 0.5 : 8) : 1) * 2048 * System_Clock / CD_DATA_TRANSFER_RATE; } else { diff -Nru mednafen-1.24.3+dfsg/src/compress/GZFileStream.cpp mednafen-1.26.1+dfsg/src/compress/GZFileStream.cpp --- mednafen-1.24.3+dfsg/src/compress/GZFileStream.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/compress/GZFileStream.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -158,7 +158,7 @@ throw MDFN_Error(0, _("Error reading from opened file \"%s\": %s"), path_save.c_str(), errstring); } - const uint64 read_count_u64 = (std::make_unsigned::type)read_count; + const uint64 read_count_u64 = (std::make_unsigned::type>::type)read_count; if(read_count_u64 != count && error_on_eof) throw MDFN_Error(0, _("Error reading from opened file \"%s\": %s"), path_save.c_str(), _("Unexpected EOF")); @@ -210,7 +210,7 @@ void GZFileStream::write(const void *data, uint64 count) { const auto write_count = gzwrite(gzp, data, count); - const uint64 write_count_u64 = (std::make_unsigned::type)write_count; + const uint64 write_count_u64 = (std::make_unsigned::type>::type)write_count; if(write_count_u64 != count) { diff -Nru mednafen-1.24.3+dfsg/src/debug.h mednafen-1.26.1+dfsg/src/debug.h --- mednafen-1.24.3+dfsg/src/debug.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/debug.h 2020-11-10 06:04:17.000000000 +0000 @@ -118,8 +118,9 @@ }; #endif -typedef struct +struct DebuggerInfoStruct { + bool SuppressDoc; // Suppress auto-generated documentation for this system's debugger. const char *DefaultCharEnc; // Default(or most common) internal character encoding for text for the system. uint32 MaxInstructionSize; // Maximum instruction size in bytes @@ -180,7 +181,7 @@ // Game emulation code shouldn't touch these directly. std::vector *AddressSpaces; std::vector *RegGroups; -} DebuggerInfoStruct; +}; // ASpace_Add() functions return an ID that should be used with with MDFNDBG_ASpace_Read() // and ASpace_Write() functions. The ID is guaranteed to be 0 for the first address space, diff -Nru mednafen-1.24.3+dfsg/src/drivers/main.cpp mednafen-1.26.1+dfsg/src/drivers/main.cpp --- mednafen-1.24.3+dfsg/src/drivers/main.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/drivers/main.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -195,7 +195,7 @@ void BuildSystemSetting(MDFNSetting *setting, const char *system_name, const char *name, const char *description, const char *description_extra, MDFNSettingType type, const char *default_value, const char *minimum, const char *maximum, bool (*validate_func)(const char *name, const char *value), void (*ChangeNotification)(const char *name), - const MDFNSetting_EnumList *enum_list) + const MDFNSetting_EnumList *enum_list, uint32 extra_flags) { char setting_name[256]; @@ -204,7 +204,7 @@ trio_snprintf(setting_name, 256, "%s.%s", system_name, name); setting->name = strdup(setting_name); - setting->flags = MDFNSF_COMMON_TEMPLATE; + setting->flags = MDFNSF_COMMON_TEMPLATE | extra_flags; setting->description = description; setting->description_extra = description_extra; setting->type = type; @@ -227,11 +227,13 @@ if(!dbg) continue; + // + const uint32 extra_flags = dbg->SuppressDoc ? MDFNSF_SUPPRESS_DOC : 0; - BuildSystemSetting(&setting, sysname, "debugger.disfontsize", gettext_noop("Disassembly font size."), gettext_noop("Note: Setting the font size to larger than the default may cause text overlap in the debugger."), MDFNST_ENUM, "5x7", NULL, NULL, NULL, NULL, FontSize_List); + BuildSystemSetting(&setting, sysname, "debugger.disfontsize", gettext_noop("Disassembly font size."), gettext_noop("Note: Setting the font size to larger than the default may cause text overlap in the debugger."), MDFNST_ENUM, "5x7", NULL, NULL, NULL, NULL, FontSize_List, extra_flags); settings.push_back(setting); - BuildSystemSetting(&setting, sysname, "debugger.memcharenc", gettext_noop("Character encoding for the debugger's memory editor."), NULL, MDFNST_STRING, dbg->DefaultCharEnc); + BuildSystemSetting(&setting, sysname, "debugger.memcharenc", gettext_noop("Character encoding for the debugger's memory editor."), NULL, MDFNST_STRING, dbg->DefaultCharEnc, NULL, NULL, NULL, NULL, NULL, extra_flags); settings.push_back(setting); } #endif @@ -2584,6 +2586,14 @@ { //printf("MidSync; flags=0x%08x --- SoundBufSize_DriverProcessed=0x%08x, SoundBufSize=0x%08x\n", flags, espec->SoundBufSize_DriverProcessed, espec->SoundBufSize); // + if(MDFN_UNLIKELY(StateRCTest)) + { + // TODO: Make state rewind consistency checking compatible with midsync, instead of this quick workaround. + //puts("MDFND_MidSync ignored"); + return; + } + // + // int16* const sbuf = espec->SoundBuf + espec->SoundBufSize_DriverProcessed * CurGame->soundchan; const int32 scount = espec->SoundBufSize - espec->SoundBufSize_DriverProcessed; diff -Nru mednafen-1.24.3+dfsg/src/drivers/main.h mednafen-1.26.1+dfsg/src/drivers/main.h --- mednafen-1.24.3+dfsg/src/drivers/main.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/drivers/main.h 2020-11-10 06:04:17.000000000 +0000 @@ -74,5 +74,5 @@ void BuildSystemSetting(MDFNSetting *setting, const char *system_name, const char *name, const char *description, const char *description_extra, MDFNSettingType type, const char *default_value, const char *minimum = NULL, const char *maximum = NULL, bool (*validate_func)(const char *name, const char *value) = NULL, void (*ChangeNotification)(const char *name) = NULL, - const MDFNSetting_EnumList *enum_list = NULL); + const MDFNSetting_EnumList *enum_list = NULL, uint32 extra_flags = 0); #endif diff -Nru mednafen-1.24.3+dfsg/src/drivers/Makefile.in mednafen-1.26.1+dfsg/src/drivers/Makefile.in --- mednafen-1.24.3+dfsg/src/drivers/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/drivers/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ @WANT_FANCY_SCALERS_TRUE@am__append_3 = hqxx-common.cpp hq2x.cpp hq3x.cpp hq4x.cpp scale2x.c scale3x.c scalebit.c 2xSaI.cpp @WANT_DEBUGGER_TRUE@am__append_4 = debugger.cpp gfxdebugger.cpp memdebugger.cpp logdebugger.cpp prompt.cpp subdir = src/drivers -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -106,6 +114,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -163,7 +172,25 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/2xSaI.Po ./$(DEPDIR)/Joystick.Po \ + ./$(DEPDIR)/Joystick_DX5.Po ./$(DEPDIR)/Joystick_Linux.Po \ + ./$(DEPDIR)/Joystick_SDL.Po ./$(DEPDIR)/Joystick_XInput.Po \ + ./$(DEPDIR)/args.Po ./$(DEPDIR)/cheat.Po \ + ./$(DEPDIR)/console.Po ./$(DEPDIR)/debugger.Po \ + ./$(DEPDIR)/ers.Po ./$(DEPDIR)/fps.Po \ + ./$(DEPDIR)/gfxdebugger.Po ./$(DEPDIR)/help.Po \ + ./$(DEPDIR)/hq2x.Po ./$(DEPDIR)/hq3x.Po ./$(DEPDIR)/hq4x.Po \ + ./$(DEPDIR)/hqxx-common.Po ./$(DEPDIR)/input.Po \ + ./$(DEPDIR)/keyboard.Po ./$(DEPDIR)/logdebugger.Po \ + ./$(DEPDIR)/main.Po ./$(DEPDIR)/memdebugger.Po \ + ./$(DEPDIR)/mouse.Po ./$(DEPDIR)/netplay.Po ./$(DEPDIR)/nnx.Po \ + ./$(DEPDIR)/nongl.Po ./$(DEPDIR)/opengl.Po \ + ./$(DEPDIR)/prompt.Po ./$(DEPDIR)/remote.Po \ + ./$(DEPDIR)/rmdui.Po ./$(DEPDIR)/scale2x.Po \ + ./$(DEPDIR)/scale3x.Po ./$(DEPDIR)/scalebit.Po \ + ./$(DEPDIR)/shader.Po ./$(DEPDIR)/sound.Po \ + ./$(DEPDIR)/video-state.Po ./$(DEPDIR)/video.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -216,6 +243,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -390,6 +419,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -423,14 +453,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -456,44 +485,50 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/2xSaI.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_DX5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_Linux.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_SDL.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_XInput.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfxdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq2x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq3x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq4x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hqxx-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdebugger.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nnx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nongl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opengl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prompt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdui.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale2x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale3x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalebit.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video-state.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/2xSaI.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_DX5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_Linux.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_SDL.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Joystick_XInput.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheat.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ers.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fps.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfxdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq2x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq3x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hq4x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hqxx-common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdebugger.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nnx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nongl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opengl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prompt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdui.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale2x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale3x.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalebit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video-state.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -579,7 +614,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -648,7 +686,44 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/2xSaI.Po + -rm -f ./$(DEPDIR)/Joystick.Po + -rm -f ./$(DEPDIR)/Joystick_DX5.Po + -rm -f ./$(DEPDIR)/Joystick_Linux.Po + -rm -f ./$(DEPDIR)/Joystick_SDL.Po + -rm -f ./$(DEPDIR)/Joystick_XInput.Po + -rm -f ./$(DEPDIR)/args.Po + -rm -f ./$(DEPDIR)/cheat.Po + -rm -f ./$(DEPDIR)/console.Po + -rm -f ./$(DEPDIR)/debugger.Po + -rm -f ./$(DEPDIR)/ers.Po + -rm -f ./$(DEPDIR)/fps.Po + -rm -f ./$(DEPDIR)/gfxdebugger.Po + -rm -f ./$(DEPDIR)/help.Po + -rm -f ./$(DEPDIR)/hq2x.Po + -rm -f ./$(DEPDIR)/hq3x.Po + -rm -f ./$(DEPDIR)/hq4x.Po + -rm -f ./$(DEPDIR)/hqxx-common.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/logdebugger.Po + -rm -f ./$(DEPDIR)/main.Po + -rm -f ./$(DEPDIR)/memdebugger.Po + -rm -f ./$(DEPDIR)/mouse.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/nnx.Po + -rm -f ./$(DEPDIR)/nongl.Po + -rm -f ./$(DEPDIR)/opengl.Po + -rm -f ./$(DEPDIR)/prompt.Po + -rm -f ./$(DEPDIR)/remote.Po + -rm -f ./$(DEPDIR)/rmdui.Po + -rm -f ./$(DEPDIR)/scale2x.Po + -rm -f ./$(DEPDIR)/scale3x.Po + -rm -f ./$(DEPDIR)/scalebit.Po + -rm -f ./$(DEPDIR)/shader.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/video-state.Po + -rm -f ./$(DEPDIR)/video.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -694,7 +769,44 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/2xSaI.Po + -rm -f ./$(DEPDIR)/Joystick.Po + -rm -f ./$(DEPDIR)/Joystick_DX5.Po + -rm -f ./$(DEPDIR)/Joystick_Linux.Po + -rm -f ./$(DEPDIR)/Joystick_SDL.Po + -rm -f ./$(DEPDIR)/Joystick_XInput.Po + -rm -f ./$(DEPDIR)/args.Po + -rm -f ./$(DEPDIR)/cheat.Po + -rm -f ./$(DEPDIR)/console.Po + -rm -f ./$(DEPDIR)/debugger.Po + -rm -f ./$(DEPDIR)/ers.Po + -rm -f ./$(DEPDIR)/fps.Po + -rm -f ./$(DEPDIR)/gfxdebugger.Po + -rm -f ./$(DEPDIR)/help.Po + -rm -f ./$(DEPDIR)/hq2x.Po + -rm -f ./$(DEPDIR)/hq3x.Po + -rm -f ./$(DEPDIR)/hq4x.Po + -rm -f ./$(DEPDIR)/hqxx-common.Po + -rm -f ./$(DEPDIR)/input.Po + -rm -f ./$(DEPDIR)/keyboard.Po + -rm -f ./$(DEPDIR)/logdebugger.Po + -rm -f ./$(DEPDIR)/main.Po + -rm -f ./$(DEPDIR)/memdebugger.Po + -rm -f ./$(DEPDIR)/mouse.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/nnx.Po + -rm -f ./$(DEPDIR)/nongl.Po + -rm -f ./$(DEPDIR)/opengl.Po + -rm -f ./$(DEPDIR)/prompt.Po + -rm -f ./$(DEPDIR)/remote.Po + -rm -f ./$(DEPDIR)/rmdui.Po + -rm -f ./$(DEPDIR)/scale2x.Po + -rm -f ./$(DEPDIR)/scale3x.Po + -rm -f ./$(DEPDIR)/scalebit.Po + -rm -f ./$(DEPDIR)/shader.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/video-state.Po + -rm -f ./$(DEPDIR)/video.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -714,18 +826,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/src/drivers_dos/Makefile.in mednafen-1.26.1+dfsg/src/drivers_dos/Makefile.in --- mednafen-1.24.3+dfsg/src/drivers_dos/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/drivers_dos/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/drivers_dos -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -149,6 +158,7 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -323,6 +333,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -350,14 +361,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers_dos/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers_dos/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -389,7 +399,10 @@ cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -534,6 +547,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru mednafen-1.24.3+dfsg/src/drivers_libxxx/Makefile.in mednafen-1.26.1+dfsg/src/drivers_libxxx/Makefile.in --- mednafen-1.24.3+dfsg/src/drivers_libxxx/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/drivers_libxxx/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/drivers_libxxx -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -135,7 +144,9 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/CDInterface_EXT.Po \ + ./$(DEPDIR)/interface.Po ./$(DEPDIR)/main.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -176,6 +187,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -350,6 +363,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -379,14 +393,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers_libxxx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/drivers_libxxx/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -417,9 +430,15 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDInterface_EXT.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDInterface_EXT.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -489,7 +508,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -558,7 +580,9 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/CDInterface_EXT.Po + -rm -f ./$(DEPDIR)/interface.Po + -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -604,7 +628,9 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/CDInterface_EXT.Po + -rm -f ./$(DEPDIR)/interface.Po + -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -624,18 +650,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/src/hw_cpu/m68k/m68k.cpp mednafen-1.26.1+dfsg/src/hw_cpu/m68k/m68k.cpp --- mednafen-1.24.3+dfsg/src/hw_cpu/m68k/m68k.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/hw_cpu/m68k/m68k.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -27,7 +27,7 @@ // // TODO: Fix instruction timings(currently execute too fast). // -// TODO: Fix multiplication and division timing, and make sure flags are ok for divide by zero. +// TODO: Fix division timing, and make sure flags are ok for divide by zero. // // FIXME: Handle NMI differently; how to test? Maybe MOVEM to interrupt control registers... // @@ -1123,6 +1123,11 @@ T const src_data = src.read(); uint32 const result = (uint32)(uint16)D[dr] * (uint32)src_data; + timestamp += 34; + + for(uint32 tmp = src_data; tmp; tmp &= tmp - 1) + timestamp += 2; + CalcZN(result); SetC(false); SetV(false); @@ -1143,6 +1148,11 @@ T const src_data = src.read(); uint32 const result = (int16)D[dr] * (int16)src_data; + timestamp += 34; + + for(uint32 tmp = src_data << 1, i = 0; i < 16; tmp >>= 1, i++) + timestamp += (tmp ^ (tmp << 1)) & 2; + CalcZN(result); SetC(false); SetV(false); diff -Nru mednafen-1.24.3+dfsg/src/Makefile.in mednafen-1.26.1+dfsg/src/Makefile.in --- mednafen-1.24.3+dfsg/src/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -91,42 +101,6 @@ @ENABLE_LIBXXX_MODE_TRUE@am__append_9 = drivers_libxxx/libmdfnxxx.a @ENABLE_LIBXXX_MODE_TRUE@am__append_10 = drivers_libxxx/libmdfnxxx.a @HAVE_SDL_TRUE@am__append_11 = @SDL_LIBS@ -DIST_COMMON = $(srcdir)/cdplay/Makefile.am.inc \ - $(srcdir)/demo/Makefile.am.inc \ - $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc \ - $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc \ - $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc \ - $(srcdir)/nes/ppu/Makefile.am.inc \ - $(srcdir)/nes/boards/Makefile.am.inc \ - $(srcdir)/nes/input/Makefile.am.inc \ - $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc \ - $(srcdir)/pce_fast/Makefile.am.inc \ - $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc \ - $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc \ - $(srcdir)/snes_faust/Makefile.am.inc \ - $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc \ - $(srcdir)/desa68/Makefile.am.inc \ - $(srcdir)/hw_cpu/Makefile.am.inc \ - $(srcdir)/hw_misc/Makefile.am.inc \ - $(srcdir)/hw_sound/Makefile.am.inc \ - $(srcdir)/hw_video/Makefile.am.inc \ - $(srcdir)/mthreading/Makefile.am.inc \ - $(srcdir)/cdrom/Makefile.am.inc \ - $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc \ - $(srcdir)/quicklz/Makefile.am.inc \ - $(srcdir)/compress/Makefile.am.inc \ - $(srcdir)/hash/Makefile.am.inc \ - $(srcdir)/string/Makefile.am.inc \ - $(srcdir)/video/Makefile.am.inc \ - $(srcdir)/resampler/Makefile.am.inc \ - $(srcdir)/cputest/Makefile.am.inc \ - $(srcdir)/cheat_formats/Makefile.am.inc \ - $(srcdir)/minilzo/Makefile.am.inc \ - $(srcdir)/tremor/Makefile.am.inc \ - $(srcdir)/mpcdec/Makefile.am.inc \ - $(srcdir)/trio/Makefile.am.inc $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \ - $(top_srcdir)/depcomp @WANT_APPLE2_EMU_TRUE@am__append_12 = apple2/apple2.cpp @WANT_GB_EMU_TRUE@am__append_13 = gb/gb.cpp gb/gfx.cpp gb/gbGlobals.cpp gb/memory.cpp gb/sound.cpp gb/z80.cpp @WANT_GBA_EMU_TRUE@am__append_14 = gba/GBAinline.cpp gba/arm.cpp \ @@ -342,10 +316,13 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru @@ -492,8 +469,6 @@ @HAVE_EXTERNAL_TREMOR_FALSE@ tremor/libvorbisidec_a-framing.$(OBJEXT) \ @HAVE_EXTERNAL_TREMOR_FALSE@ tremor/libvorbisidec_a-bitwise.$(OBJEXT) libvorbisidec_a_OBJECTS = $(am_libvorbisidec_a_OBJECTS) -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) am__mednafen_SOURCES_DIST = debug.cpp error.cpp mempatcher.cpp \ settings.cpp endian.cpp Time.cpp mednafen.cpp git.cpp file.cpp \ general.cpp memory.cpp netplay.cpp state.cpp state_rewind.cpp \ @@ -999,7 +974,309 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/ExtMemStream.Po \ + ./$(DEPDIR)/FileStream.Po ./$(DEPDIR)/IPSPatcher.Po \ + ./$(DEPDIR)/MTStreamReader.Po ./$(DEPDIR)/MemoryStream.Po \ + ./$(DEPDIR)/NativeVFS.Po ./$(DEPDIR)/PSFLoader.Po \ + ./$(DEPDIR)/SNSFLoader.Po ./$(DEPDIR)/SPCReader.Po \ + ./$(DEPDIR)/SSFLoader.Po ./$(DEPDIR)/Stream.Po \ + ./$(DEPDIR)/Time.Po ./$(DEPDIR)/VirtualFS.Po \ + ./$(DEPDIR)/debug.Po ./$(DEPDIR)/endian.Po \ + ./$(DEPDIR)/error.Po ./$(DEPDIR)/file.Po \ + ./$(DEPDIR)/general.Po ./$(DEPDIR)/git.Po \ + ./$(DEPDIR)/mednafen.Po ./$(DEPDIR)/memory.Po \ + ./$(DEPDIR)/mempatcher.Po ./$(DEPDIR)/movie.Po \ + ./$(DEPDIR)/netplay.Po ./$(DEPDIR)/player.Po \ + ./$(DEPDIR)/qtrecord.Po ./$(DEPDIR)/settings.Po \ + ./$(DEPDIR)/state.Po ./$(DEPDIR)/state_rewind.Po \ + ./$(DEPDIR)/tests.Po ./$(DEPDIR)/win32-common.Po \ + apple2/$(DEPDIR)/apple2.Po cdplay/$(DEPDIR)/cdplay.Po \ + cdrom/$(DEPDIR)/CDAFReader.Po \ + cdrom/$(DEPDIR)/CDAFReader_MPC.Po \ + cdrom/$(DEPDIR)/CDAFReader_SF.Po \ + cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po \ + cdrom/$(DEPDIR)/CDAccess.Po cdrom/$(DEPDIR)/CDAccess_CCD.Po \ + cdrom/$(DEPDIR)/CDAccess_Image.Po \ + cdrom/$(DEPDIR)/CDInterface.Po \ + cdrom/$(DEPDIR)/CDInterface_MT.Po \ + cdrom/$(DEPDIR)/CDInterface_ST.Po cdrom/$(DEPDIR)/CDUtility.Po \ + cdrom/$(DEPDIR)/crc32.Po cdrom/$(DEPDIR)/galois.Po \ + cdrom/$(DEPDIR)/l-ec.Po cdrom/$(DEPDIR)/lec.Po \ + cdrom/$(DEPDIR)/recover-raw.Po cdrom/$(DEPDIR)/scsicd.Po \ + cheat_formats/$(DEPDIR)/gb.Po cheat_formats/$(DEPDIR)/psx.Po \ + cheat_formats/$(DEPDIR)/snes.Po \ + compress/$(DEPDIR)/GZFileStream.Po \ + compress/$(DEPDIR)/ZIPReader.Po \ + compress/$(DEPDIR)/ZLInflateFilter.Po \ + cputest/$(DEPDIR)/cputest.Po cputest/$(DEPDIR)/ppc_cpu.Po \ + cputest/$(DEPDIR)/x86_cpu.Po demo/$(DEPDIR)/demo.Po \ + desa68/$(DEPDIR)/libdesa68_a-desa68.Po gb/$(DEPDIR)/gb.Po \ + gb/$(DEPDIR)/gbGlobals.Po gb/$(DEPDIR)/gfx.Po \ + gb/$(DEPDIR)/memory.Po gb/$(DEPDIR)/sound.Po \ + gb/$(DEPDIR)/z80.Po gba/$(DEPDIR)/GBA.Po \ + gba/$(DEPDIR)/GBAinline.Po gba/$(DEPDIR)/Gfx.Po \ + gba/$(DEPDIR)/Globals.Po gba/$(DEPDIR)/Mode0.Po \ + gba/$(DEPDIR)/Mode1.Po gba/$(DEPDIR)/Mode2.Po \ + gba/$(DEPDIR)/Mode3.Po gba/$(DEPDIR)/Mode4.Po \ + gba/$(DEPDIR)/Mode5.Po gba/$(DEPDIR)/RTC.Po \ + gba/$(DEPDIR)/Sound.Po gba/$(DEPDIR)/arm.Po \ + gba/$(DEPDIR)/bios.Po gba/$(DEPDIR)/eeprom.Po \ + gba/$(DEPDIR)/flash.Po gba/$(DEPDIR)/sram.Po \ + gba/$(DEPDIR)/thumb.Po hash/$(DEPDIR)/crc.Po \ + hash/$(DEPDIR)/md5.Po hash/$(DEPDIR)/sha1.Po \ + hash/$(DEPDIR)/sha256.Po hw_cpu/m68k/$(DEPDIR)/m68k.Po \ + hw_cpu/v810/$(DEPDIR)/v810_cpu.Po \ + hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po \ + hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po \ + hw_cpu/z80-fuse/$(DEPDIR)/z80.Po \ + hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po \ + hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po \ + hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po \ + hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po \ + hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po \ + hw_sound/ym2413/$(DEPDIR)/emu2413.Po \ + hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po \ + hw_video/huc6270/$(DEPDIR)/vdc.Po lynx/$(DEPDIR)/c65c02.Po \ + lynx/$(DEPDIR)/cart.Po lynx/$(DEPDIR)/memmap.Po \ + lynx/$(DEPDIR)/mikie.Po lynx/$(DEPDIR)/ram.Po \ + lynx/$(DEPDIR)/rom.Po lynx/$(DEPDIR)/susie.Po \ + lynx/$(DEPDIR)/system.Po md/$(DEPDIR)/debug.Po \ + md/$(DEPDIR)/genesis.Po md/$(DEPDIR)/genio.Po \ + md/$(DEPDIR)/header.Po md/$(DEPDIR)/mem68k.Po \ + md/$(DEPDIR)/membnk.Po md/$(DEPDIR)/memvdp.Po \ + md/$(DEPDIR)/memz80.Po md/$(DEPDIR)/sound.Po \ + md/$(DEPDIR)/system.Po md/$(DEPDIR)/vdp.Po \ + md/cart/$(DEPDIR)/cart.Po md/cart/$(DEPDIR)/map_eeprom.Po \ + md/cart/$(DEPDIR)/map_ff.Po md/cart/$(DEPDIR)/map_realtec.Po \ + md/cart/$(DEPDIR)/map_rmx3.Po md/cart/$(DEPDIR)/map_rom.Po \ + md/cart/$(DEPDIR)/map_sbb.Po md/cart/$(DEPDIR)/map_sram.Po \ + md/cart/$(DEPDIR)/map_ssf2.Po md/cart/$(DEPDIR)/map_svp.Po \ + md/cart/$(DEPDIR)/map_yase.Po md/cd/$(DEPDIR)/cd.Po \ + md/cd/$(DEPDIR)/cdc_cdd.Po md/cd/$(DEPDIR)/interrupt.Po \ + md/cd/$(DEPDIR)/pcm.Po md/cd/$(DEPDIR)/timer.Po \ + md/input/$(DEPDIR)/4way.Po md/input/$(DEPDIR)/gamepad.Po \ + md/input/$(DEPDIR)/megamouse.Po md/input/$(DEPDIR)/multitap.Po \ + minilzo/$(DEPDIR)/minilzo.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po \ + mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po \ + mthreading/$(DEPDIR)/MThreading_POSIX.Po \ + mthreading/$(DEPDIR)/MThreading_Win32.Po nes/$(DEPDIR)/cart.Po \ + nes/$(DEPDIR)/debug.Po nes/$(DEPDIR)/dis6502.Po \ + nes/$(DEPDIR)/fds-sound.Po nes/$(DEPDIR)/fds.Po \ + nes/$(DEPDIR)/ines.Po nes/$(DEPDIR)/input.Po \ + nes/$(DEPDIR)/nes.Po nes/$(DEPDIR)/nsf.Po \ + nes/$(DEPDIR)/nsfe.Po nes/$(DEPDIR)/sound.Po \ + nes/$(DEPDIR)/unif.Po nes/$(DEPDIR)/vsuni.Po \ + nes/$(DEPDIR)/x6502.Po nes/boards/$(DEPDIR)/107.Po \ + nes/boards/$(DEPDIR)/112.Po nes/boards/$(DEPDIR)/113.Po \ + nes/boards/$(DEPDIR)/114.Po nes/boards/$(DEPDIR)/117.Po \ + nes/boards/$(DEPDIR)/140.Po nes/boards/$(DEPDIR)/15.Po \ + nes/boards/$(DEPDIR)/151.Po nes/boards/$(DEPDIR)/152.Po \ + nes/boards/$(DEPDIR)/156.Po nes/boards/$(DEPDIR)/16.Po \ + nes/boards/$(DEPDIR)/163.Po nes/boards/$(DEPDIR)/18.Po \ + nes/boards/$(DEPDIR)/180.Po nes/boards/$(DEPDIR)/182.Po \ + nes/boards/$(DEPDIR)/184.Po nes/boards/$(DEPDIR)/185.Po \ + nes/boards/$(DEPDIR)/187.Po nes/boards/$(DEPDIR)/189.Po \ + nes/boards/$(DEPDIR)/190.Po nes/boards/$(DEPDIR)/193.Po \ + nes/boards/$(DEPDIR)/208.Po nes/boards/$(DEPDIR)/21.Po \ + nes/boards/$(DEPDIR)/22.Po nes/boards/$(DEPDIR)/222.Po \ + nes/boards/$(DEPDIR)/228.Po nes/boards/$(DEPDIR)/23.Po \ + nes/boards/$(DEPDIR)/232.Po nes/boards/$(DEPDIR)/234.Po \ + nes/boards/$(DEPDIR)/240.Po nes/boards/$(DEPDIR)/241.Po \ + nes/boards/$(DEPDIR)/242.Po nes/boards/$(DEPDIR)/244.Po \ + nes/boards/$(DEPDIR)/246.Po nes/boards/$(DEPDIR)/248.Po \ + nes/boards/$(DEPDIR)/25.Po nes/boards/$(DEPDIR)/30.Po \ + nes/boards/$(DEPDIR)/32.Po nes/boards/$(DEPDIR)/33.Po \ + nes/boards/$(DEPDIR)/34.Po nes/boards/$(DEPDIR)/38.Po \ + nes/boards/$(DEPDIR)/40.Po nes/boards/$(DEPDIR)/41.Po \ + nes/boards/$(DEPDIR)/42.Po nes/boards/$(DEPDIR)/46.Po \ + nes/boards/$(DEPDIR)/51.Po nes/boards/$(DEPDIR)/65.Po \ + nes/boards/$(DEPDIR)/67.Po nes/boards/$(DEPDIR)/68.Po \ + nes/boards/$(DEPDIR)/70.Po nes/boards/$(DEPDIR)/72.Po \ + nes/boards/$(DEPDIR)/73.Po nes/boards/$(DEPDIR)/75.Po \ + nes/boards/$(DEPDIR)/76.Po nes/boards/$(DEPDIR)/77.Po \ + nes/boards/$(DEPDIR)/78.Po nes/boards/$(DEPDIR)/8.Po \ + nes/boards/$(DEPDIR)/80.Po nes/boards/$(DEPDIR)/82.Po \ + nes/boards/$(DEPDIR)/8237.Po nes/boards/$(DEPDIR)/86.Po \ + nes/boards/$(DEPDIR)/87.Po nes/boards/$(DEPDIR)/88.Po \ + nes/boards/$(DEPDIR)/89.Po nes/boards/$(DEPDIR)/90.Po \ + nes/boards/$(DEPDIR)/92.Po nes/boards/$(DEPDIR)/93.Po \ + nes/boards/$(DEPDIR)/94.Po nes/boards/$(DEPDIR)/95.Po \ + nes/boards/$(DEPDIR)/96.Po nes/boards/$(DEPDIR)/97.Po \ + nes/boards/$(DEPDIR)/99.Po nes/boards/$(DEPDIR)/codemasters.Po \ + nes/boards/$(DEPDIR)/colordreams.Po \ + nes/boards/$(DEPDIR)/deirom.Po nes/boards/$(DEPDIR)/emu2413.Po \ + nes/boards/$(DEPDIR)/ffe.Po nes/boards/$(DEPDIR)/fme7.Po \ + nes/boards/$(DEPDIR)/h2288.Po nes/boards/$(DEPDIR)/malee.Po \ + nes/boards/$(DEPDIR)/maxicart.Po nes/boards/$(DEPDIR)/mmc1.Po \ + nes/boards/$(DEPDIR)/mmc2and4.Po nes/boards/$(DEPDIR)/mmc3.Po \ + nes/boards/$(DEPDIR)/mmc5.Po nes/boards/$(DEPDIR)/n106.Po \ + nes/boards/$(DEPDIR)/nina06.Po nes/boards/$(DEPDIR)/novel.Po \ + nes/boards/$(DEPDIR)/sachen.Po nes/boards/$(DEPDIR)/simple.Po \ + nes/boards/$(DEPDIR)/super24.Po \ + nes/boards/$(DEPDIR)/supervision.Po \ + nes/boards/$(DEPDIR)/tengen.Po nes/boards/$(DEPDIR)/vrc6.Po \ + nes/boards/$(DEPDIR)/vrc7.Po nes/input/$(DEPDIR)/arkanoid.Po \ + nes/input/$(DEPDIR)/bbattler2.Po nes/input/$(DEPDIR)/cursor.Po \ + nes/input/$(DEPDIR)/fkb.Po nes/input/$(DEPDIR)/ftrainer.Po \ + nes/input/$(DEPDIR)/hypershot.Po \ + nes/input/$(DEPDIR)/mahjong.Po nes/input/$(DEPDIR)/oekakids.Po \ + nes/input/$(DEPDIR)/partytap.Po \ + nes/input/$(DEPDIR)/powerpad.Po nes/input/$(DEPDIR)/shadow.Po \ + nes/input/$(DEPDIR)/suborkb.Po nes/input/$(DEPDIR)/toprider.Po \ + nes/input/$(DEPDIR)/zapper.Po nes/ntsc/$(DEPDIR)/nes_ntsc.Po \ + nes/ppu/$(DEPDIR)/palette.Po nes/ppu/$(DEPDIR)/ppu.Po \ + net/$(DEPDIR)/Net.Po net/$(DEPDIR)/Net_POSIX.Po \ + net/$(DEPDIR)/Net_WS2.Po ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po \ + ngp/$(DEPDIR)/libngp_a-Z80_interface.Po \ + ngp/$(DEPDIR)/libngp_a-bios.Po \ + ngp/$(DEPDIR)/libngp_a-biosHLE.Po \ + ngp/$(DEPDIR)/libngp_a-dma.Po ngp/$(DEPDIR)/libngp_a-flash.Po \ + ngp/$(DEPDIR)/libngp_a-gfx.Po \ + ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po \ + ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po \ + ngp/$(DEPDIR)/libngp_a-interrupt.Po \ + ngp/$(DEPDIR)/libngp_a-mem.Po ngp/$(DEPDIR)/libngp_a-neopop.Po \ + ngp/$(DEPDIR)/libngp_a-rom.Po ngp/$(DEPDIR)/libngp_a-rtc.Po \ + ngp/$(DEPDIR)/libngp_a-sound.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po \ + ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po \ + pce/$(DEPDIR)/debug.Po pce/$(DEPDIR)/dis6280.Po \ + pce/$(DEPDIR)/hes.Po pce/$(DEPDIR)/huc.Po \ + pce/$(DEPDIR)/huc6280.Po pce/$(DEPDIR)/input.Po \ + pce/$(DEPDIR)/mcgenjin.Po pce/$(DEPDIR)/pce.Po \ + pce/$(DEPDIR)/pcecd.Po pce/$(DEPDIR)/tsushin.Po \ + pce/$(DEPDIR)/vce.Po pce/input/$(DEPDIR)/gamepad.Po \ + pce/input/$(DEPDIR)/mouse.Po pce/input/$(DEPDIR)/tsushinkb.Po \ + pce_fast/$(DEPDIR)/hes.Po pce_fast/$(DEPDIR)/huc.Po \ + pce_fast/$(DEPDIR)/huc6280.Po pce_fast/$(DEPDIR)/input.Po \ + pce_fast/$(DEPDIR)/pce.Po pce_fast/$(DEPDIR)/pcecd.Po \ + pce_fast/$(DEPDIR)/pcecd_drive.Po pce_fast/$(DEPDIR)/psg.Po \ + pce_fast/$(DEPDIR)/vdc.Po pcfx/$(DEPDIR)/debug.Po \ + pcfx/$(DEPDIR)/fxscsi.Po pcfx/$(DEPDIR)/huc6273.Po \ + pcfx/$(DEPDIR)/idct.Po pcfx/$(DEPDIR)/input.Po \ + pcfx/$(DEPDIR)/interrupt.Po pcfx/$(DEPDIR)/king.Po \ + pcfx/$(DEPDIR)/pcfx.Po pcfx/$(DEPDIR)/rainbow.Po \ + pcfx/$(DEPDIR)/soundbox.Po pcfx/$(DEPDIR)/timer.Po \ + pcfx/input/$(DEPDIR)/gamepad.Po pcfx/input/$(DEPDIR)/mouse.Po \ + psx/$(DEPDIR)/cdc.Po psx/$(DEPDIR)/cpu.Po \ + psx/$(DEPDIR)/debug.Po psx/$(DEPDIR)/dis.Po \ + psx/$(DEPDIR)/dma.Po psx/$(DEPDIR)/frontio.Po \ + psx/$(DEPDIR)/gpu.Po psx/$(DEPDIR)/gpu_line.Po \ + psx/$(DEPDIR)/gpu_polygon.Po psx/$(DEPDIR)/gpu_sprite.Po \ + psx/$(DEPDIR)/gte.Po psx/$(DEPDIR)/irq.Po \ + psx/$(DEPDIR)/mdec.Po psx/$(DEPDIR)/psx.Po \ + psx/$(DEPDIR)/sio.Po psx/$(DEPDIR)/spu.Po \ + psx/$(DEPDIR)/timer.Po psx/input/$(DEPDIR)/dualanalog.Po \ + psx/input/$(DEPDIR)/dualshock.Po \ + psx/input/$(DEPDIR)/gamepad.Po psx/input/$(DEPDIR)/guncon.Po \ + psx/input/$(DEPDIR)/justifier.Po \ + psx/input/$(DEPDIR)/memcard.Po psx/input/$(DEPDIR)/mouse.Po \ + psx/input/$(DEPDIR)/multitap.Po psx/input/$(DEPDIR)/negcon.Po \ + quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po \ + resampler/$(DEPDIR)/resample.Po sms/$(DEPDIR)/cart.Po \ + sms/$(DEPDIR)/memz80.Po sms/$(DEPDIR)/pio.Po \ + sms/$(DEPDIR)/render.Po sms/$(DEPDIR)/romdb.Po \ + sms/$(DEPDIR)/sms.Po sms/$(DEPDIR)/sound.Po \ + sms/$(DEPDIR)/system.Po sms/$(DEPDIR)/tms.Po \ + sms/$(DEPDIR)/vdp.Po snes/$(DEPDIR)/libsnes_a-interface.Po \ + snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po \ + snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po \ + snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po \ + snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po \ + snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po \ + snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po \ + snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po \ + snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po \ + snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po \ + snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po \ + snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po \ + snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po \ + snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po \ + snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po \ + snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po \ + snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po \ + snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po \ + snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po \ + snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po \ + snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po \ + snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po \ + snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po \ + snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po \ + snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po \ + snes/src/system/$(DEPDIR)/libsnes_a-system.Po \ + snes_faust/$(DEPDIR)/apu.Po snes_faust/$(DEPDIR)/cart.Po \ + snes_faust/$(DEPDIR)/cpu.Po snes_faust/$(DEPDIR)/debug.Po \ + snes_faust/$(DEPDIR)/dis65816.Po snes_faust/$(DEPDIR)/input.Po \ + snes_faust/$(DEPDIR)/msu1.Po snes_faust/$(DEPDIR)/ppu.Po \ + snes_faust/$(DEPDIR)/ppu_mt.Po \ + snes_faust/$(DEPDIR)/ppu_mtrender.Po \ + snes_faust/$(DEPDIR)/ppu_st.Po snes_faust/$(DEPDIR)/snes.Po \ + snes_faust/cart/$(DEPDIR)/cx4.Po \ + snes_faust/cart/$(DEPDIR)/dsp1.Po \ + snes_faust/cart/$(DEPDIR)/dsp2.Po \ + snes_faust/cart/$(DEPDIR)/sa1.Po \ + snes_faust/cart/$(DEPDIR)/sa1cpu.Po \ + snes_faust/cart/$(DEPDIR)/sdd1.Po \ + snes_faust/cart/$(DEPDIR)/superfx.Po \ + sound/$(DEPDIR)/Blip_Buffer.Po sound/$(DEPDIR)/DSPUtility.Po \ + sound/$(DEPDIR)/Fir_Resampler.Po \ + sound/$(DEPDIR)/OwlResampler.Po \ + sound/$(DEPDIR)/Stereo_Buffer.Po \ + sound/$(DEPDIR)/SwiftResampler.Po sound/$(DEPDIR)/WAVRecord.Po \ + sound/$(DEPDIR)/okiadpcm.Po string/$(DEPDIR)/escape.Po \ + string/$(DEPDIR)/string.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-block.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-framing.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-info.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-registry.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-res012.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po \ + tremor/$(DEPDIR)/libvorbisidec_a-window.Po \ + trio/$(DEPDIR)/libtrio_a-trio.Po \ + trio/$(DEPDIR)/libtrio_a-trionan.Po \ + trio/$(DEPDIR)/libtrio_a-triostr.Po vb/$(DEPDIR)/debug.Po \ + vb/$(DEPDIR)/input.Po vb/$(DEPDIR)/timer.Po vb/$(DEPDIR)/vb.Po \ + vb/$(DEPDIR)/vip.Po vb/$(DEPDIR)/vsu.Po \ + video/$(DEPDIR)/Deinterlacer.Po \ + video/$(DEPDIR)/Deinterlacer_Blend.Po \ + video/$(DEPDIR)/Deinterlacer_Simple.Po \ + video/$(DEPDIR)/font-data-12x13.Po \ + video/$(DEPDIR)/font-data-18x18.Po \ + video/$(DEPDIR)/font-data.Po video/$(DEPDIR)/png.Po \ + video/$(DEPDIR)/primitives.Po video/$(DEPDIR)/resize.Po \ + video/$(DEPDIR)/surface.Po video/$(DEPDIR)/tblur.Po \ + video/$(DEPDIR)/text.Po video/$(DEPDIR)/video.Po \ + wswan/$(DEPDIR)/comm.Po wswan/$(DEPDIR)/debug.Po \ + wswan/$(DEPDIR)/eeprom.Po wswan/$(DEPDIR)/gfx.Po \ + wswan/$(DEPDIR)/interrupt.Po wswan/$(DEPDIR)/main.Po \ + wswan/$(DEPDIR)/memory.Po wswan/$(DEPDIR)/rtc.Po \ + wswan/$(DEPDIR)/sound.Po wswan/$(DEPDIR)/tcache.Po \ + wswan/$(DEPDIR)/v30mz.Po wswan/dis/$(DEPDIR)/dis_decode.Po \ + wswan/dis/$(DEPDIR)/dis_groups.Po \ + wswan/dis/$(DEPDIR)/resolve.Po wswan/dis/$(DEPDIR)/syntax.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -1060,7 +1337,7 @@ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -1081,6 +1358,43 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = drivers drivers_dos drivers_libxxx sexyal ss +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(srcdir)/apple2/Makefile.am.inc \ + $(srcdir)/cdplay/Makefile.am.inc \ + $(srcdir)/cdrom/Makefile.am.inc \ + $(srcdir)/cheat_formats/Makefile.am.inc \ + $(srcdir)/compress/Makefile.am.inc \ + $(srcdir)/cputest/Makefile.am.inc \ + $(srcdir)/demo/Makefile.am.inc \ + $(srcdir)/desa68/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc \ + $(srcdir)/gba/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc \ + $(srcdir)/hw_cpu/Makefile.am.inc \ + $(srcdir)/hw_misc/Makefile.am.inc \ + $(srcdir)/hw_sound/Makefile.am.inc \ + $(srcdir)/hw_video/Makefile.am.inc \ + $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc \ + $(srcdir)/minilzo/Makefile.am.inc \ + $(srcdir)/mpcdec/Makefile.am.inc \ + $(srcdir)/mthreading/Makefile.am.inc \ + $(srcdir)/nes/Makefile.am.inc \ + $(srcdir)/nes/boards/Makefile.am.inc \ + $(srcdir)/nes/input/Makefile.am.inc \ + $(srcdir)/nes/ppu/Makefile.am.inc \ + $(srcdir)/net/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc \ + $(srcdir)/pce/Makefile.am.inc \ + $(srcdir)/pce_fast/Makefile.am.inc \ + $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc \ + $(srcdir)/quicklz/Makefile.am.inc \ + $(srcdir)/resampler/Makefile.am.inc \ + $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc \ + $(srcdir)/snes_faust/Makefile.am.inc \ + $(srcdir)/sound/Makefile.am.inc \ + $(srcdir)/string/Makefile.am.inc \ + $(srcdir)/tremor/Makefile.am.inc \ + $(srcdir)/trio/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc \ + $(srcdir)/video/Makefile.am.inc \ + $(srcdir)/wswan/Makefile.am.inc $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -1280,6 +1594,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1467,16 +1782,15 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; -$(srcdir)/cdplay/Makefile.am.inc $(srcdir)/demo/Makefile.am.inc $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc $(srcdir)/nes/ppu/Makefile.am.inc $(srcdir)/nes/boards/Makefile.am.inc $(srcdir)/nes/input/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc $(srcdir)/pce_fast/Makefile.am.inc $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc $(srcdir)/snes_faust/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc $(srcdir)/desa68/Makefile.am.inc $(srcdir)/hw_cpu/Makefile.am.inc $(srcdir)/hw_misc/Makefile.am.inc $(srcdir)/hw_sound/Makefile.am.inc $(srcdir)/hw_video/Makefile.am.inc $(srcdir)/mthreading/Makefile.am.inc $(srcdir)/cdrom/Makefile.am.inc $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc $(srcdir)/quicklz/Makefile.am.inc $(srcdir)/compress/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc $(srcdir)/string/Makefile.am.inc $(srcdir)/video/Makefile.am.inc $(srcdir)/resampler/Makefile.am.inc $(srcdir)/cputest/Makefile.am.inc $(srcdir)/cheat_formats/Makefile.am.inc $(srcdir)/minilzo/Makefile.am.inc $(srcdir)/tremor/Makefile.am.inc $(srcdir)/mpcdec/Makefile.am.inc $(srcdir)/trio/Makefile.am.inc: +$(srcdir)/cdplay/Makefile.am.inc $(srcdir)/demo/Makefile.am.inc $(srcdir)/apple2/Makefile.am.inc $(srcdir)/gb/Makefile.am.inc $(srcdir)/gba/Makefile.am.inc $(srcdir)/lynx/Makefile.am.inc $(srcdir)/md/Makefile.am.inc $(srcdir)/nes/Makefile.am.inc $(srcdir)/nes/ppu/Makefile.am.inc $(srcdir)/nes/boards/Makefile.am.inc $(srcdir)/nes/input/Makefile.am.inc $(srcdir)/ngp/Makefile.am.inc $(srcdir)/pce/Makefile.am.inc $(srcdir)/pce_fast/Makefile.am.inc $(srcdir)/pcfx/Makefile.am.inc $(srcdir)/psx/Makefile.am.inc $(srcdir)/sms/Makefile.am.inc $(srcdir)/snes/Makefile.am.inc $(srcdir)/snes_faust/Makefile.am.inc $(srcdir)/vb/Makefile.am.inc $(srcdir)/wswan/Makefile.am.inc $(srcdir)/desa68/Makefile.am.inc $(srcdir)/hw_cpu/Makefile.am.inc $(srcdir)/hw_misc/Makefile.am.inc $(srcdir)/hw_sound/Makefile.am.inc $(srcdir)/hw_video/Makefile.am.inc $(srcdir)/mthreading/Makefile.am.inc $(srcdir)/cdrom/Makefile.am.inc $(srcdir)/sound/Makefile.am.inc $(srcdir)/net/Makefile.am.inc $(srcdir)/quicklz/Makefile.am.inc $(srcdir)/compress/Makefile.am.inc $(srcdir)/hash/Makefile.am.inc $(srcdir)/string/Makefile.am.inc $(srcdir)/video/Makefile.am.inc $(srcdir)/resampler/Makefile.am.inc $(srcdir)/cputest/Makefile.am.inc $(srcdir)/cheat_formats/Makefile.am.inc $(srcdir)/minilzo/Makefile.am.inc $(srcdir)/tremor/Makefile.am.inc $(srcdir)/mpcdec/Makefile.am.inc $(srcdir)/trio/Makefile.am.inc $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -1486,6 +1800,48 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -1901,48 +2257,6 @@ $(AM_V_at)-rm -f libvorbisidec.a $(AM_V_AR)$(libvorbisidec_a_AR) libvorbisidec.a $(libvorbisidec_a_OBJECTS) $(libvorbisidec_a_LIBADD) $(AM_V_at)$(RANLIB) libvorbisidec.a -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) drivers/$(am__dirstamp): @$(MKDIR_P) drivers @: > drivers/$(am__dirstamp) @@ -3029,492 +3343,498 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtMemStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IPSPatcher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MTStreamReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemoryStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NativeVFS.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SNSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SPCReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSFLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Time.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VirtualFS.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/endian.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/general.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mednafen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempatcher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtrecord.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settings.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_rewind.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@apple2/$(DEPDIR)/apple2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdplay/$(DEPDIR)/cdplay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_MPC.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_SF.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_CCD.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_Image.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_MT.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_ST.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDUtility.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/crc32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/galois.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/l-ec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/lec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/recover-raw.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/scsicd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/gb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/psx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/snes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/GZFileStream.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZIPReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZLInflateFilter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/cputest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/ppc_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/x86_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@demo/$(DEPDIR)/demo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@desa68/$(DEPDIR)/libdesa68_a-desa68.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gbGlobals.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/z80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBA.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBAinline.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Globals.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/RTC.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/arm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/flash.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/sram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/thumb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/crc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/md5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha256.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/m68k/$(DEPDIR)/m68k.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2413/$(DEPDIR)/emu2413.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@hw_video/huc6270/$(DEPDIR)/vdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/c65c02.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/memmap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/mikie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/ram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/susie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genesis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/header.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/mem68k.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/membnk.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memvdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memz80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/vdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ff.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_realtec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rmx3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sbb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ssf2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_svp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_yase.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cdc_cdd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/pcm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/4way.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/megamouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@minilzo/$(DEPDIR)/minilzo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_POSIX.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_Win32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/dis6502.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds-sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/ines.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsfe.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/unif.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/vsuni.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/x6502.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/107.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/112.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/113.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/114.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/117.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/140.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/15.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/151.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/152.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/156.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/16.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/163.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/18.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/180.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/182.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/184.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/185.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/187.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/189.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/190.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/193.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/208.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/21.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/22.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/222.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/228.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/23.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/232.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/234.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/240.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/241.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/242.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/244.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/246.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/248.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/25.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/30.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/33.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/34.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/38.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/40.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/41.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/42.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/46.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/51.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/65.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/67.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/68.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/70.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/72.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/73.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/75.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/76.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/77.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/78.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/82.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8237.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/86.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/87.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/88.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/89.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/90.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/92.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/93.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/94.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/95.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/96.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/97.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/99.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/codemasters.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/colordreams.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/deirom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/emu2413.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/ffe.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/fme7.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/h2288.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/malee.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/maxicart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc2and4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/n106.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/nina06.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/novel.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/sachen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/simple.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/super24.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/supervision.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/tengen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc6.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc7.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/arkanoid.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/bbattler2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/cursor.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/fkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/ftrainer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/hypershot.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/mahjong.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/oekakids.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/partytap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/powerpad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/shadow.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/suborkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/toprider.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/zapper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ntsc/$(DEPDIR)/nes_ntsc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/palette.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_POSIX.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_WS2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-Z80_interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-biosHLE.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-dma.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-flash.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-mem.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-neopop.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/dis6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/hes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/mcgenjin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pcecd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/tsushin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/vce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/tsushinkb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/hes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc6280.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pce.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd_drive.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/psg.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/vdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/fxscsi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/huc6273.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/idct.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/king.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/pcfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/rainbow.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/soundbox.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cdc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dma.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/frontio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_line.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_polygon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_sprite.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gte.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/irq.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/mdec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/psx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/sio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/spu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualanalog.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualshock.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/guncon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/justifier.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/memcard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/negcon.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@resampler/$(DEPDIR)/resample.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/memz80.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/pio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/render.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/romdb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sms.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/tms.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/vdp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/$(DEPDIR)/libsnes_a-interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes/src/system/$(DEPDIR)/libsnes_a-system.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/apu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/dis65816.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/msu1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mtrender.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_st.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/snes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/cx4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1cpu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sdd1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/superfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Blip_Buffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/DSPUtility.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Fir_Resampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/OwlResampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Stereo_Buffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/SwiftResampler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/WAVRecord.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/okiadpcm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/escape.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/string.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-block.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-framing.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-info.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-registry.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-res012.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-window.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trionan.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-triostr.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vsu.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Blend.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Simple.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-12x13.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-18x18.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/png.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/primitives.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/resize.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/surface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/tblur.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/text.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/comm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/eeprom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/gfx.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/interrupt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/rtc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/tcache.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/v30mz.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_decode.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_groups.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/resolve.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/syntax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtMemStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IPSPatcher.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MTStreamReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemoryStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NativeVFS.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SNSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SPCReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSFLoader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Time.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VirtualFS.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/endian.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/general.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mednafen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempatcher.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/movie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/player.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtrecord.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/settings.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_rewind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32-common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@apple2/$(DEPDIR)/apple2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdplay/$(DEPDIR)/cdplay.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_MPC.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_SF.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_CCD.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDAccess_Image.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_MT.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDInterface_ST.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/CDUtility.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/crc32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/galois.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/l-ec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/lec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/recover-raw.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cdrom/$(DEPDIR)/scsicd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/gb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/psx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cheat_formats/$(DEPDIR)/snes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/GZFileStream.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZIPReader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@compress/$(DEPDIR)/ZLInflateFilter.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/cputest.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/ppc_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cputest/$(DEPDIR)/x86_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@demo/$(DEPDIR)/demo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@desa68/$(DEPDIR)/libdesa68_a-desa68.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gbGlobals.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gb/$(DEPDIR)/z80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBA.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/GBAinline.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Globals.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Mode5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/RTC.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/Sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/arm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/bios.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/flash.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/sram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@gba/$(DEPDIR)/thumb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/crc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/md5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hash/$(DEPDIR)/sha256.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/m68k/$(DEPDIR)/m68k.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2413/$(DEPDIR)/emu2413.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@hw_video/huc6270/$(DEPDIR)/vdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/c65c02.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/memmap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/mikie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/ram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/susie.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@lynx/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genesis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/genio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/header.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/mem68k.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/membnk.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memvdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/memz80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/$(DEPDIR)/vdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ff.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_realtec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rmx3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sbb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_sram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_ssf2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_svp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cart/$(DEPDIR)/map_yase.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/cdc_cdd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/pcm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/cd/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/4way.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/megamouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@md/input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@minilzo/$(DEPDIR)/minilzo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_POSIX.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mthreading/$(DEPDIR)/MThreading_Win32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/dis6502.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds-sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/fds.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/ines.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/nsfe.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/unif.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/vsuni.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/$(DEPDIR)/x6502.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/107.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/112.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/113.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/114.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/117.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/140.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/15.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/151.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/152.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/156.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/16.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/163.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/18.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/180.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/182.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/184.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/185.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/187.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/189.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/190.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/193.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/208.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/21.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/22.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/222.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/228.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/23.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/232.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/234.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/240.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/241.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/242.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/244.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/246.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/248.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/25.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/30.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/33.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/34.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/38.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/40.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/41.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/42.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/46.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/51.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/65.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/67.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/68.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/70.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/72.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/73.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/75.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/76.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/77.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/78.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/82.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/8237.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/86.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/87.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/88.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/89.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/90.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/92.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/93.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/94.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/95.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/96.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/97.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/99.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/codemasters.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/colordreams.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/deirom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/emu2413.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/ffe.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/fme7.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/h2288.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/malee.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/maxicart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc2and4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/mmc5.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/n106.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/nina06.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/novel.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/sachen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/simple.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/super24.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/supervision.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/tengen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc6.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/boards/$(DEPDIR)/vrc7.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/arkanoid.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/bbattler2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/cursor.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/fkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/ftrainer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/hypershot.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/mahjong.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/oekakids.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/partytap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/powerpad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/shadow.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/suborkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/toprider.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/input/$(DEPDIR)/zapper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ntsc/$(DEPDIR)/nes_ntsc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/palette.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@nes/ppu/$(DEPDIR)/ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_POSIX.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/Net_WS2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-Z80_interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-bios.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-biosHLE.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-dma.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-flash.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-mem.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-neopop.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-rtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/$(DEPDIR)/libngp_a-sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/dis6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/hes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/huc6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/mcgenjin.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/pcecd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/tsushin.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/$(DEPDIR)/vce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce/input/$(DEPDIR)/tsushinkb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/hes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/huc6280.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pce.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/pcecd_drive.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/psg.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pce_fast/$(DEPDIR)/vdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/fxscsi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/huc6273.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/idct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/king.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/pcfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/rainbow.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/soundbox.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@pcfx/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cdc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/dma.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/frontio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_line.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_polygon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gpu_sprite.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/gte.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/irq.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/mdec.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/psx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/sio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/spu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualanalog.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/dualshock.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/guncon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/justifier.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/memcard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@psx/input/$(DEPDIR)/negcon.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@resampler/$(DEPDIR)/resample.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/memz80.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/pio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/render.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/romdb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sms.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/tms.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sms/$(DEPDIR)/vdp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/$(DEPDIR)/libsnes_a-interface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes/src/system/$(DEPDIR)/libsnes_a-system.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/apu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/dis65816.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/msu1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_mtrender.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/ppu_st.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/$(DEPDIR)/snes.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/cx4.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/dsp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sa1cpu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/sdd1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@snes_faust/cart/$(DEPDIR)/superfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Blip_Buffer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/DSPUtility.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Fir_Resampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/OwlResampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/Stereo_Buffer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/SwiftResampler.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/WAVRecord.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@sound/$(DEPDIR)/okiadpcm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/escape.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@string/$(DEPDIR)/string.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-block.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-framing.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-registry.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-res012.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tremor/$(DEPDIR)/libvorbisidec_a-window.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-trionan.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@trio/$(DEPDIR)/libtrio_a-triostr.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/input.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/timer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vip.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@vb/$(DEPDIR)/vsu.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Blend.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/Deinterlacer_Simple.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-12x13.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data-18x18.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/font-data.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/png.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/primitives.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/resize.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/surface.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/tblur.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/text.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/comm.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/eeprom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/gfx.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/interrupt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/rtc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/tcache.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/$(DEPDIR)/v30mz.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_decode.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/dis_groups.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/resolve.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@wswan/dis/$(DEPDIR)/syntax.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -4711,7 +5031,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -4768,7 +5091,7 @@ done check-am: all-am check: check-recursive -all-am: Makefile $(LIBRARIES) $(PROGRAMS) +all-am: Makefile $(PROGRAMS) $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ @@ -4978,7 +5301,492 @@ mostlyclean-am distclean: distclean-recursive - -rm -rf ./$(DEPDIR) apple2/$(DEPDIR) cdplay/$(DEPDIR) cdrom/$(DEPDIR) cheat_formats/$(DEPDIR) compress/$(DEPDIR) cputest/$(DEPDIR) demo/$(DEPDIR) desa68/$(DEPDIR) gb/$(DEPDIR) gba/$(DEPDIR) hash/$(DEPDIR) hw_cpu/m68k/$(DEPDIR) hw_cpu/v810/$(DEPDIR) hw_cpu/z80-fuse/$(DEPDIR) hw_misc/arcade_card/$(DEPDIR) hw_sound/gb_apu/$(DEPDIR) hw_sound/pce_psg/$(DEPDIR) hw_sound/sms_apu/$(DEPDIR) hw_sound/ym2413/$(DEPDIR) hw_sound/ym2612/$(DEPDIR) hw_video/huc6270/$(DEPDIR) lynx/$(DEPDIR) md/$(DEPDIR) md/cart/$(DEPDIR) md/cd/$(DEPDIR) md/input/$(DEPDIR) minilzo/$(DEPDIR) mpcdec/$(DEPDIR) mthreading/$(DEPDIR) nes/$(DEPDIR) nes/boards/$(DEPDIR) nes/input/$(DEPDIR) nes/ntsc/$(DEPDIR) nes/ppu/$(DEPDIR) net/$(DEPDIR) ngp/$(DEPDIR) ngp/TLCS-900h/$(DEPDIR) pce/$(DEPDIR) pce/input/$(DEPDIR) pce_fast/$(DEPDIR) pcfx/$(DEPDIR) pcfx/input/$(DEPDIR) psx/$(DEPDIR) psx/input/$(DEPDIR) quicklz/$(DEPDIR) resampler/$(DEPDIR) sms/$(DEPDIR) snes/$(DEPDIR) snes/src/cartridge/$(DEPDIR) snes/src/cheat/$(DEPDIR) snes/src/chip/bsx/$(DEPDIR) snes/src/chip/cx4/$(DEPDIR) snes/src/chip/dsp1/$(DEPDIR) snes/src/chip/dsp2/$(DEPDIR) snes/src/chip/dsp3/$(DEPDIR) snes/src/chip/dsp4/$(DEPDIR) snes/src/chip/obc1/$(DEPDIR) snes/src/chip/sa1/$(DEPDIR) snes/src/chip/sdd1/$(DEPDIR) snes/src/chip/spc7110/$(DEPDIR) snes/src/chip/srtc/$(DEPDIR) snes/src/chip/st010/$(DEPDIR) snes/src/chip/superfx/$(DEPDIR) snes/src/cpu/$(DEPDIR) snes/src/cpu/core/$(DEPDIR) snes/src/cpu/scpu/$(DEPDIR) snes/src/lib/libco/$(DEPDIR) snes/src/memory/$(DEPDIR) snes/src/memory/smemory/$(DEPDIR) snes/src/ppu/$(DEPDIR) snes/src/sdsp/$(DEPDIR) snes/src/smp/$(DEPDIR) snes/src/system/$(DEPDIR) snes_faust/$(DEPDIR) snes_faust/cart/$(DEPDIR) sound/$(DEPDIR) string/$(DEPDIR) tremor/$(DEPDIR) trio/$(DEPDIR) vb/$(DEPDIR) video/$(DEPDIR) wswan/$(DEPDIR) wswan/dis/$(DEPDIR) + -rm -f ./$(DEPDIR)/ExtMemStream.Po + -rm -f ./$(DEPDIR)/FileStream.Po + -rm -f ./$(DEPDIR)/IPSPatcher.Po + -rm -f ./$(DEPDIR)/MTStreamReader.Po + -rm -f ./$(DEPDIR)/MemoryStream.Po + -rm -f ./$(DEPDIR)/NativeVFS.Po + -rm -f ./$(DEPDIR)/PSFLoader.Po + -rm -f ./$(DEPDIR)/SNSFLoader.Po + -rm -f ./$(DEPDIR)/SPCReader.Po + -rm -f ./$(DEPDIR)/SSFLoader.Po + -rm -f ./$(DEPDIR)/Stream.Po + -rm -f ./$(DEPDIR)/Time.Po + -rm -f ./$(DEPDIR)/VirtualFS.Po + -rm -f ./$(DEPDIR)/debug.Po + -rm -f ./$(DEPDIR)/endian.Po + -rm -f ./$(DEPDIR)/error.Po + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/general.Po + -rm -f ./$(DEPDIR)/git.Po + -rm -f ./$(DEPDIR)/mednafen.Po + -rm -f ./$(DEPDIR)/memory.Po + -rm -f ./$(DEPDIR)/mempatcher.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/player.Po + -rm -f ./$(DEPDIR)/qtrecord.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/state.Po + -rm -f ./$(DEPDIR)/state_rewind.Po + -rm -f ./$(DEPDIR)/tests.Po + -rm -f ./$(DEPDIR)/win32-common.Po + -rm -f apple2/$(DEPDIR)/apple2.Po + -rm -f cdplay/$(DEPDIR)/cdplay.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_MPC.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_SF.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po + -rm -f cdrom/$(DEPDIR)/CDAccess.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_CCD.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_Image.Po + -rm -f cdrom/$(DEPDIR)/CDInterface.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_MT.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_ST.Po + -rm -f cdrom/$(DEPDIR)/CDUtility.Po + -rm -f cdrom/$(DEPDIR)/crc32.Po + -rm -f cdrom/$(DEPDIR)/galois.Po + -rm -f cdrom/$(DEPDIR)/l-ec.Po + -rm -f cdrom/$(DEPDIR)/lec.Po + -rm -f cdrom/$(DEPDIR)/recover-raw.Po + -rm -f cdrom/$(DEPDIR)/scsicd.Po + -rm -f cheat_formats/$(DEPDIR)/gb.Po + -rm -f cheat_formats/$(DEPDIR)/psx.Po + -rm -f cheat_formats/$(DEPDIR)/snes.Po + -rm -f compress/$(DEPDIR)/GZFileStream.Po + -rm -f compress/$(DEPDIR)/ZIPReader.Po + -rm -f compress/$(DEPDIR)/ZLInflateFilter.Po + -rm -f cputest/$(DEPDIR)/cputest.Po + -rm -f cputest/$(DEPDIR)/ppc_cpu.Po + -rm -f cputest/$(DEPDIR)/x86_cpu.Po + -rm -f demo/$(DEPDIR)/demo.Po + -rm -f desa68/$(DEPDIR)/libdesa68_a-desa68.Po + -rm -f gb/$(DEPDIR)/gb.Po + -rm -f gb/$(DEPDIR)/gbGlobals.Po + -rm -f gb/$(DEPDIR)/gfx.Po + -rm -f gb/$(DEPDIR)/memory.Po + -rm -f gb/$(DEPDIR)/sound.Po + -rm -f gb/$(DEPDIR)/z80.Po + -rm -f gba/$(DEPDIR)/GBA.Po + -rm -f gba/$(DEPDIR)/GBAinline.Po + -rm -f gba/$(DEPDIR)/Gfx.Po + -rm -f gba/$(DEPDIR)/Globals.Po + -rm -f gba/$(DEPDIR)/Mode0.Po + -rm -f gba/$(DEPDIR)/Mode1.Po + -rm -f gba/$(DEPDIR)/Mode2.Po + -rm -f gba/$(DEPDIR)/Mode3.Po + -rm -f gba/$(DEPDIR)/Mode4.Po + -rm -f gba/$(DEPDIR)/Mode5.Po + -rm -f gba/$(DEPDIR)/RTC.Po + -rm -f gba/$(DEPDIR)/Sound.Po + -rm -f gba/$(DEPDIR)/arm.Po + -rm -f gba/$(DEPDIR)/bios.Po + -rm -f gba/$(DEPDIR)/eeprom.Po + -rm -f gba/$(DEPDIR)/flash.Po + -rm -f gba/$(DEPDIR)/sram.Po + -rm -f gba/$(DEPDIR)/thumb.Po + -rm -f hash/$(DEPDIR)/crc.Po + -rm -f hash/$(DEPDIR)/md5.Po + -rm -f hash/$(DEPDIR)/sha1.Po + -rm -f hash/$(DEPDIR)/sha256.Po + -rm -f hw_cpu/m68k/$(DEPDIR)/m68k.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpu.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po + -rm -f hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po + -rm -f hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po + -rm -f hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po + -rm -f hw_sound/ym2413/$(DEPDIR)/emu2413.Po + -rm -f hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po + -rm -f hw_video/huc6270/$(DEPDIR)/vdc.Po + -rm -f lynx/$(DEPDIR)/c65c02.Po + -rm -f lynx/$(DEPDIR)/cart.Po + -rm -f lynx/$(DEPDIR)/memmap.Po + -rm -f lynx/$(DEPDIR)/mikie.Po + -rm -f lynx/$(DEPDIR)/ram.Po + -rm -f lynx/$(DEPDIR)/rom.Po + -rm -f lynx/$(DEPDIR)/susie.Po + -rm -f lynx/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/debug.Po + -rm -f md/$(DEPDIR)/genesis.Po + -rm -f md/$(DEPDIR)/genio.Po + -rm -f md/$(DEPDIR)/header.Po + -rm -f md/$(DEPDIR)/mem68k.Po + -rm -f md/$(DEPDIR)/membnk.Po + -rm -f md/$(DEPDIR)/memvdp.Po + -rm -f md/$(DEPDIR)/memz80.Po + -rm -f md/$(DEPDIR)/sound.Po + -rm -f md/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/vdp.Po + -rm -f md/cart/$(DEPDIR)/cart.Po + -rm -f md/cart/$(DEPDIR)/map_eeprom.Po + -rm -f md/cart/$(DEPDIR)/map_ff.Po + -rm -f md/cart/$(DEPDIR)/map_realtec.Po + -rm -f md/cart/$(DEPDIR)/map_rmx3.Po + -rm -f md/cart/$(DEPDIR)/map_rom.Po + -rm -f md/cart/$(DEPDIR)/map_sbb.Po + -rm -f md/cart/$(DEPDIR)/map_sram.Po + -rm -f md/cart/$(DEPDIR)/map_ssf2.Po + -rm -f md/cart/$(DEPDIR)/map_svp.Po + -rm -f md/cart/$(DEPDIR)/map_yase.Po + -rm -f md/cd/$(DEPDIR)/cd.Po + -rm -f md/cd/$(DEPDIR)/cdc_cdd.Po + -rm -f md/cd/$(DEPDIR)/interrupt.Po + -rm -f md/cd/$(DEPDIR)/pcm.Po + -rm -f md/cd/$(DEPDIR)/timer.Po + -rm -f md/input/$(DEPDIR)/4way.Po + -rm -f md/input/$(DEPDIR)/gamepad.Po + -rm -f md/input/$(DEPDIR)/megamouse.Po + -rm -f md/input/$(DEPDIR)/multitap.Po + -rm -f minilzo/$(DEPDIR)/minilzo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po + -rm -f mthreading/$(DEPDIR)/MThreading_POSIX.Po + -rm -f mthreading/$(DEPDIR)/MThreading_Win32.Po + -rm -f nes/$(DEPDIR)/cart.Po + -rm -f nes/$(DEPDIR)/debug.Po + -rm -f nes/$(DEPDIR)/dis6502.Po + -rm -f nes/$(DEPDIR)/fds-sound.Po + -rm -f nes/$(DEPDIR)/fds.Po + -rm -f nes/$(DEPDIR)/ines.Po + -rm -f nes/$(DEPDIR)/input.Po + -rm -f nes/$(DEPDIR)/nes.Po + -rm -f nes/$(DEPDIR)/nsf.Po + -rm -f nes/$(DEPDIR)/nsfe.Po + -rm -f nes/$(DEPDIR)/sound.Po + -rm -f nes/$(DEPDIR)/unif.Po + -rm -f nes/$(DEPDIR)/vsuni.Po + -rm -f nes/$(DEPDIR)/x6502.Po + -rm -f nes/boards/$(DEPDIR)/107.Po + -rm -f nes/boards/$(DEPDIR)/112.Po + -rm -f nes/boards/$(DEPDIR)/113.Po + -rm -f nes/boards/$(DEPDIR)/114.Po + -rm -f nes/boards/$(DEPDIR)/117.Po + -rm -f nes/boards/$(DEPDIR)/140.Po + -rm -f nes/boards/$(DEPDIR)/15.Po + -rm -f nes/boards/$(DEPDIR)/151.Po + -rm -f nes/boards/$(DEPDIR)/152.Po + -rm -f nes/boards/$(DEPDIR)/156.Po + -rm -f nes/boards/$(DEPDIR)/16.Po + -rm -f nes/boards/$(DEPDIR)/163.Po + -rm -f nes/boards/$(DEPDIR)/18.Po + -rm -f nes/boards/$(DEPDIR)/180.Po + -rm -f nes/boards/$(DEPDIR)/182.Po + -rm -f nes/boards/$(DEPDIR)/184.Po + -rm -f nes/boards/$(DEPDIR)/185.Po + -rm -f nes/boards/$(DEPDIR)/187.Po + -rm -f nes/boards/$(DEPDIR)/189.Po + -rm -f nes/boards/$(DEPDIR)/190.Po + -rm -f nes/boards/$(DEPDIR)/193.Po + -rm -f nes/boards/$(DEPDIR)/208.Po + -rm -f nes/boards/$(DEPDIR)/21.Po + -rm -f nes/boards/$(DEPDIR)/22.Po + -rm -f nes/boards/$(DEPDIR)/222.Po + -rm -f nes/boards/$(DEPDIR)/228.Po + -rm -f nes/boards/$(DEPDIR)/23.Po + -rm -f nes/boards/$(DEPDIR)/232.Po + -rm -f nes/boards/$(DEPDIR)/234.Po + -rm -f nes/boards/$(DEPDIR)/240.Po + -rm -f nes/boards/$(DEPDIR)/241.Po + -rm -f nes/boards/$(DEPDIR)/242.Po + -rm -f nes/boards/$(DEPDIR)/244.Po + -rm -f nes/boards/$(DEPDIR)/246.Po + -rm -f nes/boards/$(DEPDIR)/248.Po + -rm -f nes/boards/$(DEPDIR)/25.Po + -rm -f nes/boards/$(DEPDIR)/30.Po + -rm -f nes/boards/$(DEPDIR)/32.Po + -rm -f nes/boards/$(DEPDIR)/33.Po + -rm -f nes/boards/$(DEPDIR)/34.Po + -rm -f nes/boards/$(DEPDIR)/38.Po + -rm -f nes/boards/$(DEPDIR)/40.Po + -rm -f nes/boards/$(DEPDIR)/41.Po + -rm -f nes/boards/$(DEPDIR)/42.Po + -rm -f nes/boards/$(DEPDIR)/46.Po + -rm -f nes/boards/$(DEPDIR)/51.Po + -rm -f nes/boards/$(DEPDIR)/65.Po + -rm -f nes/boards/$(DEPDIR)/67.Po + -rm -f nes/boards/$(DEPDIR)/68.Po + -rm -f nes/boards/$(DEPDIR)/70.Po + -rm -f nes/boards/$(DEPDIR)/72.Po + -rm -f nes/boards/$(DEPDIR)/73.Po + -rm -f nes/boards/$(DEPDIR)/75.Po + -rm -f nes/boards/$(DEPDIR)/76.Po + -rm -f nes/boards/$(DEPDIR)/77.Po + -rm -f nes/boards/$(DEPDIR)/78.Po + -rm -f nes/boards/$(DEPDIR)/8.Po + -rm -f nes/boards/$(DEPDIR)/80.Po + -rm -f nes/boards/$(DEPDIR)/82.Po + -rm -f nes/boards/$(DEPDIR)/8237.Po + -rm -f nes/boards/$(DEPDIR)/86.Po + -rm -f nes/boards/$(DEPDIR)/87.Po + -rm -f nes/boards/$(DEPDIR)/88.Po + -rm -f nes/boards/$(DEPDIR)/89.Po + -rm -f nes/boards/$(DEPDIR)/90.Po + -rm -f nes/boards/$(DEPDIR)/92.Po + -rm -f nes/boards/$(DEPDIR)/93.Po + -rm -f nes/boards/$(DEPDIR)/94.Po + -rm -f nes/boards/$(DEPDIR)/95.Po + -rm -f nes/boards/$(DEPDIR)/96.Po + -rm -f nes/boards/$(DEPDIR)/97.Po + -rm -f nes/boards/$(DEPDIR)/99.Po + -rm -f nes/boards/$(DEPDIR)/codemasters.Po + -rm -f nes/boards/$(DEPDIR)/colordreams.Po + -rm -f nes/boards/$(DEPDIR)/deirom.Po + -rm -f nes/boards/$(DEPDIR)/emu2413.Po + -rm -f nes/boards/$(DEPDIR)/ffe.Po + -rm -f nes/boards/$(DEPDIR)/fme7.Po + -rm -f nes/boards/$(DEPDIR)/h2288.Po + -rm -f nes/boards/$(DEPDIR)/malee.Po + -rm -f nes/boards/$(DEPDIR)/maxicart.Po + -rm -f nes/boards/$(DEPDIR)/mmc1.Po + -rm -f nes/boards/$(DEPDIR)/mmc2and4.Po + -rm -f nes/boards/$(DEPDIR)/mmc3.Po + -rm -f nes/boards/$(DEPDIR)/mmc5.Po + -rm -f nes/boards/$(DEPDIR)/n106.Po + -rm -f nes/boards/$(DEPDIR)/nina06.Po + -rm -f nes/boards/$(DEPDIR)/novel.Po + -rm -f nes/boards/$(DEPDIR)/sachen.Po + -rm -f nes/boards/$(DEPDIR)/simple.Po + -rm -f nes/boards/$(DEPDIR)/super24.Po + -rm -f nes/boards/$(DEPDIR)/supervision.Po + -rm -f nes/boards/$(DEPDIR)/tengen.Po + -rm -f nes/boards/$(DEPDIR)/vrc6.Po + -rm -f nes/boards/$(DEPDIR)/vrc7.Po + -rm -f nes/input/$(DEPDIR)/arkanoid.Po + -rm -f nes/input/$(DEPDIR)/bbattler2.Po + -rm -f nes/input/$(DEPDIR)/cursor.Po + -rm -f nes/input/$(DEPDIR)/fkb.Po + -rm -f nes/input/$(DEPDIR)/ftrainer.Po + -rm -f nes/input/$(DEPDIR)/hypershot.Po + -rm -f nes/input/$(DEPDIR)/mahjong.Po + -rm -f nes/input/$(DEPDIR)/oekakids.Po + -rm -f nes/input/$(DEPDIR)/partytap.Po + -rm -f nes/input/$(DEPDIR)/powerpad.Po + -rm -f nes/input/$(DEPDIR)/shadow.Po + -rm -f nes/input/$(DEPDIR)/suborkb.Po + -rm -f nes/input/$(DEPDIR)/toprider.Po + -rm -f nes/input/$(DEPDIR)/zapper.Po + -rm -f nes/ntsc/$(DEPDIR)/nes_ntsc.Po + -rm -f nes/ppu/$(DEPDIR)/palette.Po + -rm -f nes/ppu/$(DEPDIR)/ppu.Po + -rm -f net/$(DEPDIR)/Net.Po + -rm -f net/$(DEPDIR)/Net_POSIX.Po + -rm -f net/$(DEPDIR)/Net_WS2.Po + -rm -f ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po + -rm -f ngp/$(DEPDIR)/libngp_a-Z80_interface.Po + -rm -f ngp/$(DEPDIR)/libngp_a-bios.Po + -rm -f ngp/$(DEPDIR)/libngp_a-biosHLE.Po + -rm -f ngp/$(DEPDIR)/libngp_a-dma.Po + -rm -f ngp/$(DEPDIR)/libngp_a-flash.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po + -rm -f ngp/$(DEPDIR)/libngp_a-interrupt.Po + -rm -f ngp/$(DEPDIR)/libngp_a-mem.Po + -rm -f ngp/$(DEPDIR)/libngp_a-neopop.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rom.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rtc.Po + -rm -f ngp/$(DEPDIR)/libngp_a-sound.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po + -rm -f pce/$(DEPDIR)/debug.Po + -rm -f pce/$(DEPDIR)/dis6280.Po + -rm -f pce/$(DEPDIR)/hes.Po + -rm -f pce/$(DEPDIR)/huc.Po + -rm -f pce/$(DEPDIR)/huc6280.Po + -rm -f pce/$(DEPDIR)/input.Po + -rm -f pce/$(DEPDIR)/mcgenjin.Po + -rm -f pce/$(DEPDIR)/pce.Po + -rm -f pce/$(DEPDIR)/pcecd.Po + -rm -f pce/$(DEPDIR)/tsushin.Po + -rm -f pce/$(DEPDIR)/vce.Po + -rm -f pce/input/$(DEPDIR)/gamepad.Po + -rm -f pce/input/$(DEPDIR)/mouse.Po + -rm -f pce/input/$(DEPDIR)/tsushinkb.Po + -rm -f pce_fast/$(DEPDIR)/hes.Po + -rm -f pce_fast/$(DEPDIR)/huc.Po + -rm -f pce_fast/$(DEPDIR)/huc6280.Po + -rm -f pce_fast/$(DEPDIR)/input.Po + -rm -f pce_fast/$(DEPDIR)/pce.Po + -rm -f pce_fast/$(DEPDIR)/pcecd.Po + -rm -f pce_fast/$(DEPDIR)/pcecd_drive.Po + -rm -f pce_fast/$(DEPDIR)/psg.Po + -rm -f pce_fast/$(DEPDIR)/vdc.Po + -rm -f pcfx/$(DEPDIR)/debug.Po + -rm -f pcfx/$(DEPDIR)/fxscsi.Po + -rm -f pcfx/$(DEPDIR)/huc6273.Po + -rm -f pcfx/$(DEPDIR)/idct.Po + -rm -f pcfx/$(DEPDIR)/input.Po + -rm -f pcfx/$(DEPDIR)/interrupt.Po + -rm -f pcfx/$(DEPDIR)/king.Po + -rm -f pcfx/$(DEPDIR)/pcfx.Po + -rm -f pcfx/$(DEPDIR)/rainbow.Po + -rm -f pcfx/$(DEPDIR)/soundbox.Po + -rm -f pcfx/$(DEPDIR)/timer.Po + -rm -f pcfx/input/$(DEPDIR)/gamepad.Po + -rm -f pcfx/input/$(DEPDIR)/mouse.Po + -rm -f psx/$(DEPDIR)/cdc.Po + -rm -f psx/$(DEPDIR)/cpu.Po + -rm -f psx/$(DEPDIR)/debug.Po + -rm -f psx/$(DEPDIR)/dis.Po + -rm -f psx/$(DEPDIR)/dma.Po + -rm -f psx/$(DEPDIR)/frontio.Po + -rm -f psx/$(DEPDIR)/gpu.Po + -rm -f psx/$(DEPDIR)/gpu_line.Po + -rm -f psx/$(DEPDIR)/gpu_polygon.Po + -rm -f psx/$(DEPDIR)/gpu_sprite.Po + -rm -f psx/$(DEPDIR)/gte.Po + -rm -f psx/$(DEPDIR)/irq.Po + -rm -f psx/$(DEPDIR)/mdec.Po + -rm -f psx/$(DEPDIR)/psx.Po + -rm -f psx/$(DEPDIR)/sio.Po + -rm -f psx/$(DEPDIR)/spu.Po + -rm -f psx/$(DEPDIR)/timer.Po + -rm -f psx/input/$(DEPDIR)/dualanalog.Po + -rm -f psx/input/$(DEPDIR)/dualshock.Po + -rm -f psx/input/$(DEPDIR)/gamepad.Po + -rm -f psx/input/$(DEPDIR)/guncon.Po + -rm -f psx/input/$(DEPDIR)/justifier.Po + -rm -f psx/input/$(DEPDIR)/memcard.Po + -rm -f psx/input/$(DEPDIR)/mouse.Po + -rm -f psx/input/$(DEPDIR)/multitap.Po + -rm -f psx/input/$(DEPDIR)/negcon.Po + -rm -f quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po + -rm -f resampler/$(DEPDIR)/resample.Po + -rm -f sms/$(DEPDIR)/cart.Po + -rm -f sms/$(DEPDIR)/memz80.Po + -rm -f sms/$(DEPDIR)/pio.Po + -rm -f sms/$(DEPDIR)/render.Po + -rm -f sms/$(DEPDIR)/romdb.Po + -rm -f sms/$(DEPDIR)/sms.Po + -rm -f sms/$(DEPDIR)/sound.Po + -rm -f sms/$(DEPDIR)/system.Po + -rm -f sms/$(DEPDIR)/tms.Po + -rm -f sms/$(DEPDIR)/vdp.Po + -rm -f snes/$(DEPDIR)/libsnes_a-interface.Po + -rm -f snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po + -rm -f snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po + -rm -f snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po + -rm -f snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po + -rm -f snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po + -rm -f snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po + -rm -f snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po + -rm -f snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po + -rm -f snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po + -rm -f snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po + -rm -f snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po + -rm -f snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po + -rm -f snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po + -rm -f snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po + -rm -f snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po + -rm -f snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po + -rm -f snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po + -rm -f snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po + -rm -f snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po + -rm -f snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po + -rm -f snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po + -rm -f snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po + -rm -f snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po + -rm -f snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po + -rm -f snes/src/system/$(DEPDIR)/libsnes_a-system.Po + -rm -f snes_faust/$(DEPDIR)/apu.Po + -rm -f snes_faust/$(DEPDIR)/cart.Po + -rm -f snes_faust/$(DEPDIR)/cpu.Po + -rm -f snes_faust/$(DEPDIR)/debug.Po + -rm -f snes_faust/$(DEPDIR)/dis65816.Po + -rm -f snes_faust/$(DEPDIR)/input.Po + -rm -f snes_faust/$(DEPDIR)/msu1.Po + -rm -f snes_faust/$(DEPDIR)/ppu.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mt.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mtrender.Po + -rm -f snes_faust/$(DEPDIR)/ppu_st.Po + -rm -f snes_faust/$(DEPDIR)/snes.Po + -rm -f snes_faust/cart/$(DEPDIR)/cx4.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp1.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp2.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1cpu.Po + -rm -f snes_faust/cart/$(DEPDIR)/sdd1.Po + -rm -f snes_faust/cart/$(DEPDIR)/superfx.Po + -rm -f sound/$(DEPDIR)/Blip_Buffer.Po + -rm -f sound/$(DEPDIR)/DSPUtility.Po + -rm -f sound/$(DEPDIR)/Fir_Resampler.Po + -rm -f sound/$(DEPDIR)/OwlResampler.Po + -rm -f sound/$(DEPDIR)/Stereo_Buffer.Po + -rm -f sound/$(DEPDIR)/SwiftResampler.Po + -rm -f sound/$(DEPDIR)/WAVRecord.Po + -rm -f sound/$(DEPDIR)/okiadpcm.Po + -rm -f string/$(DEPDIR)/escape.Po + -rm -f string/$(DEPDIR)/string.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-block.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-framing.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-info.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-registry.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-res012.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-window.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trio.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trionan.Po + -rm -f trio/$(DEPDIR)/libtrio_a-triostr.Po + -rm -f vb/$(DEPDIR)/debug.Po + -rm -f vb/$(DEPDIR)/input.Po + -rm -f vb/$(DEPDIR)/timer.Po + -rm -f vb/$(DEPDIR)/vb.Po + -rm -f vb/$(DEPDIR)/vip.Po + -rm -f vb/$(DEPDIR)/vsu.Po + -rm -f video/$(DEPDIR)/Deinterlacer.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Blend.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Simple.Po + -rm -f video/$(DEPDIR)/font-data-12x13.Po + -rm -f video/$(DEPDIR)/font-data-18x18.Po + -rm -f video/$(DEPDIR)/font-data.Po + -rm -f video/$(DEPDIR)/png.Po + -rm -f video/$(DEPDIR)/primitives.Po + -rm -f video/$(DEPDIR)/resize.Po + -rm -f video/$(DEPDIR)/surface.Po + -rm -f video/$(DEPDIR)/tblur.Po + -rm -f video/$(DEPDIR)/text.Po + -rm -f video/$(DEPDIR)/video.Po + -rm -f wswan/$(DEPDIR)/comm.Po + -rm -f wswan/$(DEPDIR)/debug.Po + -rm -f wswan/$(DEPDIR)/eeprom.Po + -rm -f wswan/$(DEPDIR)/gfx.Po + -rm -f wswan/$(DEPDIR)/interrupt.Po + -rm -f wswan/$(DEPDIR)/main.Po + -rm -f wswan/$(DEPDIR)/memory.Po + -rm -f wswan/$(DEPDIR)/rtc.Po + -rm -f wswan/$(DEPDIR)/sound.Po + -rm -f wswan/$(DEPDIR)/tcache.Po + -rm -f wswan/$(DEPDIR)/v30mz.Po + -rm -f wswan/dis/$(DEPDIR)/dis_decode.Po + -rm -f wswan/dis/$(DEPDIR)/dis_groups.Po + -rm -f wswan/dis/$(DEPDIR)/resolve.Po + -rm -f wswan/dis/$(DEPDIR)/syntax.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -5024,7 +5832,492 @@ installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) apple2/$(DEPDIR) cdplay/$(DEPDIR) cdrom/$(DEPDIR) cheat_formats/$(DEPDIR) compress/$(DEPDIR) cputest/$(DEPDIR) demo/$(DEPDIR) desa68/$(DEPDIR) gb/$(DEPDIR) gba/$(DEPDIR) hash/$(DEPDIR) hw_cpu/m68k/$(DEPDIR) hw_cpu/v810/$(DEPDIR) hw_cpu/z80-fuse/$(DEPDIR) hw_misc/arcade_card/$(DEPDIR) hw_sound/gb_apu/$(DEPDIR) hw_sound/pce_psg/$(DEPDIR) hw_sound/sms_apu/$(DEPDIR) hw_sound/ym2413/$(DEPDIR) hw_sound/ym2612/$(DEPDIR) hw_video/huc6270/$(DEPDIR) lynx/$(DEPDIR) md/$(DEPDIR) md/cart/$(DEPDIR) md/cd/$(DEPDIR) md/input/$(DEPDIR) minilzo/$(DEPDIR) mpcdec/$(DEPDIR) mthreading/$(DEPDIR) nes/$(DEPDIR) nes/boards/$(DEPDIR) nes/input/$(DEPDIR) nes/ntsc/$(DEPDIR) nes/ppu/$(DEPDIR) net/$(DEPDIR) ngp/$(DEPDIR) ngp/TLCS-900h/$(DEPDIR) pce/$(DEPDIR) pce/input/$(DEPDIR) pce_fast/$(DEPDIR) pcfx/$(DEPDIR) pcfx/input/$(DEPDIR) psx/$(DEPDIR) psx/input/$(DEPDIR) quicklz/$(DEPDIR) resampler/$(DEPDIR) sms/$(DEPDIR) snes/$(DEPDIR) snes/src/cartridge/$(DEPDIR) snes/src/cheat/$(DEPDIR) snes/src/chip/bsx/$(DEPDIR) snes/src/chip/cx4/$(DEPDIR) snes/src/chip/dsp1/$(DEPDIR) snes/src/chip/dsp2/$(DEPDIR) snes/src/chip/dsp3/$(DEPDIR) snes/src/chip/dsp4/$(DEPDIR) snes/src/chip/obc1/$(DEPDIR) snes/src/chip/sa1/$(DEPDIR) snes/src/chip/sdd1/$(DEPDIR) snes/src/chip/spc7110/$(DEPDIR) snes/src/chip/srtc/$(DEPDIR) snes/src/chip/st010/$(DEPDIR) snes/src/chip/superfx/$(DEPDIR) snes/src/cpu/$(DEPDIR) snes/src/cpu/core/$(DEPDIR) snes/src/cpu/scpu/$(DEPDIR) snes/src/lib/libco/$(DEPDIR) snes/src/memory/$(DEPDIR) snes/src/memory/smemory/$(DEPDIR) snes/src/ppu/$(DEPDIR) snes/src/sdsp/$(DEPDIR) snes/src/smp/$(DEPDIR) snes/src/system/$(DEPDIR) snes_faust/$(DEPDIR) snes_faust/cart/$(DEPDIR) sound/$(DEPDIR) string/$(DEPDIR) tremor/$(DEPDIR) trio/$(DEPDIR) vb/$(DEPDIR) video/$(DEPDIR) wswan/$(DEPDIR) wswan/dis/$(DEPDIR) + -rm -f ./$(DEPDIR)/ExtMemStream.Po + -rm -f ./$(DEPDIR)/FileStream.Po + -rm -f ./$(DEPDIR)/IPSPatcher.Po + -rm -f ./$(DEPDIR)/MTStreamReader.Po + -rm -f ./$(DEPDIR)/MemoryStream.Po + -rm -f ./$(DEPDIR)/NativeVFS.Po + -rm -f ./$(DEPDIR)/PSFLoader.Po + -rm -f ./$(DEPDIR)/SNSFLoader.Po + -rm -f ./$(DEPDIR)/SPCReader.Po + -rm -f ./$(DEPDIR)/SSFLoader.Po + -rm -f ./$(DEPDIR)/Stream.Po + -rm -f ./$(DEPDIR)/Time.Po + -rm -f ./$(DEPDIR)/VirtualFS.Po + -rm -f ./$(DEPDIR)/debug.Po + -rm -f ./$(DEPDIR)/endian.Po + -rm -f ./$(DEPDIR)/error.Po + -rm -f ./$(DEPDIR)/file.Po + -rm -f ./$(DEPDIR)/general.Po + -rm -f ./$(DEPDIR)/git.Po + -rm -f ./$(DEPDIR)/mednafen.Po + -rm -f ./$(DEPDIR)/memory.Po + -rm -f ./$(DEPDIR)/mempatcher.Po + -rm -f ./$(DEPDIR)/movie.Po + -rm -f ./$(DEPDIR)/netplay.Po + -rm -f ./$(DEPDIR)/player.Po + -rm -f ./$(DEPDIR)/qtrecord.Po + -rm -f ./$(DEPDIR)/settings.Po + -rm -f ./$(DEPDIR)/state.Po + -rm -f ./$(DEPDIR)/state_rewind.Po + -rm -f ./$(DEPDIR)/tests.Po + -rm -f ./$(DEPDIR)/win32-common.Po + -rm -f apple2/$(DEPDIR)/apple2.Po + -rm -f cdplay/$(DEPDIR)/cdplay.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_MPC.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_SF.Po + -rm -f cdrom/$(DEPDIR)/CDAFReader_Vorbis.Po + -rm -f cdrom/$(DEPDIR)/CDAccess.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_CCD.Po + -rm -f cdrom/$(DEPDIR)/CDAccess_Image.Po + -rm -f cdrom/$(DEPDIR)/CDInterface.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_MT.Po + -rm -f cdrom/$(DEPDIR)/CDInterface_ST.Po + -rm -f cdrom/$(DEPDIR)/CDUtility.Po + -rm -f cdrom/$(DEPDIR)/crc32.Po + -rm -f cdrom/$(DEPDIR)/galois.Po + -rm -f cdrom/$(DEPDIR)/l-ec.Po + -rm -f cdrom/$(DEPDIR)/lec.Po + -rm -f cdrom/$(DEPDIR)/recover-raw.Po + -rm -f cdrom/$(DEPDIR)/scsicd.Po + -rm -f cheat_formats/$(DEPDIR)/gb.Po + -rm -f cheat_formats/$(DEPDIR)/psx.Po + -rm -f cheat_formats/$(DEPDIR)/snes.Po + -rm -f compress/$(DEPDIR)/GZFileStream.Po + -rm -f compress/$(DEPDIR)/ZIPReader.Po + -rm -f compress/$(DEPDIR)/ZLInflateFilter.Po + -rm -f cputest/$(DEPDIR)/cputest.Po + -rm -f cputest/$(DEPDIR)/ppc_cpu.Po + -rm -f cputest/$(DEPDIR)/x86_cpu.Po + -rm -f demo/$(DEPDIR)/demo.Po + -rm -f desa68/$(DEPDIR)/libdesa68_a-desa68.Po + -rm -f gb/$(DEPDIR)/gb.Po + -rm -f gb/$(DEPDIR)/gbGlobals.Po + -rm -f gb/$(DEPDIR)/gfx.Po + -rm -f gb/$(DEPDIR)/memory.Po + -rm -f gb/$(DEPDIR)/sound.Po + -rm -f gb/$(DEPDIR)/z80.Po + -rm -f gba/$(DEPDIR)/GBA.Po + -rm -f gba/$(DEPDIR)/GBAinline.Po + -rm -f gba/$(DEPDIR)/Gfx.Po + -rm -f gba/$(DEPDIR)/Globals.Po + -rm -f gba/$(DEPDIR)/Mode0.Po + -rm -f gba/$(DEPDIR)/Mode1.Po + -rm -f gba/$(DEPDIR)/Mode2.Po + -rm -f gba/$(DEPDIR)/Mode3.Po + -rm -f gba/$(DEPDIR)/Mode4.Po + -rm -f gba/$(DEPDIR)/Mode5.Po + -rm -f gba/$(DEPDIR)/RTC.Po + -rm -f gba/$(DEPDIR)/Sound.Po + -rm -f gba/$(DEPDIR)/arm.Po + -rm -f gba/$(DEPDIR)/bios.Po + -rm -f gba/$(DEPDIR)/eeprom.Po + -rm -f gba/$(DEPDIR)/flash.Po + -rm -f gba/$(DEPDIR)/sram.Po + -rm -f gba/$(DEPDIR)/thumb.Po + -rm -f hash/$(DEPDIR)/crc.Po + -rm -f hash/$(DEPDIR)/md5.Po + -rm -f hash/$(DEPDIR)/sha1.Po + -rm -f hash/$(DEPDIR)/sha256.Po + -rm -f hw_cpu/m68k/$(DEPDIR)/m68k.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpu.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_cpuD.Po + -rm -f hw_cpu/v810/$(DEPDIR)/v810_fp_ops.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80.Po + -rm -f hw_cpu/z80-fuse/$(DEPDIR)/z80_ops.Po + -rm -f hw_misc/arcade_card/$(DEPDIR)/arcade_card.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Apu_State.Po + -rm -f hw_sound/gb_apu/$(DEPDIR)/Gb_Oscs.Po + -rm -f hw_sound/pce_psg/$(DEPDIR)/pce_psg.Po + -rm -f hw_sound/sms_apu/$(DEPDIR)/Sms_Apu.Po + -rm -f hw_sound/ym2413/$(DEPDIR)/emu2413.Po + -rm -f hw_sound/ym2612/$(DEPDIR)/Ym2612_Emu.Po + -rm -f hw_video/huc6270/$(DEPDIR)/vdc.Po + -rm -f lynx/$(DEPDIR)/c65c02.Po + -rm -f lynx/$(DEPDIR)/cart.Po + -rm -f lynx/$(DEPDIR)/memmap.Po + -rm -f lynx/$(DEPDIR)/mikie.Po + -rm -f lynx/$(DEPDIR)/ram.Po + -rm -f lynx/$(DEPDIR)/rom.Po + -rm -f lynx/$(DEPDIR)/susie.Po + -rm -f lynx/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/debug.Po + -rm -f md/$(DEPDIR)/genesis.Po + -rm -f md/$(DEPDIR)/genio.Po + -rm -f md/$(DEPDIR)/header.Po + -rm -f md/$(DEPDIR)/mem68k.Po + -rm -f md/$(DEPDIR)/membnk.Po + -rm -f md/$(DEPDIR)/memvdp.Po + -rm -f md/$(DEPDIR)/memz80.Po + -rm -f md/$(DEPDIR)/sound.Po + -rm -f md/$(DEPDIR)/system.Po + -rm -f md/$(DEPDIR)/vdp.Po + -rm -f md/cart/$(DEPDIR)/cart.Po + -rm -f md/cart/$(DEPDIR)/map_eeprom.Po + -rm -f md/cart/$(DEPDIR)/map_ff.Po + -rm -f md/cart/$(DEPDIR)/map_realtec.Po + -rm -f md/cart/$(DEPDIR)/map_rmx3.Po + -rm -f md/cart/$(DEPDIR)/map_rom.Po + -rm -f md/cart/$(DEPDIR)/map_sbb.Po + -rm -f md/cart/$(DEPDIR)/map_sram.Po + -rm -f md/cart/$(DEPDIR)/map_ssf2.Po + -rm -f md/cart/$(DEPDIR)/map_svp.Po + -rm -f md/cart/$(DEPDIR)/map_yase.Po + -rm -f md/cd/$(DEPDIR)/cd.Po + -rm -f md/cd/$(DEPDIR)/cdc_cdd.Po + -rm -f md/cd/$(DEPDIR)/interrupt.Po + -rm -f md/cd/$(DEPDIR)/pcm.Po + -rm -f md/cd/$(DEPDIR)/timer.Po + -rm -f md/input/$(DEPDIR)/4way.Po + -rm -f md/input/$(DEPDIR)/gamepad.Po + -rm -f md/input/$(DEPDIR)/megamouse.Po + -rm -f md/input/$(DEPDIR)/multitap.Po + -rm -f minilzo/$(DEPDIR)/minilzo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-crc32.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-huffman.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_bits_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_decoder.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_demux.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-mpc_reader.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-requant.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-streaminfo.Po + -rm -f mpcdec/$(DEPDIR)/libmpcdec_a-synth_filter.Po + -rm -f mthreading/$(DEPDIR)/MThreading_POSIX.Po + -rm -f mthreading/$(DEPDIR)/MThreading_Win32.Po + -rm -f nes/$(DEPDIR)/cart.Po + -rm -f nes/$(DEPDIR)/debug.Po + -rm -f nes/$(DEPDIR)/dis6502.Po + -rm -f nes/$(DEPDIR)/fds-sound.Po + -rm -f nes/$(DEPDIR)/fds.Po + -rm -f nes/$(DEPDIR)/ines.Po + -rm -f nes/$(DEPDIR)/input.Po + -rm -f nes/$(DEPDIR)/nes.Po + -rm -f nes/$(DEPDIR)/nsf.Po + -rm -f nes/$(DEPDIR)/nsfe.Po + -rm -f nes/$(DEPDIR)/sound.Po + -rm -f nes/$(DEPDIR)/unif.Po + -rm -f nes/$(DEPDIR)/vsuni.Po + -rm -f nes/$(DEPDIR)/x6502.Po + -rm -f nes/boards/$(DEPDIR)/107.Po + -rm -f nes/boards/$(DEPDIR)/112.Po + -rm -f nes/boards/$(DEPDIR)/113.Po + -rm -f nes/boards/$(DEPDIR)/114.Po + -rm -f nes/boards/$(DEPDIR)/117.Po + -rm -f nes/boards/$(DEPDIR)/140.Po + -rm -f nes/boards/$(DEPDIR)/15.Po + -rm -f nes/boards/$(DEPDIR)/151.Po + -rm -f nes/boards/$(DEPDIR)/152.Po + -rm -f nes/boards/$(DEPDIR)/156.Po + -rm -f nes/boards/$(DEPDIR)/16.Po + -rm -f nes/boards/$(DEPDIR)/163.Po + -rm -f nes/boards/$(DEPDIR)/18.Po + -rm -f nes/boards/$(DEPDIR)/180.Po + -rm -f nes/boards/$(DEPDIR)/182.Po + -rm -f nes/boards/$(DEPDIR)/184.Po + -rm -f nes/boards/$(DEPDIR)/185.Po + -rm -f nes/boards/$(DEPDIR)/187.Po + -rm -f nes/boards/$(DEPDIR)/189.Po + -rm -f nes/boards/$(DEPDIR)/190.Po + -rm -f nes/boards/$(DEPDIR)/193.Po + -rm -f nes/boards/$(DEPDIR)/208.Po + -rm -f nes/boards/$(DEPDIR)/21.Po + -rm -f nes/boards/$(DEPDIR)/22.Po + -rm -f nes/boards/$(DEPDIR)/222.Po + -rm -f nes/boards/$(DEPDIR)/228.Po + -rm -f nes/boards/$(DEPDIR)/23.Po + -rm -f nes/boards/$(DEPDIR)/232.Po + -rm -f nes/boards/$(DEPDIR)/234.Po + -rm -f nes/boards/$(DEPDIR)/240.Po + -rm -f nes/boards/$(DEPDIR)/241.Po + -rm -f nes/boards/$(DEPDIR)/242.Po + -rm -f nes/boards/$(DEPDIR)/244.Po + -rm -f nes/boards/$(DEPDIR)/246.Po + -rm -f nes/boards/$(DEPDIR)/248.Po + -rm -f nes/boards/$(DEPDIR)/25.Po + -rm -f nes/boards/$(DEPDIR)/30.Po + -rm -f nes/boards/$(DEPDIR)/32.Po + -rm -f nes/boards/$(DEPDIR)/33.Po + -rm -f nes/boards/$(DEPDIR)/34.Po + -rm -f nes/boards/$(DEPDIR)/38.Po + -rm -f nes/boards/$(DEPDIR)/40.Po + -rm -f nes/boards/$(DEPDIR)/41.Po + -rm -f nes/boards/$(DEPDIR)/42.Po + -rm -f nes/boards/$(DEPDIR)/46.Po + -rm -f nes/boards/$(DEPDIR)/51.Po + -rm -f nes/boards/$(DEPDIR)/65.Po + -rm -f nes/boards/$(DEPDIR)/67.Po + -rm -f nes/boards/$(DEPDIR)/68.Po + -rm -f nes/boards/$(DEPDIR)/70.Po + -rm -f nes/boards/$(DEPDIR)/72.Po + -rm -f nes/boards/$(DEPDIR)/73.Po + -rm -f nes/boards/$(DEPDIR)/75.Po + -rm -f nes/boards/$(DEPDIR)/76.Po + -rm -f nes/boards/$(DEPDIR)/77.Po + -rm -f nes/boards/$(DEPDIR)/78.Po + -rm -f nes/boards/$(DEPDIR)/8.Po + -rm -f nes/boards/$(DEPDIR)/80.Po + -rm -f nes/boards/$(DEPDIR)/82.Po + -rm -f nes/boards/$(DEPDIR)/8237.Po + -rm -f nes/boards/$(DEPDIR)/86.Po + -rm -f nes/boards/$(DEPDIR)/87.Po + -rm -f nes/boards/$(DEPDIR)/88.Po + -rm -f nes/boards/$(DEPDIR)/89.Po + -rm -f nes/boards/$(DEPDIR)/90.Po + -rm -f nes/boards/$(DEPDIR)/92.Po + -rm -f nes/boards/$(DEPDIR)/93.Po + -rm -f nes/boards/$(DEPDIR)/94.Po + -rm -f nes/boards/$(DEPDIR)/95.Po + -rm -f nes/boards/$(DEPDIR)/96.Po + -rm -f nes/boards/$(DEPDIR)/97.Po + -rm -f nes/boards/$(DEPDIR)/99.Po + -rm -f nes/boards/$(DEPDIR)/codemasters.Po + -rm -f nes/boards/$(DEPDIR)/colordreams.Po + -rm -f nes/boards/$(DEPDIR)/deirom.Po + -rm -f nes/boards/$(DEPDIR)/emu2413.Po + -rm -f nes/boards/$(DEPDIR)/ffe.Po + -rm -f nes/boards/$(DEPDIR)/fme7.Po + -rm -f nes/boards/$(DEPDIR)/h2288.Po + -rm -f nes/boards/$(DEPDIR)/malee.Po + -rm -f nes/boards/$(DEPDIR)/maxicart.Po + -rm -f nes/boards/$(DEPDIR)/mmc1.Po + -rm -f nes/boards/$(DEPDIR)/mmc2and4.Po + -rm -f nes/boards/$(DEPDIR)/mmc3.Po + -rm -f nes/boards/$(DEPDIR)/mmc5.Po + -rm -f nes/boards/$(DEPDIR)/n106.Po + -rm -f nes/boards/$(DEPDIR)/nina06.Po + -rm -f nes/boards/$(DEPDIR)/novel.Po + -rm -f nes/boards/$(DEPDIR)/sachen.Po + -rm -f nes/boards/$(DEPDIR)/simple.Po + -rm -f nes/boards/$(DEPDIR)/super24.Po + -rm -f nes/boards/$(DEPDIR)/supervision.Po + -rm -f nes/boards/$(DEPDIR)/tengen.Po + -rm -f nes/boards/$(DEPDIR)/vrc6.Po + -rm -f nes/boards/$(DEPDIR)/vrc7.Po + -rm -f nes/input/$(DEPDIR)/arkanoid.Po + -rm -f nes/input/$(DEPDIR)/bbattler2.Po + -rm -f nes/input/$(DEPDIR)/cursor.Po + -rm -f nes/input/$(DEPDIR)/fkb.Po + -rm -f nes/input/$(DEPDIR)/ftrainer.Po + -rm -f nes/input/$(DEPDIR)/hypershot.Po + -rm -f nes/input/$(DEPDIR)/mahjong.Po + -rm -f nes/input/$(DEPDIR)/oekakids.Po + -rm -f nes/input/$(DEPDIR)/partytap.Po + -rm -f nes/input/$(DEPDIR)/powerpad.Po + -rm -f nes/input/$(DEPDIR)/shadow.Po + -rm -f nes/input/$(DEPDIR)/suborkb.Po + -rm -f nes/input/$(DEPDIR)/toprider.Po + -rm -f nes/input/$(DEPDIR)/zapper.Po + -rm -f nes/ntsc/$(DEPDIR)/nes_ntsc.Po + -rm -f nes/ppu/$(DEPDIR)/palette.Po + -rm -f nes/ppu/$(DEPDIR)/ppu.Po + -rm -f net/$(DEPDIR)/Net.Po + -rm -f net/$(DEPDIR)/Net_POSIX.Po + -rm -f net/$(DEPDIR)/Net_WS2.Po + -rm -f ngp/$(DEPDIR)/libngp_a-T6W28_Apu.Po + -rm -f ngp/$(DEPDIR)/libngp_a-Z80_interface.Po + -rm -f ngp/$(DEPDIR)/libngp_a-bios.Po + -rm -f ngp/$(DEPDIR)/libngp_a-biosHLE.Po + -rm -f ngp/$(DEPDIR)/libngp_a-dma.Po + -rm -f ngp/$(DEPDIR)/libngp_a-flash.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_colour.Po + -rm -f ngp/$(DEPDIR)/libngp_a-gfx_scanline_mono.Po + -rm -f ngp/$(DEPDIR)/libngp_a-interrupt.Po + -rm -f ngp/$(DEPDIR)/libngp_a-mem.Po + -rm -f ngp/$(DEPDIR)/libngp_a-neopop.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rom.Po + -rm -f ngp/$(DEPDIR)/libngp_a-rtc.Po + -rm -f ngp/$(DEPDIR)/libngp_a-sound.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_dst.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_reg.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_single.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_interpret_src.Po + -rm -f ngp/TLCS-900h/$(DEPDIR)/libngp_a-TLCS900h_registers.Po + -rm -f pce/$(DEPDIR)/debug.Po + -rm -f pce/$(DEPDIR)/dis6280.Po + -rm -f pce/$(DEPDIR)/hes.Po + -rm -f pce/$(DEPDIR)/huc.Po + -rm -f pce/$(DEPDIR)/huc6280.Po + -rm -f pce/$(DEPDIR)/input.Po + -rm -f pce/$(DEPDIR)/mcgenjin.Po + -rm -f pce/$(DEPDIR)/pce.Po + -rm -f pce/$(DEPDIR)/pcecd.Po + -rm -f pce/$(DEPDIR)/tsushin.Po + -rm -f pce/$(DEPDIR)/vce.Po + -rm -f pce/input/$(DEPDIR)/gamepad.Po + -rm -f pce/input/$(DEPDIR)/mouse.Po + -rm -f pce/input/$(DEPDIR)/tsushinkb.Po + -rm -f pce_fast/$(DEPDIR)/hes.Po + -rm -f pce_fast/$(DEPDIR)/huc.Po + -rm -f pce_fast/$(DEPDIR)/huc6280.Po + -rm -f pce_fast/$(DEPDIR)/input.Po + -rm -f pce_fast/$(DEPDIR)/pce.Po + -rm -f pce_fast/$(DEPDIR)/pcecd.Po + -rm -f pce_fast/$(DEPDIR)/pcecd_drive.Po + -rm -f pce_fast/$(DEPDIR)/psg.Po + -rm -f pce_fast/$(DEPDIR)/vdc.Po + -rm -f pcfx/$(DEPDIR)/debug.Po + -rm -f pcfx/$(DEPDIR)/fxscsi.Po + -rm -f pcfx/$(DEPDIR)/huc6273.Po + -rm -f pcfx/$(DEPDIR)/idct.Po + -rm -f pcfx/$(DEPDIR)/input.Po + -rm -f pcfx/$(DEPDIR)/interrupt.Po + -rm -f pcfx/$(DEPDIR)/king.Po + -rm -f pcfx/$(DEPDIR)/pcfx.Po + -rm -f pcfx/$(DEPDIR)/rainbow.Po + -rm -f pcfx/$(DEPDIR)/soundbox.Po + -rm -f pcfx/$(DEPDIR)/timer.Po + -rm -f pcfx/input/$(DEPDIR)/gamepad.Po + -rm -f pcfx/input/$(DEPDIR)/mouse.Po + -rm -f psx/$(DEPDIR)/cdc.Po + -rm -f psx/$(DEPDIR)/cpu.Po + -rm -f psx/$(DEPDIR)/debug.Po + -rm -f psx/$(DEPDIR)/dis.Po + -rm -f psx/$(DEPDIR)/dma.Po + -rm -f psx/$(DEPDIR)/frontio.Po + -rm -f psx/$(DEPDIR)/gpu.Po + -rm -f psx/$(DEPDIR)/gpu_line.Po + -rm -f psx/$(DEPDIR)/gpu_polygon.Po + -rm -f psx/$(DEPDIR)/gpu_sprite.Po + -rm -f psx/$(DEPDIR)/gte.Po + -rm -f psx/$(DEPDIR)/irq.Po + -rm -f psx/$(DEPDIR)/mdec.Po + -rm -f psx/$(DEPDIR)/psx.Po + -rm -f psx/$(DEPDIR)/sio.Po + -rm -f psx/$(DEPDIR)/spu.Po + -rm -f psx/$(DEPDIR)/timer.Po + -rm -f psx/input/$(DEPDIR)/dualanalog.Po + -rm -f psx/input/$(DEPDIR)/dualshock.Po + -rm -f psx/input/$(DEPDIR)/gamepad.Po + -rm -f psx/input/$(DEPDIR)/guncon.Po + -rm -f psx/input/$(DEPDIR)/justifier.Po + -rm -f psx/input/$(DEPDIR)/memcard.Po + -rm -f psx/input/$(DEPDIR)/mouse.Po + -rm -f psx/input/$(DEPDIR)/multitap.Po + -rm -f psx/input/$(DEPDIR)/negcon.Po + -rm -f quicklz/$(DEPDIR)/libmdfnquicklz_a-quicklz.Po + -rm -f resampler/$(DEPDIR)/resample.Po + -rm -f sms/$(DEPDIR)/cart.Po + -rm -f sms/$(DEPDIR)/memz80.Po + -rm -f sms/$(DEPDIR)/pio.Po + -rm -f sms/$(DEPDIR)/render.Po + -rm -f sms/$(DEPDIR)/romdb.Po + -rm -f sms/$(DEPDIR)/sms.Po + -rm -f sms/$(DEPDIR)/sound.Po + -rm -f sms/$(DEPDIR)/system.Po + -rm -f sms/$(DEPDIR)/tms.Po + -rm -f sms/$(DEPDIR)/vdp.Po + -rm -f snes/$(DEPDIR)/libsnes_a-interface.Po + -rm -f snes/src/cartridge/$(DEPDIR)/libsnes_a-cartridge.Po + -rm -f snes/src/cheat/$(DEPDIR)/libsnes_a-cheat.Po + -rm -f snes/src/chip/bsx/$(DEPDIR)/libsnes_a-bsx.Po + -rm -f snes/src/chip/cx4/$(DEPDIR)/libsnes_a-cx4.Po + -rm -f snes/src/chip/dsp1/$(DEPDIR)/libsnes_a-dsp1.Po + -rm -f snes/src/chip/dsp2/$(DEPDIR)/libsnes_a-dsp2.Po + -rm -f snes/src/chip/dsp3/$(DEPDIR)/libsnes_a-dsp3.Po + -rm -f snes/src/chip/dsp4/$(DEPDIR)/libsnes_a-dsp4.Po + -rm -f snes/src/chip/obc1/$(DEPDIR)/libsnes_a-obc1.Po + -rm -f snes/src/chip/sa1/$(DEPDIR)/libsnes_a-sa1.Po + -rm -f snes/src/chip/sdd1/$(DEPDIR)/libsnes_a-sdd1.Po + -rm -f snes/src/chip/spc7110/$(DEPDIR)/libsnes_a-spc7110.Po + -rm -f snes/src/chip/srtc/$(DEPDIR)/libsnes_a-srtc.Po + -rm -f snes/src/chip/st010/$(DEPDIR)/libsnes_a-st010.Po + -rm -f snes/src/chip/superfx/$(DEPDIR)/libsnes_a-superfx.Po + -rm -f snes/src/cpu/$(DEPDIR)/libsnes_a-cpu.Po + -rm -f snes/src/cpu/core/$(DEPDIR)/libsnes_a-core.Po + -rm -f snes/src/cpu/scpu/$(DEPDIR)/libsnes_a-scpu.Po + -rm -f snes/src/lib/libco/$(DEPDIR)/libsnes_a-libco.Po + -rm -f snes/src/memory/$(DEPDIR)/libsnes_a-memory.Po + -rm -f snes/src/memory/smemory/$(DEPDIR)/libsnes_a-smemory.Po + -rm -f snes/src/ppu/$(DEPDIR)/libsnes_a-ppu.Po + -rm -f snes/src/sdsp/$(DEPDIR)/libsnes_a-sdsp.Po + -rm -f snes/src/smp/$(DEPDIR)/libsnes_a-smp.Po + -rm -f snes/src/system/$(DEPDIR)/libsnes_a-system.Po + -rm -f snes_faust/$(DEPDIR)/apu.Po + -rm -f snes_faust/$(DEPDIR)/cart.Po + -rm -f snes_faust/$(DEPDIR)/cpu.Po + -rm -f snes_faust/$(DEPDIR)/debug.Po + -rm -f snes_faust/$(DEPDIR)/dis65816.Po + -rm -f snes_faust/$(DEPDIR)/input.Po + -rm -f snes_faust/$(DEPDIR)/msu1.Po + -rm -f snes_faust/$(DEPDIR)/ppu.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mt.Po + -rm -f snes_faust/$(DEPDIR)/ppu_mtrender.Po + -rm -f snes_faust/$(DEPDIR)/ppu_st.Po + -rm -f snes_faust/$(DEPDIR)/snes.Po + -rm -f snes_faust/cart/$(DEPDIR)/cx4.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp1.Po + -rm -f snes_faust/cart/$(DEPDIR)/dsp2.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1.Po + -rm -f snes_faust/cart/$(DEPDIR)/sa1cpu.Po + -rm -f snes_faust/cart/$(DEPDIR)/sdd1.Po + -rm -f snes_faust/cart/$(DEPDIR)/superfx.Po + -rm -f sound/$(DEPDIR)/Blip_Buffer.Po + -rm -f sound/$(DEPDIR)/DSPUtility.Po + -rm -f sound/$(DEPDIR)/Fir_Resampler.Po + -rm -f sound/$(DEPDIR)/OwlResampler.Po + -rm -f sound/$(DEPDIR)/Stereo_Buffer.Po + -rm -f sound/$(DEPDIR)/SwiftResampler.Po + -rm -f sound/$(DEPDIR)/WAVRecord.Po + -rm -f sound/$(DEPDIR)/okiadpcm.Po + -rm -f string/$(DEPDIR)/escape.Po + -rm -f string/$(DEPDIR)/string.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-bitwise.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-block.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-codebook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-floor1.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-framing.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-info.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mapping0.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-mdct.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-registry.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-res012.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-sharedbook.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-synthesis.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-vorbisfile.Po + -rm -f tremor/$(DEPDIR)/libvorbisidec_a-window.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trio.Po + -rm -f trio/$(DEPDIR)/libtrio_a-trionan.Po + -rm -f trio/$(DEPDIR)/libtrio_a-triostr.Po + -rm -f vb/$(DEPDIR)/debug.Po + -rm -f vb/$(DEPDIR)/input.Po + -rm -f vb/$(DEPDIR)/timer.Po + -rm -f vb/$(DEPDIR)/vb.Po + -rm -f vb/$(DEPDIR)/vip.Po + -rm -f vb/$(DEPDIR)/vsu.Po + -rm -f video/$(DEPDIR)/Deinterlacer.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Blend.Po + -rm -f video/$(DEPDIR)/Deinterlacer_Simple.Po + -rm -f video/$(DEPDIR)/font-data-12x13.Po + -rm -f video/$(DEPDIR)/font-data-18x18.Po + -rm -f video/$(DEPDIR)/font-data.Po + -rm -f video/$(DEPDIR)/png.Po + -rm -f video/$(DEPDIR)/primitives.Po + -rm -f video/$(DEPDIR)/resize.Po + -rm -f video/$(DEPDIR)/surface.Po + -rm -f video/$(DEPDIR)/tblur.Po + -rm -f video/$(DEPDIR)/text.Po + -rm -f video/$(DEPDIR)/video.Po + -rm -f wswan/$(DEPDIR)/comm.Po + -rm -f wswan/$(DEPDIR)/debug.Po + -rm -f wswan/$(DEPDIR)/eeprom.Po + -rm -f wswan/$(DEPDIR)/gfx.Po + -rm -f wswan/$(DEPDIR)/interrupt.Po + -rm -f wswan/$(DEPDIR)/main.Po + -rm -f wswan/$(DEPDIR)/memory.Po + -rm -f wswan/$(DEPDIR)/rtc.Po + -rm -f wswan/$(DEPDIR)/sound.Po + -rm -f wswan/$(DEPDIR)/tcache.Po + -rm -f wswan/$(DEPDIR)/v30mz.Po + -rm -f wswan/dis/$(DEPDIR)/dis_decode.Po + -rm -f wswan/dis/$(DEPDIR)/dis_groups.Po + -rm -f wswan/dis/$(DEPDIR)/resolve.Po + -rm -f wswan/dis/$(DEPDIR)/syntax.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -5044,20 +6337,22 @@ .MAKE: $(am__recursive_targets) install-am install-strip -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-binPROGRAMS clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--depfiles check check-am clean clean-binPROGRAMS \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS + +.PRECIOUS: Makefile # diff -Nru mednafen-1.24.3+dfsg/src/md/cd/cd.cpp mednafen-1.26.1+dfsg/src/md/cd/cd.cpp --- mednafen-1.24.3+dfsg/src/md/cd/cd.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/md/cd/cd.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -43,12 +43,12 @@ // Read: 0 = Sub CPU "operating"(?), 1 = acknowledge static bool SACK; -static uint8 LEDControl; -static bool InPeripheralReset; +//static uint8 LEDControl; +//static bool InPeripheralReset; static uint8 MM_WP; // Write protect static uint8 MM_BK; // R/W only on main. PRAM bank select for the main CPU -static uint8 MM_PM; // R/W only on sub. Priority mode. +//static uint8 MM_PM; // R/W only on sub. Priority mode. static bool MM_MODE; // R/W on main and sub. 0 = 2M mode, 1 = 1M mode enum { @@ -439,7 +439,7 @@ printf("Unknown main Read16: %08x\n", A); return(0); } - +#if 0 ////////////////////////////////// // // Sub 68K memory map handling: @@ -820,7 +820,7 @@ printf("Unknown Sub read16: %08x\n", A); return(0); } - +#endif #define SUBCPU_CLOCK 12500000 void MDCD_Run(int32 md_master_cycles) diff -Nru mednafen-1.24.3+dfsg/src/md/debug.cpp mednafen-1.26.1+dfsg/src/md/debug.cpp --- mednafen-1.24.3+dfsg/src/md/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/md/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -409,6 +409,7 @@ DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 10, // Max instruction size(bytes) 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/mednafen.cpp mednafen-1.26.1+dfsg/src/mednafen.cpp --- mednafen-1.24.3+dfsg/src/mednafen.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/mednafen.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1425,7 +1425,7 @@ &EmulatedCDPlay, &EmulatedDEMO }; - static_assert(MEDNAFEN_VERSION_NUMERIC >= 0x00102402, "Bad MEDNAFEN_VERSION_NUMERIC"); + static_assert(MEDNAFEN_VERSION_NUMERIC >= 0x00102601, "Bad MEDNAFEN_VERSION_NUMERIC"); for(unsigned int i = 0; i < sizeof(InternalSystems) / sizeof(MDFNGI *); i++) AddSystem(InternalSystems[i]); diff -Nru mednafen-1.24.3+dfsg/src/nes/debug.cpp mednafen-1.26.1+dfsg/src/nes/debug.cpp --- mednafen-1.24.3+dfsg/src/nes/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/nes/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -498,6 +498,7 @@ DebuggerInfoStruct NESDBGInfo = { + false, "cp437", 3, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/nes/ppu/ppu.cpp mednafen-1.26.1+dfsg/src/nes/ppu/ppu.cpp --- mednafen-1.24.3+dfsg/src/nes/ppu/ppu.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/nes/ppu/ppu.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1037,47 +1037,47 @@ if(n == 0) sb=1; - uint8 *C; - int t; - unsigned int vadr; - - t = (int)scanline-(spr->y); - - if (Sprite16) - vadr = ((spr->no&1)<<12) + ((spr->no&0xFE)<<4); - else - vadr = (spr->no<<4)+vofs; + uint8 *C; + int t; + unsigned int vadr; + + t = (int)scanline-(spr->y); + + if (Sprite16) + vadr = ((spr->no&1)<<12) + ((spr->no&0xFE)<<4); + else + vadr = (spr->no<<4)+vofs; - if (spr->atr&V_FLIP) - { + if (spr->atr&V_FLIP) + { vadr+=7; vadr-=t; vadr+=(P0&0x20)>>1; vadr-=t&8; - } - else - { + } + else + { vadr+=t; vadr+=t&8; - } + } - if(MMC5Hack && geniestage!=1 && Sprite16) C = MMC5SPRVRAMADR(vadr); - else C = VRAMADR(vadr); - dst->ca[0]=C[0]; + if(MMC5Hack && geniestage!=1 && Sprite16) C = MMC5SPRVRAMADR(vadr); + else C = VRAMADR(vadr); + dst->ca[0]=C[0]; - if(PPU_hook && ns < 8) - { - PPU_hook(0x2000); - PPU_hook(vadr); - } + if(PPU_hook && ns < 8) + { + PPU_hook(0x2000); + PPU_hook(vadr); + } - dst->ca[1]=C[8]; + dst->ca[1]=C[8]; - if(PPU_hook && ns<8) - PPU_hook(vadr | 8); + if(PPU_hook && ns<8) + PPU_hook(vadr | 8); - dst->x=spr->x; - dst->atr=spr->atr; + dst->x=spr->x; + dst->atr=spr->atr; ns++; } @@ -1722,61 +1722,52 @@ neo_palette[x] = GfxDecode_Buf->format.MakeColor(x * 85, x * 85, x * 85, 0xFF); } else + { for(int x = 0; x < 4; x++) neo_palette[x] = CM.PALRAMLUTCache[PALRAMCache[pbn * 4 + x] & 0x3F] | GfxDecode_Buf->format.MakeColor(0, 0, 0, 0xFF); + } - for(int y = 0; y < GfxDecode_Buf->h; y++) + for(int y = 0; y < GfxDecode_Buf->h; y++) + { + for(int x = 0; x < GfxDecode_Buf->w; x+=8) { - for(int x = 0; x < GfxDecode_Buf->w; x+=8) - { - unsigned which_tile = (x / 8) + (GfxDecode_Scroll + (y / 8)) * (GfxDecode_Buf->w / 8); - unsigned tile_c = 0; + unsigned which_tile = (x / 8) + (GfxDecode_Scroll + (y / 8)) * (GfxDecode_Buf->w / 8); + unsigned tile_c = 0; - uint8 *cg_ptr; - uint8 cg[2]; + uint8 *cg_ptr; + uint8 cg[2]; - if(MMC5Hack) + if(MMC5Hack) + { + if(GfxDecode_Layer) // Sprites { - if(GfxDecode_Layer) // Sprites - { - //which_tile &= 0x1FF; - cg_ptr = MMC5SPRVRAMADR(which_tile * 16); - tile_c = 0x200; - } - else + //which_tile &= 0x1FF; + cg_ptr = MMC5SPRVRAMADR(which_tile * 16); + tile_c = 0x200; + } + else + { + switch(MMC5HackCHRMode) { - switch(MMC5HackCHRMode) - { - case 1: break; - default: //which_tile &= 0x1FF; - cg_ptr = MMC5BGVRAMADR(which_tile * 16); + case 1: break; + default: //which_tile &= 0x1FF; + cg_ptr = MMC5BGVRAMADR(which_tile * 16); tile_c = 0x200; break; - } } } - else + } + else + { + if(GfxDecode_Layer) // Sprites { - if(GfxDecode_Layer) // Sprites + if(Sprite16) { - if(Sprite16) - { - tile_c = 0x200; - } - else - { - if(SpAdrHI) - { - which_tile += 0x100; - tile_c = 0x200; - } - else - tile_c = 0x100; - } + tile_c = 0x200; } - else // Background + else { - if(BGAdrHI) + if(SpAdrHI) { which_tile += 0x100; tile_c = 0x200; @@ -1784,30 +1775,41 @@ else tile_c = 0x100; } - - cg_ptr = VRAMADR(which_tile * 16); } - - if(which_tile >= tile_c) + else // Background { - for(int sx = 0; sx < 8; sx++) target[x + sx] = GfxDecode_Buf->format.MakeColor(0, 0, 0, 0); - continue; + if(BGAdrHI) + { + which_tile += 0x100; + tile_c = 0x200; + } + else + tile_c = 0x100; } - cg[0] = cg_ptr[0 + (y & 0x7)]; - cg[1] = cg_ptr[8 + (y & 0x7)]; + cg_ptr = VRAMADR(which_tile * 16); + } - for(int sx = 0; sx < 8; sx++) - target[x + sx] = neo_palette[((cg[0] >> (7-sx)) & 0x1) | (((cg[1] >> (7-sx)) & 0x1) << 1)]; + if(which_tile >= tile_c) + { + for(int sx = 0; sx < 8; sx++) target[x + sx] = GfxDecode_Buf->format.MakeColor(0, 0, 0, 0); + continue; + } - target[x + GfxDecode_Buf->w*2 + 0] = target[x + GfxDecode_Buf->w*2 + 1] = target[x + GfxDecode_Buf->w*2 + 2] = target[x + GfxDecode_Buf->w*2 + 3] = - target[x + GfxDecode_Buf->w*2 + 4] = target[x + GfxDecode_Buf->w*2 + 5] = target[x + GfxDecode_Buf->w*2 + 6] = target[x + GfxDecode_Buf->w*2 + 7] = which_tile * 16; + cg[0] = cg_ptr[0 + (y & 0x7)]; + cg[1] = cg_ptr[8 + (y & 0x7)]; - target[x + GfxDecode_Buf->w*1 + 0]=target[x + GfxDecode_Buf->w*1 + 1]=target[x + GfxDecode_Buf->w*1 + 2]=target[x + GfxDecode_Buf->w*1 + 3] = - target[x + GfxDecode_Buf->w*1 + 4]=target[x + GfxDecode_Buf->w*1 + 5]=target[x + GfxDecode_Buf->w*1 + 6]=target[x + GfxDecode_Buf->w*1 + 7] = which_tile; - } - target += GfxDecode_Buf->w * 3; + for(int sx = 0; sx < 8; sx++) + target[x + sx] = neo_palette[((cg[0] >> (7-sx)) & 0x1) | (((cg[1] >> (7-sx)) & 0x1) << 1)]; + + target[x + GfxDecode_Buf->w*2 + 0] = target[x + GfxDecode_Buf->w*2 + 1] = target[x + GfxDecode_Buf->w*2 + 2] = target[x + GfxDecode_Buf->w*2 + 3] = + target[x + GfxDecode_Buf->w*2 + 4] = target[x + GfxDecode_Buf->w*2 + 5] = target[x + GfxDecode_Buf->w*2 + 6] = target[x + GfxDecode_Buf->w*2 + 7] = which_tile * 16; + + target[x + GfxDecode_Buf->w*1 + 0]=target[x + GfxDecode_Buf->w*1 + 1]=target[x + GfxDecode_Buf->w*1 + 2]=target[x + GfxDecode_Buf->w*1 + 3] = + target[x + GfxDecode_Buf->w*1 + 4]=target[x + GfxDecode_Buf->w*1 + 5]=target[x + GfxDecode_Buf->w*1 + 6]=target[x + GfxDecode_Buf->w*1 + 7] = which_tile; } + target += GfxDecode_Buf->w * 3; + } } } diff -Nru mednafen-1.24.3+dfsg/src/pce/debug.cpp mednafen-1.26.1+dfsg/src/pce/debug.cpp --- mednafen-1.24.3+dfsg/src/pce/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/pce/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1094,6 +1094,7 @@ DebuggerInfoStruct PCEDBGInfo = { + false, "shift_jis", 7, 1, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/pcfx/debug.cpp mednafen-1.26.1+dfsg/src/pcfx/debug.cpp --- mednafen-1.24.3+dfsg/src/pcfx/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/pcfx/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1008,6 +1008,7 @@ DebuggerInfoStruct PCFXDBGInfo = { + false, "shift_jis", 4, 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/psx/debug.cpp mednafen-1.26.1+dfsg/src/psx/debug.cpp --- mednafen-1.24.3+dfsg/src/psx/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/psx/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -416,6 +416,7 @@ DebuggerInfoStruct PSX_DBGInfo = { + false, "shift_jis", 4, // Max instruction byte size 4, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/psx/gpu.cpp mednafen-1.26.1+dfsg/src/psx/gpu.cpp --- mednafen-1.24.3+dfsg/src/psx/gpu.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/psx/gpu.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -1448,7 +1448,7 @@ } else { - PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, NULL, &surface->format, 0, 0, 0, 0); + PSX_GPULineHook(sys_timestamp, sys_timestamp - ((uint64)gpu_clocks * 65536) / GPUClockRatio, scanline == 0, NULL, NULL, 0, 0, 0, 0); } if(!InVBlank) diff -Nru mednafen-1.24.3+dfsg/src/psx/spu.h mednafen-1.26.1+dfsg/src/psx/spu.h --- mednafen-1.24.3+dfsg/src/psx/spu.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/psx/spu.h 2020-11-10 06:04:17.000000000 +0000 @@ -219,28 +219,17 @@ int16 IIR_COEF; int16 FB_ALPHA; int16 FB_X; - uint16 IIR_DEST_A0; - uint16 IIR_DEST_A1; - uint16 ACC_SRC_A0; - uint16 ACC_SRC_A1; - uint16 ACC_SRC_B0; - uint16 ACC_SRC_B1; - uint16 IIR_SRC_A0; - uint16 IIR_SRC_A1; - uint16 IIR_DEST_B0; - uint16 IIR_DEST_B1; - uint16 ACC_SRC_C0; - uint16 ACC_SRC_C1; - uint16 ACC_SRC_D0; - uint16 ACC_SRC_D1; - uint16 IIR_SRC_B1; - uint16 IIR_SRC_B0; - uint16 MIX_DEST_A0; - uint16 MIX_DEST_A1; - uint16 MIX_DEST_B0; - uint16 MIX_DEST_B1; - int16 IN_COEF_L; - int16 IN_COEF_R; + uint16 IIR_DEST_A[2]; + uint16 ACC_SRC_A[2]; + uint16 ACC_SRC_B[2]; + uint16 IIR_SRC_A[2]; + uint16 IIR_DEST_B[2]; + uint16 ACC_SRC_C[2]; + uint16 ACC_SRC_D[2]; + uint16 IIR_SRC_B[2]; + uint16 MIX_DEST_A[2]; + uint16 MIX_DEST_B[2]; + int16 IN_COEF[2]; }; }; }; diff -Nru mednafen-1.24.3+dfsg/src/psx/spu_reverb.inc mednafen-1.26.1+dfsg/src/psx/spu_reverb.inc --- mednafen-1.24.3+dfsg/src/psx/spu_reverb.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/psx/spu_reverb.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sony PS1 Emulation Module */ /******************************************************************************/ /* spu_reverb.inc: -** Copyright (C) 2011-2016 Mednafen Team +** Copyright (C) 2011-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -31,6 +31,13 @@ return(samp); } +static INLINE int16 ReverbNeg(int16 samp) +{ + if(samp == -32768) + return 0x7FFF; + + return -samp; +} INLINE uint32 PS_SPU::Get_Reverb_Offset(uint32 in_offset) { @@ -54,7 +61,8 @@ void NO_INLINE PS_SPU::WR_RVB(uint16 raw_offs, int16 sample) { - WriteSPURAM(Get_Reverb_Offset(raw_offs << 2), sample); + if(SPUControl & 0x80) + WriteSPURAM(Get_Reverb_Offset(raw_offs << 2), sample); } // @@ -140,77 +148,70 @@ int32 downsampled[2]; for(unsigned lr = 0; lr < 2; lr++) - downsampled[lr] = Reverb4422(&RDSB[lr][(RvbResPos - 39) & 0x3F]); + downsampled[lr] = Reverb4422(&RDSB[lr][(RvbResPos - 38) & 0x3F]); // // Run algorithm - /// - if(SPUControl & 0x80) + // + for(unsigned lr = 0; lr < 2; lr++) { - int16 IIR_INPUT_A0, IIR_INPUT_A1, IIR_INPUT_B0, IIR_INPUT_B1; - int16 IIR_A0, IIR_A1, IIR_B0, IIR_B1; - int16 ACC0, ACC1; - int16 FB_A0, FB_A1, FB_B0, FB_B1; - - IIR_INPUT_A0 = ReverbSat(((RD_RVB(IIR_SRC_A0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); - IIR_INPUT_A1 = ReverbSat(((RD_RVB(IIR_SRC_A1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); - IIR_INPUT_B0 = ReverbSat(((RD_RVB(IIR_SRC_B0) * IIR_COEF) >> 15) + ((downsampled[0] * IN_COEF_L) >> 15)); - IIR_INPUT_B1 = ReverbSat(((RD_RVB(IIR_SRC_B1) * IIR_COEF) >> 15) + ((downsampled[1] * IN_COEF_R) >> 15)); - - IIR_A0 = ReverbSat((((IIR_INPUT_A0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A0, -1)) >> 14)) >> 1); - IIR_A1 = ReverbSat((((IIR_INPUT_A1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A1, -1)) >> 14)) >> 1); - IIR_B0 = ReverbSat((((IIR_INPUT_B0 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B0, -1)) >> 14)) >> 1); - IIR_B1 = ReverbSat((((IIR_INPUT_B1 * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B1, -1)) >> 14)) >> 1); - - WR_RVB(IIR_DEST_A0, IIR_A0); - WR_RVB(IIR_DEST_A1, IIR_A1); - WR_RVB(IIR_DEST_B0, IIR_B0); - WR_RVB(IIR_DEST_B1, IIR_B1); - - ACC0 = ReverbSat((((RD_RVB(ACC_SRC_A0) * ACC_COEF_A) >> 14) + - ((RD_RVB(ACC_SRC_B0) * ACC_COEF_B) >> 14) + - ((RD_RVB(ACC_SRC_C0) * ACC_COEF_C) >> 14) + - ((RD_RVB(ACC_SRC_D0) * ACC_COEF_D) >> 14)) >> 1); - - ACC1 = ReverbSat((((RD_RVB(ACC_SRC_A1) * ACC_COEF_A) >> 14) + - ((RD_RVB(ACC_SRC_B1) * ACC_COEF_B) >> 14) + - ((RD_RVB(ACC_SRC_C1) * ACC_COEF_C) >> 14) + - ((RD_RVB(ACC_SRC_D1) * ACC_COEF_D) >> 14)) >> 1); - - FB_A0 = RD_RVB(MIX_DEST_A0 - FB_SRC_A); - FB_A1 = RD_RVB(MIX_DEST_A1 - FB_SRC_A); - FB_B0 = RD_RVB(MIX_DEST_B0 - FB_SRC_B); - FB_B1 = RD_RVB(MIX_DEST_B1 - FB_SRC_B); - - WR_RVB(MIX_DEST_A0, ReverbSat(ACC0 - ((FB_A0 * FB_ALPHA) >> 15))); - WR_RVB(MIX_DEST_A1, ReverbSat(ACC1 - ((FB_A1 * FB_ALPHA) >> 15))); - - WR_RVB(MIX_DEST_B0, ReverbSat(((FB_ALPHA * ACC0) >> 15) - ((FB_A0 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B0 * FB_X) >> 15))); - WR_RVB(MIX_DEST_B1, ReverbSat(((FB_ALPHA * ACC1) >> 15) - ((FB_A1 * (int16)(0x8000 ^ FB_ALPHA)) >> 15) - ((FB_B1 * FB_X) >> 15))); + const int16 IIR_INPUT_A = ReverbSat((((RD_RVB(IIR_SRC_A[lr ^ 0]) * IIR_COEF) >> 14) + ((downsampled[lr] * IN_COEF[lr]) >> 14)) >> 1); + const int16 IIR_INPUT_B = ReverbSat((((RD_RVB(IIR_SRC_B[lr ^ 1]) * IIR_COEF) >> 14) + ((downsampled[lr] * IN_COEF[lr]) >> 14)) >> 1); + const int16 IIR_A = ReverbSat((((IIR_INPUT_A * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_A[lr], -1)) >> 14)) >> 1); + const int16 IIR_B = ReverbSat((((IIR_INPUT_B * IIR_ALPHA) >> 14) + (IIASM(IIR_ALPHA, RD_RVB(IIR_DEST_B[lr], -1)) >> 14)) >> 1); + + WR_RVB(IIR_DEST_A[lr], IIR_A); + WR_RVB(IIR_DEST_B[lr], IIR_B); + + const int32 ACC = ((RD_RVB(ACC_SRC_A[lr]) * ACC_COEF_A) >> 14) + + ((RD_RVB(ACC_SRC_B[lr]) * ACC_COEF_B) >> 14) + + ((RD_RVB(ACC_SRC_C[lr]) * ACC_COEF_C) >> 14) + + ((RD_RVB(ACC_SRC_D[lr]) * ACC_COEF_D) >> 14); + + const int16 FB_A = RD_RVB(MIX_DEST_A[lr] - FB_SRC_A); + const int16 FB_B = RD_RVB(MIX_DEST_B[lr] - FB_SRC_B); + const int16 MDA = ReverbSat((ACC + ((FB_A * ReverbNeg(FB_ALPHA)) >> 14)) >> 1); + const int16 MDB = ReverbSat(FB_A + ((((MDA * FB_ALPHA) >> 14) + ((FB_B * ReverbNeg(FB_X)) >> 14)) >> 1)); + const int16 IVB = ReverbSat(FB_B + ((MDB * FB_X) >> 15)); + + WR_RVB(MIX_DEST_A[lr], MDA); + WR_RVB(MIX_DEST_B[lr], MDB); +#if 0 + { + static uint32 sqcounter; + RUSB[lr][(RvbResPos >> 1) | 0x20] = RUSB[lr][RvbResPos >> 1] = ((sqcounter & 0xFF) == 0) ? 0x8000 : 0x0000; //((sqcounter & 0x80) ? 0x7000 : 0x9000); + sqcounter += lr; + } +#else + RUSB[lr][(RvbResPos >> 1) | 0x20] = RUSB[lr][RvbResPos >> 1] = IVB; // Output sample +#endif } - - // - // Get output samples // - RUSB[0][(RvbResPos >> 1) | 0x20] = RUSB[0][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A0) + RD_RVB(MIX_DEST_B0)) >> 1; - RUSB[1][(RvbResPos >> 1) | 0x20] = RUSB[1][RvbResPos >> 1] = (RD_RVB(MIX_DEST_A1) + RD_RVB(MIX_DEST_B1)) >> 1; - + // + // ReverbCur = (ReverbCur + 1) & 0x3FFFF; if(!ReverbCur) ReverbCur = ReverbWA; for(unsigned lr = 0; lr < 2; lr++) - upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos >> 1) - 19) & 0x1F]); } else { for(unsigned lr = 0; lr < 2; lr++) - upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos - 39) & 0x3F) >> 1]); + upsampled[lr] = Reverb2244(&RUSB[lr][((RvbResPos >> 1) - 19) & 0x1F]); } RvbResPos = (RvbResPos + 1) & 0x3F; for(unsigned lr = 0; lr < 2; lr++) + { +#if 0 + if(!lr) + printf("%d\n", (-upsampled[lr]) >> 1); +#endif + out[lr] = upsampled[lr]; + } } diff -Nru mednafen-1.24.3+dfsg/src/sexyal/Makefile.in mednafen-1.26.1+dfsg/src/sexyal/Makefile.in --- mednafen-1.24.3+dfsg/src/sexyal/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/sexyal/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ build_triplet = @build@ host_triplet = @host@ subdir = src/sexyal -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -102,6 +110,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -151,7 +160,15 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/convert.Po ./$(DEPDIR)/sexyal.Po \ + drivers/$(DEPDIR)/alsa.Po drivers/$(DEPDIR)/cmi8738.Po \ + drivers/$(DEPDIR)/dos_common.Po drivers/$(DEPDIR)/dsound.Po \ + drivers/$(DEPDIR)/dummy.Po drivers/$(DEPDIR)/es1370.Po \ + drivers/$(DEPDIR)/es1371.Po drivers/$(DEPDIR)/jack.Po \ + drivers/$(DEPDIR)/openbsd.Po drivers/$(DEPDIR)/oss.Po \ + drivers/$(DEPDIR)/sb.Po drivers/$(DEPDIR)/sdl.Po \ + drivers/$(DEPDIR)/wasapi.Po drivers/$(DEPDIR)/wasapish.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -192,6 +209,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -366,6 +385,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -405,14 +425,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sexyal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sexyal/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -473,22 +492,28 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sexyal.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/alsa.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/cmi8738.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dos_common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dsound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dummy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1370.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1371.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/jack.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/openbsd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/oss.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sdl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sexyal.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/alsa.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/cmi8738.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dos_common.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dsound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/dummy.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1370.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/es1371.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/jack.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/openbsd.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/oss.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/sdl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@drivers/$(DEPDIR)/wasapish.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -558,7 +583,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -629,7 +657,22 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) drivers/$(DEPDIR) + -rm -f ./$(DEPDIR)/convert.Po + -rm -f ./$(DEPDIR)/sexyal.Po + -rm -f drivers/$(DEPDIR)/alsa.Po + -rm -f drivers/$(DEPDIR)/cmi8738.Po + -rm -f drivers/$(DEPDIR)/dos_common.Po + -rm -f drivers/$(DEPDIR)/dsound.Po + -rm -f drivers/$(DEPDIR)/dummy.Po + -rm -f drivers/$(DEPDIR)/es1370.Po + -rm -f drivers/$(DEPDIR)/es1371.Po + -rm -f drivers/$(DEPDIR)/jack.Po + -rm -f drivers/$(DEPDIR)/openbsd.Po + -rm -f drivers/$(DEPDIR)/oss.Po + -rm -f drivers/$(DEPDIR)/sb.Po + -rm -f drivers/$(DEPDIR)/sdl.Po + -rm -f drivers/$(DEPDIR)/wasapi.Po + -rm -f drivers/$(DEPDIR)/wasapish.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -675,7 +718,22 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) drivers/$(DEPDIR) + -rm -f ./$(DEPDIR)/convert.Po + -rm -f ./$(DEPDIR)/sexyal.Po + -rm -f drivers/$(DEPDIR)/alsa.Po + -rm -f drivers/$(DEPDIR)/cmi8738.Po + -rm -f drivers/$(DEPDIR)/dos_common.Po + -rm -f drivers/$(DEPDIR)/dsound.Po + -rm -f drivers/$(DEPDIR)/dummy.Po + -rm -f drivers/$(DEPDIR)/es1370.Po + -rm -f drivers/$(DEPDIR)/es1371.Po + -rm -f drivers/$(DEPDIR)/jack.Po + -rm -f drivers/$(DEPDIR)/openbsd.Po + -rm -f drivers/$(DEPDIR)/oss.Po + -rm -f drivers/$(DEPDIR)/sb.Po + -rm -f drivers/$(DEPDIR)/sdl.Po + -rm -f drivers/$(DEPDIR)/wasapi.Po + -rm -f drivers/$(DEPDIR)/wasapish.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -695,18 +753,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/src/snes/interface.cpp mednafen-1.26.1+dfsg/src/snes/interface.cpp --- mednafen-1.24.3+dfsg/src/snes/interface.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes/interface.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -346,7 +346,6 @@ case bSNES_v059::Input::DeviceMouse: { - assert(port < 2); switch(id) { case bSNES_v059::Input::MouseX: @@ -370,7 +369,6 @@ case bSNES_v059::Input::DeviceSuperScope: { - assert(port < 2); switch(id) { case bSNES_v059::Input::SuperScopeX: diff -Nru mednafen-1.24.3+dfsg/src/snes_faust/debug.cpp mednafen-1.26.1+dfsg/src/snes_faust/debug.cpp --- mednafen-1.24.3+dfsg/src/snes_faust/debug.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes_faust/debug.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -591,6 +591,7 @@ DebuggerInfoStruct DBG_DBGInfo { + true, "cp437", 4, diff -Nru mednafen-1.24.3+dfsg/src/snes_faust/msu1.cpp mednafen-1.26.1+dfsg/src/snes_faust/msu1.cpp --- mednafen-1.24.3+dfsg/src/snes_faust/msu1.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes_faust/msu1.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Fast SNES Emulation Module */ /******************************************************************************/ /* msu1.cpp - MSU1 emulation -** Copyright (C) 2019 Mednafen Team +** Copyright (C) 2019-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -90,8 +90,11 @@ // const float eff_volume = volume * ((1.0 / 255.0f) * 256.0f); - if(MDFN_UNLIKELY(!(status & 0x10) || (status & 0x40))) + if(MDFN_UNLIKELY((status & 0x50) != 0x10 || !audio_reader)) { + if(!(status & 0x60) && !audio_reader) + status &= ~0x10; + while(run_count) { (&ResampBuf[0].BufPudding()->f)[ResampBufPos] = 0; @@ -481,7 +484,6 @@ // // // - audio_reader = new MTStreamReader(affinity_audio); data_reader = new MTStreamReader(affinity_data); // { @@ -500,6 +502,7 @@ const std::string filebase = gf->outside.fbase; const std::string fnamepat = filebase + "-%.pcm"; + const size_t fnamepat_pctpos = fnamepat.size() - 5; const std::string dirpath = gf->outside.dir; std::bitset<65536> trypcm; // May have false positives, should not have false negatives, but who knows with case insensitive filesystems... try @@ -515,10 +518,12 @@ if(si >= fname.size()) return ret; // - if(fnamepat[i] == '%') + if(i == fnamepat_pctpos) { bool first = true; + assert(fnamepat[i] == '%'); + tnum = 0; do { @@ -606,6 +611,9 @@ asi.pos = 0; asi.stream = std::move(afp); + if(!audio_reader) + audio_reader = new MTStreamReader(affinity_audio); + audio_reader->add_stream(std::move(asi)); // td.w = w++; @@ -658,7 +666,7 @@ control = 0x00; data_reader->set_active_stream(0, 0); - if(tracks.size()) + if(audio_reader) audio_reader->set_active_stream(0, 8); // // diff -Nru mednafen-1.24.3+dfsg/src/snes_faust/notes/GAME_NOTES mednafen-1.26.1+dfsg/src/snes_faust/notes/GAME_NOTES --- mednafen-1.24.3+dfsg/src/snes_faust/notes/GAME_NOTES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes_faust/notes/GAME_NOTES 2020-11-10 06:04:17.000000000 +0000 @@ -29,6 +29,11 @@ Hook Tecmo Super Bowl II +// +// Attempts to write(non-HDMA) to VRAM during active display: +// +NBA Pro Basketball: Bulls vs Blazers +Zen-Nihon Pro Wres // // Interlace: diff -Nru mednafen-1.24.3+dfsg/src/snes_faust/ppu_common.inc mednafen-1.26.1+dfsg/src/snes_faust/ppu_common.inc --- mednafen-1.24.3+dfsg/src/snes_faust/ppu_common.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes_faust/ppu_common.inc 2020-11-10 06:04:17.000000000 +0000 @@ -315,7 +315,7 @@ VRAM_ReadBuffer = VRAM[GetVAddr()]; VRAM_Addr += VMAIN_AddrInc; - PPU_MTRENDER::MTIF_Read(A); + PPU_MTRENDER::MTIF_Read(A); // Don't move outside this if() block } return BusLatch[0]; @@ -338,7 +338,7 @@ VRAM_ReadBuffer = VRAM[GetVAddr()]; VRAM_Addr += VMAIN_AddrInc; - PPU_MTRENDER::MTIF_Read(A); + PPU_MTRENDER::MTIF_Read(A); // Don't move outside this if() block } return BusLatch[0]; diff -Nru mednafen-1.24.3+dfsg/src/snes_faust/ppu_mtrender.cpp mednafen-1.26.1+dfsg/src/snes_faust/ppu_mtrender.cpp --- mednafen-1.24.3+dfsg/src/snes_faust/ppu_mtrender.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/snes_faust/ppu_mtrender.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -420,8 +420,7 @@ case 0x39: case 0x3A: //printf("MT VRAM Addr Inc\n"); - if(!VMAIN_IncMode) - VRAM_Addr += VMAIN_AddrInc; + VRAM_Addr += VMAIN_AddrInc; break; } } diff -Nru mednafen-1.24.3+dfsg/src/ss/cdb.cpp mednafen-1.26.1+dfsg/src/ss/cdb.cpp --- mednafen-1.24.3+dfsg/src/ss/cdb.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/cdb.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* cdb.cpp - CD Block Emulation -** Copyright (C) 2016-2017 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -19,14 +19,80 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* + Finicky games: + Astal + Play and Seek command nuances. + + Batman Forever + Seek delay must be high enough, or glitchy batmobile. + + BIOS CD-DA Player + Play and Seek command nuances. + + Break Point + Aborts out to BIOS CD player screen if CDB ever reports + PLAY status for a 1-sector read. + + DJ Wars + Same issue as Break Point. + + Dragon Force II + When trying to skip an FMV, the game will hang until the initial + Play command completes if the CDB in in a PAUSE state due to + buffers being full, and the CDB fails to quickly go into BUSY + state(due to seek start) immediately after a Reset Selector + command frees up buffers. + + Hop Step Idol + Similar issue to Break Point, but fails more spectacularly. + + Independence Day (USA) + Issues 'Get CD Device Connection' command without waiting for + the previously-issued 'Reset Selector' command to completely + finish, expecting the returned value to not be the reset + value. + + Jung Rhythm + Seek delay must be high enough, or will hang when trying to + retry a failed stage. + + Magical Drop III + Needs resetting of 'is_cdrom' status bit to be delayed by a + few dozen microseconds after a seek start triggered by the + Play command. + + NBA Action + Relies on seek to index 2+ functionality. + + Steam Heart's + Play and Seek command nuances. Music should resume where it + left off after pausing and unpausing in-game. + + Tactics Ogre + If repeat handling is wrong, will hang when trying to resume + a suspended game. + + Taito Chase H.Q. + Relies on seek to index 2+ functionality. + + Tenchi Muyou! Ryououki Gokuraku + Quirks with running commands during an Init command software + reset. + + Tennis Arena + Probably same issue as Break Point. + + World Cup France '98 + Same issues as Dragon Force II +*/ + // TODO: Respect auth type with COMMAND_AUTH_DEVICE. // TODO: Test INIT 0x00 side effects(and see if it affects CD device connection) // TODO: edc_lec_check_and_correct -// TODO: Proper seek delays(for "Gungriffon" FMV) - // TODO: Some filesys commands(at least change dir, read file) seem to reset the saved command start and end positions(accessed via 0xFFFFFF to PLAY command) to something // akin to 0. @@ -63,6 +129,8 @@ namespace MDFN_IEN_SS { +static void CheckBufPauseResume(void); + enum { SECLEN__FIRST = 0, @@ -379,6 +447,7 @@ static bool CommandPending; static uint16 SWResetHIRQDeferred; static bool SWResetPending; +static uint8 ResetSelPending; static uint8 CDDevConn; static uint8 LastBufDest; @@ -498,7 +567,7 @@ DRIVEPHASE_STOPPED = 0, DRIVEPHASE_PLAY, - DRIVEPHASE_SEEK_START, + DRIVEPHASE_SEEK_START3, DRIVEPHASE_SEEK, DRIVEPHASE_SCAN, @@ -507,12 +576,19 @@ DRIVEPHASE_EJECTED_WAITING, DRIVEPHASE_STARTUP, - DRIVEPHASE_RESETTING + DRIVEPHASE_RESETTING, + + DRIVEPHASE_SEEK_START1, + DRIVEPHASE_SEEK_START2, + + DRIVEPHASE_PAUSE }; static int64 DriveCounter; static int64 PeriodicIdleCounter; enum : int64 { PeriodicIdleCounter_Reload = (int64)187065 << 32 }; +static int32 PauseCounter; +static bool PlaySectorProcessed; static uint8 PlayRepeatCounter; static uint8 CurPlayRepeat; @@ -893,6 +969,7 @@ Partition_UnlinkBuffer(FLS.pnum, bfi); \ memcpy(FLS.pbuf, &dptr[(dptr[15] == 0x2) ? 24 : 16], 2048); \ Buffer_Free(bfi); \ + CheckBufPauseResume(); \ } #define FLS_READ(buffer, count) \ @@ -1040,7 +1117,6 @@ // Pause // PlayEndIRQType = 0; - CurPlayStart = 0x800000; CurPlayEnd = 0x800000; CurPlayRepeat = 0; // @@ -1282,6 +1358,7 @@ CommandPending = false; SWResetHIRQDeferred = 0; SWResetPending = false; + ResetSelPending = false; CDDevConn = 0; LastBufDest = 0; @@ -1315,6 +1392,9 @@ DriveCounter = 0; PeriodicIdleCounter = 0; + PauseCounter = 0; + PlaySectorProcessed = false; + PlayRepeatCounter = 0; CurPlayRepeat = 0; @@ -1605,27 +1685,18 @@ SWResetHIRQDeferred = 0; } -static void StartSeek(const uint32 cmd_target, const bool no_pickup_change = false) -{ - if(!Cur_CDIF) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_CDB, "[CDB] [BUG] StartSeek() called when no disc present or tray open.\n"); - return; - } - - CurPlayStart = cmd_target; +// +// Should be closer to 600, but 500 is good enough for Magical Drop 3's intro, so +// be more conservative to reduce the probability of breaking a game due +// to CPU timing emulation deficiencies. +// +enum : int32 { SeekCPIUpdateDelay = 500 }; - if(no_pickup_change) - { - if(DrivePhase == DRIVEPHASE_PLAY) - { - // Maybe stop scanning? or before the if(no_pickup_change)... - return; - } - } - else if(cmd_target & 0x800000) +static void SeekStart1(void) +{ + if(CurPlayStart & 0x800000) { - int32 fad_target = cmd_target & 0x7FFFFF; + int32 fad_target = CurPlayStart & 0x7FFFFF; int32 tt = 1; if(fad_target < 150) @@ -1640,7 +1711,7 @@ if(fad_target < (150 + (int32)toc.tracks[track].lba)) break; - + tt = track; } @@ -1652,8 +1723,8 @@ } else { - int32 track_target = (cmd_target >> 8) & 0xFF; - int32 index_target = cmd_target & 0xFF; + int32 track_target = (CurPlayStart >> 8) & 0xFF; + int32 index_target = CurPlayStart & 0xFF; if(track_target > toc.last_track) track_target = toc.last_track; @@ -1671,20 +1742,103 @@ CurPosInfo.rel_fad = 0; CurPosInfo.ctrl_adr = (toc.tracks[track_target].control << 4) | (toc.tracks[track_target].adr << 0); } - // +} + +static void SeekStart2(int delay_sub = 0) +{ CurPosInfo.status = STATUS_BUSY; CurPosInfo.is_cdrom = false; CurPosInfo.repcount = PlayRepeatCounter & 0xF; - DrivePhase = DRIVEPHASE_SEEK_START; + DrivePhase = DRIVEPHASE_SEEK_START3; Cur_CDIF->HintReadSector(CurPosInfo.fad); -// PlayEndIRQPending = false; - PeriodicIdleCounter = PeriodicIdleCounter_Reload; - DriveCounter = (int64)256000 << 32; //(int64)((44100 * 256) / 150) << 32; + DriveCounter = (int64)(256000 - delay_sub) << 32; SeekIndexPhase = 0; } +static void StartSeek(const uint32 cmd_target, const bool no_pickup_change = false) +{ + if(!Cur_CDIF) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_CDB, "[CDB] [BUG] StartSeek() called when no disc present or tray open.\n"); + return; + } + + CurPlayStart = cmd_target; + + if(no_pickup_change) + { + if(DrivePhase == DRIVEPHASE_PLAY) + { + // Maybe stop scanning? or before the if(no_pickup_change)... + return; + } + } + + CurPosInfo.status = STATUS_BUSY; + DrivePhase = no_pickup_change ? DRIVEPHASE_SEEK_START2 : DRIVEPHASE_SEEK_START1; + PeriodicIdleCounter = PeriodicIdleCounter_Reload; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; +} + +static bool CheckEndMet(void) +{ + bool end_met = (CurPosInfo.tno == 0xAA); + + if(CurPlayEnd != 0) + { + if(CurPlayEnd & 0x800000) + end_met |= (CurPosInfo.fad >= (CurPlayEnd & 0x7FFFFF)); + else + { + const unsigned end_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayEnd >> 8) & 0xFF)); + const unsigned end_index = std::min(99, std::max(1, CurPlayEnd & 0xFF)); + + end_met |= (CurPosInfo.tno > end_track) || (CurPosInfo.tno == end_track && CurPosInfo.idx > end_index); + } + } + + // + // Steam Heart's, it's always Steam Heart's... + // + if(CurPlayStart & 0x800000) + { + end_met |= (CurPosInfo.fad < (CurPlayStart & 0x7FFFFF)); + } + else + { + const unsigned start_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayStart >> 8) & 0xFF)); + //const unsigned start_index = std::min(99, std::max(1, CurPlayStart & 0xFF)); + + end_met |= (CurPosInfo.tno < start_track); //|| (CurPosInfo.tno == start_track && CurPosInfo.idx < start_index); + } + + return end_met; +} + +static void CheckBufPauseResume(void) +{ + if(DrivePhase == DRIVEPHASE_PAUSE) + { + const bool end_met = CheckEndMet(); + + if(!end_met && FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Resuming from buffer full pause (fast path).\n"); +#if 0 + CurPosInfo.status = STATUS_BUSY; +#else + SecPreBuf_In = false; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_SEEK_START2; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; + PeriodicIdleCounter = PeriodicIdleCounter_Reload; +#endif + } + } +} + static void Drive_Run(int64 clocks) { DriveCounter -= clocks; @@ -1752,7 +1906,14 @@ DriveCounter += (int64)2000 << 32; break; - case DRIVEPHASE_SEEK_START: + case DRIVEPHASE_SEEK_START1: + SeekStart1(); + // no break + case DRIVEPHASE_SEEK_START2: + SeekStart2(SeekCPIUpdateDelay); + break; + + case DRIVEPHASE_SEEK_START3: // // TODO: Motor spinup from stopped state time penalty? // @@ -1762,11 +1923,13 @@ fad_delta = CurPosInfo.fad - CurSector; - seek_time = 6 * (44100 * 256) / 150; + seek_time = 12 * (44100 * 256) / 150; seek_time += abs(fad_delta) * ((fad_delta < 0) ? 28 : 26); seek_time += (fad_delta < 0 || fad_delta >= 150) ? (44100 * 256) / 150 : 0; //seek_time += fabs(sqrt(CurSector) - sqrt(CurPosInfo.fad)) * 13000; + //printf("%d %d\n", fad_delta, seek_time); + CurPosInfo.status = STATUS_SEEK; DrivePhase = DRIVEPHASE_SEEK; DriveCounter += (int64)seek_time << 32; @@ -1836,6 +1999,7 @@ if(index_ok) { + PlaySectorProcessed = false; DrivePhase = DRIVEPHASE_PLAY; DriveCounter += (int64)((44100 * 256) / ((SubQBuf_Safe[0] & 0x40) ? 150 : 75)) << 32; @@ -1899,39 +2063,34 @@ if(!SecPreBuf_In) { - CurPosInfo.status = STATUS_PLAY; + PlaySectorProcessed = true; + CurSector++; } } // end if(SecPreBuf_In > 0) - + // Fallthrough: + case DRIVEPHASE_PAUSE: PeriodicIdleCounter = 17712LL << 32; - if(DrivePhase == DRIVEPHASE_PLAY) + + if(SecPreBuf_In) { - if(SecPreBuf_In) - { - // TODO: More accurate: - CurPosInfo.status = STATUS_PAUSE; + SS_DBG(SS_DBG_CDB, "[CDB] SecPreBuf_In=%d at sector read time(CurSector=%d, CurPosInfo.fad=%d).\n", CurSector, CurPosInfo.fad); + } + else + { + Cur_CDIF->ReadRawSector(SecPreBuf, CurSector - 150); + SecPreBuf_In = true; - if(SecPreBuf_In > 0) - SS_DBG(SS_DBG_CDB, "[CDB] SB Overflow\n"); - } - else + // TODO:(maybe pointless...) + //if(SubQBuf_Safe[0] & 0x40) + // CurPosInfo.fad = SECTOR HEADER + //else + // CurPosInfo.fad = SUBQ STUFF + CurPosInfo.fad = CurSector; + if(DecodeSubQ(SecPreBuf + 2352)) { - Cur_CDIF->ReadRawSector(SecPreBuf, CurSector - 150); - SecPreBuf_In = true; - - // TODO:(maybe pointless...) - //if(SubQBuf_Safe[0] & 0x40) - // CurPosInfo.fad = SECTOR HEADER - //else - // CurPosInfo.fad = SUBQ STUFF - CurPosInfo.fad = CurSector; - if(DecodeSubQ(SecPreBuf + 2352)) - { - CurPosInfo.rel_fad = (BCD_to_U8(SubQBuf[0x3]) * 60 + BCD_to_U8(SubQBuf[0x4])) * 75 + BCD_to_U8(SubQBuf[0x5]); - CurPosInfo.tno = (SubQBuf[0x1] >= 0xA0) ? SubQBuf[0x1] : BCD_to_U8(SubQBuf[0x1]); - CurPosInfo.idx = BCD_to_U8(SubQBuf[0x2]); - } - CurSector++; + CurPosInfo.rel_fad = (BCD_to_U8(SubQBuf[0x3]) * 60 + BCD_to_U8(SubQBuf[0x4])) * 75 + BCD_to_U8(SubQBuf[0x5]); + CurPosInfo.tno = (SubQBuf[0x1] >= 0xA0) ? SubQBuf[0x1] : BCD_to_U8(SubQBuf[0x1]); + CurPosInfo.idx = BCD_to_U8(SubQBuf[0x2]); } } @@ -1947,62 +2106,56 @@ // // // - if(SecPreBuf_In && DrivePhase == DRIVEPHASE_PLAY) + if(SecPreBuf_In && (DrivePhase == DRIVEPHASE_PLAY || DrivePhase == DRIVEPHASE_PAUSE)) { - bool end_met = (CurPosInfo.tno == 0xAA); + const bool end_met = CheckEndMet(); - if(CurPlayEnd != 0) + if(DrivePhase == DRIVEPHASE_PAUSE) { - if(CurPlayEnd & 0x800000) - end_met |= (CurPosInfo.fad >= (CurPlayEnd & 0x7FFFFF)); - else + SecPreBuf_In = false; + + if(PauseCounter == 1) { - const unsigned end_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayEnd >> 8) & 0xFF)); - const unsigned end_index = std::min(99, std::max(1, CurPlayEnd & 0xFF)); + CurPosInfo.status = STATUS_PAUSE; - end_met |= (CurPosInfo.tno > end_track) || (CurPosInfo.tno == end_track && CurPosInfo.idx > end_index); + if(end_met && PlayEndIRQType) + { + // Don't generate IRQ if we've repeated and there hasn't been a non-end_met sector since. + if(!(PlayRepeatCounter & 0x80)) + TriggerIRQ(PlayEndIRQType & 0xFFFF); // May not be right for EFLS with Read File, maybe EFLS is only triggered after the buffer is written? + PlayEndIRQType = 0; + } + PauseCounter = -1; } - } - - // - // Steam Heart's, it's always Steam Heart's... - // - if(CurPlayStart & 0x800000) - { - end_met |= (CurPosInfo.fad < (CurPlayStart & 0x7FFFFF)); - } - else - { - const unsigned start_track = std::min(toc.last_track, std::max(toc.first_track, (CurPlayStart >> 8) & 0xFF)); - //const unsigned start_index = std::min(99, std::max(1, CurPlayStart & 0xFF)); + else if(PauseCounter == -1) + { + CurPosInfo.status = STATUS_PAUSE; - end_met |= (CurPosInfo.tno < start_track); //|| (CurPosInfo.tno == start_track && CurPosInfo.idx < start_index); + if(!end_met && FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Resuming from buffer full pause.\n"); + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_SEEK_START2; + DriveCounter = (int64)SeekCPIUpdateDelay << 32; + } + } + else + PauseCounter++; } - - if(end_met) + else if(end_met) { SecPreBuf_In = false; if(PlayRepeatCounter >= CurPlayRepeat) { - CurSector = CurPosInfo.fad; - if(PlayEndIRQType) - { - CurPosInfo.status = STATUS_BUSY; - - PlayEndIRQType += 1 << 30; // Crappy delay so we're in STATUS_BUSY state long enough. - - if((PlayEndIRQType >> 30) >= 3) - { - // Don't generate IRQ if we've repeated and there hasn't been a non-end_met sector since. - if(!(PlayRepeatCounter & 0x80)) - TriggerIRQ(PlayEndIRQType & 0xFFFF); // May not be right for EFLS with Read File, maybe EFLS is only triggered after the buffer is written? - PlayEndIRQType = 0; - } - } + SS_DBG(SS_DBG_CDB, "[CDB] Starting play end pause.\n"); + else + SS_DBG(SS_DBG_CDB, "[CDB] Starting pause.\n"); - if(!PlayEndIRQType) - CurPosInfo.status = STATUS_PAUSE; + CurSector = CurPosInfo.fad; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = PlayEndIRQType ? 0 : 1; } else { @@ -2011,11 +2164,28 @@ PlayRepeatCounter |= 0x80; // - StartSeek(PlayCmdStartPos); + SeekStart1(); + SeekStart2(); } } + else if((SubQBuf_Safe[0] & 0x40) && !FreeBufferCount) + { + SS_DBG(SS_DBG_CDB, "[CDB] Starting buffer full pause.\n"); + SecPreBuf_In = false; + CurPosInfo.status = STATUS_BUSY; + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = 0; + } else + { PlayRepeatCounter &= ~0x80; + + if(PlaySectorProcessed) + { + CurPosInfo.status = STATUS_PLAY; + PlaySectorProcessed = false; + } + } } // // @@ -2117,11 +2287,11 @@ { char cdet[128]; GetCommandDetails(CTR.CD, cdet, sizeof(cdet)); - SS_DBG(SS_DBG_CDB, "[CDB] Command: %s --- HIRQ=0x%04x, HIRQ_Mask=0x%04x\n", cdet, HIRQ, HIRQ_Mask); + SS_DBG(SS_DBG_CDB, "[CDB] Command: %s --- HIRQ=0x%04x, HIRQ_Mask=0x%04x --- %u\n", cdet, HIRQ, HIRQ_Mask, timestamp); } // // - CMD_EAT_CLOCKS(84); + CMD_EAT_CLOCKS(84); //90); // // @@ -2296,6 +2466,9 @@ TriggerIRQ(HIRQ_EHST); } } + // + // + CheckBufPauseResume(); } else BasicResults((MakeBaseStatus() << 8) | 0xFF, 0xFFFF, 0, 0); @@ -2593,6 +2766,7 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); { const uint32 fad = ((CTR.CD[0] & 0xFF) << 16) | CTR.CD[1]; const uint32 range = ((CTR.CD[2] & 0xFF) << 16) | CTR.CD[3]; @@ -2601,7 +2775,7 @@ CDStatusResults(); } - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2637,6 +2811,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); + Filters[fnum].Channel = CTR.CD[0] & 0xFF; Filters[fnum].SubModeMask = CTR.CD[1] >> 8; Filters[fnum].CInfoMask = CTR.CD[1] & 0xFF; @@ -2646,7 +2822,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2681,6 +2857,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(30); + Filters[fnum].Mode = CTR.CD[0] & 0xFF; if(CTR.CD[0] & 0x80) @@ -2688,7 +2866,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //211); TriggerIRQ(HIRQ_ESEL); } #undef fnum @@ -2722,6 +2900,8 @@ CDStatusResults(true); else { + //CMD_EAT_CLOCKS(41); + if(fcflags & 0x1) Filter_SetTrueConn(fnum, tconn); @@ -2730,7 +2910,7 @@ CDStatusResults(); - CMD_EAT_CLOCKS(96); + CMD_EAT_CLOCKS(96); //192 + ((fcflags & 0x1) ? 167 : 0) + ((fcflags & 0x2) ? 198 : 0)); TriggerIRQ(HIRQ_ESEL); } #undef fconn @@ -2778,62 +2958,36 @@ { Partition_Clear(pnum); + //CMD_EAT_CLOCKS(34); + CDStatusResults(); // // // - CMD_EAT_CLOCKS(150); - TriggerIRQ(HIRQ_ESEL); + CMD_EAT_CLOCKS(150); //224); + TriggerIRQ(HIRQ_ESEL); + // + // + CheckBufPauseResume(); } } else { - for(unsigned pnum = 0; pnum < 0x18; pnum++) - { - if(rflags & 0x04) // Initialize all partition data - { - Partition_Clear(pnum); - } - - // TODO: Initialize all partition output connectors. - // Has to do with MPEG decoding, copy/move sector data - // commands, and maybe some other commands too? - if(rflags & 0x08) - { - - } - - if(rflags & 0x10) // Initialize all filter conditions - { - Filter_ResetCond(pnum); - } - - if(rflags & 0x20) // Initialize all filter input connectors - { - if(pnum == CDDevConn) - CDDevConn = 0xFF; - - if(Filters[pnum].FalseConn < 0x18) - Filters[pnum].FalseConn = 0xFF; - } - - if(rflags & 0x40) // Initialize all true output connectors - { - Filters[pnum].TrueConn = pnum; - } - - if(rflags & 0x80) // Initialize all false output connectors - { - Filters[pnum].FalseConn = 0xFF; - } - } CDStatusResults(); // // // + ResetSelPending = rflags; + // // TODO: Accurate timing(while not blocking other command execution and sector reading). - CMD_EAT_CLOCKS(300); - TriggerIRQ(HIRQ_ESEL); + CMD_EAT_CLOCKS((ResetSelPending & 0xAC) ? 400 : 300); + + // + // Half-assed handling of goofy games(e.g. USA release of "Independence Day") that issue a Get CD Device Connection command + // before the Reset Selector command resets it. + // + if((ResetSelPending & 0x3C) > 0x20 && CommandPending && (CData[0] >> 8) == COMMAND_GET_CDDEVCONN) + continue; } } // @@ -3136,6 +3290,9 @@ CMD_EAT_CLOCKS(485); TriggerIRQ(HIRQ_EHST); + // + // + CheckBufPauseResume(); } else { @@ -3547,6 +3704,58 @@ CommandPending = false; } + if(ResetSelPending) + { + const unsigned rflags = ResetSelPending; + ResetSelPending = false; + + for(unsigned pnum = 0; pnum < 0x18; pnum++) + { + if(rflags & 0x04) // Initialize all partition data + { + Partition_Clear(pnum); + } + + // TODO: Initialize all partition output connectors. + // Has to do with MPEG decoding, copy/move sector data + // commands, and maybe some other commands too? + if(rflags & 0x08) + { + + } + + if(rflags & 0x10) // Initialize all filter conditions + { + Filter_ResetCond(pnum); + } + + if(rflags & 0x20) // Initialize all filter input connectors + { + if(pnum == CDDevConn) + CDDevConn = 0xFF; + + if(Filters[pnum].FalseConn < 0x18) + Filters[pnum].FalseConn = 0xFF; + } + + if(rflags & 0x40) // Initialize all true output connectors + { + Filters[pnum].TrueConn = pnum; + } + + if(rflags & 0x80) // Initialize all false output connectors + { + Filters[pnum].FalseConn = 0xFF; + } + } + + TriggerIRQ(HIRQ_ESEL); + // + // + // + CheckBufPauseResume(); + } + if(SWResetPending) { SWResetPending = false; @@ -3579,6 +3788,7 @@ CommandPending = false; SWResetPending = false; SWResetHIRQDeferred = 0; + ResetSelPending = false; ResultsRead = true; memset(&DT, 0, sizeof(DT)); @@ -3810,6 +4020,7 @@ SFVAR(CommandPending), SFVAR(SWResetHIRQDeferred), SFVAR(SWResetPending), + SFVAR(ResetSelPending), SFVAR(CDDevConn), SFVAR(LastBufDest), @@ -3893,6 +4104,9 @@ SFVAR(DriveCounter), SFVAR(PeriodicIdleCounter), + SFVAR(PauseCounter), + SFVAR(PlaySectorProcessed), + SFVAR(PlayRepeatCounter), SFVAR(CurPlayRepeat), @@ -3979,6 +4193,25 @@ if(load) { + if(load < 0x00102600) + { + if(DrivePhase == DRIVEPHASE_PLAY && SecPreBuf_In) + { + //printf("CurSector--\n"); + CurSector--; + } + + if(CurPosInfo.status == STATUS_PAUSE && DrivePhase == DRIVEPHASE_PLAY) + { + //printf("Pause fixup.\n"); + DrivePhase = DRIVEPHASE_PAUSE; + PauseCounter = -1; + } + } + // + // + // + // FIXME: Sanitizing! // // diff -Nru mednafen-1.24.3+dfsg/src/ss/db.cpp mednafen-1.26.1+dfsg/src/ss/db.cpp --- mednafen-1.24.3+dfsg/src/ss/db.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/db.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* db.cpp: -** Copyright (C) 2016-2019 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -21,12 +21,9 @@ /* Grandia could use full cache emulation to fix a hang at the end of disc 1, but - it glitches graphically during gameplay with it enabled, possibly from - VDP1 drawing completing too fast relative to the CPU... Also it makes - emulator CPU usage too high. - - Lost World(Jurassic Park) could use full cache emulation to fix some disappearing background graphics(at least mostly), but - it makes emulator CPU usage borderline too high. + FMVs make the emulator CPU usage too high; there's also currently a timing bug in + the VDP1 frame swap/draw start code that causes Grandia to glitch out during gameplay + with full cache emulation enabled. */ #include @@ -114,7 +111,7 @@ { "T-3116G", CART_EXTRAM_1M, "Samurai Spirits - Amakusa Kourin (Japan)", gettext_noop("Game requirement.") }, // Incompatible with 4MiB extended RAM cart. { "T-3104G", CART_EXTRAM_1M, "Samurai Spirits - Zankurou Musouken (Japan)", gettext_noop("Game requirement.") }, { "610636008",CART_EXTRAM_1M,"Tech Saturn 1997.6 (Japan)", gettext_noop("Required by \"Groove on Fight\" demo.") }, - { "T-16509G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan) (TODO: Test)" }, + { "T-16509G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan)" }, { "T-16510G", CART_EXTRAM_1M, "Super Real Mahjong P7 (Japan)" }, // Would 4MiB be better? { "T-3108G", CART_EXTRAM_1M, "The King of Fighters '96 (Japan)", gettext_noop("Game requirement.") }, { "T-3121G", CART_EXTRAM_1M, "The King of Fighters '97 (Japan)", gettext_noop("Game requirement.") }, @@ -203,6 +200,9 @@ { "T-1219G", CART_BACKUP_MEM, "Bio Hazard (Japan)" }, { "T-1221H", CART_BACKUP_MEM, "Resident Evil (USA)" }, { "MK-81092", CART_BACKUP_MEM, "Resident Evil (Europe)" }, + { "T-7601G", CART_BACKUP_MEM, "Sangokushi IV (Japan)" }, + { "T-7644G", CART_BAKCUP_MEM, "Sangokushi IV with Power-Up Kit (Japan)" }, + { "T-7601H", CART_BACKUP_MEM, "Romance of the Three Kingdoms IV - Wall of Fire (USA)" }, { "MK-81383", CART_BACKUP_MEM, "Shining Force III (Europe/USA)" }, // ~ { "GS-9175", CART_BACKUP_MEM, "Shining Force III - Scenario 1 (Japan)" }, // ~ { "GS-9188", CART_BACKUP_MEM, "Shining Force III - Scenario 2 (Japan)" }, // ~ @@ -231,75 +231,134 @@ static const struct { const char* sgid; + const char* sgname; + const char* sgarea; unsigned mode; const char* game_name; const char* purpose; uint8 fd_id[16]; } cemdb[] = { - { "T-9705H", CPUCACHE_EMUMODE_DATA_CB, "Area 51 (USA)", gettext_noop("Fixes game hang.") }, - { "T-25408H", CPUCACHE_EMUMODE_DATA_CB, "Area 51 (Europe)", gettext_noop("Fixes game hang.") }, - { "MK-81036", CPUCACHE_EMUMODE_DATA_CB, "Clockwork Knight 2 (USA)", gettext_noop("Fixes game hang that occurred when some FMVs were played.") }, - { "T-30304G", CPUCACHE_EMUMODE_DATA_CB, "DeJig - Lassen Art Collection (Japan)", gettext_noop("Fixes graphical glitches.") }, - { "GS-9184", CPUCACHE_EMUMODE_DATA_CB, "Dragon Force II (Japan)", gettext_noop("Fixes math and game logic errors during battles.") }, - { "T-18504G", CPUCACHE_EMUMODE_DATA_CB, "Father Christmas (Japan)", gettext_noop("Fixes stuck music and voice acting.") }, - { "GS-9101", CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Japan)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, - { "MK-81041", CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Europe/USA)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, - { "T-7309G", CPUCACHE_EMUMODE_DATA_CB, "Formula Grand Prix - Team Unei Simulation (Japan)", gettext_noop("Fixes game hang.") }, - { "MK-81045", CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Europe/USA)", gettext_noop("Fixes flickering title screen.") }, - { "GS-9041", CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Japan)", gettext_noop("Fixes flickering title screen.") }, - { "GS-9173", CPUCACHE_EMUMODE_DATA_CB, "House of the Dead (Japan)", gettext_noop("Fixes game crash on lightgun calibration screen.") }, - { "GS-9055", CPUCACHE_EMUMODE_DATA_CB, "Linkle Liver Story (Japan)", gettext_noop("Fixes game crash when going to the world map.") }, - { "T-14415G", CPUCACHE_EMUMODE_DATA_CB, "Ronde (Japan)", gettext_noop("Fixes missing graphics on the title screen, main menu, and elsewhere.") }, - { "81600", CPUCACHE_EMUMODE_DATA_CB, "Sega Saturn Choice Cuts (USA)", gettext_noop("Fixes FMV playback hangs and playback failures.") }, - { "610680501",CPUCACHE_EMUMODE_DATA_CB, "Segakore Sega Bible Mogitate SegaSaturn (Japan)", gettext_noop("") }, // ? ? ? - { "T-18703G", CPUCACHE_EMUMODE_DATA_CB, "Shunsai (Japan)", gettext_noop("Fixes various graphical glitches.") }, - { "T-7001H", CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (USA)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, - { "T-7014G", CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Japan)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, + { "T-9705H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Area 51 (USA)", gettext_noop("Fixes game hang.") }, + { "T-25408H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Area 51 (Europe)", gettext_noop("Fixes game hang.") }, + { "MK-81036", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Clockwork Knight 2 (USA)", gettext_noop("Fixes game hang that occurred when some FMVs were played.") }, + { "T-30304G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "DeJig - Lassen Art Collection (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "T-19801G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Doraemon - Nobita to Fukkatsu no Hoshi (Japan)", gettext_noop("Fixes blank Game Over screen.") }, + { "GS-9184", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Dragon Force II (Japan)", gettext_noop("Fixes math and game logic errors during battles.") }, + { "T-18504G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Father Christmas (Japan)", gettext_noop("Fixes stuck music and voice acting.") }, + { "GS-9101", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Japan)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, + { "MK-81041", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Fighting Vipers (Europe/USA)", gettext_noop("Fixes computer-controlled opponent turning into a ghost statue.") }, + { "T-7309G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Formula Grand Prix - Team Unei Simulation (Japan)", gettext_noop("Fixes game hang.") }, + { "MK-81045", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Europe/USA)", gettext_noop("Fixes flickering title screen.") }, + { "GS-9041", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Golden Axe - The Duel (Japan)", gettext_noop("Fixes flickering title screen.") }, + { "GS-9173", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "House of the Dead (Japan)", gettext_noop("Fixes game crash on lightgun calibration screen.") }, + { "GS-9055", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Linkle Liver Story (Japan)", gettext_noop("Fixes game crash when going to the world map.") }, + { "T-25302G1", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mahjong Doukyuusei Special (Japan)", gettext_noop("Fixes missing background layer on disc 2.") }, + { "T-25302G2", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mahjong Doukyuusei Special (Japan)", gettext_noop("Fixes missing background layer on disc 2.") }, + { "T-28901G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Mujintou Monogatari R - Futari no Love Love Island (Japan)", gettext_noop("Fixes glitches when character graphics change.") }, + { "T-14415G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Ronde (Japan)", gettext_noop("Fixes missing graphics on the title screen, main menu, and elsewhere.") }, + { "81600", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Sega Saturn Choice Cuts (USA)", gettext_noop("Fixes FMV playback hangs and playback failures.") }, + { "610680501", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Segakore Sega Bible Mogitate SegaSaturn (Japan)", gettext_noop("Fixes graphical glitch on the character select screen in the \"Zero Divide\" demo.") }, + { "T-18703G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Shunsai (Japan)", gettext_noop("Fixes various graphical glitches.") }, + { "T-7001H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (USA)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, + { "T-7014G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Japan)", gettext_noop("Fixes hang at corrupted \"Burst\" logo.") }, // Nooo, causes glitches: { "T-7001H-50",CPUCACHE_EMUMODE_DATA_CB, "Spot Goes to Hollywood (Europe) - { "T-1206G", CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero (Japan)", gettext_noop("Fixes weird color/palette issues during game startup.") }, - { "T-1246G", CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero 3 (Japan)", gettext_noop("") }, // ? ? ? - { "T-1215H", CPUCACHE_EMUMODE_DATA_CB, "Super Puzzle Fighter II Turbo (USA)", gettext_noop("Fixes color/brightness and other graphical issues.") }, - { "T-5001H", CPUCACHE_EMUMODE_DATA_CB, "Theme Park (Europe)", gettext_noop("Fixes hang during FMV.") }, - { "T-1807G", CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 1 (Japan)", gettext_noop("Fixes explosion graphic glitches in \"Thunder Force III\".") }, - { "T-1808G", CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 2 (Japan)", gettext_noop("Fixes hang when pausing the game under certain conditions in \"Thunder Force AC\".") }, - { "GS-9113", CPUCACHE_EMUMODE_DATA_CB, "Virtua Fighter Kids (Java Tea Original)", gettext_noop("Fixes malfunction of computer-controlled player.") }, - { "T-2206G", CPUCACHE_EMUMODE_DATA_CB, "Virtual Mahjong (Japan)", gettext_noop("Fixes graphical glitches on the character select screen.") }, - { "T-15005G", CPUCACHE_EMUMODE_DATA_CB, "Virtual Volleyball (Japan)", gettext_noop("Fixes invisible menu items and hang.") }, - { "T-18601H", CPUCACHE_EMUMODE_DATA_CB, "WipEout (USA)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "T-18603G", CPUCACHE_EMUMODE_DATA_CB, "WipEout (Japan)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "T-11301H", CPUCACHE_EMUMODE_DATA_CB, "WipEout (Europe)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, - { "GS-9061", CPUCACHE_EMUMODE_DATA_CB, "Hideo Nomo World Series Baseball (Japan)", gettext_noop("Fixes severe gameplay logic glitches.") }, - { "MK-81109", CPUCACHE_EMUMODE_DATA_CB, "World Series Baseball (Europe/USA)", gettext_noop("Fixes severe gameplay logic glitches.") }, - - //{ "MK-81019", CPUCACHE_EMUMODE_DATA }, // Astal (USA) + { "T-1206G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero (Japan)", gettext_noop("Fixes weird color/palette issues during game startup.") }, + { "T-1246G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Street Fighter Zero 3 (Japan)", gettext_noop("") }, // ? ? ? + { "T-1215H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Super Puzzle Fighter II Turbo (USA)", gettext_noop("Fixes color/brightness and other graphical issues.") }, + { "T-5001H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Theme Park (Europe)", gettext_noop("Fixes hang during FMV.") }, + { "T-1808G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Thunder Force Gold Pack 2 (Japan)", gettext_noop("Fixes hang when pausing the game under certain conditions in \"Thunder Force AC\".") }, + { "GS-9079","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (Japan/Europe)", gettext_noop("Fixes FMV glitches.") }, + { "GS-9113","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (Korea/Java Tea Original)", gettext_noop("Fixes FMV glitches and/or malfunction of computer-controlled player.") }, + { "MK-81049","VF. KIDS",NULL,CPUCACHE_EMUMODE_DATA_CB,"Virtua Fighter Kids (USA)", gettext_noop("Fixes FMV glitches.") }, + { "T-2206G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Virtual Mahjong (Japan)", gettext_noop("Fixes graphical glitches on the character select screen.") }, + { "T-15005G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Virtual Volleyball (Japan)", gettext_noop("Fixes invisible menu items and hang.") }, + { "T-18601H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (USA)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "T-18603G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (Japan)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "T-11301H", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "WipEout (Europe)", gettext_noop("Fixes hang when trying to exit gameplay back to the main menu.") }, + { "GS-9061", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Hideo Nomo World Series Baseball (Japan)", gettext_noop("Fixes severe gameplay logic glitches.") }, + { "MK-81109", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "World Series Baseball (Europe/USA)", gettext_noop("Fixes severe gameplay logic glitches.") }, + { "T-31601G", NULL, NULL, CPUCACHE_EMUMODE_DATA_CB, "Zero Divide - The Final Conflict (Japan)", gettext_noop("Fixes graphical glitch on the character select screen.") }, + //{ "MK-81019", NULL, NULL, CPUCACHE_EMUMODE_DATA }, // Astal (USA) //{ "GS-9019", CPUCACHE_EMUMODE_DATA }, // Astal (Japan) - { "T-1507G", CPUCACHE_EMUMODE_FULL, "Albert Odyssey (Japan)", gettext_noop("") }, - { "T-12705H", CPUCACHE_EMUMODE_FULL, "Albert Odyssey (USA)", gettext_noop("Fixes battle text truncation.") }, - { "GS-9123", CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Japan)", gettext_noop("Fixes game hang.") }, - { "T-16103H", CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Europe/USA)", gettext_noop("Fixes game hang.") }, - { "T-13331G", CPUCACHE_EMUMODE_FULL, "Digital Monster Version S (Japan)", gettext_noop("Fixes game hang.") }, - //{ "T-20502G", CPUCACHE_EMUMODE_FULL, "Discworld (Japan) (still broken...)" }, - { "T-13310G", CPUCACHE_EMUMODE_FULL, "GeGeGe no Kitarou (Japan)", gettext_noop("Fixes game hang.") }, - { "T-15904G", CPUCACHE_EMUMODE_FULL, "Gex (Japan)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15904H", CPUCACHE_EMUMODE_FULL, "Gex (USA)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15904H50", CPUCACHE_EMUMODE_FULL, "Gex (Europe)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-27901G", CPUCACHE_EMUMODE_FULL, "Lunar - Silver Star Story (Japan)", gettext_noop("Fixes FMV flickering with alternative BIOS.") }, - { "T-7664G", CPUCACHE_EMUMODE_FULL, "Nobunaga no Yabou Shouseiroku (Japan)", gettext_noop("Fixes game hang.") }, - { "T-9510G", CPUCACHE_EMUMODE_FULL, "Policenauts (Japan)", gettext_noop("Fixes screen flickering on disc 2.") }, - { "T-25416H50", CPUCACHE_EMUMODE_FULL, "Rampage - World Tour (Europe)", gettext_noop("Fixes game hang.") }, - { "T-159056", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-159028H", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-15902H50", CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, - { "T-8119G", CPUCACHE_EMUMODE_FULL, "Space Jam (Japan)", gettext_noop("Fixes game crash.") }, - { "T-8125H", CPUCACHE_EMUMODE_FULL, "Space Jam (USA)", gettext_noop("Fixes game crash.") }, - { "T-8125H-50", CPUCACHE_EMUMODE_FULL, "Space Jam (Europe)", gettext_noop("Fixes game crash.") }, - { "T-36102G", CPUCACHE_EMUMODE_FULL, "Whizz (Japan)", gettext_noop("Fixes quasi-random hangs during startup.") }, - { "T-9515H-50", CPUCACHE_EMUMODE_FULL, "Whizz (Europe)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-15906H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "3D Baseball (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-18003G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "3D Baseball - The Majors (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-1507G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Albert Odyssey (Japan)", gettext_noop("") }, + { "T-12705H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Albert Odyssey (USA)", gettext_noop("Fixes battle text truncation.") }, + //{ "MK-81501", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Baku Baku Animal (Europe)", gettext_noop("Fixes hang when trying to watch a movie in the \"Movie Viewer\".") }, + { "T-16201H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Corpse Killer (USA)", gettext_noop("Fixes glitchy rotation-zoom effect.") }, + { "T-8124H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8124H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8124H-18",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Crow, The (Germany)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-36101G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Dark Seed II (Japan)", gettext_noop("Fixes game hang.") }, + { "GS-9123", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Japan)", gettext_noop("Fixes game hang.") }, + { "T-16103H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Die Hard Trilogy (Europe/USA)", gettext_noop("Fixes game hang.") }, + // Not needed in 1.26.0, and actually causes a game hang, probably due to lack of SCI emulation messing up game timing: { "T-13331G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Digital Monster Version S (Japan)", gettext_noop("Fixes game hang.") }, + { "T-13310G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "GeGeGe no Kitarou (Japan)", gettext_noop("Fixes game hang.") }, + { "T-15904G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15904H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15904H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Gex (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-24301G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Horror Tour (Japan)", gettext_noop("Fixes graphical glitches on the save and load screens.") }, + { "T-22403G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Irem Arcade Classics (Japan)", gettext_noop("Fixes hang when trying to start \"Zippy Race\".") }, + { "GS-9142", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Kidou Senkan Nadesico - Yappari Saigo wa Ai ga Katsu", gettext_noop("Fixes game hang.") }, + { "GS-9162", NULL, NULL, CPUCACHE_EMUMODE_FULL, "The Lost World - Jurassic Park (Japan)", gettext_noop("Fixes most graphical glitches in rock faces.") }, + { "MK-81065", NULL, NULL, CPUCACHE_EMUMODE_FULL, "The Lost World - Jurassic Park (Europe/USA)", gettext_noop("Fixes most graphical glitches in rock faces.") }, + { "T-27901G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Lunar - Silver Star Story (Japan)", gettext_noop("Fixes FMV flickering.") }, + { "MK-81103", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NBA Action (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "MK81103-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "NBA Action (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8105G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8109H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8109H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "NFL Quarterback Club 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-7664G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Nobunaga no Yabou Shouseiroku (Japan)", gettext_noop("Fixes game hang.") }, + { "T-9510G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Policenauts (Japan)", gettext_noop("Fixes screen flickering on disc 2.") }, + { "T-25416H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Rampage - World Tour (Europe)", gettext_noop("Fixes game hang.") }, + { "T-37401G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Senken Kigyouden (Japan)", gettext_noop("Fixes dialogue text truncation.") }, + { "T-37401H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Xian Jian Qi Xia Zhuan (Taiwan)", gettext_noop("Fixes dialogue text truncation.") }, + { "T-159056", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-159028H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15902H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Slam 'n Jam 96 (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-8119G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (Japan)", gettext_noop("Fixes game crash.") }, + { "T-8125H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (USA)", gettext_noop("Fixes game crash.") }, + { "T-8125H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Space Jam (Europe)", gettext_noop("Fixes game crash.") }, + { "T-1807G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Thunder Force Gold Pack 1 (Japan)", gettext_noop("Fixes explosion graphic glitches in \"Thunder Force III\".") }, + { "T-15903G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Titan Wars (Japan)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15911H", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Solar Eclipse (USA)", gettext_noop("Fixes minor FMV glitches.") }, + { "T-15911H50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Titan Wars (Europe)", gettext_noop("Fixes minor FMV glitches.") }, + { "MK-81015", NULL, "E", CPUCACHE_EMUMODE_FULL, "Virtua Cop (Europe)", gettext_noop("Fixes game hang.") }, + { "MK-81043", NULL, "E", CPUCACHE_EMUMODE_FULL, "Virtua Cop 2 (Europe)", gettext_noop("Fixes game hang.") }, + { "GS-9001", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81005", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK_8100550",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "GS-9039", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81023", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK-8102350",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "SG-7103", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Virtua Fighter Remix (SegaNet)", gettext_noop("Fixes graphical glitches.") }, + { "T-36102G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Whizz (Japan)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-9515H-50",NULL, NULL, CPUCACHE_EMUMODE_FULL, "Whizz (Europe)", gettext_noop("Fixes quasi-random hangs during startup.") }, + { "T-28004G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yu-No (Japan)", gettext_noop("Fixes FMV ending too soon.") }, + // + // DMA overhead sensitive games, may be fragile: + // +#if 0 + { "T-38001G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Another Memories (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27810G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Device Reign (Japan)", gettext_noop("Fixes game hang.") }, + { "T-30002G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Real Sound - Kaze no Regret (Japan)", gettext_noop("Fixes game hang.") }, + { "T-13324G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "SD Gundam G Century S (Japan)", gettext_noop("Fixes game hang.") }, + { "T-26413G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Super Tempo (Japan)", gettext_noop("Fixes game hang.") }, + { "T-17703G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Tennis Arena (Japan)", gettext_noop("Fixes game hang.") }, + { "T-32508G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Tilk - Aoi Umi kara Kita Shoujo (Japan)", gettext_noop("Fixes game hang.") }, + { "6106602", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku Demo (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27804G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27806G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu no Kobako Official Collection (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27807G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku 2nd Album (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27808G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku ensemble (Japan)", gettext_noop("Fixes game hang.") }, + { "T-27809G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Yuukyuu Gensoukyoku ensemble 2 (Japan)", gettext_noop("Fixes game hang.") }, + { "T-21401G", NULL, NULL, CPUCACHE_EMUMODE_FULL, "Zero4 Champ DooZy-J Type-R (Japan)", gettext_noop("Fixes game hang.") }, +#endif }; -void DB_Lookup(const char* path, const char* sgid, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode) +void DB_Lookup(const char* path, const char* sgid, const char* sgname, const char* sgarea, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode) { for(auto& re : regiondb) { @@ -321,7 +380,22 @@ for(auto& c : cemdb) { - if((c.sgid && !strcmp(c.sgid, sgid)) || (!c.sgid && !memcmp(c.fd_id, fd_id, 16))) + bool match; + + if(c.sgid) + { + match = !strcmp(c.sgid, sgid); + + if(c.sgname) + match &= !strcmp(c.sgname, sgname); + + if(c.sgarea) + match &= !strcmp(c.sgarea, sgarea); + } + else + match = !memcmp(c.fd_id, fd_id, 16); + + if(match) { *cpucache_emumode = c.mode; break; @@ -340,7 +414,6 @@ { { "GS-9126", HORRIBLEHACK_NOSH2DMAPENALTY, "Fighters Megamix (Japan)", gettext_noop("Fixes hang after watching or aborting FMV playback.") }, { "MK-81073", HORRIBLEHACK_NOSH2DMAPENALTY, "Fighters Megamix (Europe/USA)", gettext_noop("Fixes hang after watching or aborting FMV playback.") }, - { "T-22403G", HORRIBLEHACK_NOSH2DMAPENALTY, "Irem Arcade Classics (Japan)", gettext_noop("Fixes hang when trying to start \"Zippy Race\".") }, // (way too finicky...) { "T-4507G", HORRIBLEHACK_VDP1VRAM5000FIX, "Grandia (Japan)", gettext_noop("Fixes hang at end of first disc.") }, @@ -352,10 +425,23 @@ { "6106856", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers Taikenban (Japan)", gettext_noop("Fixes flickering rescue text.") }, { "GS-9174", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers (Japan)", gettext_noop("Fixes flickering rescue text.") }, { "MK-81803", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Burning Rangers (Europe/USA)", gettext_noop("Fixes flickering rescue text.") }, + { "T-31505G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Falcom Classics II (Japan)", gettext_noop("Fixes FMV tearing in \"Ys II\".") }, { "T-8111G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Frank Thomas Big Hurt Baseball (Japan)", gettext_noop("Reduces graphical glitches.") }, { "T-8138H", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Frank Thomas Big Hurt Baseball (USA)", gettext_noop("Reduces graphical glitches.") }, // Probably need more-accurate VDP1 draw timings to fix the glitches completely. + { "T-9504G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Tokimeki Memorial - Forever with You (Japan)", gettext_noop("Fixes glitchy frames on the Konami intro arm sprite.") }, + { "T-15006G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Kaitei Daisensou (Japan)", gettext_noop("Fixes FMV tearing.") }, + { "T-10001G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "In The Hunt (Europe/USA)", gettext_noop("Fixes FMV tearing.") }, + { "GS-9001", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81005", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK_8100550", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Virtua Fighter (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "GS-9039", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "MK-81023", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (USA)", gettext_noop("Fixes graphical glitches.") }, + { "MK-8102350", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Virtua Fighter Remix (Europe)", gettext_noop("Fixes graphical glitches.") }, + { "SG-7103", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Virtua Fighter Remix (SegaNet)", gettext_noop("Fixes graphical glitches.") }, { "T-36102G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Whizz (Japan)", gettext_noop("Fixes major graphical issues during gameplay.") }, { "T-9515H-50", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN,"Whizz (Europe)", gettext_noop("Fixes major graphical issues during gameplay.") }, + { "T-26105G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Wolf Fang SS - Kuuga 2001 (Japan)", gettext_noop("Fixes graphical glitches.") }, + { "T-28004G", HORRIBLEHACK_VDP1RWDRAWSLOWDOWN, "Yu-No (Japan)", gettext_noop("Reduces FMV tearing.") }, // Still random hangs...wtf is this game doing... { "T-6006G", HORRIBLEHACK_NOSH2DMALINE106 | HORRIBLEHACK_VDP1INSTANT, "Thunderhawk II (Japan)", gettext_noop("Fixes hangs just before and during gameplay.") }, @@ -380,6 +466,28 @@ return MDFN_sprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", fd_id[0], fd_id[1], fd_id[2], fd_id[3], fd_id[4], fd_id[5], fd_id[6], fd_id[7], fd_id[8], fd_id[9], fd_id[10], fd_id[11], fd_id[12], fd_id[13], fd_id[14], fd_id[15]); } +std::string DB_GetHHDescriptions(const uint32 hhv) +{ + std::string sv; + + if(hhv & HORRIBLEHACK_NOSH2DMALINE106) + sv += "Block SH-2 DMA on last line of frame. "; + + if(hhv & HORRIBLEHACK_NOSH2DMAPENALTY) + sv += "Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. "; + + if(hhv & HORRIBLEHACK_VDP1VRAM5000FIX) + sv += "Patch VDP1 VRAM to break an infinite loop. "; + + if(hhv & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN) + sv += "SH-2 reads/writes from/to VDP1 slow down command execution. "; + + if(hhv & HORRIBLEHACK_VDP1INSTANT) + sv += "Execute VDP1 commands instantly. "; + + return sv; +} + void DB_GetInternalDB(std::vector* databases) { databases->push_back({ @@ -458,7 +566,7 @@ databases->push_back({ "cachemode", gettext_noop("Cache Mode"), - gettext_noop("This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally due to the large increase in host CPU usage, along with the potential of causing games that fully utilize both SH-2 CPUs to run significantly slower than they should due to inadequate emulation of bus sharing/contention.") + gettext_noop("This database is used to automatically select cache emulation mode, to fix various logic and timing issues in games. The default cache mode is data-only(with no high-level bypass).\n\nThe cache mode \"Data-only, with high-level bypass\" is a hack of sorts, to work around cache coherency bugs in games. These bugs are typically masked on a real Saturn due to the effects of instruction fetches on the cache, but become a problem when only data caching is emulated.\n\nFull cache emulation is not enabled globally primarily due to the large increase in host CPU usage.") }); for(auto& c : cemdb) { @@ -472,8 +580,32 @@ } GameDB_Entry e; - e.GameID = c.sgid ? c.sgid : FDIDToString(c.fd_id); - e.GameIDIsHash = !c.sgid; + if(c.sgid) + { + unsigned lfcount = 0; + + e.GameIDIsHash = false; + e.GameID = c.sgid; + + if(c.sgname) + { + for(; lfcount < 1; lfcount++) + e.GameID += '\n'; + e.GameID += c.sgname; + } + + if(c.sgarea) + { + for(; lfcount < 2; lfcount++) + e.GameID += '\n'; + e.GameID += c.sgarea; + } + } + else + { + e.GameIDIsHash = true; + e.GameID = FDIDToString(c.fd_id); + } e.Name = c.game_name; e.Setting = sv; e.Purpose = c.purpose ? _(c.purpose) : ""; @@ -486,30 +618,11 @@ databases->push_back({ "horriblehacks", gettext_noop("Horrible Hacks"), - gettext_noop("This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 CPU reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.") + gettext_noop("This database is used to automatically enable various horrible hacks to fix issues in certain games.\n\nNote that slowing down VDP1 command execution due to SH-2 reads/writes isn't a horrible hack per-se, but it's activated on a per-game basis to avoid the likelihood of breaking some games due to overall Saturn emulation timing inaccuracies.") }); for(auto& hh : hhdb) { - std::string sv; - unsigned hhv = hh.horrible_hacks; - - if(hhv & HORRIBLEHACK_NOSH2DMALINE106) - sv += "Block SH-2 DMA on last line of frame. "; - - if(hhv & HORRIBLEHACK_NOSH2DMAPENALTY) - sv += "Disable slowing down of SH-2 CPU reads/writes during SH-2 DMA. "; - - if(hhv & HORRIBLEHACK_VDP1VRAM5000FIX) - sv += "Patch VDP1 VRAM to break an infinite loop. "; - - if(hhv & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN) - sv += "SH-2 CPU reads/writes from/to VDP1 slow down command execution. "; - - if(hhv & HORRIBLEHACK_VDP1INSTANT) - sv += "Execute VDP1 commands instantly. "; - // - // - // + std::string sv = DB_GetHHDescriptions(hh.horrible_hacks); GameDB_Entry e; e.GameID = hh.sgid ? hh.sgid : FDIDToString(hh.fd_id); diff -Nru mednafen-1.24.3+dfsg/src/ss/db.h mednafen-1.26.1+dfsg/src/ss/db.h --- mednafen-1.24.3+dfsg/src/ss/db.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/db.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* db.h: -** Copyright (C) 2016-2019 Mednafen Team +** Copyright (C) 2016-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -27,14 +27,16 @@ enum { - CPUCACHE_EMUMODE_DATA_CB, - CPUCACHE_EMUMODE_DATA, - CPUCACHE_EMUMODE_FULL + CPUCACHE_EMUMODE_DATA_CB = 0, + CPUCACHE_EMUMODE_DATA = 1, + CPUCACHE_EMUMODE_FULL = 2, + CPUCACHE_EMUMODE__COUNT = 3, }; -void DB_Lookup(const char* path, const char* sgid, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode); +void DB_Lookup(const char* path, const char* sgid, const char* sgname, const char* sgarea, const uint8* fd_id, unsigned* const region, int* const cart_type, unsigned* const cpucache_emumode); uint32 DB_LookupHH(const char* sgid, const uint8* fd_id); void DB_GetInternalDB(std::vector* databases) MDFN_COLD; +std::string DB_GetHHDescriptions(const uint32 hhv) MDFN_COLD; } diff -Nru mednafen-1.24.3+dfsg/src/ss/debug.inc mednafen-1.26.1+dfsg/src/ss/debug.inc --- mednafen-1.24.3+dfsg/src/ss/debug.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/debug.inc 2020-11-10 06:04:17.000000000 +0000 @@ -52,14 +52,17 @@ uint32 CurPC[2]; unsigned ActiveCPU; + + sscpu_timestamp_t eff_ts; + bool inss; } DBG; -static MDFN_NOWARN_UNUSED void DBG_Break(void) +static MDFN_COLD MDFN_NOWARN_UNUSED void DBG_Break(void) { DBG.FoundBPoint = true; } -static void DBG_CheckReadBP(unsigned len, uint32 addr) +static MDFN_COLD void DBG_CheckReadBP(unsigned len, uint32 addr) { for(auto const& bp : DBG.BreakPointsRead) { @@ -74,7 +77,7 @@ } } -static void DBG_CheckWriteBP(unsigned len, uint32 addr) +static MDFN_COLD void DBG_CheckWriteBP(unsigned len, uint32 addr) { for(auto const& bp : DBG.BreakPointsWrite) { @@ -92,6 +95,7 @@ enum { ASPACE_PHYSICAL = 0, + ASPACE_BACKUP, ASPACE_WORKRAML, ASPACE_WORKRAMH, ASPACE_SCSPRAM, @@ -118,6 +122,11 @@ //*Buffer = SH7095_BusPeek(Address); break; + case ASPACE_BACKUP: + Address &= 0x7FFF; + *Buffer = BackupRAM[Address]; + break; + case ASPACE_WORKRAML: Address &= 0xFFFFF; *Buffer = ne16_rbo_be(WorkRAML, Address); @@ -175,6 +184,12 @@ //*Buffer = SH7095_BusPoke(Address, *Buffer); break; + case ASPACE_BACKUP: + Address &= 0x7FFF; + BackupRAM[Address] = *Buffer; + BackupRAM_Dirty = true; + break; + case ASPACE_WORKRAML: Address &= 0xFFFFF; ne16_wbo_be(WorkRAML, Address, *Buffer); @@ -216,7 +231,7 @@ } -static uint32 DBG_MemPeek(uint32 A, unsigned int bsize, bool hl, bool logical) +static MDFN_COLD uint32 DBG_MemPeek(uint32 A, unsigned int bsize, bool hl, bool logical) { /* uint32 ret = 0; @@ -255,13 +270,13 @@ DBG.BreakPointsPC.push_back(tmp); } -static void DBG_SetCPUCallback(void (*callb)(uint32 PC, bool bpoint), bool continuous) +static MDFN_COLD void DBG_SetCPUCallback(void (*callb)(uint32 PC, bool bpoint), bool continuous) { DBG.CPUHook = callb; DBG.CPUHookContinuous = continuous; } -static void DBG_EnableBranchTrace(bool enable) +static MDFN_COLD void DBG_EnableBranchTrace(bool enable) { if((DBG.BTEnabled ^ enable) & DBG.BTEnabled) { @@ -273,7 +288,7 @@ DBG.BTEnabled = enable; } -static void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) +static MDFN_COLD void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) { const uint32 from = DBG.CurPC[which]; auto *prevbt = &DBG.BTEntries[which][(DBG.BTIndex[which] + DBGS::NUMBT - 1) % DBGS::NUMBT]; @@ -296,7 +311,7 @@ } } -static std::vector DBG_GetBranchTrace(void) +static MDFN_COLD std::vector DBG_GetBranchTrace(void) { std::vector ret; BranchTraceResult tmp; @@ -369,8 +384,18 @@ return(ret); } +static INLINE void DBG_SetEffTS(const sscpu_timestamp_t eff_ts) +{ + DBG.eff_ts = eff_ts; +} + +static INLINE bool DBG_InSlaveStep(void) +{ + return DBG.inss; +} + template -static void DBG_CPUHandler(const sscpu_timestamp_t timestamp) +static MDFN_COLD void DBG_CPUHandler(void) { const uint32 PC = CPU[which].GetRegister(SH7095::GSREG_PC_ID, NULL, 0); @@ -419,8 +444,10 @@ if(DBG.CPUHookContinuous && DBG.CPUHook) { - ForceEventUpdates(timestamp); + DBG.inss = which; + ForceEventUpdates(DBG.eff_ts); DBG.CPUHook(PC, DBG.FoundBPoint); + DBG.inss = false; } DBG.FoundBPoint = false; @@ -431,18 +458,18 @@ } -static bool DBG_NeedCPUHooks(void) +static MDFN_COLD bool DBG_NeedCPUHooks(void) { return DBG.BTEnabled || DBG.CPUHook || DBG.BreakPointsPC.size() || DBG.BreakPointsRead.size() || DBG.BreakPointsWrite.size(); } // TODO: Standard peek functions -static INLINE uint16 DBG_DisPeek16(uint32 A) +static MDFN_COLD uint16 DBG_DisPeek16(uint32 A) { return *(uint16*)(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + A); } -static INLINE uint32 DBG_DisPeek32(uint32 A) +static MDFN_COLD uint32 DBG_DisPeek32(uint32 A) { uint32 ret; @@ -453,7 +480,7 @@ return ret; } -static void DBG_Disassemble(uint32 &A, uint32 SpecialA, char *TextBuf) +static MDFN_COLD void DBG_Disassemble(uint32 &A, uint32 SpecialA, char *TextBuf) { if(A & 0x1) { @@ -607,10 +634,15 @@ { SH7095::GSREG_TOCR, "TOCR", "TOCR", 1 }, { SH7095::GSREG_RWT, "RWT", "R/W Temp", 1 }, + { 0, "-----------", "", 0xFFFF }, + + { SH7095::GSREG_CCR, "CCR", "Cache Control Register", 1 }, + { SH7095::GSREG_SBYCR, "SBYCR", "Standby Control Register", 1 }, + { 0, "", "", 0 }, }; -static uint32 DBG_GetRegister_CPU(const unsigned int id, char* special, const uint32 special_len) +static MDFN_COLD uint32 DBG_GetRegister_CPU(const unsigned int id, char* special, const uint32 special_len) { return CPU[DBG.ActiveCPU].GetRegister(id, special, special_len); } @@ -720,7 +752,7 @@ { 0, "", "", 0 }, }; -static uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) +static MDFN_COLD uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) { switch(id >> 16) { @@ -734,7 +766,7 @@ return 0; } -static void SetRegister(const unsigned id, const uint32 value) +static MDFN_COLD void SetRegister(const unsigned id, const uint32 value) { switch(id >> 16) { @@ -835,8 +867,7 @@ // // // -static void DBG_Init(void) MDFN_COLD; -static void DBG_Init(void) +static MDFN_COLD void DBG_Init(void) { DBG.ActiveCPU = 0; DBG.BTEnabled = false; @@ -853,6 +884,9 @@ DBG.CPUHookContinuous = false; DBG.FoundBPoint = false; + DBG.eff_ts = 0; + DBG.inss = false; + MDFNDBG_AddRegGroup(&DBG_RegGroup_CPU); MDFNDBG_AddRegGroup(&DBG_RegGroup_CPUE); MDFNDBG_AddRegGroup(&DBG_RegGroup_SCU_CDB_VDP1); @@ -867,14 +901,15 @@ ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "dspprog", "DSP Program RAM", 10); + ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "backup", "Backup RAM", 15); + ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1vram", "VDP1 VRAM", 19); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1fb0", "VDP1 FB0 RAM(raw, no 8bpp/rot addr bit swizzling)", 18); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp1fb1", "VDP1 FB1 RAM(raw, no 8bpp/rot addr bit swizzling)", 18); ASpace_Add(GetAddressSpaceBytes, PutAddressSpaceBytes, "vdp2vram", "VDP2 VRAM", 19); } -static void DBG_Kill(void) MDFN_COLD; -static void DBG_Kill(void) +static MDFN_COLD void DBG_Kill(void) { DBG.BreakPointsPC.clear(); DBG.BreakPointsRead.clear(); @@ -883,6 +918,7 @@ static DebuggerInfoStruct DBGInfo { + false, "SJIS", 2, @@ -916,8 +952,9 @@ NULL, }; #else -template -static INLINE void DBG_CPUHandler(const sscpu_timestamp_t timestamp) { } +static INLINE void DBG_SetEffTS(const sscpu_timestamp_t eff_ts) { } +static INLINE bool DBG_InSlaveStep(void) { return false; } +template static INLINE void DBG_CPUHandler(void) { } static INLINE void DBG_AddBranchTrace(unsigned which, uint32 to, int exception, unsigned vecnum = 0) { } static INLINE bool DBG_NeedCPUHooks(void) { return false; } static INLINE void DBG_Init(void) { } diff -Nru mednafen-1.24.3+dfsg/src/ss/Makefile.in mednafen-1.26.1+dfsg/src/ss/Makefile.in --- mednafen-1.24.3+dfsg/src/ss/Makefile.in 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/Makefile.in 2020-11-10 06:04:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ @WANT_SS_EMU_TRUE@am__append_1 = libss.a @WANT_SSFPLAY_EMU_TRUE@am__append_2 = libssfplay.a subdir = src/ss -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cflags_gcc_option.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \ @@ -104,6 +112,7 @@ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = @@ -148,7 +157,23 @@ am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/cart.Po ./$(DEPDIR)/cdb.Po \ + ./$(DEPDIR)/db.Po ./$(DEPDIR)/scu_dsp_gen.Po \ + ./$(DEPDIR)/scu_dsp_jmp.Po ./$(DEPDIR)/scu_dsp_misc.Po \ + ./$(DEPDIR)/scu_dsp_mvi.Po ./$(DEPDIR)/smpc.Po \ + ./$(DEPDIR)/sound.Po ./$(DEPDIR)/ss.Po ./$(DEPDIR)/ssf.Po \ + ./$(DEPDIR)/vdp1.Po ./$(DEPDIR)/vdp1_line.Po \ + ./$(DEPDIR)/vdp1_poly.Po ./$(DEPDIR)/vdp1_sprite.Po \ + ./$(DEPDIR)/vdp2.Po ./$(DEPDIR)/vdp2_render.Po \ + cart/$(DEPDIR)/ar4mp.Po cart/$(DEPDIR)/backup.Po \ + cart/$(DEPDIR)/cs1ram.Po cart/$(DEPDIR)/debug.Po \ + cart/$(DEPDIR)/extram.Po cart/$(DEPDIR)/rom.Po \ + input/$(DEPDIR)/3dpad.Po input/$(DEPDIR)/gamepad.Po \ + input/$(DEPDIR)/gun.Po input/$(DEPDIR)/jpkeyboard.Po \ + input/$(DEPDIR)/keyboard.Po input/$(DEPDIR)/mission.Po \ + input/$(DEPDIR)/mouse.Po input/$(DEPDIR)/multitap.Po \ + input/$(DEPDIR)/wheel.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) @@ -189,6 +214,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ @@ -363,6 +390,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -400,14 +428,13 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ss/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ss/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -482,38 +509,44 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cart.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdb.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_gen.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_jmp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_misc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_mvi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_line.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_poly.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_sprite.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2_render.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/ar4mp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/backup.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/cs1ram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/debug.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/extram.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/rom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/3dpad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gamepad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gun.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/jpkeyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/keyboard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mission.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mouse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/multitap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/wheel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cart.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_gen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_jmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_misc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scu_dsp_mvi.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_line.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_poly.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp1_sprite.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdp2_render.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/ar4mp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/backup.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/cs1ram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/debug.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/extram.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@cart/$(DEPDIR)/rom.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/3dpad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gamepad.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/gun.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/jpkeyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/keyboard.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mission.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/mouse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/multitap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@input/$(DEPDIR)/wheel.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -583,7 +616,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -656,7 +692,38 @@ clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) cart/$(DEPDIR) input/$(DEPDIR) + -rm -f ./$(DEPDIR)/cart.Po + -rm -f ./$(DEPDIR)/cdb.Po + -rm -f ./$(DEPDIR)/db.Po + -rm -f ./$(DEPDIR)/scu_dsp_gen.Po + -rm -f ./$(DEPDIR)/scu_dsp_jmp.Po + -rm -f ./$(DEPDIR)/scu_dsp_misc.Po + -rm -f ./$(DEPDIR)/scu_dsp_mvi.Po + -rm -f ./$(DEPDIR)/smpc.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/ss.Po + -rm -f ./$(DEPDIR)/ssf.Po + -rm -f ./$(DEPDIR)/vdp1.Po + -rm -f ./$(DEPDIR)/vdp1_line.Po + -rm -f ./$(DEPDIR)/vdp1_poly.Po + -rm -f ./$(DEPDIR)/vdp1_sprite.Po + -rm -f ./$(DEPDIR)/vdp2.Po + -rm -f ./$(DEPDIR)/vdp2_render.Po + -rm -f cart/$(DEPDIR)/ar4mp.Po + -rm -f cart/$(DEPDIR)/backup.Po + -rm -f cart/$(DEPDIR)/cs1ram.Po + -rm -f cart/$(DEPDIR)/debug.Po + -rm -f cart/$(DEPDIR)/extram.Po + -rm -f cart/$(DEPDIR)/rom.Po + -rm -f input/$(DEPDIR)/3dpad.Po + -rm -f input/$(DEPDIR)/gamepad.Po + -rm -f input/$(DEPDIR)/gun.Po + -rm -f input/$(DEPDIR)/jpkeyboard.Po + -rm -f input/$(DEPDIR)/keyboard.Po + -rm -f input/$(DEPDIR)/mission.Po + -rm -f input/$(DEPDIR)/mouse.Po + -rm -f input/$(DEPDIR)/multitap.Po + -rm -f input/$(DEPDIR)/wheel.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -702,7 +769,38 @@ installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) cart/$(DEPDIR) input/$(DEPDIR) + -rm -f ./$(DEPDIR)/cart.Po + -rm -f ./$(DEPDIR)/cdb.Po + -rm -f ./$(DEPDIR)/db.Po + -rm -f ./$(DEPDIR)/scu_dsp_gen.Po + -rm -f ./$(DEPDIR)/scu_dsp_jmp.Po + -rm -f ./$(DEPDIR)/scu_dsp_misc.Po + -rm -f ./$(DEPDIR)/scu_dsp_mvi.Po + -rm -f ./$(DEPDIR)/smpc.Po + -rm -f ./$(DEPDIR)/sound.Po + -rm -f ./$(DEPDIR)/ss.Po + -rm -f ./$(DEPDIR)/ssf.Po + -rm -f ./$(DEPDIR)/vdp1.Po + -rm -f ./$(DEPDIR)/vdp1_line.Po + -rm -f ./$(DEPDIR)/vdp1_poly.Po + -rm -f ./$(DEPDIR)/vdp1_sprite.Po + -rm -f ./$(DEPDIR)/vdp2.Po + -rm -f ./$(DEPDIR)/vdp2_render.Po + -rm -f cart/$(DEPDIR)/ar4mp.Po + -rm -f cart/$(DEPDIR)/backup.Po + -rm -f cart/$(DEPDIR)/cs1ram.Po + -rm -f cart/$(DEPDIR)/debug.Po + -rm -f cart/$(DEPDIR)/extram.Po + -rm -f cart/$(DEPDIR)/rom.Po + -rm -f input/$(DEPDIR)/3dpad.Po + -rm -f input/$(DEPDIR)/gamepad.Po + -rm -f input/$(DEPDIR)/gun.Po + -rm -f input/$(DEPDIR)/jpkeyboard.Po + -rm -f input/$(DEPDIR)/keyboard.Po + -rm -f input/$(DEPDIR)/mission.Po + -rm -f input/$(DEPDIR)/mouse.Po + -rm -f input/$(DEPDIR)/multitap.Po + -rm -f input/$(DEPDIR)/wheel.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -722,18 +820,20 @@ .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nru mednafen-1.24.3+dfsg/src/ss/notes/build_sh7095s_ctable.cpp mednafen-1.26.1+dfsg/src/ss/notes/build_sh7095s_ctable.cpp --- mednafen-1.24.3+dfsg/src/ss/notes/build_sh7095s_ctable.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/notes/build_sh7095s_ctable.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,15 @@ +#include + + +int main(int argc, char* argv[]) +{ +// printf("static_assert(__COUNTER__ <= 11025, \"Unexpected __COUNTER__\");\n"); + const unsigned base = 2*5000; //10000; + const unsigned max_entries = 512; //512; + for(int i = max_entries; i > 0; i--) + { + printf("#if __COUNTER__ >= %u\n", base + max_entries + 2); + printf(" &&Resume_%u,\n", base + i); + printf("#endif\n"); + } +} diff -Nru mednafen-1.24.3+dfsg/src/ss/notes/PROBLEMATIC-GAMES mednafen-1.26.1+dfsg/src/ss/notes/PROBLEMATIC-GAMES --- mednafen-1.24.3+dfsg/src/ss/notes/PROBLEMATIC-GAMES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/notes/PROBLEMATIC-GAMES 2020-11-10 06:04:17.000000000 +0000 @@ -4,21 +4,30 @@ ------------------------------------------------------------------------------- Area 51 (USA/Europe) Clockwork Knight 2 (USA) -DeJig - Lassen Art Collection (Japan) +DeJig: Lassen Art Collection (Japan) +Doraemon: Nobita to Fukkatsu no Hoshi (Japan) Dragon Force II (Japan) - Battles(broken math) Father Christmas (Japan) Fighting Vipers (Japan/Europe/USA) +Formula Grand Prix: Team Unei Simulation (Japan) Golden Axe The Duel (Japan/Europe/USA) House of the Dead (Japan) Linkle Liver Story (Japan) +Mahjong Doukyuusei Special (Japan) +Mr. Bones - Intro FMV +Ronde (Japan) Sega Saturn Choice Cuts (USA) - Broken FMV playback(except intro FMV). Segakore Sega Bible Mogitate SegaSaturn - Zero Divide demo, especially. +Shunsai (Japan) Spot Goes to Hollywood (USA/Japan) Street Fighter Zero (Japan) Street Fighter Zero 3 (Japan) Super Puzzle Fighter II Turbo (USA) Theme Park (Europe) +Thunder Force Gold Pack 1 (Japan) +Thunder Force Gold Pack 2 (Japan) Virtua Fighter Kids (Java Tea Original) +Virtual Mahjong (Japan) Virtual Volleyball (Japan) WipEout (Japan/Europe/USA) World Series Baseball (USA/Japan) @@ -39,6 +48,7 @@ ------------------------------------------------------------------------------- Rely on SH-2 DMA bus hogging ------------------------------------------------------------------------------- +Another Memories Device Reign Real Sound Resident Evil @@ -70,11 +80,18 @@ ------------------------------------------------------------------------------- -Rely on SH-2 CPU writes/reads to/from VDP1 RAM slowing VDP1 command execution +Rely on SH-2 CPU and SH-2 DMA writes/reads to/from VDP1 RAM slowing +VDP1 command execution ------------------------------------------------------------------------------- +Albert Odyssey - Battle text Arcade's Greatest Hits - Credits Burning Rangers - Victim transfer text +Falcom Classics II - "Ys II" FMV +Frank Thomas Big Hurt Baseball +Tokimeki Memorial: Forever with You - Konami intro arm sprite Whizz - Gameplay +Wolf Fang SS: Kuuga 2001 - Player robot(especially when jumping) +Yu-No - FMV ------------------------------------------------------------------------------- @@ -121,6 +138,12 @@ ------------------------------------------------------------------------------- +Rely on quirks relating to command execution during CDB Reset Selector +------------------------------------------------------------------------------- +Independence Day (USA) - Startup hang; 'Get CD Device Connection' command + + +------------------------------------------------------------------------------- Rely on CDB seeks taking long enough ------------------------------------------------------------------------------- Batman Forever - Intro graphics; may also be a general timing issue. diff -Nru mednafen-1.24.3+dfsg/src/ss/notes/SCSP-FM-GAMES mednafen-1.26.1+dfsg/src/ss/notes/SCSP-FM-GAMES --- mednafen-1.24.3+dfsg/src/ss/notes/SCSP-FM-GAMES 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/notes/SCSP-FM-GAMES 2020-11-10 06:04:17.000000000 +0000 @@ -12,6 +12,7 @@ S_GM_FM2.B S_GM_FM3.B S_GM_FM4.B +Hang On GP - BGM 00 through 03 in the sound test. Kaitou Saint Tail Langrisser III Magic Knight Rayearth - "Tokyo Tower", "Flash's Theme", "Mysterious Cephiro Lecture", "Great Whirlpool", "Rainbow Junction Shop", "Sea of Trees" diff -Nru mednafen-1.24.3+dfsg/src/ss/scsp.inc mednafen-1.26.1+dfsg/src/ss/scsp.inc --- mednafen-1.24.3+dfsg/src/ss/scsp.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/scsp.inc 2020-11-10 06:04:17.000000000 +0000 @@ -547,7 +547,7 @@ if(!shift) t->Reload = DBV & 0xFF; - //printf("Timer(%zu-byte) %u: %04x\n", sizeof(T), ((A >> 1) & 0x1F) - 0x0C, DBV); + //printf("Timer(%zu-byte) %u: %04x --- %02x\n", sizeof(T), ((A >> 1) & 0x1F) - 0x0C, DBV, t->Counter); } else DBV = 0; @@ -1313,7 +1313,6 @@ // for(unsigned slot = 0; slot < 32; slot++) { - uint32 mdata = 0; auto* s = &Slots[slot]; unsigned key_eg_scale; @@ -1343,16 +1342,8 @@ else s->EnvPhase = ENV_PHASE_RELEASE; } - // // - uint16 sample = 0; - - if(s->SourceControl == 1) - sample = LFSR << 8; - - sample ^= s->SBXOR; // For zero and noise case only; waveform playback needs it to occur before linear interpolation. - if(!s->InLoop) { if((uint16)(s->CurrentAddr + 1) > s->LoopStart) @@ -1393,29 +1384,27 @@ } } } + } + + for(unsigned slot = 0; slot < 32; slot++) + { + auto* s = &Slots[slot]; + uint32 mdata = 0; + uint16 sample = 0; + + if(s->SourceControl == 1) + sample = LFSR << 8; + + sample ^= s->SBXOR; // For zero and noise case only; waveform playback needs it to occur before linear interpolation. // // if(s->WFAllowAccess) { - uint32 modalizer; - uint32 modalizer_int; + uint32 modalizer_int[2]; uint32 tmppw = s->PhaseWhacker; uint16 tmpa = s->CurrentAddr; - int16 s0, s1; - - // // - modalizer = (int16)SoundStack[(GlobalCounter + s->ModInputX) & 0x3F]; - modalizer += (int16)SoundStack[(GlobalCounter + s->ModInputY) & 0x3F]; - modalizer = (modalizer << 6) >> (0x10 - s->ModLevel); - - if(s->ModLevel <= 0x04) - modalizer = 0; - - modalizer_int = sign_x_to_s32(11, modalizer >> 6); // - // - if(s->LoopSub) { tmppw = ~tmppw; @@ -1423,19 +1412,48 @@ } mdata |= ((tmpa >> 12) << 7); + // + // + uint32 sia; + int16 s0, s1; + + { + // + // TODO/FIXME: Proper handling of the slot 31->0 buggy FM interpolation case with respect to reverse looping(ns->LoopSub) + // requires sub-sample timing emulation. + // + auto* ns = &Slots[(slot + 1) & 0x1F]; + uint32 modalizer; + uint32 ns_sia; + + modalizer = (int16)SoundStack[(GlobalCounter + s->ModInputX) & 0x3F]; + modalizer += (int16)SoundStack[(GlobalCounter + s->ModInputY) & 0x3F]; + modalizer = ((modalizer << 6) >> (0x10 - s->ModLevel)) & ~1; + + if(s->ModLevel <= 0x04) + modalizer = 0; + + sia = modalizer + ((tmppw >> (14 - 6)) & 0x3F); + ns_sia = modalizer + (((ns->PhaseWhacker >> (14 - 6)) ^ (ns->LoopSub ? 0x3F : 0x00)) & 0x3F); + + modalizer_int[0] = sign_x_to_s32(11, sia >> 6); + modalizer_int[1] = sign_x_to_s32(11, ns_sia >> 6); + // + sia &= 0x3F; + } if(s->WF8Bit) { - const uint32 addr0 = (s->StartAddr + ((modalizer_int + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0xFFFFF; - const uint32 addr1 = (s->StartAddr + ((modalizer_int + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0xFFFFF; + const uint32 addr0 = (s->StartAddr + ((modalizer_int[0] + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0xFFFFF; + const uint32 addr1 = (s->StartAddr + ((modalizer_int[1] + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0xFFFFF; s0 = ne16_rbo_be(RAM, addr0) << 8; s1 = ne16_rbo_be(RAM, addr1) << 8; } else { - s0 = RAM[((s->StartAddr >> 1) + ((modalizer_int + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0x7FFFF]; - s1 = RAM[((s->StartAddr >> 1) + ((modalizer_int + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0x7FFFF]; + s0 = RAM[((s->StartAddr >> 1) + ((modalizer_int[0] + (uint16)(tmpa + 0)) & s->ShortWaveMask)) & 0x7FFFF]; + s1 = RAM[((s->StartAddr >> 1) + ((modalizer_int[1] + (uint16)(tmpa + 1)) & s->ShortWaveMask)) & 0x7FFFF]; } s0 ^= s->SBXOR; @@ -1443,7 +1461,6 @@ if(s->SourceControl == 0) { - const unsigned sia = std::min(0x40, ((tmppw >> (14 - 6)) & 0x3F) + (modalizer & 0x3E)); sample = ((s0 * (0x40 - sia)) + (s1 * sia)) >> 6; } diff -Nru mednafen-1.24.3+dfsg/src/ss/scu_dsp_common.inc mednafen-1.26.1+dfsg/src/ss/scu_dsp_common.inc --- mednafen-1.24.3+dfsg/src/ss/scu_dsp_common.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/scu_dsp_common.inc 2020-11-10 06:04:17.000000000 +0000 @@ -30,7 +30,7 @@ // See loop in "SCU_UpdateDSP()" in scu.inc, and END/ENDI handling in scu_dsp_misc.cpp enum { DSP_EndCCSubVal = 1000000 }; -void DSP_Init(void); +void DSP_Init(void) MDFN_COLD; void DSP_FinishPRAMDMA(void); union DSPR48 diff -Nru mednafen-1.24.3+dfsg/src/ss/scu.inc mednafen-1.26.1+dfsg/src/ss/scu.inc --- mednafen-1.24.3+dfsg/src/ss/scu.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/scu.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* scu.inc - SCU Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -30,6 +30,15 @@ // TODO: Test and improve emulation of DSP single-stepping. // // TODO: Running DMA forces DSP into full execution mode when single-stepping; test the exact semantics, and implement it. +// +// TODO: Better emulation of SH-2 CPU to SCU write timings: +// A-bus write buffer +// +// Higher B-bus base overhead, unless the last read or write to the specific memory region(VDP1 VRAM, VDP1 FB, etc.) being accessed +// was in the same page; pages seem to be 512 bytes for VDP1 VRAM, maybe 32 bytes for FB RAM but probably more complex. +// +// TODO: SH-2 CPU read overhead when reading from VDP1 VRAM and VDP1 FB RAM should be significantly higher. +// /* Notes(assuming NTSC, HRES=0, VRES=0, LSMD=0): @@ -173,6 +182,8 @@ static void CheckDMASFByInt(unsigned int_which); static INLINE void CheckForceDMAFinish(void); +static sscpu_timestamp_t BBus_SH2_WriteFinishTS; + static uint32 IAsserted; static uint32 IPending; static uint32 IMask; @@ -206,6 +217,9 @@ unsigned we = MDFN_tzcount16(ipmd >> 16); unsigned olev, ovec, bpos; + //if((ipmd & 0x3) == 0x3 || ((ipmd & 0x81) == 0x81)) + // printf("CONFLICT: 0x%08x 0x%08x\n", IPending, ipmd); + olev = internal_tab[wi]; ovec = 0x40 + wi; bpos = wi; @@ -398,6 +412,8 @@ if(DSP.T0_Until > 0x10000000) DSP.T0_Until = 0x10000000; + //DSP.LastTS = std::max(-1000000, DSP.LastTS + delta); + DSP.LastTS += delta; if(DSP.LastTS < 0) { @@ -405,6 +421,10 @@ //printf("%d\n", DSP.LastTS); DSP.LastTS = 0; } + // + // + // + BBus_SH2_WriteFinishTS = std::max(-1000000, BBus_SH2_WriteFinishTS + delta); } // @@ -770,19 +790,32 @@ } } - template static INLINE void BBusRW_DB(uint32 A, uint16* DB, int32* time_thing, int32* dma_time_thing = NULL, int32* sh2_dma_time_thing = NULL) // add to time_thing, subtract from dma_time_thing { static_assert(IsWrite || sizeof(T) == 2, "Wrong type."); + if(time_thing != NULL) + { + if(!SH32) + { + *time_thing = std::max(*time_thing, BBus_SH2_WriteFinishTS); + + if(IsWrite) + { + *time_thing += 2; + BBus_SH2_WriteFinishTS = *time_thing; + } + } + } + // // VDP1 // if(A >= 0x05C00000 && A <= 0x05D7FFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= IsWrite ? (SH32 ? 0 : 6) : 10; + *sh2_dma_time_thing += IsWrite ? (SH32 ? 0 : 6) : 10; if(dma_time_thing != NULL) { @@ -804,12 +837,19 @@ } } + //if(IsWrite && (A & 0x100000) && SH32) + //{ + // assert(0); + //} + if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 0 : 11; + BBus_SH2_WriteFinishTS += SH32 ? ((A & 0x100000) ? 0 : 1) : 9; else + { *time_thing += 14; + } CheckEventsByMemTS(); } @@ -818,6 +858,8 @@ { if(time_thing != NULL) VDP1::Write_CheckDrawSlowdown(A, *time_thing); + else if(sh2_dma_time_thing != NULL) + VDP1::Write_CheckDrawSlowdown(A, *sh2_dma_time_thing); if(sizeof(T) == 1) VDP1::Write8_DB(A, *DB); @@ -828,6 +870,8 @@ { if(time_thing != NULL) VDP1::Read_CheckDrawSlowdown(A, *time_thing); + else if(sh2_dma_time_thing != NULL) + VDP1::Read_CheckDrawSlowdown(A, *sh2_dma_time_thing); *DB = VDP1::Read16_DB(A); } @@ -841,7 +885,7 @@ if(A >= 0x05E00000 && A <= 0x05FBFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= IsWrite ? (SH32 ? 0 : 5) : 10; + *sh2_dma_time_thing += IsWrite ? (SH32 ? 0 : 5) : 10; if(dma_time_thing != NULL) { @@ -853,7 +897,7 @@ if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 0 : 5; + BBus_SH2_WriteFinishTS += SH32 ? 1 : 3; else *time_thing += 20; @@ -891,7 +935,7 @@ if(A >= 0x05A00000 && A <= 0x05BFFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 13; + *sh2_dma_time_thing += 13; if(dma_time_thing != NULL) { @@ -901,7 +945,7 @@ if(time_thing != NULL) { if(IsWrite) - *time_thing += SH32 ? 13 : 19; + BBus_SH2_WriteFinishTS += SH32 ? 13 : 17; else *time_thing += 24; } @@ -922,7 +966,7 @@ // // if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) *dma_time_thing -= 1; @@ -967,7 +1011,7 @@ // TODO: SCU seems to have its own internal write buffering...or something else complex going on, that complicates // getting the SH-2 DMA timing right. if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) { @@ -997,7 +1041,7 @@ if(MDFN_UNLIKELY(A >= 0x05000000 && A <= 0x057FFFFF)) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 16; + *sh2_dma_time_thing += 16; if(dma_time_thing != NULL) { @@ -1019,7 +1063,7 @@ if(A >= 0x05800000 && A <= 0x058FFFFF) { if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 8; + *sh2_dma_time_thing += 8; if(dma_time_thing != NULL) { @@ -1065,7 +1109,7 @@ } if(sh2_dma_time_thing != NULL) - *sh2_dma_time_thing -= 1; + *sh2_dma_time_thing += 1; if(dma_time_thing != NULL) *dma_time_thing -= 1; @@ -1759,7 +1803,7 @@ DSP.PRAMDMABuf[i] = 0; } -void DSP_Init(void) +MDFN_COLD void DSP_Init(void) { DSP.LastTS = 0; @@ -1960,7 +2004,7 @@ // // -static void SCU_Init(void) +static MDFN_COLD void SCU_Init(void) { SCU_DMA_TimeCounter = 0; SCU_DMA_RunUntil = 0; @@ -1968,6 +2012,8 @@ HB_FromVDP2 = false; VB_FromVDP2 = false; + BBus_SH2_WriteFinishTS = 0; + DSP_Init(); } @@ -2115,6 +2161,8 @@ SFVAR(SCU_DMA_SDRAM_Slowdown_Counter), SFVAR(SCU_DMA_VDP1WriteIgnoreKludge), + SFVAR(BBus_SH2_WriteFinishTS), + SFVAR(IAsserted), SFVAR(IPending), SFVAR(IMask), @@ -2189,7 +2237,7 @@ { if(d.TableReadFunc == rftab[trb]) { - DMALevel_ReadFunc[level] = trb; + DMALevel_TableReadFunc[level] = trb; break; } } @@ -2282,7 +2330,7 @@ // // // -uint32 SCU_DSP_PeekProgRAM(uint8 A) +MDFN_COLD uint32 SCU_DSP_PeekProgRAM(uint8 A) { return DSP.ProgRAM[A] >> 32; } diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095.h mednafen-1.26.1+dfsg/src/ss/sh7095.h --- mednafen-1.24.3+dfsg/src/ss/sh7095.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* sh7095.h: -** Copyright (C) 2015-2017 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -29,13 +29,16 @@ SH7095(const char* const name_arg, const unsigned dma_event_id_arg, uint8 (*exivecfn_arg)(void)) MDFN_COLD; ~SH7095() MDFN_COLD; - void Init(const bool CacheBypassHack) MDFN_COLD; + void Init(const bool EmulateICache, const bool CacheBypassHack) MDFN_COLD; + void SetDebugMode(const bool DebugMode) MDFN_COLD; void StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname) MDFN_COLD; - void FixupICacheModeState(void) MDFN_COLD; + void StateAction_SlaveResume(StateMem* sm, const unsigned load, const bool data_only, const char* sname) MDFN_COLD; + void PostStateLoad(const unsigned state_version, const bool recorded_needicache, const bool needicache) MDFN_COLD; void ForceInternalEventUpdates(void); - void AdjustTS(int32 delta, bool force_set = false); + void AdjustTS(int32 delta); + void SetActive(bool active); void TruePowerOn(void) MDFN_COLD; void Reset(bool power_on_reset, bool from_internal_wdt = false) MDFN_COLD; @@ -61,9 +64,14 @@ ExtHaltDMA = (ExtHaltDMA & ~2) | (state << 1); } + // When entering Step(), EmulateICache and DebugMode must match what was passed to Init() and SetDebugMode() template void Step(void); + // Slave only + NO_CLONE NO_INLINE void RunSlaveUntil(sscpu_timestamp_t bound_timestamp) MDFN_HOT; + NO_CLONE NO_INLINE void RunSlaveUntil_Debug(sscpu_timestamp_t bound_timestamp) MDFN_COLD; + //private: uint32 R[16]; uint32 PC; @@ -185,17 +193,22 @@ // // uint32 IBuffer; - uint32 (MDFN_FASTCALL *MRFPI[8])(uint32 A); uint8 (MDFN_FASTCALL *MRFP8[8])(uint32 A); uint16 (MDFN_FASTCALL *MRFP16[8])(uint32 A); uint32 (MDFN_FASTCALL *MRFP32[8])(uint32 A); + uint16 (MDFN_FASTCALL *MRFP16_I[8])(uint32 A); + uint32 (MDFN_FASTCALL *MRFP32_I[8])(uint32 A); + void (MDFN_FASTCALL *MWFP8[8])(uint32 A, uint8); void (MDFN_FASTCALL *MWFP16[8])(uint32 A, uint16); void (MDFN_FASTCALL *MWFP32[8])(uint32 A, uint32); + void RecalcMRWFP_0(void); + void RecalcMRWFP_1_7(void); + sscpu_timestamp_t WB_until[16]; // @@ -203,15 +216,18 @@ // Cache: // // - struct + struct CacheEntry { // Rather than have separate validity bits, we're putting an INvalidity bit(invalid when =1) - // in the upper bit of the Tag variables. + // in the lower bit of the Tag variables. uint32 Tag[4]; - uint8 LRU; - alignas(4) uint8 Data[4][16]; - } Cache[64]; + uint8 Data[4][16]; + }; + alignas(16) CacheEntry Cache[64]; + uint8 Cache_LRU[64]; + int32 CCRC_Replace_OR[2]; // Cached cache var, calculated from the ID and OD bits of CCR in SetCCR() + uint8 CCRC_Replace_AND; // Cached cache var, calculated from the TW bit of CCR in SetCCR() uint8 CCR; void SetCCR(uint8 V); @@ -222,19 +238,97 @@ enum { CCR_CP = 0x10 }; // Cache Purge enum { CCR_W0 = 0x40 }; // enum { CCR_W1 = 0x80 }; // - void AssocPurge(const uint32 A); + + void Cache_AssocPurge(const uint32 A); + + int Cache_FindWay(CacheEntry* const cent, const uint32 ATM); + + template + void Cache_WriteAddressArray(uint32 A, T V); + + template + void Cache_WriteDataArray(uint32 A, T V); + + template + T Cache_ReadAddressArray(uint32 A); template - void Write_UpdateCache(uint32 A, T V); + T Cache_ReadDataArray(uint32 A); + + template + void Cache_CheckReadIncoherency(CacheEntry* cent, const int way, const uint32 A); + + template + void Cache_WriteUpdate(uint32 A, T V); // // End cache stuff // // + // Bus State Controller + // + struct + { + uint16 BCR1; + uint8 BCR2; + uint16 WCR; + uint16 MCR; + + uint8 RTCSR; + uint8 RTCSRM; + uint8 RTCNT; + uint8 RTCOR; + // + // + // + sscpu_timestamp_t sdram_finish_time; + sscpu_timestamp_t last_mem_time; + uint32 last_mem_addr; + uint32 last_mem_type; + } BSC; + + template + void INLINE BSC_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax); + + template + T INLINE BSC_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax); + + uint32 UCRead_IF_Kludge; + + // + // Exit/Resume stuff for slave CPU with icache emulation(RunSlaveUntil()) + // + const void* ResumePoint; + CacheEntry* Resume_cent; + uint32 Resume_instr; + int Resume_way_match; + uint32 Resume_uint8_A; + uint32 Resume_uint16_A; + uint32 Resume_uint32_A; + uint32 Resume_unmasked_A; + uint32 Resume_uint32_V; + uint16 Resume_uint16_V; + uint8 Resume_uint8_V; + + int32 Resume_MAC_L_m0; + int32 Resume_MAC_L_m1; + + int16 Resume_MAC_W_m0; + int16 Resume_MAC_W_m1; + + uint32 Resume_ea; + uint32 Resume_new_PC; + uint32 Resume_new_SR; + + uint8 Resume_ipr; + uint8 Resume_exnum; + uint8 Resume_vecnum; + + // // // Interrupt controller registers and related state // - // + // void INTC_Reset(void) MDFN_COLD; bool NMILevel; @@ -252,22 +346,6 @@ // // // - struct - { - uint16 BCR1; - uint8 BCR2; - uint16 WCR; - uint16 MCR; - - uint8 RTCSR; - uint8 RTCSRM; - uint8 RTCNT; - uint8 RTCOR; - } BSC; - - // - // - // uint8 SBYCR; bool Standby; @@ -335,10 +413,8 @@ void DMA_BusTimingKludge(void); const unsigned event_id_dma; - sscpu_timestamp_t dma_lastts; // External SH7095_mem_timestamp related. - - int32 DMA_ClockCounter; - int32 DMA_SGCounter; // When negative, smaller granularity scheduling for DMA_Update() + sscpu_timestamp_t DMA_Timestamp; + sscpu_timestamp_t DMA_SGEndTimestamp; // For smaller granularity scheduling for DMA_Update() after start of DMA. bool DMA_RoundRobinRockinBoppin; uint32 DMA_PenaltyKludgeAmount; @@ -402,51 +478,26 @@ uint8 GetPendingInt(uint8*); void RecalcPendingIntPEX(void); - template - INLINE void FetchIF(bool ForceIBufferFill); - - template - void DoIDIF_Real(void); + template + INLINE void DoIDIF_INLINE(void); - template - T ExtBusRead(uint32 A); + template + INLINE T ExtBusRead_INLINE(uint32 A); - template - void ExtBusWrite(uint32 A, T V); + template + INLINE void ExtBusWrite_INLINE(uint32 A, T V); template - void OnChipRegWrite(uint32 A, uint32 V); + NO_INLINE void OnChipRegWrite(uint32 A, uint32 V) MDFN_HOT; template - T OnChipRegRead(uint32 A); - - template - T MemReadRT(uint32 A); - - template - T MemRead(uint32 A); - - template - void MemWriteRT(uint32 A, T V); - - template - void MemWrite(uint32 A, T V); - - - template - INLINE void Branch(uint32 target); - - template - INLINE void CondRelBranch(bool cond, uint32 disp); - - - template - INLINE void UCDelayBranch(uint32 target); - - template - INLINE void UCRelDelayBranch(uint32 disp); + INLINE T OnChipRegRead_INLINE(uint32 A); + template + INLINE T MemReadRT(uint32 A); + template + INLINE void MemWriteRT(uint32 A, T V); // // // @@ -544,6 +595,9 @@ GSREG_TCR, GSREG_TOCR, GSREG_RWT, + + GSREG_CCR, + GSREG_SBYCR }; uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len); @@ -552,9 +606,24 @@ void CheckRWBreakpoints(void (*MRead)(unsigned len, uint32 addr), void (*MWrite)(unsigned len, uint32 addr)) const; static void Disassemble(const uint16 instr, const uint32 PC, char* buffer, uint16 (*DisPeek16)(uint32), uint32 (*DisPeek32)(uint32)); private: - const char* const cpu_name; bool CBH_Setting; + bool EIC_Setting; + bool DM_Setting; uint32 PC_IF, PC_ID; // Debug-related variables. -}; +#ifdef MDFN_ENABLE_DEV_BUILD + void CheckDMARace(uint32 addr, uint32 size, bool write); + struct + { + uint32 rw[2][2]; + } DMADebug[2]; +#endif + const char* const cpu_name; + const void*const* ResumeTableP[2]; + + template + void DevBuild_ReadLog(uint32 A); + template + void DevBuild_WriteLog(uint32 A, T V); +}; #endif diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095.inc mednafen-1.26.1+dfsg/src/ss/sh7095.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095.inc 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095.inc 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* sh7095.inc - Hitachi SH7095 Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -20,14 +20,6 @@ */ /* - Instruction cache emulation shouldn't be enabled globally for all games until we resolve timestamp vs mem_timestamp issues - in regards to bus contention and time sharing, or else emulated dual-CPU programs may run slower - than they should and probably glitch out(and also until 5GHz desktop CPUs are the norm ;)). - - Also...the emulated overhead is a little too high when executing a branch with no delay slot from non-cacheable memory. -*/ - -/* Emulation implementation notes/deficiencies: Cache multiple-way tag collisions (ostensibly an illegal condition) during reads/writes are not handled accurately. @@ -61,26 +53,20 @@ This cooouuuld turn out to be a problem, and if it does, it can be fixed by having two interrupt-pending variables, with one being copied to the other in DoIDIF(). - Instruction fetches don't go through the cache emulation, for performance reasons(getting the instruction fetches timed right - versus the instruction data read/write would be critical, to avoid causing inaccurate cache miss patterns which could cause code - to run slower than on the real thing, which is arguably worse than having it run faster). + Emulation of SH-2 master/slave bus sharing is very approximate. On a real SH-2, internal bus cycles may affect + bus grant timing, need to run tests(though emulating that behavior would probably be unrealistic performance-wise). - SCI, UBC, and BSC are mostly unemulated. -*/ + The SCU C-bus DMA ExtHalt kludge doesn't work totally as intended when full cache emulation is enabled(and the + interruptible/resumable slave CPU code is used), but it proooobably won't be a problem in practice because on + a real Saturn, after the write that triggers the SCU DMA, a few CPU bus accesses can get in before the SCU hogs the bus. -// Address error exception order, sleep versus exceptions. - -/* - TODO: PC-relative addressing, uses instruction or data fetches? + SCI, UBC, and BSC are mostly unemulated. */ -/* - TODO: Make sure RecalcPendingIntPEX() is called in all places it needs to be called(which is arguably too many...). -*/ +/* TODO: + Check address error exception order, sleep versus exceptions. -/* - TODO: Penalize slave CPU external bus access if we ever figure out a solution to the timestamp vs mem_timestamp problem that doesn't murder - performance. + Make sure RecalcPendingIntPEX() is called in all places it needs to be called(which is arguably too many...). */ #ifdef MSB_FIRST @@ -89,60 +75,197 @@ #define NE32ASU8_IDX_ADJ(T, idx) ( ((idx) & ~(sizeof(T) - 1)) ^ (4 - (sizeof(T))) ) #endif -SH7095::SH7095(const char* const name_arg, const unsigned event_id_dma_arg, uint8 (*exivecfn_arg)(void)) : event_id_dma(event_id_dma_arg), ExIVecFetch(exivecfn_arg), cpu_name(name_arg) +SH7095::SH7095(const char* const name_arg, const unsigned event_id_dma_arg, uint8 (*exivecfn_arg)(void)) : event_id_dma(event_id_dma_arg), ExIVecFetch(exivecfn_arg), CBH_Setting(false), EIC_Setting(false), DM_Setting(false), cpu_name(name_arg) { - Init(false); + if(this == &CPU[1]) + { + for(unsigned dm = 0; dm < 2; dm++) + { + // + // Very fragile, be careful. + // + ResumePoint = nullptr; + ResumeTableP[dm] = nullptr; + timestamp = -1; + FRT_WDT_NextTS = 0x7FFFFFFF; + Pipe_ID = 0xFEU << 24; + // + if(dm) + RunSlaveUntil_Debug(0); + else + RunSlaveUntil(0); + // + assert(ResumePoint == nullptr); + assert(ResumeTableP[dm] != nullptr); + assert(timestamp == -1); + assert(FRT_WDT_NextTS == 0x7FFFFFFF); + assert(Pipe_ID == (0xFEU << 24)); + } + } + // + // + Init(false, false); } -template -static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A); +template +static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A) MDFN_HOT; -template -static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V); +template +static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) MDFN_HOT; -void SH7095::Init(const bool cbh) +// WARNING: Template arguments CacheEnabled and CacheBypassHack are only valid for region==0. +void SH7095::RecalcMRWFP_0(void) { - CBH_Setting = cbh; - // - #define MAHL_P(w, region) { \ - MRFP8[region] = C_MemReadRT; \ - MRFP16[region] = C_MemReadRT; \ - MRFP32[region] = C_MemReadRT; \ - MRFPI[region] = C_MemReadRT; \ - MWFP8[region] = C_MemWriteRT; \ - MWFP16[region] = C_MemWriteRT; \ - MWFP32[region] = C_MemWriteRT; \ + #define MAHL_(bs,w,nsc,cbh) \ + if(CCR & CCR_CE) \ + { \ + if(bs == 16) { MRFP16_I[0] = C_MemReadRT; } \ + if(bs == 32) { MRFP32_I[0] = C_MemReadRT; } \ + MRFP##bs[0] = C_MemReadRT ; \ + MRFPI[0] = C_MemReadRT ; \ + MWFP##bs[0] = C_MemWriteRT; \ + } \ + else \ + { \ + if(bs == 16) { MRFP16_I[0] = C_MemReadRT; }\ + if(bs == 32) { MRFP32_I[0] = C_MemReadRT; }\ + MRFP##bs[0] = C_MemReadRT ; \ + MRFPI[0] = C_MemReadRT ; \ + MWFP##bs[0] = C_MemWriteRT; \ + } + + #define MAHL(w, nsc, cbh) \ + { \ + MAHL_( 8, w, nsc, cbh) \ + MAHL_(16, w, nsc, cbh) \ + MAHL_(32, w, nsc, cbh) \ + } + + if(this == &CPU[0]) + { + if(EIC_Setting) + { + if(DM_Setting) + MAHL(0, -1, false) + else + MAHL(0, true, false) + } + else if(CBH_Setting) + { + MAHL(0, false, true) + } + else + { + MAHL(0, false, false) + } + } + else + { + if(!EIC_Setting && CBH_Setting) + { + MAHL(1, false, true) + } + else + { + MAHL(1, false, false) + } + } + #undef MAHL_ + #undef MAHL +} + +void SH7095::RecalcMRWFP_1_7(void) +{ + #define MAHL_P(w, nsc, region) { \ + MRFP8[region] = C_MemReadRT; \ + MRFP16[region] = C_MemReadRT; \ + MRFP32[region] = C_MemReadRT; \ + MRFP16_I[region] = C_MemReadRT; \ + MRFP32_I[region] = C_MemReadRT; \ + MRFPI[region] = C_MemReadRT; \ + MWFP8[region] = C_MemWriteRT; \ + MWFP16[region] = C_MemWriteRT; \ + MWFP32[region] = C_MemWriteRT; \ } - #define MAHL(region) \ - if(this == &CPU[0]) \ - { MAHL_P(0, region) } \ - else \ - { MAHL_P(1, region) } - - MAHL(1) - MAHL(2) - MAHL(3) - MAHL(4) - MAHL(5) - MAHL(6) - MAHL(7) + #define MAHL(nsc, region) \ + if(this == &CPU[0]) \ + { MAHL_P(0, nsc, region) } \ + else \ + { MAHL_P(1, false, region) } + + if(EIC_Setting) + { + if(DM_Setting) + { + MAHL(-1, 1) + } + else + { + MAHL(true, 1) + } + MAHL(false, 2) + MAHL(false, 3) + MAHL(false, 4) + MAHL(false, 5) + MAHL(false, 6) + MAHL(false, 7) + } + else + { + MAHL(false, 1) + MAHL(false, 2) + MAHL(false, 3) + MAHL(false, 4) + MAHL(false, 5) + MAHL(false, 6) + MAHL(false, 7) + } #undef MAHL #undef MAHL_P +} + +void SH7095::SetDebugMode(bool DebugMode) +{ + if(DM_Setting != DebugMode) + { + if(ResumePoint != nullptr) + { + bool found = false; + + for(unsigned i = 0; i < 512; i++) + { + if(ResumeTableP[DM_Setting][i] == ResumePoint) + { + ResumePoint = ResumeTableP[DebugMode][i]; + found = true; + break; + } + } + assert(found); + } + DM_Setting = DebugMode; + // + RecalcMRWFP_0(); + RecalcMRWFP_1_7(); + } +} + +void SH7095::Init(const bool EmulateICache, const bool CacheBypassHack) +{ + CBH_Setting = CacheBypassHack; + EIC_Setting = EmulateICache; + RecalcMRWFP_0(); + RecalcMRWFP_1_7(); // // // - // // Initialize variables that won't be initialized elsewhere since they reflect the overall emulator timing state, or are cache variables // for signal inputs. // timestamp = 0; - write_finish_timestamp = 0; - divide_finish_timestamp = 0; - FRT.lastts = 0; - dma_lastts = 0; FRT.FTI = false; FRT.FTCI = false; @@ -152,6 +275,8 @@ ExtHalt = false; ExtHaltDMA = false; + ResumePoint = nullptr; + TruePowerOn(); } @@ -160,55 +285,6 @@ } -void SH7095::AdjustTS(int32 delta, bool force_set) -{ - if(force_set) - { - timestamp = delta; - - MA_until = delta; - MM_until = delta; - - for(unsigned i = 0; i < 16; i++) - WB_until[i] = delta; - - write_finish_timestamp = delta; - divide_finish_timestamp = delta; - - FRT.lastts = delta; - dma_lastts = delta; - } - else - { - if(!(timestamp & 0x40000000)) - timestamp += delta; - - if(!(MA_until & 0x40000000)) - MA_until += delta; - - if(!(MM_until & 0x40000000)) - MM_until += delta; - - for(unsigned i = 0; i < 16; i++) - { - if(!(WB_until[i] & 0x40000000)) - WB_until[i] += delta; - } - - if(!(write_finish_timestamp & 0x40000000)) - write_finish_timestamp += delta; - - if(!(divide_finish_timestamp & 0x40000000)) - divide_finish_timestamp += delta; - - FRT.lastts += delta; - dma_lastts += delta; - } - - FRT_WDT_ClockDivider &= 0x00FFFFFF; - FRT_WDT_Recalc_NET(); -} - // // Initialize everything for determinism, especially state left "undefined" by reset/power exception handling. // @@ -218,7 +294,13 @@ R[i] = 0; for(unsigned i = 0; i < 16; i++) - WB_until[i] = 0; + WB_until[i] = timestamp; + + UCRead_IF_Kludge = 0; + + MA_until = timestamp; + MM_until = timestamp; + write_finish_timestamp = timestamp; PC = 0; @@ -238,10 +320,39 @@ PC_IF = PC_ID = 0; memset(Cache, 0, sizeof(Cache)); + memset(Cache_LRU, 0, sizeof(Cache_LRU)); + CCRC_Replace_OR[0] = 0; + CCRC_Replace_OR[1] = 0; + CCRC_Replace_AND = 0; CCR = 0; - - MA_until = 0; - MM_until = 0; + // + // + // + ResumePoint = nullptr; + Resume_cent = nullptr; + Resume_instr = 0; + Resume_way_match = 0; + Resume_uint8_A = 0; + Resume_uint16_A = 0; + Resume_uint32_A = 0; + Resume_unmasked_A = 0; + Resume_uint32_V = 0; + Resume_uint16_V = 0; + Resume_uint8_V = 0; + + Resume_MAC_L_m0 = 0; + Resume_MAC_L_m1 = 0; + + Resume_MAC_W_m0 = 0; + Resume_MAC_W_m1 = 0; + + Resume_ea = 0; + Resume_new_PC = 0; + Resume_new_SR = 0; + + Resume_ipr = 0; + Resume_exnum = 0; + Resume_vecnum = 0; // // // @@ -253,10 +364,39 @@ VCRC = 0; VCRD = 0; ICR = 0; + // + // + // + BSC.BCR1 &= 0x8000; + BSC.BCR2 = 0; + BSC.WCR = 0; + BSC.MCR = 0; + + BSC.RTCSR = 0; + BSC.RTCSRM = 0; + BSC.RTCNT = 0; + BSC.RTCOR = 0; + BSC.sdram_finish_time = timestamp; + BSC.last_mem_time = timestamp; + BSC.last_mem_addr = 0; + BSC.last_mem_type = 0; + // + // + // + ResumePoint = nullptr; + // + // + // + SBYCR = 0; + Standby = false; // // // + FRT.lastts = timestamp; + + // Don't change FRT.FTI and FRT.FTCI here. + FRT.FRC = 0; FRT.OCR[0] = FRT.OCR[1] = 0; FRT.FICR = 0; @@ -279,8 +419,8 @@ // // // - DMA_ClockCounter = 0; - DMA_SGCounter = 0; + DMA_Timestamp = timestamp; + DMA_SGEndTimestamp = timestamp; DMA_RoundRobinRockinBoppin = 0; DMA_PenaltyKludgeAmount = 0; DMA_PenaltyKludgeAccum = 0; @@ -291,6 +431,7 @@ // // // + divide_finish_timestamp = timestamp; DVSR = 0; DVDNT = 0; DVDNTH = 0; @@ -302,10 +443,68 @@ // // // + SCI.SMR = 0; + SCI.BRR = 0; + SCI.SCR = 0; + SCI.TDR = 0; + SCI.SSR = 0; + SCI.SSRM = 0; + SCI.RDR = 0; + SCI.RSR = 0; + SCI.TSR = 0; +} + +void SH7095::SetActive(bool active) +{ + if(active && timestamp == SS_EVENT_DISABLED_TS) + { + timestamp = SH7095_mem_timestamp; + FRT.lastts = timestamp; + + DMA_Timestamp = SH7095_mem_timestamp; + DMA_SGEndTimestamp = SH7095_mem_timestamp; + + SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 1); + // + Reset(true); + } + else if(!active && timestamp != SS_EVENT_DISABLED_TS) + { + Reset(true); + // + timestamp = SS_EVENT_DISABLED_TS; + SS_SetEventNT(&events[event_id_dma], SS_EVENT_DISABLED_TS); + } } +void SH7095::AdjustTS(int32 delta) +{ + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + return; + + timestamp += delta; + FRT.lastts += delta; +#define ATSD(v) v = std::max(-1000000, v + (delta)) + ATSD(DMA_Timestamp); + ATSD(DMA_SGEndTimestamp); + ATSD(MA_until); + ATSD(MM_until); + + for(unsigned i = 0; i < 16; i++) + ATSD(WB_until[i]); + + ATSD(write_finish_timestamp); + ATSD(divide_finish_timestamp); + + ATSD(BSC.sdram_finish_time); + ATSD(BSC.last_mem_time); +#undef ATSD + + FRT_WDT_ClockDivider &= 0x00FFFFFF; + FRT_WDT_Recalc_NET(); +} // de=1, dme=1, te=0, nmif=0, ae=0 @@ -360,8 +559,8 @@ { uint8 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFF, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFF, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFF, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFF, buffer, false, &DMA_Timestamp); sar += ainc[0][sm]; dar += ainc[0][dm]; @@ -373,8 +572,8 @@ { uint16 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFE, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFE, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFE, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFE, buffer, false, &DMA_Timestamp); if(MDFN_UNLIKELY((sar | dar) & 0x1)) { @@ -394,8 +593,8 @@ { uint32 buffer; - buffer = SH7095_BusRead(sar & 0x07FFFFFC, false, &DMA_ClockCounter); - SH7095_BusWrite(dar & 0x07FFFFFC, buffer, false, &DMA_ClockCounter); + buffer = BSC_BusRead(sar & 0x07FFFFFC, false, &DMA_Timestamp); + BSC_BusWrite(dar & 0x07FFFFFC, buffer, false, &DMA_Timestamp); if(MDFN_UNLIKELY((sar | dar) & 0x3)) { @@ -425,14 +624,14 @@ for(unsigned i = 0; i < 4; i++) { - buffer[i] = SH7095_BusRead((sar + (i << 2)) & 0x07FFFFFC, (bool)i, &DMA_ClockCounter); + buffer[i] = BSC_BusRead((sar + (i << 2)) & 0x07FFFFFC, (bool)i, &DMA_Timestamp); } sar += 0x10; for(unsigned i = 0; i < 4; i++) { - SH7095_BusWrite(dar & 0x07FFFFFC, buffer[i], false, &DMA_ClockCounter); + BSC_BusWrite(dar & 0x07FFFFFC, buffer[i], false, &DMA_Timestamp); dar += ainc[2][dm]; tcr = (tcr - 1) & 0xFFFFFF; if(MDFN_UNLIKELY(!tcr)) @@ -458,38 +657,33 @@ sscpu_timestamp_t SH7095::DMA_Update(sscpu_timestamp_t et) { - if(MDFN_UNLIKELY(et < dma_lastts)) +#ifdef MDFN_ENABLE_DEV_BUILD + assert(timestamp != SS_EVENT_DISABLED_TS); +#endif + + if(MDFN_UNLIKELY(et < DMA_Timestamp)) { - // et < dma_lastts may happen...look into it. - if(et < dma_lastts) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA_Update called with et(%u) < dma_lastts(%u).\n", cpu_name, et, dma_lastts); + // may happen...look into it. + // SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA_Update called with et(%d) < DMA_Timestamp(%d).\n", cpu_name, et, DMA_Timestamp); + return DMA_Timestamp + 32; } else if(MDFN_UNLIKELY(ExtHaltDMA)) { //printf("%s ExtHaltDMA 0x%02x!\n", cpu_name, ExtHaltDMA); - dma_lastts = et; - return dma_lastts + 128; + DMA_Timestamp = et; + return DMA_Timestamp + 128; } else { - uint32 clocks = et - dma_lastts; - dma_lastts = et; - - // - // - // bool rr = DMA_RoundRobinRockinBoppin; - DMA_ClockCounter += clocks; - DMA_SGCounter += clocks; - if(DMAOR & 0x08) // Round robin { while(DMA_RunCond(0) || DMA_RunCond(1)) { if(DMA_RunCond(rr)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(rr); @@ -501,7 +695,7 @@ { while(DMA_RunCond(0)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(0); @@ -509,7 +703,7 @@ while(DMA_RunCond(1)) { - if(DMA_ClockCounter <= 0) + if(DMA_Timestamp >= et) goto TimeOver; DMA_DoTransfer(1); @@ -521,26 +715,69 @@ TimeOver:; DMA_RoundRobinRockinBoppin = rr; - DMA_ClockCounter = std::min(DMA_ClockCounter, 128); - DMA_SGCounter = std::min(DMA_SGCounter, 0); + DMA_Timestamp = std::max(DMA_Timestamp, et - 128); DMA_CheckEnterBurstHack(); RecalcPendingIntPEX(); // TODO: conditionalize(or make RecalcPendingIntPEX() less expensive). } - return dma_lastts + ((DMA_SGCounter < 0) ? 32 : 128); + return et + ((et < DMA_SGEndTimestamp) ? 32 : 128); } + +#ifdef MDFN_ENABLE_DEV_BUILD +void SH7095::CheckDMARace(uint32 addr, uint32 size, bool write) +{ + for(unsigned cpu = 0; cpu < 2; cpu++) + { + for(unsigned ch = 0; ch < 2; ch++) + { + auto& dd = CPU[cpu].DMADebug[ch]; + + if(dd.rw[0][0] == ~0U) + continue; + + for(uint32 A = addr; A != ((addr + size) & 0x07FFFFFF); A = (A + 1) & 0x07FFFFFF) + { + bool match = false; + + if(dd.rw[1][1] < dd.rw[1][0]) + match |= (A >= dd.rw[1][0] || A < dd.rw[1][1]); + else + match |= (A >= dd.rw[1][0] && A < dd.rw[1][1]); + + if(write) + { + if(dd.rw[0][1] < dd.rw[0][0]) + match |= (A >= dd.rw[0][0] || A < dd.rw[0][1]); + else + match |= (A >= dd.rw[0][0] && A < dd.rw[0][1]); + } + + if(match) + { + SS_DBG(SS_DBG_SH2_DMARACE, "[%s] %u-byte %s 0x%07x races with %s DMA%u; SAR=0x%08x DAR=0x%08x, [0x%07x,0x%07x]->[0x%07x,0x%07x]\n", cpu_name, size, write ? "write to" : "read from", addr, CPU[cpu].cpu_name, ch, CPU[cpu].DMACH[ch].SAR, CPU[cpu].DMACH[ch].DAR, dd.rw[0][0], dd.rw[0][1] - 1, dd.rw[1][0], dd.rw[1][1] - 1); + break; + } + } + } + } +} +#endif + // DMA_StartSG() must be paired with a DMA_Update(SH7095_mem_timestamp) somewhere before. void SH7095::DMA_StartSG(void) { - DMA_SGCounter = DMA_ClockCounter - 128; - SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 32); // fixed + 32, don't evaluate DMA_SGCounter here. + DMA_SGEndTimestamp = DMA_Timestamp + 192; + SS_SetEventNT(&events[event_id_dma], SH7095_mem_timestamp + 32); // fixed + 32 DMA_CheckEnterBurstHack(); } // Must be called after DMACH[0].CHCR or DMACH[1].CHCR or DMAOR changes. +// +// If DMA_RunCond(...) returns false, SAR and DAR and TCR for that channel +// should not be used(due to caching of variables in DMA_DoTransfer()). NO_INLINE void SH7095::DMA_RecalcRunning(void) { DMA_PenaltyKludgeAmount = 0; @@ -549,7 +786,7 @@ { if(DMA_RunCond(ch)) { - const int32 npka = (((DMACH[ch].CHCR >> 10) & 3) == 3 && (DMACH[ch].SAR & DMACH[ch].DAR & 0x06000000) != 0x06000000) ? 23 : 18; + const int32 npka = (((DMACH[ch].CHCR >> 10) & 3) == 3 && (DMACH[ch].SAR & DMACH[ch].DAR & 0x06000000) != 0x06000000) ? 23 : 19; DMA_PenaltyKludgeAmount = std::max(DMA_PenaltyKludgeAmount, npka); } @@ -562,16 +799,63 @@ // // // - if(ss_dbg_mask & (SS_DBG_WARNING | SS_DBG_SH2)) +#ifdef MDFN_ENABLE_DEV_BUILD + for(unsigned ch = 0; ch < 2; ch++) { - for(unsigned ch = 0; ch < 2; ch++) + const bool run_cond = DMA_RunCond(ch); + const unsigned ts = (DMACH[ch].CHCR >> 10) & 3; + const unsigned sm = (DMACH[ch].CHCR >> 12) & 3; + const unsigned dm = (DMACH[ch].CHCR >> 14) & 3; + const uint32 sar = DMACH[ch].SAR; + const uint32 dar = DMACH[ch].DAR; + const uint32 count = DMACH[ch].TCR ? DMACH[ch].TCR : 0x1000000; + + if(run_cond && DMADebug[ch].rw[0][0] == ~0U) { - if(DMA_RunCond(ch) && ((DMACH[ch].CHCR >> 10) & 3) == 3 && ((DMACH[ch].SAR | DMACH[ch].DAR) & 0xF)) + auto& dd = DMADebug[ch]; + + if(ts == 3) + { + dd.rw[0][0] = sar & 0x07FFFFFF; + dd.rw[0][1] = (dd.rw[0][0] + (count << 2)) & 0x07FFFFFF; + } + else + { + if(sm & 2) + { + dd.rw[0][1] = (sar + (1 << ts)) & 0x07FFFFFF; + dd.rw[0][0] = (dd.rw[0][1] - (count << ts)) & 0x07FFFFFF; + } + else + { + dd.rw[0][0] = sar & 0x07FFFFFF; + dd.rw[0][1] = (dd.rw[0][0] + ((sm ? count : 1) << ts)) & 0x07FFFFFF; + } + } + // + const unsigned ts_adj = std::min(2, ts); + + if(dm & 2) + { + dd.rw[1][1] = (dar + (1 << ts_adj)) & 0x07FFFFFF; + dd.rw[1][0] = (dd.rw[1][1] - (count << ts_adj)) & 0x07FFFFFF; + } + else { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA channel %u, 16-byte transfer size address misalignment, SAR=0x%08x DAR=0x%08x", cpu_name, ch, DMACH[ch].SAR, DMACH[ch].DAR); + dd.rw[1][0] = dar & 0x07FFFFFF; + dd.rw[1][1] = (dd.rw[1][0] + ((dm ? count : 1) << ts_adj)) & 0x07FFFFFF; } + //printf("%u, read:[0x%07x, 0x%07x) write:[0x%07x, 0x%07x)\n", ch, dd.rw[0][0], dd.rw[0][1], dd.rw[1][0], dd.rw[1][1]); + } + else if(!run_cond) + DMADebug[ch].rw[0][0] = ~0U; + + if(run_cond && ts == 0x3 && ((sar | dar) & 0xF)) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] DMA channel %u, 16-byte transfer size address misalignment, SAR=0x%08x DAR=0x%08x", cpu_name, ch, sar, dar); } } +#endif } INLINE void SH7095::DMA_BusTimingKludge(void) @@ -758,6 +1042,12 @@ void SH7095::SetFTI(bool state) { + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + { + FRT.FTI = state; + return; + } + FRT_WDT_Update(); // // @@ -963,9 +1253,9 @@ // Misaligned/wrong-sized accesses aren't handled correctly, it's a mess, but probably doesn't matter. // template -NO_INLINE void SH7095::OnChipRegWrite(uint32 A, uint32 V) +NO_INLINE MDFN_HOT void SH7095::OnChipRegWrite(uint32 A, uint32 V) { - //SS_DBG(SS_DBG_SH2_REGW, "[%s] %zu-byte write to on-chip register area; address=0x%08x value=0x%08x\n", cpu_name, sizeof(T), A, V); + SS_DBGTI(SS_DBG_SH2_REGW, "[%s] %zu-byte write to on-chip register area; address=0x%08x value=0x%08x, PC=0x%08x\n", cpu_name, sizeof(T), A, V, PC); if(A & 0x100) { @@ -1405,14 +1695,9 @@ } break; - case 0x92: case 0x93: case 0x94: case 0x95: - case 0x96: case 0x97: case 0x98: case 0x99: - case 0x9A: case 0x9B: case 0x9C: case 0x9D: - case 0x9E: + case 0x92: // No 0x93...0x9F mirrors for writes. SetCCR(V); break; - - // // // @@ -1467,7 +1752,7 @@ } template -INLINE T SH7095::OnChipRegRead(uint32 A) +INLINE T SH7095::OnChipRegRead_INLINE(uint32 A) { if(A & 0x100) { @@ -1804,10 +2089,10 @@ ret = SBYCR; break; - case 0x92: case 0x93: case 0x94: case 0x95: - case 0x96: case 0x97: case 0x98: case 0x99: - case 0x9A: case 0x9B: case 0x9C: case 0x9D: - case 0x9E: + case 0x92 ... 0x9F: + // + // TODO: Emulate jankiness of 16-bit reads from mirror addresses. + // ret = CCR | (CCR << 8); break; // @@ -1869,47 +2154,284 @@ } } -template -INLINE T SH7095::ExtBusRead(uint32 A) +template +void INLINE SH7095::BSC_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax) { - T ret; - - A &= (1U << 27) - 1; - - if(timestamp > SH7095_mem_timestamp) - SH7095_mem_timestamp = timestamp; + uint32 DB = SH7095_DB; - // if(!BurstHax) + SH7095_mem_timestamp += (SH7095_mem_timestamp == BSC.last_mem_time) & BSC.last_mem_type; + + if(A < 0x02000000) // CS0, configured as 16-bit { - DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; - } - // + if(sizeof(T) == 4) + { + // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. + //if(!SH2DMAHax) + // SH7095_BusLock++; - ret = SH7095_BusRead(A, BurstHax, NULL); + DB = (DB & 0xFFFF0000) | (V >> 16); + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - return ret; -} + DB = (DB & 0xFFFF0000) | (uint16)V; + BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); -template -INLINE void SH7095::ExtBusWrite(uint32 A, T V) -{ - A &= (1U << 27) - 1; + //if(!SH2DMAHax) + // SH7095_BusLock--; + } + else + { + const uint32 shift = ((A & 1) ^ (2 - sizeof(T))) << 3; + const uint32 mask = (0xFFFF >> ((2 - sizeof(T)) * 8)) << shift; - if(timestamp > SH7095_mem_timestamp) - SH7095_mem_timestamp = timestamp; + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + } + } + else if(A >= 0x06000000) // CS3; 32-bit + { + const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; + const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; - // + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS3(A, DB, BurstHax, SH2DMAHax); + + if(!BurstHax) + { + if(!SH2DMAHax) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp += 2; + BSC.sdram_finish_time = SH7095_mem_timestamp + 2; + } + else + *SH2DMAHax += 3; + } + } + else // CS1, CS2; 32-bit { - DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; + const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; + + DB = (DB & ~mask) | (V << shift); + BusRW_DB_CS12(A, DB, BurstHax, SH2DMAHax); } - // - SH7095_BusWrite(A, V, false, NULL); + SH7095_DB = DB; - write_finish_timestamp = SH7095_mem_timestamp; + if(!BurstHax) + { + BSC.last_mem_addr = A; + BSC.last_mem_type = 0; + BSC.last_mem_time = SH7095_mem_timestamp; + } } +template +T INLINE SH7095::BSC_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax) +{ + // + // + // + uint32 DB = SH7095_DB; + T ret; + + if(!BurstHax) + SH7095_mem_timestamp += (SH7095_mem_timestamp == BSC.last_mem_time) & (bool)((BSC.last_mem_addr ^ A) & 0x06000000); + + if(A < 0x02000000) // CS0, configured as 16-bit + { + if(sizeof(T) == 4) + { + // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. + //if(!SH2DMAHax) + // SH7095_BusLock++; + + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + ret = DB << 16; + + BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); + ret |= (uint16)DB; + + //if(!SH2DMAHax) + // SH7095_BusLock--; + } + else + { + BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 1) ^ (2 - sizeof(T))) << 3); + } + } + else if(A >= 0x06000000) // CS3; 32-bit + { + BusRW_DB_CS3(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); + + // SDRAM leaves data bus in a weird state after read... + // DB = 0; + + if(!BurstHax) + { + if(!SH2DMAHax) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp += 7; + } + else + *SH2DMAHax += 6; + } + } + else // CS1, CS2; 32-bit + { + BusRW_DB_CS12(A, DB, BurstHax, SH2DMAHax); + ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); + } + + SH7095_DB = DB; + + if(!BurstHax) + { + BSC.last_mem_addr = A; + BSC.last_mem_type = 1; + BSC.last_mem_time = SH7095_mem_timestamp; + } + + return ret; +} + + +template +INLINE T SH7095::ExtBusRead_INLINE(uint32 A) +{ + T ret; + + A &= (1U << 27) - 1; + + if(timestamp > SH7095_mem_timestamp) + SH7095_mem_timestamp = timestamp; + + // + if(!BurstHax) + { + DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + } + // +#ifdef MDFN_ENABLE_DEV_BUILD + CheckDMARace(A, sizeof(T), false); +#endif + if(SlavePenalty && !BurstHax) + { + if(SH7095_mem_timestamp > (BSC.last_mem_time + 1)) + SH7095_mem_timestamp += 2; + else + SH7095_mem_timestamp++; + } + + ret = BSC_BusRead(A, BurstHax, NULL); + + if(SlavePenalty && !BurstHax) + { + SH7095_mem_timestamp++; + } + + return ret; +} + +template +INLINE void SH7095::ExtBusWrite_INLINE(uint32 A, T V) +{ + A &= (1U << 27) - 1; + + if(timestamp > SH7095_mem_timestamp) + SH7095_mem_timestamp = timestamp; + + // + DMA_PenaltyKludgeAccum += DMA_PenaltyKludgeAmount; + // +#ifdef MDFN_ENABLE_DEV_BUILD + CheckDMARace(A, sizeof(T), true); +#endif + + if(SlavePenalty) + SH7095_mem_timestamp++; + + BSC_BusWrite(A, V, false, NULL); + + if(SlavePenalty) + { + if(SH7095_mem_timestamp < BSC.sdram_finish_time) + SH7095_mem_timestamp = BSC.sdram_finish_time; + + SH7095_mem_timestamp++; + } + + write_finish_timestamp = SH7095_mem_timestamp; +} + +template +static NO_INLINE MDFN_HOT T ExtBusRead_NI(uint32 A) +{ + return CPU[w].ExtBusRead_INLINE(A); +} + +template +static NO_INLINE MDFN_HOT void ExtBusWrite_NI(uint32 A, T V) +{ + CPU[w].ExtBusWrite_INLINE(A, V); +} + +template +static NO_INLINE MDFN_HOT T OnChipRegRead_NI(uint32 A) +{ + return CPU[w].OnChipRegRead_INLINE(A); +} + +template +INLINE void SH7095::DevBuild_ReadLog(uint32 A) +{ +#ifdef MDFN_ENABLE_DEV_BUILD + if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + + if(match && !BWMIgnoreAddr[0][A & 0x1FF]) + { + SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); + } + } + + if((A & 0xC7FFFFFF) >= 0x00000200/*0x00000004*//*0x00000000*/ && (A & 0xC7FFFFFF) <= 0x000FFFFF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + + if(match) + SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS ROM 0x%06x; PC=0x%08x\n", cpu_name, A, PC); + } +#endif +} + +template +INLINE void SH7095::DevBuild_WriteLog(uint32 A, T V) +{ +#ifdef MDFN_ENABLE_DEV_BUILD + if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) + { + const uint32 pcm = PC & 0x07FFFFFF; + bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000800); + + if(match && !BWMIgnoreAddr[1][A & 0x1FF]) + { + SS_DBG(SS_DBG_BIOS, "[%s] Write to BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); + } + } +#endif +} // // @@ -1952,399 +2474,380 @@ return var; } -INLINE void SH7095::AssocPurge(const uint32 A) +INLINE void SH7095::Cache_AssocPurge(const uint32 A) { const uint32 ATM = A & (0x7FFFF << 10); auto* cent = &Cache[(A >> 4) & 0x3F]; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] Associative purge; address=0x%08x\n", cpu_name, A); + // Ignore two-way-mode bit in CCR here. - if(ATM == cent->Tag[0]) cent->Tag[0] |= 1U << 31; // Set invalid bit to 1. - if(ATM == cent->Tag[1]) cent->Tag[1] |= 1U << 31; - if(ATM == cent->Tag[2]) cent->Tag[2] |= 1U << 31; - if(ATM == cent->Tag[3]) cent->Tag[3] |= 1U << 31; + cent->Tag[0] |= (ATM == cent->Tag[0]); // Set invalid bit to 1. + cent->Tag[1] |= (ATM == cent->Tag[1]); + cent->Tag[2] |= (ATM == cent->Tag[2]); + cent->Tag[3] |= (ATM == cent->Tag[3]); } -template -INLINE T SH7095::MemReadRT(uint32 A) +INLINE int SH7095::Cache_FindWay(CacheEntry* const cent, const uint32 ATM) { - static_assert(region < 0x8, "Wrong region argument."); - const uint32 unmasked_A = A; - - if(!IsInstr) - { - if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte read from 0x%08x\n", cpu_name, sizeof(T), A); - A &= ~(sizeof(T) - 1); - SetPEX(PEX_CPUADDR); - } - } - - if(!IsInstr) - MA_until = std::max(MA_until, timestamp + 1); - else - timestamp = std::max(MA_until, timestamp); +#if defined(HAVE_SSE2_INTRINSICS) + __m128i atm = _mm_set1_epi32(ATM); + __m128i v1234 = _mm_setr_epi32(1, 2, 3, 4); + __m128i tmp; -#ifdef MDFN_ENABLE_DEV_BUILD - if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + tmp = _mm_cmpeq_epi32(_mm_load_si128((__m128i*)cent->Tag), atm); + tmp = _mm_and_si128(tmp, v1234); + tmp = _mm_max_epi16(tmp, _mm_shuffle_epi32(tmp, (3 << 0) | (2 << 2) | (1 << 4) | (0 << 6))); + tmp = _mm_max_epi16(tmp, _mm_shuffle_epi32(tmp, (1 << 0) | (0 << 2))); - if(match && !BWMIgnoreAddr[0][A & 0x1FF]) - { - SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); - } - } + return _mm_cvtsi128_si32(tmp) - 1; +#else + int way_match = -1; - if((A & 0xC7FFFFFF) >= 0x00000200/*0x00000004*//*0x00000000*/ && (A & 0xC7FFFFFF) <= 0x000FFFFF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000A00); + way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); + way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); + way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); + way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); - if(match) - SS_DBG(SS_DBG_BIOS, "[%s] Read from BIOS ROM 0x%06x; PC=0x%08x\n", cpu_name, A, PC); - } + return way_match; #endif +} - // - // WARNING: Template arguments CacheEnabled and TwoWayMode are only valid for region==0. In addition, TwoWayMode is only valid for CacheEnabled==true. - // - switch(region) // A >> 29 - { - case 0: - if(CacheEnabled) - { - const uint32 ATM = A & (0x7FFFF << 10); - auto* cent = &Cache[(A >> 4) & 0x3F]; - int way_match = -1; - - way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); - way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); - way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); - way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); - - if(MDFN_UNLIKELY(way_match < 0)) // Cache miss! - { - if(IsInstr) - { - if(MDFN_UNLIKELY(CCR & CCR_ID)) - goto EBRCase; - } - else - { - if(MDFN_UNLIKELY(CCR & CCR_OD)) - goto EBRCase; - } - - if(TwoWayMode) - way_match = 3 ^ (cent->LRU & 0x1); - else - way_match = LRU_Replace_Tab[cent->LRU]; - - if(MDFN_UNLIKELY(way_match < 0)) - goto EBRCase; - - // - // Load cache line. - // - //printf("Cache load line: %08x\n", A); - cent->Tag[way_match] = ATM; - - { - unsigned di = (A + 4 + 0) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead((A &~ 0xF) + di)); - } - for(unsigned i = 4; i < 16; i += 4) - { - unsigned di = (A + 4 + i) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead((A &~ 0xF) + di)); - } - if(!IsInstr) - MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); - else - timestamp = SH7095_mem_timestamp; - } +template +INLINE void SH7095::Cache_WriteUpdate(uint32 A, T V) +{ + const uint32 ATM = A & (0x7FFFF << 10); + const unsigned ena = (A >> 4) & 0x3F; + CacheEntry* cent = &Cache[ena]; + const int way_match = Cache_FindWay(cent, ATM); - if((SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + (A & ~((1U << SH7095_EXT_MAP_GRAN_BITS) - 1))) == (uintptr_t)fmap_dummy) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE, "[%s] Cacheable %zu-byte read from non-RAM address 0x%08x!\n", cpu_name, sizeof(T), A); - else if(ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A) != MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)])) - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE, "[%s] Cache incoherency for %zu-byte read from address 0x%08x!\n", cpu_name, sizeof(T), A); - - cent->LRU = (cent->LRU & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; - - // Ugggghhhh.... - if(CacheBypassHack && FMIsWriteable[A >> SH7095_EXT_MAP_GRAN_BITS]) - return ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + if(MDFN_LIKELY(way_match >= 0)) // Cache hit! + { + Cache_LRU[ena] = (Cache_LRU[ena] & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; + MDFN_ennsb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); // Ignore CCR OD bit here. + } +} - return MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); - } - // Fall-through, no break here - case 1: - EBRCase: - { - T ret = ExtBusRead(A); +template +INLINE void SH7095::Cache_WriteAddressArray(uint32 A, T V) +{ + const unsigned way = (CCR >> 6) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - if(!IsInstr) - MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); - else - timestamp = SH7095_mem_timestamp; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte write to cache address array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - return ret; - } + Cache[ena].Tag[way] = (A & (0x7FFFF << 10)) | (!(A & 0x4)); + Cache_LRU[ena] = (V >> 4) & 0x3F; +} - case 2: - case 5: - // - // Associative purge(apparently returns open bus of some sort) - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from associative purge area; address=0x%08x\n", cpu_name, sizeof(T), A); - AssocPurge(A); - return ~0; +template +INLINE void SH7095::Cache_WriteDataArray(uint32 A, T V) +{ + const unsigned way = (A >> 10) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - case 3: - // - // Direct cache address/tag access - // - // Note: bits 0, 1, 3, 29, 30, 31 are some sort of open-bus(unemulated). - // - // SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from cache address array area; address=0x%08x\n", cpu_name, sizeof(T), A); - { - const unsigned way = (CCR >> 6) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte write to cache data array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - return (Cache[ena].Tag[way] & (0x7FFFF << 10)) | (((int32)~Cache[ena].Tag[way] >> 31) & 0x4) | (Cache[ena].LRU << 4); - } + MDFN_ennsb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); +} - case 4: - case 6: - // - // Direct cache data access - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte read from cache data array area; address=0x%08x\n", cpu_name, sizeof(T), A); - { - const unsigned way = (A >> 10) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; +template +INLINE T SH7095::Cache_ReadAddressArray(uint32 A) +{ + const unsigned way = (CCR >> 6) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; - return MDFN_densb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); - } + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte read from cache address array area; address=0x%08x\n", cpu_name, sizeof(T), A); - case 7: - return OnChipRegRead(unmasked_A); - } + return (Cache[ena].Tag[way] & (0x7FFFF << 10)) | ((~Cache[ena].Tag[way] & 1) << 2) | (Cache_LRU[ena] << 4); } template -INLINE T SH7095::MemRead(uint32 A) +INLINE T SH7095::Cache_ReadDataArray(uint32 A) { - if(sizeof(T) == 1) - return MRFP8[A >> 29](A); - else if(sizeof(T) == 2) - return MRFP16[A >> 29](A); - else - return MRFP32[A >> 29](A); + const unsigned way = (A >> 10) & 0x3; + const unsigned ena = (A >> 4) & 0x3F; + + SS_DBG(SS_DBG_SH2_CACHE_NOISY, "[%s] %zu-byte read from cache data array area; address=0x%08x\n", cpu_name, sizeof(T), A); + + return MDFN_densb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); } template -INLINE void SH7095::Write_UpdateCache(uint32 A, T V) +INLINE void SH7095::Cache_CheckReadIncoherency(CacheEntry* cent, const int way, const uint32 A) { - const uint32 ATM = A & (0x7FFFF << 10); - auto* cent = &Cache[(A >> 4) & 0x3F]; - int way_match = -1; + if((SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS] + (A & ~((1U << SH7095_EXT_MAP_GRAN_BITS) - 1))) == (uintptr_t)fmap_dummy) + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] Cacheable %zu-byte read from non-RAM address 0x%08x!\n", cpu_name, sizeof(T), A); + else if(ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A) != MDFN_densb(¢->Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)])) + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] Cache incoherency for %zu-byte read from address 0x%08x!\n", cpu_name, sizeof(T), A); +} + +#define MemRead(IsInstr, T, region, CacheEnabled, A_, outval_, A, unmasked_A, cent, way_match) \ +{ \ + __label__ EBRCase, MemReturn; \ + T retval; \ + retval = 0; \ + A = (A_); \ + unmasked_A = A; \ + \ + if(IsInstr <= 0) \ + { \ + if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) \ + { \ + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte read from 0x%08x\n", cpu_name, sizeof(T), A); \ + A &= ~(sizeof(T) - 1); \ + SetPEX(PEX_CPUADDR); \ + } \ + } \ + \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, timestamp + 1); \ + else \ + timestamp = std::max(MA_until, timestamp); \ + \ + DevBuild_ReadLog(A); \ + \ + switch(region) \ + { \ + case 0: \ + if(MDFN_LIKELY(CacheEnabled)) \ + { \ + uint32 ATM; \ + \ + ATM = A & (0x7FFFF << 10); \ + cent = &Cache[(A >> 4) & 0x3F]; \ + \ + way_match = Cache_FindWay(cent, ATM); \ + \ + if(MDFN_UNLIKELY(way_match < 0)) /* Cache miss! */ \ + { \ + way_match = LRU_Replace_Tab[Cache_LRU[(A >> 4) & 0x3F] & CCRC_Replace_AND] | CCRC_Replace_OR[(bool)IsInstr]; \ + \ + if(MDFN_UNLIKELY(way_match < 0)) \ + goto EBRCase; \ + \ + /* */ \ + /* Load cache line. */ \ + /* */ \ + /*printf("Cache load line: %08x\n", A);*/ \ + cent->Tag[way_match] = ATM; \ + /* Don't use ATM after this point. */ \ + CHECK_EXIT_RESUME(); \ + { \ + unsigned di = (A + 4 + 0) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead(uint32, false, (A &~ 0xF) + di)); \ + } \ + for(unsigned i = 4; i < 16; i += 4) \ + { \ + unsigned di = (A + 4 + i) & 0xC; MDFN_ennsb(¢->Data[way_match][di], ExtBusRead(uint32, true, (A &~ 0xF) + di)); \ + } \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); \ + else \ + timestamp = SH7095_mem_timestamp; \ + } \ + \ + Cache_CheckReadIncoherency(cent, way_match, A); \ + \ + Cache_LRU[(A >> 4) & 0x3F] = (Cache_LRU[(A >> 4) & 0x3F] & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; \ + \ + /* Ugggghhhh.... */ \ + if(CacheBypassHack && FMIsWriteable[A >> SH7095_EXT_MAP_GRAN_BITS]) \ + { \ + retval = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); \ + goto MemReturn; \ + } \ + \ + retval = MDFN_densb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)]); \ + goto MemReturn; \ + } \ + /* Fall-through, no break here */ \ + case 1: \ + EBRCase: \ + CHECK_EXIT_RESUME(); \ + { \ + retval = ExtBusRead(T, false, A); \ + \ + if(IsInstr <= 0) \ + MA_until = std::max(MA_until, SH7095_mem_timestamp + 1); \ + else \ + { \ + timestamp = SH7095_mem_timestamp; \ + UCRead_IF_Kludge = true; \ + } \ + \ + goto MemReturn; \ + } \ + \ + case 2: \ + case 5: \ + /* */ \ + /* Associative purge(apparently returns open bus of some sort) */ \ + /* */ \ + Cache_AssocPurge(A); \ + retval = ~0; \ + goto MemReturn; \ + \ + case 3: \ + /* */ \ + /* Direct cache address/tag access */ \ + /* */ \ + /* Note: bits 0, 1, 3, 29, 30, 31 are some sort */ \ + /* of open-bus(unemulated). */ \ + /* */ \ + retval = Cache_ReadAddressArray(A); \ + goto MemReturn; \ + \ + case 4: \ + case 6: \ + /* */ \ + /* Direct cache data access */ \ + /* */ \ + retval = Cache_ReadDataArray(A); \ + goto MemReturn; \ + \ + case 7: \ + retval = OnChipRegRead(T, unmasked_A); \ + goto MemReturn; \ + } \ + MemReturn: outval_ = retval; \ +} + +#define MemWrite(T, region, CacheEnabled, A_, V_, A, unmasked_A, V) \ +{ \ + A = (A_); \ + unmasked_A = A; \ + V = (V_); \ + \ + if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) \ + { \ + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte write of 0x%08x to 0x%08x\n", cpu_name, sizeof(T), V, A); \ + A &= ~(sizeof(T) - 1); \ + SetPEX(PEX_CPUADDR); \ + } \ + \ + MA_until = std::max(MA_until, timestamp + 1); \ + \ + DevBuild_WriteLog(A, V); \ + \ + switch(region) \ + { \ + case 0: \ + if(MDFN_LIKELY(CacheEnabled)) \ + Cache_WriteUpdate(A, V); \ + /* Fall-through, no break */ \ + case 1: \ + MA_until = std::max(MA_until, write_finish_timestamp + 1); \ + \ + if(!SH7095_BusLock) { CHECK_EXIT_RESUME(); } \ + ExtBusWrite(T, A, V); \ + break; \ + \ + case 2: \ + case 5: \ + /* */ \ + /* Associative purge. */ \ + /* */ \ + Cache_AssocPurge(A); \ + break; \ + \ + case 3: \ + /* */ \ + /* Direct cache address/tag access */ \ + /* */ \ + /* TODO: Check non-32 bit access */ \ + timestamp++; \ + MA_until = std::max(MA_until, timestamp + 1); \ + \ + Cache_WriteAddressArray(A, V); \ + break; \ + \ + case 4: \ + case 6: \ + /* */ \ + /* Direct cache data access */ \ + /* */ \ + Cache_WriteDataArray(A, V); \ + break; \ + \ + case 7: \ + OnChipRegWrite(unmasked_A, V); \ + break; \ + } \ +} + +#define CHECK_EXIT_RESUME() { if(NeedSlaveCall > 0) CPU[1].RunSlaveUntil(timestamp); if(NeedSlaveCall < 0) CPU[1].RunSlaveUntil_Debug(timestamp); } +#define OnChipRegRead(T, A) OnChipRegRead_INLINE(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI(A, V) +template +INLINE T SH7095::MemReadRT(uint32 A) +{ + static_assert(region < 0x8, "Wrong region argument."); + static_assert(!NeedSlaveCall || (!which && region < 2), "Wrong arguments."); + static_assert(IsInstr >= 0 || (CacheEnabled && region == 0x0), "Wrong arguments."); + T ret; + uint32 unmasked_A; + CacheEntry* cent; + int way_match; - way_match = cmov_eq_thing(ATM, cent->Tag[0], way_match, 0); - way_match = cmov_eq_thing(ATM, cent->Tag[1], way_match, 1); - way_match = cmov_eq_thing(ATM, cent->Tag[2], way_match, 2); - way_match = cmov_eq_thing(ATM, cent->Tag[3], way_match, 3); + MemRead(IsInstr, T, region, CacheEnabled, A, ret, A, unmasked_A, cent, way_match); - if(MDFN_LIKELY(way_match >= 0)) // Cache hit! - { - cent->LRU = (cent->LRU & LRU_Update_Tab[way_match].AND) | LRU_Update_Tab[way_match].OR; - MDFN_ennsb(¢->Data[way_match][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); // Ignore CCR OD bit here. - } + return ret; } -template +template INLINE void SH7095::MemWriteRT(uint32 A, T V) { static_assert(region < 0x8, "Wrong region argument."); - const uint32 unmasked_A = A; - - if(MDFN_UNLIKELY(A & (sizeof(T) - 1))) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Misaligned %zu-byte write of 0x%08x to 0x%08x\n", cpu_name, sizeof(T), V, A); - A &= ~(sizeof(T) - 1); - SetPEX(PEX_CPUADDR); - } + static_assert(!NeedSlaveCall || (!which && region < 2), "Wrong arguments."); + uint32 unmasked_A; - MA_until = std::max(MA_until, timestamp + 1); + MemWrite(T, region, CacheEnabled, A, V, A, unmasked_A, V); +} +#undef CHECK_EXIT_RESUME +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite -#ifdef MDFN_ENABLE_DEV_BUILD - if((A & 0xC7FFFFFF) >= 0x06000200 && (A & 0xC7FFFFFF) <= 0x060003FF) - { - const uint32 pcm = PC & 0x07FFFFFF; - bool match = (pcm >= 0x100000) && (pcm < 0x06000600 || pcm >= 0x06000800); +template +static NO_INLINE MDFN_HOT MDFN_FASTCALL T C_MemReadRT(uint32 A) +{ + return CPU[which].MemReadRT(A); +} - if(match && !BWMIgnoreAddr[1][A & 0x1FF]) - { - SS_DBG(SS_DBG_BIOS, "[%s] Write to BIOS area of RAM 0x%08x; PC=0x%08x\n", cpu_name, A, PC); - } - } -#endif - - // - // WARNING: Template argument CacheEnabled is only valid for region==0. - // - switch(region) // A >> 29 - { - case 0: - if(CacheEnabled) - Write_UpdateCache(A, V); - // Fall-through, no break - case 1: - MA_until = std::max(MA_until, write_finish_timestamp + 1); - - ExtBusWrite(A, V); - return; - - case 2: - case 5: - // - // Associative purge. - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to associative purge area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - AssocPurge(A); - return; - - case 3: - // - // Direct cache address/tag access - // - // TODO: Check non-32 bit access - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to cache address array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - timestamp++; - MA_until = std::max(MA_until, timestamp + 1); - { - const unsigned way = (CCR >> 6) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; - - Cache[ena].Tag[way] = (A & (0x7FFFF << 10)) | ((!(A & 0x4)) << 31); - Cache[ena].LRU = (V >> 4) & 0x3F; - } - return; - - case 4: - case 6: - // - // Direct cache data access - // - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] %zu-byte write to cache data array area; address=0x%08x value=0x%x\n", cpu_name, sizeof(T), A, V); - { - const unsigned way = (A >> 10) & 0x3; - const unsigned ena = (A >> 4) & 0x3F; - - MDFN_ennsb(&Cache[ena].Data[way][NE32ASU8_IDX_ADJ(T, A & 0x0F)], V); - } - return; - - case 7: - OnChipRegWrite(unmasked_A, V); - return; - } -} - -template -INLINE void SH7095::MemWrite(uint32 A, T V) -{ - if(sizeof(T) == 1) - MWFP8[A >> 29](A, V); - else if(sizeof(T) == 2) - MWFP16[A >> 29](A, V); - else - MWFP32[A >> 29](A, V); -} - - -template -static NO_INLINE MDFN_FASTCALL T C_MemReadRT(uint32 A) +template +static NO_INLINE MDFN_HOT MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) { - return CPU[which].MemReadRT(A); + CPU[which].MemWriteRT(A, V); } -template -static NO_INLINE MDFN_FASTCALL void C_MemWriteRT(uint32 A, T V) -{ - CPU[which].MemWriteRT(A, V); -} - - INLINE void SH7095::SetCCR(uint8 V) { if(CCR != V) - SS_DBG(SS_DBG_SH2_CACHE, "[%s] CCR changed: 0x%02x->0x%02x%s\n", cpu_name, CCR, V, (V & CCR_CP) ? " (CACHE PURGE!)" : ""); + SS_DBG(SS_DBG_SH2_CACHE | SS_DBG_SH2_CACHE_NOISY, "[%s] CCR changed: 0x%02x->0x%02x%s\n", cpu_name, CCR, V, (V & CCR_CP) ? " (CACHE PURGE!)" : ""); if(V & CCR_CP) { for(unsigned entry = 0; entry < 64; entry++) { - Cache[entry].LRU = 0; + Cache_LRU[entry] = 0; for(unsigned way = 0; way < 4; way++) - Cache[entry].Tag[way] |= 1U << 31; // Set invalid bit to 1. + Cache[entry].Tag[way] |= 1; // Set invalid bit to 1. } V &= ~CCR_CP; } - CCR = V; - #define MAHL(bs,w,cbh) \ - if(CCR & CCR_CE) \ - { \ - if(CCR & CCR_TW) \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - } \ - else \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - } \ - MWFP##bs[0] = C_MemWriteRT; \ - } \ - else \ - { \ - MRFP##bs[0] = C_MemReadRT ; \ - MRFPI[0] = C_MemReadRT ; \ - MWFP##bs[0] = C_MemWriteRT; \ - } - if(this == &CPU[0]) - { - if(CBH_Setting) - { - MAHL( 8, 0, true) - MAHL(16, 0, true) - MAHL(32, 0, true) - } - else - { - MAHL( 8, 0, false) - MAHL(16, 0, false) - MAHL(32, 0, false) - } - } - else + //if(MDFN_LIKELY(CCR != V)) { - if(CBH_Setting) - { - MAHL( 8, 1, true) - MAHL(16, 1, true) - MAHL(32, 1, true) - } - else - { - MAHL( 8, 1, false) - MAHL(16, 1, false) - MAHL(32, 1, false) - } + CCR = V; + // + // + CCRC_Replace_AND = (CCR & CCR_TW) ? 0x1 : 0x3F; + CCRC_Replace_OR[0] = (CCR & CCR_OD) ? -1 : 0; + CCRC_Replace_OR[1] = (CCR & CCR_ID) ? -1 : 0; + + RecalcMRWFP_0(); } - #undef MAHL } @@ -2356,6 +2859,28 @@ */ void NO_INLINE SH7095::Reset(bool power_on_reset, bool from_internal_wdt) { + if(timestamp == SS_EVENT_DISABLED_TS) + return; + + if(power_on_reset) + { + FRT.lastts = timestamp; + + MA_until = timestamp; + MM_until = timestamp; + + for(unsigned i = 0; i < 16; i++) + WB_until[i] = timestamp; + + UCRead_IF_Kludge = 0; + + write_finish_timestamp = timestamp; + divide_finish_timestamp = timestamp; + + DMA_Timestamp = timestamp; + DMA_SGEndTimestamp = timestamp; + } + // VBR = 0; SR |= 0xF << 4; SetCCR(0); @@ -2367,12 +2892,22 @@ BSC.WCR = 0xAAFF; BSC.MCR = 0x0000; + BSC.sdram_finish_time = timestamp; + BSC.last_mem_time = timestamp; + BSC.last_mem_addr = 0; + BSC.last_mem_type = 0; + BSC.RTCSR = 0x00; BSC.RTCSRM = 0x00; BSC.RTCNT = 0x00; BSC.RTCOR = 0x00; } // +#ifdef MDFN_ENABLE_DEV_BUILD + for(unsigned ch = 0; ch < 2; ch++) + DMADebug[ch].rw[0][0] = ~0U; +#endif + for(unsigned ch = 0; ch < 2; ch++) { DMACH[ch].CHCR = 0x00; @@ -2401,6 +2936,7 @@ EPending = 0; SetPEX(power_on_reset ? PEX_POWERON : PEX_RESET); Pipe_ID = EPending; + ResumePoint = nullptr; } void NO_INLINE SH7095::INTC_Reset(void) @@ -2455,6 +2991,9 @@ void SH7095::ForceInternalEventUpdates(void) { + if(MDFN_UNLIKELY(timestamp == SS_EVENT_DISABLED_TS)) + return; + FRT_WDT_Update(); FRT_WDT_Recalc_NET(); } @@ -2519,2332 +3058,519 @@ // // - // -#if 0 - { - const uint32 sci_ip_tmp = (SCI.SSR & SCI.SCR & 0xC4) | (SCI.SSR & 0x38); - - if(sci_ip_tmp && (tmp_ipr = ((IPRB >> 12) & 0xF)) > ipr) - { - ipr = tmp_ipr; - - if(sci_ip_tmp & 0x38) // ERI(receive error; ORER, PER, FER) - vecnum = (VCRA >> 8) & 0x7F; - else if(sci_ip_tmp & 0x40)// RXI(receive data full; RDRF) - vecnum = (VCRA >> 0) & 0x7F; - else if(sci_ip_tmp & 0x80)// TXI(transmit data empty; TDRE) - vecnum = (VCRB >> 8) & 0x7F; - else if(sci_ip_tmp & 0x04)// TEI(transmit end; TEND) - vecnum = (VCRB >> 0) & 0x7F; - } - } -#endif - // - // - // - const uint32 frt_ip_tmp = (FRT.FTCSR & FRT.TIER & 0x8E); - if(frt_ip_tmp && (tmp_ipr = ((IPRB >> 8) & 0xF)) > ipr) - { - ipr = tmp_ipr; - - if(frt_ip_tmp & 0x80) // ICI - vecnum = (VCRC >> 8) & 0x7F; - else if(frt_ip_tmp & 0x0C) // OCIA+OCIB - vecnum = (VCRC >> 0) & 0x7F; - else // OVI - vecnum = (VCRD >> 8) & 0x7F; - } - - if(vecnum_out) - { - if(vecnum == ~0U) - vecnum = ExIVecFetch(); - - *vecnum_out = vecnum; - } - - return ipr; -} - -// -// Call after changes to: -// IRL -// SR -// -// IPRA -// IPRB -// -// DMACH[*].CHCR -// -// DVCR -// -// FRT.FTCSR -// FRT.TIER -// -void NO_INLINE SH7095::RecalcPendingIntPEX(void) -{ - if(GetPendingInt(NULL) > ((SR >> 4) & 0xF)) - SetPEX(PEX_INT); - else - ClearPEX(PEX_INT); -} - -static const uint8 InstrDecodeTab[65536] = -{ - #include "sh7095_idecodetab.inc" -}; - -template -INLINE void SH7095::FetchIF(bool ForceIBufferFill) -{ - if(DebugMode) - PC_IF = PC; - - if(EmulateICache) - { - if(ForceIBufferFill) - { - IBuffer = MRFPI[PC >> 29](PC &~ 2); - Pipe_IF = (uint16)(IBuffer >> (((PC & 2) ^ 2) << 3)); - } - else - { - Pipe_IF = (uint16)IBuffer; - if(!(PC & 0x2)) - { - IBuffer = MRFPI[PC >> 29](PC); - Pipe_IF = IBuffer >> 16; - } - } - } - else - { - if(timestamp < (MA_until - (ForceIBufferFill ? 0 : ((int32)(PC & 0x2) << 28)))) - timestamp = MA_until; - - if(MDFN_UNLIKELY((int32)PC < 0)) // Mr. Boooones - { - Pipe_IF = MRFP16[PC >> 29](PC); - timestamp++; - return; - } - - Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); - } - timestamp++; -} - -// -// TODO: Stop reading from memory when an exception is pending? -// -template -INLINE void SH7095::DoIDIF_Real(void) -{ - if(DelaySlot) - { - // - // Redecode the opcode from the 16-bit instruction to makes sure exceptions won't be taken in the delay slot(due - // to op field being forced to 0xFF in the previous call to DoIDIF()), and forces usage of the second half of the opcode - // table so we can generate illegal slot instruction exceptions as appropriate. - // - // Oh, and this effectively discards the previously-fetched instruction in Pipe_IF. Poor, poor instruction. - // - Pipe_ID = (uint16)Pipe_ID; - Pipe_ID |= (InstrDecodeTab[Pipe_ID] | 0x80) << 24; - } - else - { - uint32 op = InstrDecodeTab[Pipe_IF]; - uint32 epo = EPending; - - if(IntPreventNext) - { - epo &= ~(1U << (PEX_INT + EPENDING_PEXBITS_SHIFT)); - if(!(epo & (0xFF << EPENDING_PEXBITS_SHIFT))) - epo = 0; - } - - if(DebugMode) - PC_ID = PC_IF; - - Pipe_ID = Pipe_IF | (op << 24) | epo; - } - - if(!SkipFetchIF) - FetchIF(false); -} - -template -static NO_INLINE void DoIDIF(void) -{ - CPU[which].DoIDIF_Real(); -} - -template -INLINE void SH7095::Branch(uint32 target) -{ - if(DebugMode > 0) - DBG_AddBranchTrace(which, target, -1); - - PC = target; - - // - // Not totally correct, but simplifies things...probably :p - // - if(delayed) - { - if(MDFN_UNLIKELY(PC & 1)) - { - DoIDIF(); - SetPEX(PEX_CPUADDR); // Pending for the instruction after the delay slot instruction. - } - else - { - if(EmulateICache) - { - if(PC & 0x2) - IBuffer = MRFPI[PC >> 29](PC &~ 2); - } - - DoIDIF(); - } - } - else - { - if(MDFN_UNLIKELY(PC & 1)) - { - SetPEX(PEX_CPUADDR); - DoIDIF(); - } - else - { - if(EmulateICache) - { - if(PC & 0x2) - IBuffer = MRFPI[PC >> 29](PC &~ 2); - } - - DoIDIF(); - PC += 2; - DoIDIF(); - } - } -} - -// Remember to use BEGIN_OP_DLYIDIF instead of BEGIN_OP -template -INLINE void SH7095::UCDelayBranch(uint32 target) -{ - if(DebugMode > 0) - DBG_AddBranchTrace(which, target, -1); - - PC = target; - - if(DebugMode) - PC_ID = PC_IF; - - Pipe_ID = Pipe_IF | ((InstrDecodeTab[Pipe_IF] | 0x80) << 24); - - timestamp++; - - if(MDFN_UNLIKELY(PC & 1)) - { - DoIDIF(); - SetPEX(PEX_CPUADDR); // Pending for the instruction after the delay slot instruction. - } - else - { - FetchIF(true); - } -} - -template -INLINE void SH7095::UCRelDelayBranch(uint32 disp) -{ - UCDelayBranch(PC + disp); -} - - -template -INLINE void SH7095::CondRelBranch(bool cond, uint32 disp) -{ - if(cond) - Branch(PC + disp); -} - -template -uint32 NO_INLINE SH7095::Exception(const unsigned exnum, const unsigned vecnum) -{ - uint32 new_PC; - - timestamp += 2; - timestamp = std::max(MA_until, timestamp); - - if(exnum == EXCEPTION_RESET || exnum == EXCEPTION_POWERON) - { - new_PC = MemRead((vecnum + 0) << 2); - R[15] = MemRead((vecnum + 1) << 2); - } - else - { - // Save SR to stack - // Save PC to stack - // Read exception vector table - R[15] -= 4; - MemWrite(R[15], SR); - timestamp++; - R[15] -= 4; - MemWrite(R[15], PC); - timestamp++; - timestamp++; - new_PC = MemRead(VBR + (vecnum << 2)); - timestamp++; - } - - if(DebugMode) - DBG_AddBranchTrace(this - CPU, new_PC, exnum, vecnum); - - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exception %u, vecnum=%u, vbr=%08x, saved PC=0x%08x --- New PC=0x%08x, New R15=0x%08x\n", cpu_name, exnum, vecnum, VBR, PC, new_PC, R[15]); - - return new_PC; -} - - -/* - PC == 0 - instr = [?] - ID = [?] - IF = [0] - - PC == 2 - instr = [?] - ID = [0] - IF = [2] - - PC == 4 - instr = [0] - ID = [2] - IF = [4] - -*/ - -template -INLINE void SH7095::Step(void) -{ - // - // Ideally, we would place SPEPRecover: after the FRT event check, but doing - // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions - // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop - // or something?(even with all our branch hinting!) - // - SPEPRecover:; - - if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) - { - FRT_WDT_Update(); - FRT_WDT_Recalc_NET(); - } - - const uint32 instr = (uint16)Pipe_ID; - const unsigned instr_nyb1 = (instr >> 4) & 0xF; - const unsigned instr_nyb2 = (instr >> 8) & 0xF; -// asm volatile("":: "a"(instr_nyb1), "d"(instr_nyb2)); - switch(Pipe_ID >> 24) - { - #include "sh7095_opdefs.inc" - - #define PART_OP_NORMIDIF DoIDIF(); - - #define BEGIN_OP(x) OP_##x { PART_OP_NORMIDIF - #define BEGIN_OP_DLYIDIF(x) OP_##x { - - // "Interrupt-disabled" instruction(blocks interrupt from being taken for next instruction). - // Use with BEGIN_OP_DLYIDIF() - #define PART_OP_INTDIS DoIDIF(); - - #define END_OP } break; - - #define WB_EX_CHECK(r) { if(EmulateICache) { if(timestamp < WB_until[(r)]) timestamp = WB_until[(r)]; } } - #define WB_WRITE(r, v) { R[(r)] = (v); if(EmulateICache) { WB_until[(r)] = MA_until + 1; } } - // - // - // - // - // MOV #imm,Rn - // - BEGIN_OP(MOV_IMM_REG) - const unsigned n = instr_nyb2; - const uint32 imm = (int8)instr; - - WB_EX_CHECK(n) - - R[n] = imm; - END_OP - - - // - // MOV.W @(disp,PC),Rn - // - BEGIN_OP(MOV_W_PCREL_REG) - const unsigned n = instr_nyb2; - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = PC + (d << 1); - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,PC),Rn - // - BEGIN_OP(MOV_L_PCREL_REG) - const unsigned n = instr_nyb2; - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = (PC &~ 0x3) + (d << 2); - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV Rm,Rn - // - BEGIN_OP(MOV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[m]; - END_OP - - - // - // MOV.B Rm,@Rn - // - BEGIN_OP(MOV_B_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.W Rm,@Rn - // - BEGIN_OP(MOV_W_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.L Rm,@Rn - // - BEGIN_OP(MOV_L_REG_REGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - const uint32 ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.B @Rm,Rn - // - BEGIN_OP(MOV_B_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @Rm,Rn - // - BEGIN_OP(MOV_W_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @Rm,Rn - // - BEGIN_OP(MOV_L_REGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[m]; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B Rm,@-Rn - // - BEGIN_OP(MOV_B_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 1; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.W Rm,@-Rn - // - BEGIN_OP(MOV_W_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 2; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.L Rm,@-Rn - // - BEGIN_OP(MOV_L_REG_REGINDIRPD) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 val = R[m]; - uint32 ea; - - R[n] -= 4; - ea = R[n]; - - MemWrite(ea, val); - END_OP - - - // - // MOV.B @Rm+,Rn - // - BEGIN_OP(MOV_B_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 1; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @Rm+,Rn - // - BEGIN_OP(MOV_W_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 2; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @Rm+,Rn - // - BEGIN_OP(MOV_L_REGINDIRPI_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B R0,@(disp,Rn) - // - BEGIN_OP(MOV_B_REG0_REGINDIRDISP) - const unsigned n = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 0); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.W R0,@(disp,Rn) - // - BEGIN_OP(MOV_W_REG0_REGINDIRDISP) - const unsigned n = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 1); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.L Rm,@(disp,Rn) - // - BEGIN_OP(MOV_L_REG_REGINDIRDISP) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[n] + (d << 2); - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.B @(disp,Rm),R0 - // - BEGIN_OP(MOV_B_REGINDIRDISP_REG0) - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 0); - - WB_WRITE(0, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(disp,Rm),R0 - // - BEGIN_OP(MOV_W_REGINDIRDISP_REG0) - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 1); - - WB_WRITE(0, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,Rm),Rn - // - BEGIN_OP(MOV_L_REGINDIRDISP_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned d = (instr >> 0) & 0xf; - const uint32 ea = R[m] + (d << 2); - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B Rm,@(R0,Rn) - // - BEGIN_OP(MOV_B_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.W Rm,@(R0,Rn) - // - BEGIN_OP(MOV_W_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.L Rm,@(R0,Rn) - // - BEGIN_OP(MOV_L_REG_IDXREGINDIR) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[n]; - - MemWrite(ea, R[m]); - END_OP - - - // - // MOV.B @(R0,Rm),Rn - // - BEGIN_OP(MOV_B_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(R0,Rm),Rn - // - BEGIN_OP(MOV_W_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(R0,Rm),Rn - // - BEGIN_OP(MOV_L_IDXREGINDIR_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 ea = R[0] + R[m]; - - WB_WRITE(n, MemRead(ea)); - END_OP - - - // - // MOV.B R0,@(disp,GBR) - // - BEGIN_OP(MOV_B_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 0); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.W R0,@(disp,GBR) - // - BEGIN_OP(MOV_W_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 1); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.L R0,@(disp,GBR) - // - BEGIN_OP(MOV_L_REG0_GBRINDIRDISP) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 2); - - MemWrite(ea, R[0]); - END_OP - - - // - // MOV.B @(disp,GBR),R0 - // - BEGIN_OP(MOV_B_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 0); - - WB_WRITE(0, (int8)MemRead(ea)); - END_OP - - - // - // MOV.W @(disp,GBR),R0 - // - BEGIN_OP(MOV_W_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 1); - - WB_WRITE(0, (int16)MemRead(ea)); - END_OP - - - // - // MOV.L @(disp,GBR),R0 - // - BEGIN_OP(MOV_L_GBRINDIRDISP_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = GBR + (d << 2); - - WB_WRITE(0, MemRead(ea)); - END_OP - - - // - // MOVA @(disp,PC),R0 - // - BEGIN_OP(MOVA_PCREL_REG0) - const unsigned d = (instr >> 0) & 0xff; - const uint32 ea = (PC &~ 0x3) + (d << 2); - - WB_EX_CHECK(0) - - R[0] = ea; - END_OP - - - // - // MOVT Rn - // - BEGIN_OP(MOVT_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] = GetT(); - END_OP - - - // - // SWAP.B Rm,Rn - // - BEGIN_OP(SWAP_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[m] & 0xFFFF0000) | ((R[m] << 8) & 0xFF00) | ((R[m] >> 8) & 0x00FF); - END_OP - - - // - // SWAP.W Rm,Rn - // - BEGIN_OP(SWAP_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[m] << 16) | (R[m] >> 16); - END_OP - - - // - // XTRCT Rm,Rn - // - BEGIN_OP(XTRCT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (R[n] >> 16) | (R[m] << 16); - END_OP - - - // - // ADD Rm,Rn - // - BEGIN_OP(ADD_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] + R[m]; - END_OP - - - // - // ADD #imm,Rn - // - BEGIN_OP(ADD_IMM_REG) - const unsigned n = instr_nyb2; - const uint32 imm = (int8)instr; - - WB_EX_CHECK(n) - - R[n] = R[n] + imm; - END_OP - - - // - // ADDC Rm,Rn - // - BEGIN_OP(ADDC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] + R[m] + GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // ADDV Rm,Rn - // - BEGIN_OP(ADDV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 result = R[n] + R[m]; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(((~(R[n] ^ R[m])) & (R[n] ^ result)) >> 31); - R[n] = result; - END_OP - - - // - // CMP/EQ #imm,R0 - // - BEGIN_OP(CMP_EQ_IMM_REG0) - const uint32 imm = (int8)instr; - - WB_EX_CHECK(0) - - SetT(imm == R[0]); - END_OP - - - // - // CMP/EQ Rm,Rn - // - BEGIN_OP(CMP_EQ_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] == R[m]); - END_OP - - - // - // CMP/HS Rm,Rn - // - BEGIN_OP(CMP_HS_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] >= R[m]); - END_OP - - - // - // CMP/GE Rm,Rn - // - BEGIN_OP(CMP_GE_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((int32)R[n] >= (int32)R[m]); - END_OP - - - // - // CMP/HI Rm,Rn - // - BEGIN_OP(CMP_HI_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(R[n] > R[m]); - END_OP - - - // - // CMP/GT Rm,Rn - // - BEGIN_OP(CMP_GT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((int32)R[n] > (int32)R[m]); - END_OP - - - // - // CMP/PZ Rn - // - BEGIN_OP(CMP_PZ_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - SetT((int32)R[n] >= 0); - END_OP - - - // - // CMP/PL Rn - // - BEGIN_OP(CMP_PL_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - SetT((int32)R[n] > 0); - END_OP - - - // - // CMP/STR Rm,Rn - // - BEGIN_OP(CMP_STR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 tmp = R[n] ^ R[m]; - unsigned new_T = 0; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - if(!(tmp & 0x000000FF)) new_T = 1; - if(!(tmp & 0x0000FF00)) new_T = 1; - if(!(tmp & 0x00FF0000)) new_T = 1; - if(!(tmp & 0xFF000000)) new_T = 1; - - SetT(new_T); - END_OP - - - // - // DIV1 Rm,Rn - // - BEGIN_OP(DIV1_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint32 tmp; - bool new_Q; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - new_Q = R[n] >> 31; - R[n] <<= 1; - R[n] |= GetT(); - - tmp = R[n]; - new_Q ^= GetM(); - - if(!(GetQ() ^ GetM())) - { - R[n] -= R[m]; - new_Q ^= (R[n] > tmp); - } - else - { - R[n] += R[m]; - new_Q ^= (R[n] < tmp); - } - - SetQ(new_Q); - SetT(new_Q == GetM()); - END_OP - - - // - // DIV0S Rm,Rn - // - BEGIN_OP(DIV0S_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const unsigned new_Q = R[n] >> 31; - const unsigned new_M = R[m] >> 31; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetQ(new_Q); - SetM(new_M); - SetT(new_Q != new_M); - END_OP - - - // - // DIV0U - // - BEGIN_OP(DIV0U) - SetQ(false); - SetM(false); - SetT(false); - END_OP - - - // - // DT - // - BEGIN_OP(DT) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n]--; - SetT(!R[n]); - END_OP - - - // - // EXTS.B Rm,Rn - // - BEGIN_OP(EXTS_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (int8)R[m]; - END_OP - - - // - // EXTS.W Rm,Rn - // - BEGIN_OP(EXTS_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (int16)R[m]; - END_OP - - - // - // EXTU.B Rm,Rn - // - BEGIN_OP(EXTU_B_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (uint8)R[m]; - END_OP - - - // - // EXTU.W Rm,Rn - // - BEGIN_OP(EXTU_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = (uint16)R[m]; - END_OP - - - // - // MAC.L @Rm+,@Rn+ - // - // Pipeline: page 188(not implemented right here) - BEGIN_OP(MAC_L) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - uint64 a, b, sum; - int32 m0, m1; - - // Order confirmed. - m0 = (int32)MemRead(R[m]); - R[m] += 4; - m1 = (int32)MemRead(R[n]); - R[n] += 4; - - a = GetMAC64(); - b = (int64)m0 * m1; - sum = a + b; - - if(GetS() && sum > 0x00007FFFFFFFFFFFULL && sum < 0xFFFF800000000000ULL) - { - if((int32)(m0 ^ m1) < 0) - sum = 0xFFFF800000000000ULL; - else - sum = 0x00007FFFFFFFFFFFULL; - } - - SetMAC64(sum); - - timestamp++; - END_OP - - - // - // MAC.W @Rm+,@Rn+ - // - // Pipeline: page 180(not implemented right here) - BEGIN_OP(MAC_W) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - int16 m0, m1; - - // Order confirmed. - m0 = (int16)MemRead(R[m]); - R[m] += 2; - m1 = (int16)MemRead(R[n]); - R[n] += 2; - - if(GetS()) - { - int32 b = (int32)m0 * m1; - uint64 sum = (int64)(int32)MACL + b; - - if(sum > 0x000000007FFFFFFFULL && sum < 0xFFFFFFFF80000000ULL) - { - MACH |= 1; - - if(b < 0) - sum = 0x80000000ULL; - else - sum = 0x7FFFFFFFULL; - } - - MACL = sum; - } - else - SetMAC64(GetMAC64() + (int64)m0 * m1); - - timestamp++; - END_OP - - - // - // DMULS.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(DMULS_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (int64)(int32)R[n] * (int32)R[m]; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = result >> 0; - MACH = result >> 32; - END_OP - - - // - // DMULU.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(DMULU_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] * R[m]; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = result >> 0; - MACH = result >> 32; - END_OP - - - // - // MUL.L Rm,Rn - // - // Pipeline: page 215 (not implemented here totally correctly) - BEGIN_OP_DLYIDIF(MUL_L_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - timestamp++; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 4; - PART_OP_NORMIDIF - - MACL = R[n] * R[m]; - END_OP - - - // - // MULS.W Rm,Rn - // - // Pipeline: page 207 - BEGIN_OP(MULS_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 2; - - MACL = (int16)R[n] * (int16)R[m]; - END_OP - - - // - // MULU.W Rm,Rn - // - // Pipeline: page 207 - BEGIN_OP(MULU_W_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); - MM_until = MA_until + 2; - - MACL = (uint32)(uint16)R[n] * (uint32)(uint16)R[m]; - END_OP - - - // - // NEG Rm,Rn - // - BEGIN_OP(NEG_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = -R[m]; - END_OP - - - // - // NEGC Rm,Rn - // - BEGIN_OP(NEGC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)0 - R[m] - GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // SUB Rm,Rn - // - BEGIN_OP(SUB_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] - R[m]; - END_OP - - - // - // SUBC Rm,Rn - // - BEGIN_OP(SUBC_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint64 result = (uint64)R[n] - R[m] - GetT(); - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = result; - SetT((result >> 32) & 1); - END_OP - - - // - // SUBV Rm,Rn - // - BEGIN_OP(SUBV_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - const uint32 result = R[n] - R[m]; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT((((R[n] ^ R[m])) & (R[n] ^ result)) >> 31); - R[n] = result; - END_OP - - - // - // AND Rm,Rn - // - BEGIN_OP(AND_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] & R[m]; - END_OP - - - // - // AND #imm,R0 - // - BEGIN_OP(AND_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] = R[0] & imm; - END_OP - - - // - // AND.B #imm,@(R0,GBR) - // - BEGIN_OP(AND_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp &= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // NOT Rm,Rn - // - BEGIN_OP(NOT_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = ~R[m]; - END_OP - - - // - // OR Rm,Rn - // - BEGIN_OP(OR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] |= R[m]; - END_OP - - - // - // OR #imm,R0 - // - BEGIN_OP(OR_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] |= imm; - END_OP - - - // - // OR.B #imm,@(R0,GBR) - // - BEGIN_OP(OR_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp |= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // TAS.B @Rn - // - BEGIN_OP(TAS_B_REGINDIR) - const unsigned n = instr_nyb2; - const uint32 ea = R[n]; - uint8 tmp; - - SH7095_BusLock++; - tmp = ExtBusRead(ea); // FIXME: Address error on invalid address(>= 0x40000000 ?). - timestamp = SH7095_mem_timestamp; - - SetT(!tmp); - - tmp |= 0x80; - - MemWrite(ea, tmp); - SH7095_BusLock--; - - timestamp += 3; - END_OP - - - // - // TST Rm,Rn - // - BEGIN_OP(TST_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - SetT(!(R[n] & R[m])); - END_OP - - - // - // TST #imm,R0 - // - BEGIN_OP(TST_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - SetT(!(R[0] & imm)); - END_OP - - - // - // TST.B #imm,@(R0,GBR) - // - BEGIN_OP(TST_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - SetT(!(tmp & imm)); - timestamp++; - END_OP - - - // - // XOR Rm,Rn - // - BEGIN_OP(XOR_REG_REG) - const unsigned n = instr_nyb2; - const unsigned m = instr_nyb1; - - WB_EX_CHECK(n) - WB_EX_CHECK(m) - - R[n] = R[n] ^ R[m]; - END_OP - - - // - // XOR #imm,R0 - // - BEGIN_OP(XOR_IMM_REG0) - const unsigned imm = (uint8)instr; - - WB_EX_CHECK(0) - - R[0] = R[0] ^ imm; - END_OP - - - // - // XOR.B #imm,@(R0,GBR) - // - BEGIN_OP(XOR_B_IMM_IDXGBRINDIR) - const unsigned imm = (uint8)instr; - const uint32 ea = R[0] + GBR; - uint32 tmp; - - tmp = MemRead(ea); - timestamp++; - tmp ^= imm; - MemWrite(ea, tmp); - timestamp++; - END_OP - - - // - // ROTL Rn - // - BEGIN_OP(ROTL_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] = (R[n] << 1) | rotbit; - SetT(rotbit); - END_OP - - - // - // ROTR Rn - // - BEGIN_OP(ROTR_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (R[n] >> 1) | (rotbit << 31); - SetT(rotbit); - END_OP - - - // - // ROTCL Rn - // - BEGIN_OP(ROTCL_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] = (R[n] << 1) | GetT(); - SetT(rotbit); - END_OP - - - // - // ROTCR Rn - // - BEGIN_OP(ROTCR_REG) - const unsigned n = instr_nyb2; - const unsigned rotbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (R[n] >> 1) | (GetT() << 31); - SetT(rotbit); - END_OP - - - // - // SHAR Rn - // - BEGIN_OP(SHAR_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] = (int32)R[n] >> 1; - SetT(shbit); - END_OP - - - // - // SHLL Rn - // - BEGIN_OP(SHLL_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] >> 31; - - WB_EX_CHECK(n) - - R[n] <<= 1; - SetT(shbit); - END_OP - - - // - // SHLR Rn - // - BEGIN_OP(SHLR_REG) - const unsigned n = instr_nyb2; - const unsigned shbit = R[n] & 1; - - WB_EX_CHECK(n) - - R[n] >>= 1; - SetT(shbit); - END_OP - - - // - // SHLL2 Rn - // - BEGIN_OP(SHLL2_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 2; - END_OP - - - // - // SHLR2 Rn - // - BEGIN_OP(SHLR2_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 2; - END_OP - - - // - // SHLL8 Rn - // - BEGIN_OP(SHLL8_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 8; - END_OP - - - // - // SHLR8 Rn - // - BEGIN_OP(SHLR8_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 8; - END_OP - - - // - // SHLL16 Rn - // - BEGIN_OP(SHLL16_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] <<= 16; - END_OP - - - // - // SHLR16 Rn - // - BEGIN_OP(SHLR16_REG) - const unsigned n = instr_nyb2; - - WB_EX_CHECK(n) - - R[n] >>= 16; - END_OP - - - // - // BF - // - BEGIN_OP(BF) - CondRelBranch(!GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BF/S - // - BEGIN_OP(BF_S) - CondRelBranch(!GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BT - // - BEGIN_OP(BT) - CondRelBranch(GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BT/S - // - BEGIN_OP(BT_S) - CondRelBranch(GetT(), (uint32)(int8)instr << 1); - END_OP - - - // - // BRA - // - BEGIN_OP_DLYIDIF(BRA) - UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); - END_OP - - - // - // BRAF Rm - // - BEGIN_OP_DLYIDIF(BRAF_REG) - const unsigned m = instr_nyb2; - - UCRelDelayBranch(R[m]); - END_OP - - - // - // BSR - // - BEGIN_OP_DLYIDIF(BSR) - PR = PC; - - UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); - END_OP - - - // - // BSRF Rm - // - BEGIN_OP_DLYIDIF(BSRF_REG) - const unsigned m = instr_nyb2; - - PR = PC; - - UCRelDelayBranch(R[m]); - END_OP - - - // - // JMP @Rm - // - BEGIN_OP_DLYIDIF(JMP_REGINDIR) - const unsigned m = instr_nyb2; - - UCDelayBranch(R[m]); - END_OP - - - // - // JSR @Rm - // - BEGIN_OP_DLYIDIF(JSR_REGINDIR) - const unsigned m = instr_nyb2; - - PR = PC; - - UCDelayBranch(R[m]); - END_OP - - - // - // RTS - // - BEGIN_OP_DLYIDIF(RTS) - UCDelayBranch(PR); - END_OP - - - // - // CLRT - // - BEGIN_OP(CLRT) - SetT(false); - END_OP - - - // - // CLRMAC - // - BEGIN_OP(CLRMAC) - MACH = 0; - MACL = 0; - END_OP - - - // - // LDC - // - BEGIN_OP_DLYIDIF(LDC) - const unsigned m = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - - CtrlRegs[cri] = R[m]; - if(cri == 0) - { - SR &= 0x3F3; - RecalcPendingIntPEX(); - } - PART_OP_INTDIS - END_OP - - // - // LDC.L - // - // Pipeline: page 233 - // - BEGIN_OP_DLYIDIF(LDC_L) - const unsigned m = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - timestamp++; - CtrlRegs[cri] = MemRead(ea); - if(cri == 0) - { - SR &= 0x3F3; - RecalcPendingIntPEX(); - } - - timestamp++; - PART_OP_INTDIS - END_OP - - - // - // LDS - // - BEGIN_OP_DLYIDIF(LDS) - const unsigned m = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - - SysRegs[sri] = R[m]; - PART_OP_INTDIS - END_OP - - - // - // LDS.L - // - BEGIN_OP_DLYIDIF(LDS_L) // Pipeline same as ordinary load instruction - const unsigned m = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - uint32 ea; - - ea = R[m]; - R[m] += 4; - - PART_OP_INTDIS - - SysRegs[sri] = MemRead(ea); - //printf(" LDS.L: (0x%08x)->0x%08x\n", ea, SysRegs[sri]); - END_OP - - - // - // NOP - // - BEGIN_OP(NOP) - END_OP - - - // - // RTE - // - // Pipeline: page 241 - // - BEGIN_OP(RTE) - uint32 new_PC; - - new_PC = MemRead(R[15]); - R[15] += 4; - - SR = MemRead(R[15]); - RecalcPendingIntPEX(); - R[15] += 4; - - timestamp++; - - Branch(new_PC); - END_OP - - - // - // SETT - // - BEGIN_OP(SETT) - SetT(true); - END_OP - - - // - // SLEEP - // - BEGIN_OP_DLYIDIF(SLEEP) - // - // Standby mode time yay? - // - if(MDFN_UNLIKELY(SBYCR & 0x80)) - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Entering standby mode.\n", cpu_name); - - for(unsigned ch = 0; ch < 2; ch++) - { - DMACH[ch].CHCR = 0x00; - DMACH[ch].CHCRM = 0x00; - } - DMAOR = 0x00; - DMA_RecalcRunning(); - RecalcPendingIntPEX(); - // - // - FRT_Reset(); - // - // - WDT_StandbyReset(); - // - // - SCI_Reset(); - // - // - - timestamp++; - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0x7E << 24); - - Standby = true; - - return; - } - - if(MDFN_LIKELY(!EPending)) - { - timestamp += 3; - return; - } - else - { - DoIDIF(); - } - END_OP - - BEGIN_OP_DLYIDIF(PSEUDO_STANDBY) - if(MDFN_LIKELY(Standby)) - { - timestamp += 7; - return; - } - else - { - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exiting standby mode.\n", cpu_name); - - FRT_Reset(); // Reset again(for the counter) because we didn't stop clocking it. - - DoIDIF(); - } - END_OP - - // - // STC - // - BEGIN_OP_DLYIDIF(STC) - const unsigned n = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - - R[n] = CtrlRegs[cri]; - PART_OP_INTDIS - END_OP - - - // - // STC.L - // - // pipeline: page 234 - BEGIN_OP_DLYIDIF(STC_L) - const unsigned n = instr_nyb2; - const unsigned cri = (instr >> 4) & 0x3; - uint32 ea; - - R[n] -= 4; - ea = R[n]; - - MemWrite(ea, CtrlRegs[cri]); - timestamp++; - PART_OP_INTDIS - END_OP - - - // - // STS - // - BEGIN_OP_DLYIDIF(STS) - const unsigned n = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - - R[n] = SysRegs[sri]; - PART_OP_INTDIS - END_OP + // +#if 0 + { + const uint32 sci_ip_tmp = (SCI.SSR & SCI.SCR & 0xC4) | (SCI.SSR & 0x38); + if(sci_ip_tmp && (tmp_ipr = ((IPRB >> 12) & 0xF)) > ipr) + { + ipr = tmp_ipr; + if(sci_ip_tmp & 0x38) // ERI(receive error; ORER, PER, FER) + vecnum = (VCRA >> 8) & 0x7F; + else if(sci_ip_tmp & 0x40)// RXI(receive data full; RDRF) + vecnum = (VCRA >> 0) & 0x7F; + else if(sci_ip_tmp & 0x80)// TXI(transmit data empty; TDRE) + vecnum = (VCRB >> 8) & 0x7F; + else if(sci_ip_tmp & 0x04)// TEI(transmit end; TEND) + vecnum = (VCRB >> 0) & 0x7F; + } + } +#endif + // // - // STS.L // - BEGIN_OP_DLYIDIF(STS_L) // Pipeline same as ordinary store instruction - const unsigned n = instr_nyb2; - const unsigned sri = (instr >> 4) & 0x3; - uint32 ea; + const uint32 frt_ip_tmp = (FRT.FTCSR & FRT.TIER & 0x8E); + if(frt_ip_tmp && (tmp_ipr = ((IPRB >> 8) & 0xF)) > ipr) + { + ipr = tmp_ipr; - R[n] -= 4; - ea = R[n]; + if(frt_ip_tmp & 0x80) // ICI + vecnum = (VCRC >> 8) & 0x7F; + else if(frt_ip_tmp & 0x0C) // OCIA+OCIB + vecnum = (VCRC >> 0) & 0x7F; + else // OVI + vecnum = (VCRD >> 8) & 0x7F; + } - //printf(" STS.L: 0x%08x->(0x%08x)\n", SysRegs[sri], ea); + if(vecnum_out) + { + if(vecnum == ~0U) + vecnum = ExIVecFetch(); - MemWrite(ea, SysRegs[sri]); + *vecnum_out = vecnum; + } - PART_OP_INTDIS - END_OP + return ipr; +} +// +// Call after changes to: +// IRL +// SR +// +// IPRA +// IPRB +// +// DMACH[*].CHCR +// +// DVCR +// +// FRT.FTCSR +// FRT.TIER +// +void NO_INLINE SH7095::RecalcPendingIntPEX(void) +{ + if(GetPendingInt(NULL) > ((SR >> 4) & 0xF)) + SetPEX(PEX_INT); + else + ClearPEX(PEX_INT); +} - // - // TRAPA #imm - // - // Saved PC is the address of the instruction after the TRAPA instruction - // - BEGIN_OP_DLYIDIF(TRAPA) - const unsigned imm = (uint8)instr; +static const uint8 InstrDecodeTab[65536] = +{ + #include "sh7095_idecodetab.inc" +}; - PC -= 2; - Branch(Exception(EXCEPTION_TRAP, imm)); - END_OP +/* */ +/* TODO: Stop reading from memory when an exception is pending? */ +/* */ +#define FetchIF() \ +{ \ + if(DebugMode) \ + PC_IF = PC; \ + \ + if(EmulateICache) \ + { \ + Pipe_IF = (uint16)IBuffer; \ + \ + if(!(PC & 0x2)) \ + { \ + MemReadInstr(PC, IBuffer); \ + Pipe_IF = IBuffer >> 16; \ + } \ + } \ + else \ + { \ + if(timestamp < (MA_until - ((int32)(PC & 0x2) << 28))) \ + timestamp = MA_until; \ + \ + Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); \ + \ + if(MDFN_UNLIKELY((int32)PC < 0)) /* Mr. Boooones */ \ + Pipe_IF = Cache_ReadDataArray(PC); \ + } \ + timestamp++; \ +} + +#define FetchIF_ForceIBufferFill() \ +{ \ + if(DebugMode) \ + PC_IF = PC; \ + \ + if(EmulateICache) \ + { \ + MemReadInstr(PC &~ 2, IBuffer); \ + /*Pipe_IF = (uint16)(IBuffer >> (((PC & 2) ^ 2) << 3));*/ \ + Pipe_IF = (uint16)IBuffer; \ + if(!(PC & 0x2)) \ + Pipe_IF = IBuffer >> 16; \ + } \ + else \ + { \ + if(timestamp < MA_until) \ + timestamp = MA_until; \ + \ + Pipe_IF = *(uint16*)(SH7095_FastMap[PC >> SH7095_EXT_MAP_GRAN_BITS] + PC); \ + \ + if(MDFN_UNLIKELY((int32)PC < 0)) /* Mr. Boooones */ \ + Pipe_IF = Cache_ReadDataArray(PC); \ + } \ + timestamp++; \ +} + +#define DoID(IntPreventNext) \ +{ \ + uint32 op = InstrDecodeTab[Pipe_IF]; \ + uint32 epo = EPending; \ + \ + if(IntPreventNext) \ + { \ + epo &= ~(1U << (PEX_INT + EPENDING_PEXBITS_SHIFT)); \ + if(!(epo & (0xFF << EPENDING_PEXBITS_SHIFT))) \ + epo = 0; \ + } \ + \ + if(DebugMode) \ + PC_ID = PC_IF; \ + \ + Pipe_ID = Pipe_IF | (op << 24) | epo; \ +} + +#define DoIDIF_MACRO(IntPreventNext) \ +{ \ + DoID(IntPreventNext); \ + FetchIF(); \ +} + +/* */ +/* Not totally correct, but simplifies things...probably :p */ +/* */ +#define DelayBranch(target_) \ +{ \ + { \ + const uint32 target = (target_); \ + \ + if(DebugMode > 0) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + } \ + \ + /* Redecode the opcode from the 16-bit instruction to makes sure */ \ + /* exceptions won't be taken in the delay slot(due to op field */ \ + /* being forced to 0xFF by OR'ing with EPending in the previous */ \ + /* call to DoID()), and forces usage of the second half of the */ \ + /* opcode table so we can generate illegal slot instruction */ \ + /* exceptions as appropriate. */ \ + Pipe_ID = (uint16)Pipe_ID; \ + Pipe_ID |= (InstrDecodeTab[Pipe_ID] | 0x80) << 24; \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + /* Pending for the instruction after the delay slot instruction. */ \ + SetPEX(PEX_CPUADDR); \ + } \ + else \ + { \ + /* This discards the previously-fetched instruction after the */ \ + /* delay slot instruction. Poor, poor instruction. */ \ + if(EmulateICache) \ + UCRead_IF_Kludge = false; \ + FetchIF_ForceIBufferFill() \ + if(EmulateICache) \ + timestamp -= (PC >> 1) & UCRead_IF_Kludge; /* WTFBBQ?! */ \ + } \ +} + +#define Branch(need_addbt, target_) \ +{ \ + { \ + const uint32 target = (target_); \ + \ + if(need_addbt) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + } \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + SetPEX(PEX_CPUADDR); \ + DoID(false); \ + } \ + else \ + { \ + /* This sequence discards the previously-fetched two instructions */ \ + /* after the branch instruction. */ \ + if(EmulateICache) \ + UCRead_IF_Kludge = false; \ + FetchIF_ForceIBufferFill(); \ + if(EmulateICache) \ + timestamp -= (PC >> 1) & UCRead_IF_Kludge; /* WTFBBQ?! */ \ + PC += 2; \ + DoIDIF(false); \ + } \ +} + + +/* Remember to use with BEGIN_OP_DLYIDIF instead of BEGIN_OP */ +#define UCDelayBranch(target) \ +{ \ + if(DebugMode > 0) \ + DBG_AddBranchTrace(which, target, -1); \ + \ + PC = target; \ + \ + if(DebugMode) \ + PC_ID = PC_IF; \ + \ + Pipe_ID = Pipe_IF | ((InstrDecodeTab[Pipe_IF] | 0x80) << 24); \ + \ + timestamp++; \ + \ + if(MDFN_UNLIKELY(PC & 1)) \ + { \ + /* Pending for the instruction after the delay slot instruction. */ \ + SetPEX(PEX_CPUADDR); \ + } \ + else \ + { \ + FetchIF_ForceIBufferFill(); \ + } \ +} + +/* Remember to use with BEGIN_OP_DLYIDIF instead of BEGIN_OP */ +#define UCRelDelayBranch(disp) UCDelayBranch(PC + (disp)) + +#define CondRelBranch(cond, disp) \ +{ \ + if(cond) \ + Branch(true, PC + (disp)); \ +} + +#define CondRelDelayBranch(cond, disp) \ +{ \ + if(cond) \ + DelayBranch(PC + (disp)); \ +} + +/* Reset/Poweron exception handling. */ +#define Exception_ResPow(exnum, vecnum, new_PC) \ +{ \ + timestamp += 2; \ + timestamp = std::max(MA_until, timestamp); \ + \ + MemRead32(((vecnum) + 0) << 2, new_PC); \ + MemRead32(((vecnum) + 1) << 2, R[15]); \ + \ + if(DebugMode) \ + DBG_AddBranchTrace(this - CPU, new_PC, (exnum), (vecnum)); \ + \ + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] Exception %s, New PC=0x%08x, New R15=0x%08x", cpu_name, ((exnum) == EXCEPTION_RESET ? "RESET" : "POWERON"), new_PC, R[15]); \ +} + +#define Exception(exnum, vecnum, new_PC) \ +{ \ + timestamp += 2; \ + timestamp = std::max(MA_until, timestamp); \ + \ + /* Save SR to stack */ \ + /* Save PC to stack */ \ + /* Read exception vector table */ \ + R[15] -= 4; \ + MemWrite32(R[15], SR); \ + timestamp++; \ + R[15] -= 4; \ + MemWrite32(R[15], PC); \ + timestamp++; \ + timestamp++; \ + MemRead32(VBR + ((vecnum) << 2), new_PC); \ + timestamp++; \ + \ + if(DebugMode) \ + DBG_AddBranchTrace(this - CPU, new_PC, (exnum), (vecnum)); \ + \ + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] Exception %u, vecnum=0x%02x, VBR=0x%08x, saved PC=0x%08x, New PC=0x%08x, New R15=0x%08x", cpu_name, (exnum), (vecnum), VBR, PC, new_PC, R[15]); \ +} - /* - ** - ** - */ - // - // Illegal Instruction - // - // Saved PC is the address of the illegal instruction. - // - BEGIN_OP_DLYIDIF(ILLEGAL) - PC -= 4; - Branch(Exception(EXCEPTION_ILLINSTR, VECNUM_ILLINSTR)); - END_OP +/* + PC == 0 + instr = [?] + ID = [?] + IF = [0] - // - // Illegal Slot Instruction - // - // Saved PC is the effective target address of the jump. - // - BEGIN_OP_DLYIDIF(SLOT_ILLEGAL) - PC -= 2; - Branch(Exception(EXCEPTION_ILLSLOT, VECNUM_ILLSLOT)); - END_OP + PC == 2 + instr = [?] + ID = [0] + IF = [2] - // - // Pending exception(address error/interrupt) - // - BEGIN_OP_DLYIDIF(PSEUDO_EPENDING) - uint32 new_PC = 0; + PC == 4 + instr = [0] + ID = [2] + IF = [4] - // - // Priority here(listed highest to lowest): - // External halt - // Power - // Reset - // Pseudo DMA burst(hacky abusey thing to stall the CPU, should be above everything but reset/power and ext halt otherwise kaboom!). - // CPU address error - // DMA address error - // NMI - // Interrupt (final else, may be called quasi-spuriously) - // - #define TPP(x) (Pipe_ID & (1U << ((x) + EPENDING_PEXBITS_SHIFT))) - // - // Test against Pipe_ID, reset bits in EPending(if appropriate). - // - if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_EXTHALT))) - { - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Ext halt begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); - return; - } - else if(MDFN_UNLIKELY(TPP(PEX_POWERON) || TPP(PEX_RESET))) - { - if(TPP(PEX_POWERON)) - { - EPending = 0; - new_PC = Exception(EXCEPTION_POWERON, VECNUM_POWERON); - } - else - { - EPending = 0; - new_PC = Exception(EXCEPTION_RESET, VECNUM_RESET); - } - } - else if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_DMABURST))) - { - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); - return; - } - else if(MDFN_UNLIKELY(TPP(PEX_CPUADDR))) - { - PC -= 4; - ClearPEX(PEX_CPUADDR); - new_PC = Exception(EXCEPTION_CPUADDR, VECNUM_CPUADDR); - ClearPEX(PEX_CPUADDR); // Infinite recursive address errors are not good(stack wraparound could clobber backup memory). - } - else if(MDFN_UNLIKELY(TPP(PEX_DMAADDR))) - { - PC -= 4; - ClearPEX(PEX_DMAADDR); - new_PC = Exception(EXCEPTION_DMAADDR, VECNUM_DMAADDR); - } - else if(TPP(PEX_NMI)) - { - PC -= 4; - ClearPEX(PEX_NMI); - new_PC = Exception(EXCEPTION_NMI, VECNUM_NMI); - // - // - // - SR |= 0xF << 4; - RecalcPendingIntPEX(); - } - else // Int - { - uint8 ipr; +*/ - ipr = GetPendingInt(NULL); +#define DoIDIF(IntPreventNext) DoIDIF_NI() - if(MDFN_LIKELY(ipr > ((SR >> 4) & 0xF))) - { - uint8 vecnum; +#define OnChipRegRead(T, A) OnChipRegRead_INLINE(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI(A, V) - // Note: GetPendingInt() may call ExIVecFetch(), which may call SetIRL with a new value, so be - // careful to use the "old" value here. - GetPendingInt(&vecnum); - - PC -= 4; - new_PC = Exception(EXCEPTION_INT, vecnum); - // - // - // - SR &= ~(0xF << 4); - SR |= ipr << 4; - RecalcPendingIntPEX(); - } - else - { - // - // Can happen like so(note for future testing): - // - // (WDT interval timer IRQ pending here) - // - // WTCSR_R; - // asm volatile( - // "ldc %0,SR\n\t" - // "mov.w %2, @%1\n\t" - // : - // :"r"(0), "r"(0xFFFFFE88), "r"(0xA500 | 0x00) - // : "memory"); - // - SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Spurious EPENDING. IPR=0x%02x SR=0x%04x EPending=0x%08x Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, ipr, SR, EPending, Pipe_ID, PC); - - Pipe_ID = (uint16)Pipe_ID; - Pipe_ID |= InstrDecodeTab[Pipe_ID] << 24; - goto SPEPRecover; - } - } - // - // - // - Branch(new_PC); - END_OP +#define MemReadInstr(A, outval) { outval = (MRFPI[(A) >> 29](A)); } +#define MemRead8(A, outval) { outval = (MRFP8[(A) >> 29](A)); } +#define MemRead16(A, outval) { outval = (MRFP16[(A) >> 29](A)); } +#define MemRead32(A, outval) { outval = (MRFP32[(A) >> 29](A)); } +#define MemRead16_I(A, outval) { outval = (MRFP16_I[(A) >> 29](A)); } +#define MemRead32_I(A, outval) { outval = (MRFP32_I[(A) >> 29](A)); } - BEGIN_OP_DLYIDIF(PSEUDO_DMABURST) - if(MDFN_LIKELY(DMA_InBurst() || ExtHalt)) - { - timestamp += 7; - return; - } - else - { - ClearPEX(PEX_PSEUDO_DMABURST); - ClearPEX(PEX_PSEUDO_EXTHALT); +#define MemWrite8(A, V) MWFP8[(A) >> 29]((A), (V)); +#define MemWrite16(A, V) MWFP16[(A) >> 29]((A), (V)); +#define MemWrite32(A, V) MWFP32[(A) >> 29]((A), (V)); +#define CHECK_EXIT_RESUME() { if(EmulateICache && !which) { if(DebugMode) CPU[1].RunSlaveUntil_Debug(timestamp); else CPU[1].RunSlaveUntil(timestamp); } } +#define CONST_VAR(T, n) const T n +#define RESUME_VAR(T, n) T n - // - // Recover Pipe_ID opcode field; only use Pipe_ID for this, not EPending, otherwise - // we may accidentally allow an interrupt to occur immediately after an interrupt-disabled instruction. - // - Pipe_ID &= 0x00FFFFFF; - Pipe_ID &= ~(1U << (PEX_PSEUDO_DMABURST + EPENDING_PEXBITS_SHIFT)); - Pipe_ID &= ~(1U << (PEX_PSEUDO_EXTHALT + EPENDING_PEXBITS_SHIFT)); - Pipe_ID |= InstrDecodeTab[(uint16)Pipe_ID] << 24; - if(Pipe_ID & (0xFF << EPENDING_PEXBITS_SHIFT)) - Pipe_ID |= EPENDING_OP_OR; +template +INLINE void SH7095::DoIDIF_INLINE(void) +{ + DoIDIF_MACRO(IntPreventNext); +} - //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst/External halt end: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); - return; - } - END_OP +template +static NO_INLINE MDFN_HOT void DoIDIF_NI(void) +{ + CPU[which].DoIDIF_INLINE(); +} +template +INLINE void SH7095::Step(void) +{ + // + // Ideally, we would place SPEPRecover: after the FRT event check, but doing + // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions + // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop + // or something?(even with all our branch hinting!) + // + SPEPRecover:; - #undef BEGIN_OP - #undef BEGIN_OP_DLYIDIF - #undef END_OP + if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) + { + FRT_WDT_Update(); + FRT_WDT_Recalc_NET(); } - PC += 2; + const uint32 instr = (uint16)Pipe_ID; + const unsigned instr_nyb1 = (instr >> 4) & 0xF; + const unsigned instr_nyb2 = (instr >> 8) & 0xF; +// asm volatile("":: "a"(instr_nyb1), "d"(instr_nyb2)); + // + #include "sh7095_ops.inc" + // } - +#undef CHECK_EXIT_RESUME +#undef DoIDIF +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite +#undef MemReadInstr +#undef MemRead8 +#undef MemRead16 +#undef MemRead32 +#undef MemRead16_I +#undef MemRead32_I +#undef MemWrite8 +#undef MemWrite16 +#undef MemWrite32 +#undef CONST_VAR +#undef RESUME_VAR +// +// +// +// +// +#pragma GCC push_options +#pragma GCC optimize("O2,no-gcse") //no-unroll-loops,no-peel-loops,no-crossjumping") + +#define DoIDIF(IntPreventNext) DoIDIF_MACRO(IntPreventNext) + +#define OnChipRegRead(T, A) OnChipRegRead_NI<1, T>(A) +#define ExtBusRead(T, BurstHax, A) ExtBusRead_NI<1, true, T, BurstHax>(A) +#define ExtBusWrite(T, A, V) ExtBusWrite_NI<1, true, T>(A, V) + +#define MemReadInstr(A, outval) MemRead(true, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead8(A, outval) MemRead(false, uint8, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint8_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead16(A, outval) MemRead(false, uint16, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint16_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead32(A, outval) MemRead(false, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead16_I(A, outval) MemRead(-1, uint16, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint16_A, Resume_unmasked_A, Resume_cent, Resume_way_match) +#define MemRead32_I(A, outval) MemRead(-1, uint32, ((A) >> 29), (CCR & CCR_CE), (A), outval, /**/ Resume_uint32_A, Resume_unmasked_A, Resume_cent, Resume_way_match) + +#define MemWrite8(A, V) MemWrite(uint8, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint8_A, Resume_unmasked_A, Resume_uint8_V) +#define MemWrite16(A, V) MemWrite(uint16, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint16_A, Resume_unmasked_A, Resume_uint16_V) +#define MemWrite32(A, V) MemWrite(uint32, ((A) >> 29), (CCR & CCR_CE), (A), (V), /**/ Resume_uint32_A, Resume_unmasked_A, Resume_uint32_V) + +#define CHECK_EXIT_RESUME__(n) \ + { \ + if(timestamp >= bound_timestamp) \ + { \ + ResumePoint = &&Resume_ ## n; \ + return; \ + } \ + Resume_ ## n:; \ + } + +#define CHECK_EXIT_RESUME_(n) CHECK_EXIT_RESUME__(n) +#define CHECK_EXIT_RESUME() CHECK_EXIT_RESUME_(__COUNTER__) + +#define instr Resume_instr +#define instr_nyb1 ((instr >> 4) & 0xF) +#define instr_nyb2 ((instr >> 8) & 0xF) +#define opexec_MAC_L_m0 Resume_MAC_L_m0 +#define opexec_MAC_L_m1 Resume_MAC_L_m1 +#define opexec_MAC_W_m0 Resume_MAC_W_m0 +#define opexec_MAC_W_m1 Resume_MAC_W_m1 +#define opexec_ea Resume_ea +#define opexec_new_PC Resume_new_PC +#define opexec_new_SR Resume_new_SR +#define opexec_ipr Resume_ipr +#define opexec_exnum Resume_exnum +#define opexec_vecnum Resume_vecnum +#define CONST_VAR(T, n) T n; n +#define RESUME_VAR(T, n) static_assert(std::is_same::value, "Resume variable type mismatch.") +#define SH7095_NEED_RESUME_TABLE_INIT 1 + + +#define SH7095_DEBUG_MODE 0 +#include "sh7095s_cnorm.inc" +static_assert(__COUNTER__ == 5000, "Unexpected __COUNTER__ value."); +NO_CLONE NO_INLINE MDFN_HOT void SH7095::RunSlaveUntil(const sscpu_timestamp_t bound_timestamp) +{ + #include "sh7095s_rsu.inc" +} +#undef SH7095_DEBUG_MODE + +#define SH7095_DEBUG_MODE 1 +#include "sh7095s_cnorm_dm.inc" +static_assert(__COUNTER__ == 10000, "Unexpected __COUNTER__ value."); +NO_CLONE NO_INLINE MDFN_COLD void SH7095::RunSlaveUntil_Debug(const sscpu_timestamp_t bound_timestamp) +{ + #include "sh7095s_rsu.inc" +} +#undef SH7095_DEBUG_MODE + +#pragma GCC pop_options +#undef DoIDIF +#undef OnChipRegRead +#undef ExtBusRead +#undef ExtBusWrite +#undef MemReadInstr +#undef MemRead8 +#undef MemRead16 +#undef MemRead32 +#undef MemRead16_I +#undef MemRead32_I +#undef MemWrite8 +#undef MemWrite16 +#undef MemWrite32 +#undef CHECK_EXIT_RESUME__ +#undef CHECK_EXIT_RESUME_ +#undef CHECK_EXIT_RESUME +#undef instr +#undef instr_nyb1 +#undef instr_nyb2 +#undef opexec_MAC_L_m0 +#undef opexec_MAC_L_m1 +#undef opexec_MAC_W_m0 +#undef opexec_MAC_W_m1 +#undef opexec_ea +#undef opexec_new_PC +#undef opexec_new_SR +#undef opexec_ipr +#undef opexec_exnum +#undef opexec_vecnum +#undef CONST_VAR +#undef RESUME_VAR +#undef SH7095_NEED_RESUME_TABLE_INIT +// +// +// +// +// +// void SH7095::StateAction(StateMem* sm, const unsigned load, const bool data_only, const char* sname) { SFORMAT StateRegs[] = @@ -4858,6 +3584,7 @@ SFVAR(MM_until), SFVAR(write_finish_timestamp), SFVAR(WB_until), + SFVAR(UCRead_IF_Kludge), SFVAR(SysRegs), SFVAR(EPending), @@ -4867,7 +3594,7 @@ SFVAR(IBuffer), SFPTR32(Cache->Tag, 4, 64, sizeof(*Cache), Cache), - SFVAR(Cache->LRU, 64, sizeof(*Cache), Cache), + SFVARN(Cache_LRU, "Cache->LRU"), SFPTR32((uint32*)Cache->Data, 16, 64, sizeof(*Cache), Cache), // Cast because it's stored as native-endian 32-bit. SFVAR(CCR), @@ -4896,6 +3623,11 @@ SFVAR(BSC.RTCNT), SFVAR(BSC.RTCOR), + SFVAR(BSC.sdram_finish_time), + SFVAR(BSC.last_mem_time), + SFVAR(BSC.last_mem_addr), + SFVAR(BSC.last_mem_type), + SFVAR(SBYCR), SFVAR(Standby), @@ -4922,10 +3654,10 @@ SFVAR(WDT.RSTCSR), SFVAR(WDT.RSTCSRM), - SFVAR(dma_lastts), - - SFVAR(DMA_ClockCounter), - SFVAR(DMA_SGCounter), + // SFVAR(DMA_ClockCounter), + // SFVAR(DMA_SGCounter), + SFVAR(DMA_Timestamp), + SFVAR(DMA_SGEndTimestamp), SFVAR(DMA_RoundRobinRockinBoppin), SFVAR(DMA_PenaltyKludgeAmount), @@ -4974,36 +3706,182 @@ MDFNSS_StateAction(sm, load, data_only, StateRegs, sname); + if(this == &CPU[1]) + StateAction_SlaveResume(sm, load, data_only, "SH2-S-Resume"); +} + +void SH7095::StateAction_SlaveResume(StateMem* sm, const unsigned load, const bool data_only, const char* sname) +{ + int32 ResumePointI = -1; + uint32 Resume_cent_I = 0; + + if(!load) + { + if(ResumePoint) + { + for(uint32 i = 0; i < 512; i++) + { + if(ResumeTableP[DM_Setting][i] == ResumePoint) + { + ResumePointI = i; + break; + } + } + assert(ResumePointI >= 0); + } + //printf("State save resume point: %016llx (%d)\n", (unsigned long long)(uintptr_t)ResumePoint, ResumePointI); + + if(Resume_cent) + { + Resume_cent_I = Resume_cent - Cache; + assert(Resume_cent_I < 0x40); + } + } + + SFORMAT StateRegs[] = + { + SFVAR(ResumePointI), + SFVAR(Resume_uint8_A), + SFVAR(Resume_uint16_A), + SFVAR(Resume_uint32_A), + SFVAR(Resume_unmasked_A), + SFVAR(Resume_cent_I), + SFVAR(Resume_way_match), + SFVAR(Resume_uint8_V), + SFVAR(Resume_uint16_V), + SFVAR(Resume_uint32_V), + SFVAR(Resume_instr), + + SFVAR(Resume_MAC_L_m0), + SFVAR(Resume_MAC_L_m1), + + SFVAR(Resume_MAC_W_m0), + SFVAR(Resume_MAC_W_m1), + + SFVAR(Resume_ea), + SFVAR(Resume_new_PC), + SFVAR(Resume_new_SR), + + SFVAR(Resume_ipr), + SFVAR(Resume_exnum), + SFVAR(Resume_vecnum), + + SFEND + }; + + MDFNSS_StateAction(sm, load, data_only, StateRegs, sname, load < 0x00102600); + if(load) { - SetCCR(CCR); + ResumePoint = nullptr; - if(load < 0x00102300) + if(ResumePointI >= 0) { - ExtHaltDMA = ExtHalt; + ResumePoint = ResumeTableP[DM_Setting][ResumePointI & 511]; + assert(ResumePoint != nullptr); } + //printf("State load resume point: %016llx (%d)\n", (unsigned long long)(uintptr_t)ResumePoint, ResumePointI); + Resume_uint16_A &= ~1; + Resume_uint32_A &= ~3; + Resume_cent = &Cache[Resume_cent_I & 0x3F]; + Resume_way_match = std::max(-1, std::min(3, Resume_way_match)); + Resume_instr &= 0xFFFF; } } // -// Called after loading a state where instruction cache emulation was not previously enabled in the emulator, but is enabled now(e.g. via database). -// -// May not cover all cases, needs more testing. +// Only call after all emulated devices variables and RAM have been loaded from the save state. // -void SH7095::FixupICacheModeState(void) +void SH7095::PostStateLoad(const unsigned state_version, const bool recorded_needicache, const bool needicache) { - for(unsigned i = 0; i < 16; i++) - WB_until[i] = 0; // - //const uint32 old_IBuffer = IBuffer; - const uint32 A = (PC - 2) & ~3; + // Fixup cache tags. + // + for(unsigned entry = 0; entry < 64; entry++) + { + CacheEntry* const ce = &Cache[entry]; - if((int32)A < 0) - IBuffer = MDFN_densb(&Cache[(A >> 4) & 0x3F].Data[(A >> 10) & 0x3][NE32ASU8_IDX_ADJ(uint32, A & 0x0F)]); - else - IBuffer = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + for(unsigned way = 0; way < 4; way++) + { + const uint32 ATM = ce->Tag[way] & (0x7FFFF << 10); + const bool invalid = ce->Tag[way] & ~(0x7FFFF << 10); // Handles backwards compat when invalid was bit31 instead of bit0. + + ce->Tag[way] = ATM | invalid; + } + } + // + SetCCR(CCR); + // + if(!recorded_needicache && state_version < 0x00102600) + { + for(unsigned i = 0; i < 16; i++) + WB_until[i] = timestamp - 100; + } + + if(needicache && !recorded_needicache) + { + // + // Handle loading a state where instruction cache emulation was not previously enabled in the emulator, but is enabled now(e.g. via database). + // + // May not cover all cases, needs more testing. + // + //printf("NeedEmuICache=%d, RecordedNeedEmuICache=%d\n", needicache, recorded_needicache); + // + //const uint32 old_IBuffer = IBuffer; + const uint32 A = (PC - 2) & ~3; + + if((int32)A < 0) + IBuffer = MDFN_densb(&Cache[(A >> 4) & 0x3F].Data[(A >> 10) & 0x3][NE32ASU8_IDX_ADJ(uint32, A & 0x0F)]); + else + IBuffer = ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A); + + //printf("[%s] PC=0x%08x, IBuffer=0x%08x old_IBuffer=0x%08x --- 0x%08x\n", cpu_name, PC, IBuffer, old_IBuffer, ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A)); + } + // + // + // + if(state_version < 0x00102300) + { + ExtHaltDMA = ExtHalt; + } + + if(state_version < 0x00102600 && timestamp >= 0x40000000) + { + timestamp = SS_EVENT_DISABLED_TS; + } + + if(timestamp != SS_EVENT_DISABLED_TS) + { + if(state_version < 0x00102600) + { + DMA_Timestamp = SH7095_mem_timestamp - 128; + DMA_SGEndTimestamp = SH7095_mem_timestamp + 192; + + BSC.sdram_finish_time = SH7095_mem_timestamp - 100; + BSC.last_mem_time = SH7095_mem_timestamp - 100; + } + + clamp(×tamp, -1000000, 1000000); + clamp(&FRT.lastts, -1000000, 1000000); + clamp(&DMA_Timestamp, -1000000, 1000000); + clamp(&DMA_SGEndTimestamp, -1000000, 1000000); + + clamp(&MA_until, -1000000, 1000000); + clamp(&MM_until, -1000000, 1000000); + + for(unsigned i = 0; i < 16; i++) + clamp(&WB_until[i], -1000000, 1000000); - //printf("[%s] PC=0x%08x, IBuffer=0x%08x old_IBuffer=0x%08x --- 0x%08x\n", cpu_name, PC, IBuffer, old_IBuffer, ne16_rbo_be(SH7095_FastMap[A >> SH7095_EXT_MAP_GRAN_BITS], A)); + clamp(&write_finish_timestamp, -1000000, 1000000); + clamp(÷_finish_timestamp, -1000000, 1000000); + + clamp(&BSC.sdram_finish_time, -1000000, 1000000); + clamp(&BSC.last_mem_time, -1000000, 1000000); + } + // + // + // + UCRead_IF_Kludge &= 1; } // @@ -5263,6 +4141,25 @@ case GSREG_RWT: ret = FRT.RW_Temp; break; + // + // + // + case GSREG_CCR: + ret = CCR; + if(special) + { + trio_snprintf(special, special_len, "CE: %d, ID: %d, OD: %d, TW: %d, WS: %d", + (bool)(CCR & CCR_CE), + (bool)(CCR & CCR_ID), + (bool)(CCR & CCR_OD), + (bool)(CCR & CCR_TW), + (CCR >> 6) & 0x3); + } + break; + + case GSREG_SBYCR: + ret = SBYCR; + break; } return ret; @@ -5332,6 +4229,18 @@ case GSREG_FTCSRM: FRT.FTCSRM = value & 0x8F; break; +/* + case GSREG_TCR: + FRT.TCR = value; + FRT_WDT_Recalc_NET(); + break; +*/ + // + // + // + case GSREG_CCR: + SetCCR(value); + break; } } diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095_ops.inc mednafen-1.26.1+dfsg/src/ss/sh7095_ops.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095_ops.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095_ops.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,2065 @@ +switch(Pipe_ID >> 24) +{ + #include "sh7095_opdefs.inc" + + #define PART_OP_NORMIDIF { DoIDIF(false); } + + #define BEGIN_OP(x) OP_##x { PART_OP_NORMIDIF + #define BEGIN_OP_FUDGEIF(x) OP_##x { if(EmulateICache) { UCRead_IF_Kludge = false; } DoIDIF(false); if(EmulateICache) { timestamp -= UCRead_IF_Kludge; } + #define BEGIN_OP_DLYIDIF(x) OP_##x { + + // "Interrupt-disabled" instruction(blocks interrupt from being taken for next instruction). + // Use with BEGIN_OP_DLYIDIF() + #define PART_OP_INTDIS { DoIDIF(true); } + + #define END_OP } break; + + #define WB_EX_CHECK(r) { if(timestamp < WB_until[(r)]) timestamp = WB_until[(r)]; } + #define WB_WRITE(r, v) { R[(r)] = (v); WB_until[(r)] = MA_until + 1; } + #define WB_READ8(r, A) { uint8 memrv; MemRead8(A, memrv); WB_WRITE((r), (int8)memrv); } + #define WB_READ16(r, A) { uint16 memrv; MemRead16(A, memrv); WB_WRITE((r), (int16)memrv); } + #define WB_READ32(r, A) { uint32 memrv; MemRead32(A, memrv); WB_WRITE((r), memrv); } + #define WB_READ16_I(r, A) { uint16 memrv; MemRead16_I(A, memrv); WB_WRITE((r), (int16)memrv); } + #define WB_READ32_I(r, A) { uint32 memrv; MemRead32_I(A, memrv); WB_WRITE((r), memrv); } + // + // + // + // + // MOV #imm,Rn + // + BEGIN_OP(MOV_IMM_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(n) + + R[n] = imm; + END_OP + + + // + // MOV.W @(disp,PC),Rn + // + BEGIN_OP(MOV_W_PCREL_REG) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = PC + (d << 1); + + WB_READ16_I(instr_nyb2, ea); + END_OP + + + // + // MOV.L @(disp,PC),Rn + // + BEGIN_OP(MOV_L_PCREL_REG) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = (PC &~ 0x3) + (d << 2); + + WB_READ32_I(instr_nyb2, ea); + END_OP + + + // + // MOV Rm,Rn + // + BEGIN_OP(MOV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[m]; + END_OP + + + // + // MOV.B Rm,@Rn + // + BEGIN_OP(MOV_B_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite8(ea, val); + END_OP + + + // + // MOV.W Rm,@Rn + // + BEGIN_OP(MOV_W_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite16(ea, val); + END_OP + + + // + // MOV.L Rm,@Rn + // + BEGIN_OP(MOV_L_REG_REGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + CONST_VAR(uint32, ea) = R[n]; + + MemWrite32(ea, val); + END_OP + + + // + // MOV.B @Rm,Rn + // + BEGIN_OP(MOV_B_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @Rm,Rn + // + BEGIN_OP(MOV_W_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @Rm,Rn + // + BEGIN_OP(MOV_L_REGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[m]; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B Rm,@-Rn + // + BEGIN_OP(MOV_B_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 1; + ea = R[n]; + + MemWrite8(ea, val); + END_OP + + + // + // MOV.W Rm,@-Rn + // + BEGIN_OP(MOV_W_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 2; + ea = R[n]; + + MemWrite16(ea, val); + END_OP + + + // + // MOV.L Rm,@-Rn + // + BEGIN_OP(MOV_L_REG_REGINDIRPD) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, val) = R[m]; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + MemWrite32(ea, val); + END_OP + + + // + // MOV.B @Rm+,Rn + // + BEGIN_OP(MOV_B_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 1; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @Rm+,Rn + // + BEGIN_OP(MOV_W_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 2; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @Rm+,Rn + // + BEGIN_OP(MOV_L_REGINDIRPI_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 ea; + + ea = R[m]; + R[m] += 4; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B R0,@(disp,Rn) + // + BEGIN_OP(MOV_B_REG0_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 0); + + MemWrite8(ea, R[0]); + END_OP + + + // + // MOV.W R0,@(disp,Rn) + // + BEGIN_OP(MOV_W_REG0_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 1); + + MemWrite16(ea, R[0]); + END_OP + + + // + // MOV.L Rm,@(disp,Rn) + // + BEGIN_OP(MOV_L_REG_REGINDIRDISP) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[n] + (d << 2); + + MemWrite32(ea, R[m]); + END_OP + + + // + // MOV.B @(disp,Rm),R0 + // + BEGIN_OP(MOV_B_REGINDIRDISP_REG0) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 0); + + WB_READ8(0, ea); + END_OP + + + // + // MOV.W @(disp,Rm),R0 + // + BEGIN_OP(MOV_W_REGINDIRDISP_REG0) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 1); + + WB_READ16(0, ea); + END_OP + + + // + // MOV.L @(disp,Rm),Rn + // + BEGIN_OP(MOV_L_REGINDIRDISP_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(unsigned, d) = (instr >> 0) & 0xf; + CONST_VAR(uint32, ea) = R[m] + (d << 2); + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B Rm,@(R0,Rn) + // + BEGIN_OP(MOV_B_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite8(ea, R[m]); + END_OP + + + // + // MOV.W Rm,@(R0,Rn) + // + BEGIN_OP(MOV_W_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite16(ea, R[m]); + END_OP + + + // + // MOV.L Rm,@(R0,Rn) + // + BEGIN_OP(MOV_L_REG_IDXREGINDIR) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[n]; + + MemWrite32(ea, R[m]); + END_OP + + + // + // MOV.B @(R0,Rm),Rn + // + BEGIN_OP(MOV_B_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ8(instr_nyb2, ea); + END_OP + + + // + // MOV.W @(R0,Rm),Rn + // + BEGIN_OP(MOV_W_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ16(instr_nyb2, ea); + END_OP + + + // + // MOV.L @(R0,Rm),Rn + // + BEGIN_OP(MOV_L_IDXREGINDIR_REG) + CONST_VAR(unsigned, m) = instr_nyb1; + CONST_VAR(uint32, ea) = R[0] + R[m]; + + WB_READ32(instr_nyb2, ea); + END_OP + + + // + // MOV.B R0,@(disp,GBR) + // + BEGIN_OP(MOV_B_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 0); + + MemWrite8(ea, R[0]); + END_OP + + + // + // MOV.W R0,@(disp,GBR) + // + BEGIN_OP(MOV_W_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 1); + + MemWrite16(ea, R[0]); + END_OP + + + // + // MOV.L R0,@(disp,GBR) + // + BEGIN_OP(MOV_L_REG0_GBRINDIRDISP) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 2); + + MemWrite32(ea, R[0]); + END_OP + + + // + // MOV.B @(disp,GBR),R0 + // + BEGIN_OP(MOV_B_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 0); + + WB_READ8(0, ea); + END_OP + + + // + // MOV.W @(disp,GBR),R0 + // + BEGIN_OP(MOV_W_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 1); + + WB_READ16(0, ea); + END_OP + + + // + // MOV.L @(disp,GBR),R0 + // + BEGIN_OP(MOV_L_GBRINDIRDISP_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = GBR + (d << 2); + + WB_READ32(0, ea); + END_OP + + + // + // MOVA @(disp,PC),R0 + // + BEGIN_OP(MOVA_PCREL_REG0) + CONST_VAR(unsigned, d) = (instr >> 0) & 0xff; + CONST_VAR(uint32, ea) = (PC &~ 0x3) + (d << 2); + + WB_EX_CHECK(0) + + R[0] = ea; + END_OP + + + // + // MOVT Rn + // + BEGIN_OP(MOVT_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] = GetT(); + END_OP + + + // + // SWAP.B Rm,Rn + // + BEGIN_OP(SWAP_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[m] & 0xFFFF0000) | ((R[m] << 8) & 0xFF00) | ((R[m] >> 8) & 0x00FF); + END_OP + + + // + // SWAP.W Rm,Rn + // + BEGIN_OP(SWAP_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[m] << 16) | (R[m] >> 16); + END_OP + + + // + // XTRCT Rm,Rn + // + BEGIN_OP(XTRCT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (R[n] >> 16) | (R[m] << 16); + END_OP + + + // + // ADD Rm,Rn + // + BEGIN_OP(ADD_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] + R[m]; + END_OP + + + // + // ADD #imm,Rn + // + BEGIN_OP(ADD_IMM_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(n) + + R[n] = R[n] + imm; + END_OP + + + // + // ADDC Rm,Rn + // + BEGIN_OP(ADDC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] + R[m] + GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // ADDV Rm,Rn + // + BEGIN_OP(ADDV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 result = R[n] + R[m]; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(((~(R[n] ^ R[m])) & (R[n] ^ result)) >> 31); + R[n] = result; + END_OP + + + // + // CMP/EQ #imm,R0 + // + BEGIN_OP(CMP_EQ_IMM_REG0) + CONST_VAR(uint32, imm) = (int8)instr; + + WB_EX_CHECK(0) + + SetT(imm == R[0]); + END_OP + + + // + // CMP/EQ Rm,Rn + // + BEGIN_OP(CMP_EQ_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] == R[m]); + END_OP + + + // + // CMP/HS Rm,Rn + // + BEGIN_OP(CMP_HS_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] >= R[m]); + END_OP + + + // + // CMP/GE Rm,Rn + // + BEGIN_OP(CMP_GE_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((int32)R[n] >= (int32)R[m]); + END_OP + + + // + // CMP/HI Rm,Rn + // + BEGIN_OP(CMP_HI_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(R[n] > R[m]); + END_OP + + + // + // CMP/GT Rm,Rn + // + BEGIN_OP(CMP_GT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((int32)R[n] > (int32)R[m]); + END_OP + + + // + // CMP/PZ Rn + // + BEGIN_OP(CMP_PZ_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + SetT((int32)R[n] >= 0); + END_OP + + + // + // CMP/PL Rn + // + BEGIN_OP(CMP_PL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + SetT((int32)R[n] > 0); + END_OP + + + // + // CMP/STR Rm,Rn + // + BEGIN_OP(CMP_STR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 tmp = R[n] ^ R[m]; + unsigned new_T = 0; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + if(!(tmp & 0x000000FF)) new_T = 1; + if(!(tmp & 0x0000FF00)) new_T = 1; + if(!(tmp & 0x00FF0000)) new_T = 1; + if(!(tmp & 0xFF000000)) new_T = 1; + + SetT(new_T); + END_OP + + + // + // DIV1 Rm,Rn + // + BEGIN_OP(DIV1_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + uint32 tmp; + bool new_Q; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + new_Q = R[n] >> 31; + R[n] <<= 1; + R[n] |= GetT(); + + tmp = R[n]; + new_Q ^= GetM(); + + if(!(GetQ() ^ GetM())) + { + R[n] -= R[m]; + new_Q ^= (R[n] > tmp); + } + else + { + R[n] += R[m]; + new_Q ^= (R[n] < tmp); + } + + SetQ(new_Q); + SetT(new_Q == GetM()); + END_OP + + + // + // DIV0S Rm,Rn + // + BEGIN_OP(DIV0S_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const unsigned new_Q = R[n] >> 31; + const unsigned new_M = R[m] >> 31; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetQ(new_Q); + SetM(new_M); + SetT(new_Q != new_M); + END_OP + + + // + // DIV0U + // + BEGIN_OP(DIV0U) + SetQ(false); + SetM(false); + SetT(false); + END_OP + + + // + // DT + // + BEGIN_OP(DT) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n]--; + SetT(!R[n]); + END_OP + + + // + // EXTS.B Rm,Rn + // + BEGIN_OP(EXTS_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (int8)R[m]; + END_OP + + + // + // EXTS.W Rm,Rn + // + BEGIN_OP(EXTS_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (int16)R[m]; + END_OP + + + // + // EXTU.B Rm,Rn + // + BEGIN_OP(EXTU_B_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (uint8)R[m]; + END_OP + + + // + // EXTU.W Rm,Rn + // + BEGIN_OP(EXTU_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = (uint16)R[m]; + END_OP + + + // + // MAC.L @Rm+,@Rn+ + // + // Pipeline: page 188(not implemented right here) + BEGIN_OP(MAC_L) + RESUME_VAR(int32, opexec_MAC_L_m0); + RESUME_VAR(int32, opexec_MAC_L_m1); + { + // Order confirmed. + MemRead32(R[instr_nyb1], opexec_MAC_L_m0); + R[instr_nyb1] += 4; + MemRead32(R[instr_nyb2], opexec_MAC_L_m1); + R[instr_nyb2] += 4; + } + uint64 a, b, sum; + + a = GetMAC64(); + b = (int64)opexec_MAC_L_m0 * opexec_MAC_L_m1; + sum = a + b; + + if(GetS() && sum > 0x00007FFFFFFFFFFFULL && sum < 0xFFFF800000000000ULL) + { + if((int32)(opexec_MAC_L_m0 ^ opexec_MAC_L_m1) < 0) + sum = 0xFFFF800000000000ULL; + else + sum = 0x00007FFFFFFFFFFFULL; + } + + SetMAC64(sum); + + timestamp++; + END_OP + + + // + // MAC.W @Rm+,@Rn+ + // + // Pipeline: page 180(not implemented right here) + BEGIN_OP(MAC_W) + RESUME_VAR(int16, opexec_MAC_W_m0); + RESUME_VAR(int16, opexec_MAC_W_m1); + { + // Order confirmed. + MemRead16(R[instr_nyb1], opexec_MAC_W_m0); + R[instr_nyb1] += 2; + MemRead16(R[instr_nyb2], opexec_MAC_W_m1); + R[instr_nyb2] += 2; + } + + if(GetS()) + { + int32 b = (int32)opexec_MAC_W_m0 * opexec_MAC_W_m1; + uint64 sum = (int64)(int32)MACL + b; + + if(sum > 0x000000007FFFFFFFULL && sum < 0xFFFFFFFF80000000ULL) + { + MACH |= 1; + + if(b < 0) + sum = 0x80000000ULL; + else + sum = 0x7FFFFFFFULL; + } + + MACL = sum; + } + else + SetMAC64(GetMAC64() + (int64)opexec_MAC_W_m0 * opexec_MAC_W_m1); + + timestamp++; + END_OP + + + // + // DMULS.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(DMULS_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (int64)(int32)R[n] * (int32)R[m]; + + MACL = result >> 0; + MACH = result >> 32; + END_OP + + + // + // DMULU.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(DMULU_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] * R[m]; + + MACL = result >> 0; + MACH = result >> 32; + END_OP + + + // + // MUL.L Rm,Rn + // + // Pipeline: page 215 (not implemented here totally correctly) + BEGIN_OP_DLYIDIF(MUL_L_REG_REG) + { + timestamp++; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 4; + PART_OP_NORMIDIF + } + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MACL = R[n] * R[m]; + END_OP + + + // + // MULS.W Rm,Rn + // + // Pipeline: page 207 + BEGIN_OP(MULS_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 2; + + MACL = (int16)R[n] * (int16)R[m]; + END_OP + + + // + // MULU.W Rm,Rn + // + // Pipeline: page 207 + BEGIN_OP(MULU_W_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + MA_until = std::max(std::max(MA_until, MM_until), timestamp + 1); + MM_until = MA_until + 2; + + MACL = (uint32)(uint16)R[n] * (uint32)(uint16)R[m]; + END_OP + + + // + // NEG Rm,Rn + // + BEGIN_OP(NEG_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = -R[m]; + END_OP + + + // + // NEGC Rm,Rn + // + BEGIN_OP(NEGC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)0 - R[m] - GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // SUB Rm,Rn + // + BEGIN_OP(SUB_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] - R[m]; + END_OP + + + // + // SUBC Rm,Rn + // + BEGIN_OP(SUBC_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint64 result = (uint64)R[n] - R[m] - GetT(); + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = result; + SetT((result >> 32) & 1); + END_OP + + + // + // SUBV Rm,Rn + // + BEGIN_OP(SUBV_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + const uint32 result = R[n] - R[m]; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT((((R[n] ^ R[m])) & (R[n] ^ result)) >> 31); + R[n] = result; + END_OP + + + // + // AND Rm,Rn + // + BEGIN_OP(AND_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] & R[m]; + END_OP + + + // + // AND #imm,R0 + // + BEGIN_OP(AND_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] = R[0] & imm; + END_OP + + + // + // AND.B #imm,@(R0,GBR) + // + BEGIN_OP(AND_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp &= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // NOT Rm,Rn + // + BEGIN_OP(NOT_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = ~R[m]; + END_OP + + + // + // OR Rm,Rn + // + BEGIN_OP(OR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] |= R[m]; + END_OP + + + // + // OR #imm,R0 + // + BEGIN_OP(OR_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] |= imm; + END_OP + + + // + // OR.B #imm,@(R0,GBR) + // + BEGIN_OP(OR_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp |= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // TAS.B @Rn + // + BEGIN_OP(TAS_B_REGINDIR) + uint8 tmp; + RESUME_VAR(uint32, opexec_ea); + + opexec_ea = R[instr_nyb2]; + + CHECK_EXIT_RESUME(); + + SH7095_BusLock++; + tmp = ExtBusRead(uint8, false, opexec_ea); // FIXME: Address error on invalid address(>= 0x40000000 ?). + timestamp = SH7095_mem_timestamp; + + SetT(!tmp); + + tmp |= 0x80; + + MemWrite8(opexec_ea, tmp); + SH7095_BusLock--; + + timestamp += 3; + END_OP + + + // + // TST Rm,Rn + // + BEGIN_OP(TST_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + SetT(!(R[n] & R[m])); + END_OP + + + // + // TST #imm,R0 + // + BEGIN_OP(TST_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + SetT(!(R[0] & imm)); + END_OP + + + // + // TST.B #imm,@(R0,GBR) + // + BEGIN_OP(TST_B_IMM_IDXGBRINDIR) + CONST_VAR(uint32, ea) = R[0] + GBR; + uint32 tmp; + + MemRead8(ea, tmp); + timestamp++; + SetT(!(tmp & (uint8)instr)); + timestamp++; + END_OP + + + // + // XOR Rm,Rn + // + BEGIN_OP(XOR_REG_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, m) = instr_nyb1; + + WB_EX_CHECK(n) + WB_EX_CHECK(m) + + R[n] = R[n] ^ R[m]; + END_OP + + + // + // XOR #imm,R0 + // + BEGIN_OP(XOR_IMM_REG0) + const unsigned imm = (uint8)instr; + + WB_EX_CHECK(0) + + R[0] = R[0] ^ imm; + END_OP + + + // + // XOR.B #imm,@(R0,GBR) + // + BEGIN_OP(XOR_B_IMM_IDXGBRINDIR) + RESUME_VAR(uint32, opexec_ea); + opexec_ea = R[0] + GBR; + uint32 tmp; + + MemRead8(opexec_ea, tmp); + timestamp++; + tmp ^= (uint8)instr; + MemWrite8(opexec_ea, tmp); + timestamp++; + END_OP + + + // + // ROTL Rn + // + BEGIN_OP(ROTL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] = (R[n] << 1) | rotbit; + SetT(rotbit); + END_OP + + + // + // ROTR Rn + // + BEGIN_OP(ROTR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (R[n] >> 1) | (rotbit << 31); + SetT(rotbit); + END_OP + + + // + // ROTCL Rn + // + BEGIN_OP(ROTCL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] = (R[n] << 1) | GetT(); + SetT(rotbit); + END_OP + + + // + // ROTCR Rn + // + BEGIN_OP(ROTCR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned rotbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (R[n] >> 1) | (GetT() << 31); + SetT(rotbit); + END_OP + + + // + // SHAR Rn + // + BEGIN_OP(SHAR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] = (int32)R[n] >> 1; + SetT(shbit); + END_OP + + + // + // SHLL Rn + // + BEGIN_OP(SHLL_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] >> 31; + + WB_EX_CHECK(n) + + R[n] <<= 1; + SetT(shbit); + END_OP + + + // + // SHLR Rn + // + BEGIN_OP(SHLR_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned shbit = R[n] & 1; + + WB_EX_CHECK(n) + + R[n] >>= 1; + SetT(shbit); + END_OP + + + // + // SHLL2 Rn + // + BEGIN_OP(SHLL2_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 2; + END_OP + + + // + // SHLR2 Rn + // + BEGIN_OP(SHLR2_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 2; + END_OP + + + // + // SHLL8 Rn + // + BEGIN_OP(SHLL8_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 8; + END_OP + + + // + // SHLR8 Rn + // + BEGIN_OP(SHLR8_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 8; + END_OP + + + // + // SHLL16 Rn + // + BEGIN_OP(SHLL16_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] <<= 16; + END_OP + + + // + // SHLR16 Rn + // + BEGIN_OP(SHLR16_REG) + CONST_VAR(unsigned, n) = instr_nyb2; + + WB_EX_CHECK(n) + + R[n] >>= 16; + END_OP + + + // + // BF + // + BEGIN_OP_FUDGEIF(BF) + CondRelBranch(!GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BF/S + // + BEGIN_OP_FUDGEIF(BF_S) + CondRelDelayBranch(!GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BT + // + BEGIN_OP_FUDGEIF(BT) + CondRelBranch(GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BT/S + // + BEGIN_OP_FUDGEIF(BT_S) + CondRelDelayBranch(GetT(), (uint32)(int8)instr << 1); + END_OP + + + // + // BRA + // + BEGIN_OP_DLYIDIF(BRA) + UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); + END_OP + + + // + // BRAF Rm + // + BEGIN_OP_DLYIDIF(BRAF_REG) + UCRelDelayBranch(R[instr_nyb2]); + END_OP + + + // + // BSR + // + BEGIN_OP_DLYIDIF(BSR) + PR = PC; + + UCRelDelayBranch((uint32)sign_x_to_s32(12, instr) << 1); + END_OP + + + // + // BSRF Rm + // + BEGIN_OP_DLYIDIF(BSRF_REG) + PR = PC; + + UCRelDelayBranch(R[instr_nyb2]); + END_OP + + + // + // JMP @Rm + // + BEGIN_OP_DLYIDIF(JMP_REGINDIR) + UCDelayBranch(R[instr_nyb2]); + END_OP + + + // + // JSR @Rm + // + BEGIN_OP_DLYIDIF(JSR_REGINDIR) + PR = PC; + + UCDelayBranch(R[instr_nyb2]); + END_OP + + + // + // RTS + // + BEGIN_OP_DLYIDIF(RTS) + UCDelayBranch(PR); + END_OP + + + // + // CLRT + // + BEGIN_OP(CLRT) + SetT(false); + END_OP + + + // + // CLRMAC + // + BEGIN_OP(CLRMAC) + MACH = 0; + MACL = 0; + END_OP + + + // + // LDC + // + BEGIN_OP_DLYIDIF(LDC) + { + CONST_VAR(unsigned, m) = instr_nyb2; + const unsigned cri = (instr >> 4) & 0x3; +#ifdef MDFN_ENABLE_DEV_BUILD + const uint32 old_SR = SR; +#endif + + CtrlRegs[cri] = R[m]; + if(cri == 0) + { + SR &= 0x3F3; +#ifdef MDFN_ENABLE_DEV_BUILD + if((old_SR ^ SR) & 0xF0) + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] LDC IMask; 0x%01x->0x%01x, PC=0x%08x", cpu_name, (old_SR >> 4) & 0xF, (SR >> 4) & 0xF, PC); +#endif + RecalcPendingIntPEX(); + } + } + PART_OP_INTDIS + END_OP + + // + // LDC.L + // + // Pipeline: page 233 + // + BEGIN_OP_DLYIDIF(LDC_L) + { + uint32 ea; +#ifdef MDFN_ENABLE_DEV_BUILD + //static uint32 old_SR; + //old_SR = SR; + Resume_new_PC = SR; +#endif + ea = R[instr_nyb2]; + R[instr_nyb2] += 4; + + timestamp++; + MemRead32(ea, CtrlRegs[(instr >> 4) & 0x3]); + if(((instr >> 4) & 0x3) == 0) + { + SR &= 0x3F3; +#ifdef MDFN_ENABLE_DEV_BUILD + if((/*old_SR*/Resume_new_PC ^ SR) & 0xF0) + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] LDC.L IMask; 0x%01x->0x%01x, PC=0x%08x", cpu_name, (/*old_SR*/Resume_new_PC >> 4) & 0xF, (SR >> 4) & 0xF, PC); +#endif + RecalcPendingIntPEX(); + } + + timestamp++; + } + PART_OP_INTDIS + END_OP + + + // + // LDS + // + BEGIN_OP_DLYIDIF(LDS) + { + CONST_VAR(unsigned, m) = instr_nyb2; + const unsigned sri = (instr >> 4) & 0x3; + + SysRegs[sri] = R[m]; + } + PART_OP_INTDIS + END_OP + + + // + // LDS.L + // + BEGIN_OP_DLYIDIF(LDS_L) // Pipeline same as ordinary load instruction + { + uint32 ea; + + ea = R[instr_nyb2]; + R[instr_nyb2] += 4; + + MemRead32(ea, SysRegs[(instr >> 4) & 0x3]); + } + PART_OP_INTDIS + //printf(" LDS.L: (0x%08x)->0x%08x\n", ea, SysRegs[sri]); + END_OP + + + // + // NOP + // + BEGIN_OP(NOP) + END_OP + + + // + // RTE + // + // Pipeline: page 241 + // + BEGIN_OP(RTE) + RESUME_VAR(uint32, opexec_new_PC); + RESUME_VAR(uint32, opexec_new_SR); + + MemRead32(R[15], opexec_new_PC); + R[15] += 4; + + MemRead32(R[15], opexec_new_SR) + R[15] += 4; + +#ifdef MDFN_ENABLE_DEV_BUILD + SS_DBGTI(SS_DBG_SH2_EXCEPT, "[%s] RTE; PC: 0x%08x->0x%08x, SR: 0x%03x->0x%03x", cpu_name, PC, opexec_new_PC, SR, opexec_new_SR & 0x3F3); +#endif + + SR = opexec_new_SR & 0x3F3; + RecalcPendingIntPEX(); + + timestamp++; + + DelayBranch(opexec_new_PC); + END_OP + + + // + // SETT + // + BEGIN_OP(SETT) + SetT(true); + END_OP + + + // + // SLEEP + // + BEGIN_OP_DLYIDIF(SLEEP) + // + // Standby mode time yay? + // + if(MDFN_UNLIKELY(SBYCR & 0x80)) + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Entering standby mode.\n", cpu_name); + + for(unsigned ch = 0; ch < 2; ch++) + { + DMACH[ch].CHCR = 0x00; + DMACH[ch].CHCRM = 0x00; + } + DMAOR = 0x00; + DMA_RecalcRunning(); + RecalcPendingIntPEX(); + // + // + FRT_Reset(); + // + // + WDT_StandbyReset(); + // + // + SCI_Reset(); + // + // + + timestamp++; + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0x7E << 24); + + Standby = true; + + goto SkipPCInc; + } + + if(MDFN_LIKELY(!EPending)) + { + timestamp += 3; + goto SkipPCInc; + } + else + { + DoID(false); + FetchIF(); + } + END_OP + + BEGIN_OP_DLYIDIF(PSEUDO_STANDBY) + if(MDFN_LIKELY(Standby)) + { + timestamp += 7; + goto SkipPCInc; + } + else + { + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Exiting standby mode.\n", cpu_name); + + FRT_Reset(); // Reset again(for the counter) because we didn't stop clocking it. + + DoID(false); + FetchIF(); + } + END_OP + + // + // STC + // + BEGIN_OP_DLYIDIF(STC) + { + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned cri = (instr >> 4) & 0x3; + + R[n] = CtrlRegs[cri]; + } + PART_OP_INTDIS + END_OP + + + // + // STC.L + // + // pipeline: page 234 + BEGIN_OP_DLYIDIF(STC_L) + { + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, cri) = (instr >> 4) & 0x3; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + MemWrite32(ea, CtrlRegs[cri]); + timestamp++; + } + PART_OP_INTDIS + END_OP + + + // + // STS + // + BEGIN_OP_DLYIDIF(STS) + { + CONST_VAR(unsigned, n) = instr_nyb2; + const unsigned sri = (instr >> 4) & 0x3; + + R[n] = SysRegs[sri]; + } + PART_OP_INTDIS + END_OP + + + // + // STS.L + // + BEGIN_OP_DLYIDIF(STS_L) // Pipeline same as ordinary store instruction + { + CONST_VAR(unsigned, n) = instr_nyb2; + CONST_VAR(unsigned, sri) = (instr >> 4) & 0x3; + uint32 ea; + + R[n] -= 4; + ea = R[n]; + + //printf(" STS.L: 0x%08x->(0x%08x)\n", SysRegs[sri], ea); + + MemWrite32(ea, SysRegs[sri]); + } + PART_OP_INTDIS + END_OP + + + // + // TRAPA #imm + // + // Saved PC is the address of the instruction after the TRAPA instruction + // + BEGIN_OP_DLYIDIF(TRAPA) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 2; + Exception(EXCEPTION_TRAP, (uint8)instr, opexec_new_PC) + Branch(false, opexec_new_PC); + END_OP + + + /* + ** + ** + */ + // + // Illegal Instruction + // + // Saved PC is the address of the illegal instruction. + // + BEGIN_OP_DLYIDIF(ILLEGAL) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 4; + Exception(EXCEPTION_ILLINSTR, VECNUM_ILLINSTR, opexec_new_PC); + Branch(false, opexec_new_PC); + END_OP + + // + // Illegal Slot Instruction + // + // Saved PC is the effective target address of the jump. + // + BEGIN_OP_DLYIDIF(SLOT_ILLEGAL) + RESUME_VAR(uint32, opexec_new_PC); + + PC -= 2; + Exception(EXCEPTION_ILLSLOT, VECNUM_ILLSLOT, opexec_new_PC); + Branch(false, opexec_new_PC); + END_OP + + // + // Pending exception(address error/interrupt) + // + BEGIN_OP_DLYIDIF(PSEUDO_EPENDING) + RESUME_VAR(uint32, opexec_new_PC); + RESUME_VAR(uint8, opexec_exnum); + RESUME_VAR(uint8, opexec_vecnum); + + opexec_new_PC = 0; + + // + // Priority here(listed highest to lowest): + // External halt + // Power + // Reset + // Pseudo DMA burst(hacky abusey thing to stall the CPU, should be above everything but reset/power and ext halt otherwise kaboom!). + // CPU address error + // DMA address error + // NMI + // Interrupt (final else, may be called quasi-spuriously) + // + #define TPP(x) (Pipe_ID & (1U << ((x) + EPENDING_PEXBITS_SHIFT))) + // + // Test against Pipe_ID, reset bits in EPending(if appropriate). + // + if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_EXTHALT))) + { + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Ext halt begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); + goto SkipPCInc; + } + else if(MDFN_UNLIKELY(TPP(PEX_POWERON) || TPP(PEX_RESET))) + { + EPending = 0; + opexec_exnum = EXCEPTION_POWERON; + opexec_vecnum = VECNUM_POWERON; + + if(TPP(PEX_RESET)) + { + opexec_exnum = EXCEPTION_RESET; + opexec_vecnum = VECNUM_RESET; + } + + Exception_ResPow(opexec_exnum, opexec_vecnum, opexec_new_PC); + } + else if(MDFN_UNLIKELY(TPP(PEX_PSEUDO_DMABURST))) + { + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst begin: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + Pipe_ID = (Pipe_ID & 0x00FFFFFF) | (0xFE << 24); + goto SkipPCInc; + } + else if(MDFN_UNLIKELY(TPP(PEX_CPUADDR))) + { + PC -= 4; + ClearPEX(PEX_CPUADDR); + Exception(EXCEPTION_CPUADDR, VECNUM_CPUADDR, opexec_new_PC); + ClearPEX(PEX_CPUADDR); // Infinite recursive address errors are not good(stack wraparound could clobber backup memory). + } + else if(MDFN_UNLIKELY(TPP(PEX_DMAADDR))) + { + PC -= 4; + ClearPEX(PEX_DMAADDR); + Exception(EXCEPTION_DMAADDR, VECNUM_DMAADDR, opexec_new_PC); + } + else if(TPP(PEX_NMI)) + { + PC -= 4; + ClearPEX(PEX_NMI); + Exception(EXCEPTION_NMI, VECNUM_NMI, opexec_new_PC); + // + // + // + SR |= 0xF << 4; + RecalcPendingIntPEX(); + } + else // Int + { + RESUME_VAR(uint8, opexec_ipr); + + opexec_ipr = GetPendingInt(NULL); + + if(MDFN_LIKELY(opexec_ipr > ((SR >> 4) & 0xF))) + { + // Note: GetPendingInt() may call ExIVecFetch(), which may call SetIRL with a new value, so be + // careful to use the "old" value here. + GetPendingInt(&opexec_vecnum); + + PC -= 4; + Exception(EXCEPTION_INT, opexec_vecnum, opexec_new_PC); + // + // + // + SR &= ~(0xF << 4); + SR |= opexec_ipr << 4; + RecalcPendingIntPEX(); + } + else + { + // + // Can happen like so(note for future testing): + // + // (WDT interval timer IRQ pending here) + // + // WTCSR_R; + // asm volatile( + // "ldc %0,SR\n\t" + // "mov.w %2, @%1\n\t" + // : + // :"r"(0), "r"(0xFFFFFE88), "r"(0xA500 | 0x00) + // : "memory"); + // + SS_DBG(SS_DBG_WARNING | SS_DBG_SH2 | SS_DBG_SH2_EXCEPT, "[%s] Spurious EPENDING. IPR=0x%02x SR=0x%04x EPending=0x%08x Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, opexec_ipr, SR, EPending, Pipe_ID, PC); + + Pipe_ID = (uint16)Pipe_ID; + Pipe_ID |= InstrDecodeTab[Pipe_ID] << 24; + goto SPEPRecover; + } + } + #undef TPP + // + // + // + Branch(false, opexec_new_PC); + END_OP + + BEGIN_OP_DLYIDIF(PSEUDO_DMABURST) +#ifdef SH7095_NEED_RESUME_TABLE_INIT + if(MDFN_UNLIKELY(!ResumeTableP[DebugMode])) + { + static_assert(__COUNTER__ == ((DebugMode ? 10000 : 5000) + 393), "Unexpected __COUNTER__"); + + static const void* const ResumeTable[512] = + { +#if SH7095_DEBUG_MODE + #include "sh7095s_ctable_dm.inc" +#else + #include "sh7095s_ctable.inc" +#endif + }; + //static_assert(__COUNTER__ <= 11025, "Unexpected __COUNTER__"); + + assert(this == &CPU[1]); + + ResumeTableP[DebugMode] = ResumeTable; + return; + } +#endif + if(MDFN_LIKELY(DMA_InBurst() || ExtHalt)) + { + timestamp += 7; + goto SkipPCInc; + } + else + { + ClearPEX(PEX_PSEUDO_DMABURST); + ClearPEX(PEX_PSEUDO_EXTHALT); + + // + // Recover Pipe_ID opcode field; only use Pipe_ID for this, not EPending, otherwise + // we may accidentally allow an interrupt to occur immediately after an interrupt-disabled instruction. + // + Pipe_ID &= 0x00FFFFFF; + Pipe_ID &= ~(1U << (PEX_PSEUDO_DMABURST + EPENDING_PEXBITS_SHIFT)); + Pipe_ID &= ~(1U << (PEX_PSEUDO_EXTHALT + EPENDING_PEXBITS_SHIFT)); + Pipe_ID |= InstrDecodeTab[(uint16)Pipe_ID] << 24; + if(Pipe_ID & (0xFF << EPENDING_PEXBITS_SHIFT)) + Pipe_ID |= EPENDING_OP_OR; + + //SS_DBG(SS_DBG_WARNING | SS_DBG_SH2, "[%s] Burst/External halt end: Pipe_ID=0x%08x PC=0x%08x\n", cpu_name, Pipe_ID, PC); + goto SkipPCInc; + } + END_OP +} + +PC += 2; +SkipPCInc:; + +#ifdef SH7095_NEED_RESUME_TABLE_INIT +static_assert(__COUNTER__ == ((DebugMode ? 10000 : 5000) + 393 + 512 + 1), "Unexpected __COUNTER__"); +#endif + +#undef PART_OP_NORMIDIF +#undef BEGIN_OP +#undef BEGIN_OP_FUDGEIF +#undef BEGIN_OP_DLYIDIF +#undef PART_OP_INTDIS +#undef END_OP +#undef WB_EX_CHECK +#undef WB_WRITE +#undef WB_READ8 +#undef WB_READ16 +#undef WB_READ32 +#undef WB_READ16_I +#undef WB_READ32_I + diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095s_cnorm_dm.inc mednafen-1.26.1+dfsg/src/ss/sh7095s_cnorm_dm.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095s_cnorm_dm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095s_cnorm_dm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,20000 @@ +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#if __COUNTER__ < 9999 +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095s_cnorm.inc mednafen-1.26.1+dfsg/src/ss/sh7095s_cnorm.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095s_cnorm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095s_cnorm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,10000 @@ +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#if __COUNTER__ < 4999 +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif +#endif diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095s_ctable_dm.inc mednafen-1.26.1+dfsg/src/ss/sh7095s_ctable_dm.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095s_ctable_dm.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095s_ctable_dm.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,1536 @@ +#if __COUNTER__ >= 10514 + &&Resume_10512, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10511, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10510, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10509, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10508, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10507, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10506, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10505, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10504, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10503, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10502, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10501, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10500, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10499, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10498, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10497, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10496, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10495, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10494, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10493, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10492, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10491, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10490, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10489, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10488, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10487, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10486, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10485, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10484, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10483, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10482, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10481, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10480, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10479, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10478, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10477, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10476, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10475, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10474, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10473, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10472, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10471, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10470, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10469, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10468, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10467, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10466, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10465, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10464, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10463, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10462, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10461, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10460, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10459, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10458, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10457, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10456, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10455, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10454, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10453, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10452, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10451, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10450, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10449, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10448, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10447, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10446, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10445, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10444, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10443, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10442, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10441, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10440, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10439, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10438, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10437, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10436, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10435, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10434, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10433, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10432, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10431, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10430, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10429, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10428, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10427, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10426, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10425, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10424, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10423, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10422, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10421, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10420, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10419, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10418, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10417, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10416, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10415, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10414, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10413, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10412, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10411, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10410, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10409, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10408, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10407, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10406, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10405, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10404, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10403, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10402, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10401, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10400, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10399, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10398, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10397, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10396, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10395, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10394, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10393, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10392, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10391, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10390, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10389, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10388, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10387, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10386, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10385, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10384, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10383, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10382, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10381, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10380, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10379, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10378, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10377, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10376, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10375, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10374, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10373, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10372, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10371, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10370, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10369, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10368, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10367, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10366, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10365, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10364, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10363, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10362, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10361, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10360, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10359, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10358, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10357, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10356, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10355, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10354, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10353, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10352, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10351, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10350, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10349, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10348, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10347, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10346, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10345, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10344, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10343, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10342, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10341, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10340, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10339, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10338, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10337, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10336, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10335, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10334, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10333, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10332, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10331, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10330, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10329, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10328, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10327, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10326, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10325, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10324, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10323, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10322, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10321, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10320, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10319, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10318, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10317, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10316, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10315, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10314, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10313, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10312, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10311, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10310, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10309, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10308, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10307, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10306, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10305, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10304, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10303, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10302, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10301, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10300, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10299, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10298, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10297, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10296, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10295, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10294, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10293, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10292, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10291, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10290, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10289, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10288, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10287, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10286, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10285, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10284, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10283, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10282, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10281, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10280, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10279, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10278, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10277, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10276, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10275, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10274, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10273, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10272, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10271, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10270, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10269, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10268, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10267, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10266, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10265, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10264, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10263, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10262, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10261, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10260, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10259, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10258, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10257, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10256, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10255, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10254, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10253, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10252, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10251, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10250, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10249, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10248, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10247, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10246, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10245, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10244, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10243, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10242, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10241, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10240, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10239, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10238, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10237, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10236, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10235, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10234, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10233, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10232, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10231, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10230, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10229, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10228, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10227, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10226, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10225, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10224, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10223, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10222, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10221, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10220, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10219, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10218, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10217, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10216, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10215, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10214, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10213, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10212, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10211, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10210, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10209, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10208, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10207, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10206, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10205, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10204, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10203, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10202, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10201, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10200, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10199, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10198, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10197, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10196, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10195, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10194, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10193, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10192, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10191, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10190, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10189, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10188, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10187, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10186, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10185, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10184, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10183, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10182, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10181, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10180, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10179, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10178, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10177, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10176, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10175, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10174, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10173, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10172, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10171, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10170, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10169, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10168, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10167, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10166, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10165, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10164, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10163, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10162, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10161, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10160, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10159, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10158, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10157, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10156, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10155, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10154, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10153, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10152, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10151, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10150, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10149, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10148, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10147, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10146, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10145, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10144, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10143, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10142, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10141, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10140, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10139, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10138, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10137, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10136, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10135, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10134, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10133, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10132, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10131, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10130, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10129, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10128, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10127, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10126, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10125, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10124, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10123, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10122, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10121, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10120, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10119, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10118, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10117, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10116, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10115, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10114, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10113, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10112, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10111, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10110, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10109, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10108, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10107, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10106, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10105, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10104, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10103, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10102, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10101, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10100, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10099, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10098, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10097, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10096, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10095, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10094, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10093, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10092, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10091, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10090, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10089, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10088, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10087, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10086, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10085, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10084, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10083, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10082, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10081, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10080, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10079, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10078, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10077, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10076, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10075, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10074, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10073, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10072, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10071, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10070, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10069, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10068, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10067, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10066, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10065, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10064, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10063, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10062, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10061, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10060, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10059, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10058, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10057, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10056, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10055, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10054, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10053, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10052, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10051, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10050, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10049, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10048, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10047, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10046, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10045, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10044, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10043, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10042, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10041, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10040, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10039, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10038, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10037, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10036, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10035, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10034, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10033, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10032, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10031, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10030, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10029, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10028, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10027, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10026, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10025, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10024, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10023, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10022, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10021, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10020, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10019, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10018, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10017, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10016, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10015, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10014, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10013, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10012, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10011, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10010, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10009, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10008, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10007, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10006, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10005, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10004, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10003, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10002, +#endif +#if __COUNTER__ >= 10514 + &&Resume_10001, +#endif diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095s_ctable.inc mednafen-1.26.1+dfsg/src/ss/sh7095s_ctable.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095s_ctable.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095s_ctable.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,1536 @@ +#if __COUNTER__ >= 5514 + &&Resume_5512, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5511, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5510, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5509, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5508, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5507, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5506, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5505, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5504, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5503, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5502, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5501, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5500, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5499, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5498, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5497, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5496, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5495, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5494, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5493, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5492, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5491, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5490, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5489, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5488, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5487, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5486, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5485, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5484, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5483, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5482, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5481, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5480, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5479, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5478, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5477, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5476, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5475, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5474, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5473, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5472, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5471, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5470, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5469, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5468, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5467, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5466, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5465, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5464, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5463, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5462, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5461, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5460, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5459, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5458, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5457, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5456, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5455, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5454, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5453, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5452, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5451, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5450, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5449, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5448, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5447, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5446, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5445, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5444, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5443, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5442, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5441, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5440, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5439, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5438, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5437, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5436, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5435, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5434, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5433, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5432, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5431, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5430, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5429, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5428, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5427, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5426, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5425, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5424, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5423, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5422, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5421, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5420, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5419, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5418, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5417, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5416, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5415, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5414, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5413, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5412, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5411, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5410, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5409, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5408, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5407, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5406, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5405, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5404, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5403, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5402, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5401, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5400, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5399, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5398, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5397, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5396, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5395, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5394, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5393, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5392, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5391, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5390, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5389, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5388, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5387, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5386, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5385, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5384, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5383, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5382, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5381, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5380, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5379, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5378, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5377, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5376, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5375, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5374, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5373, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5372, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5371, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5370, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5369, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5368, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5367, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5366, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5365, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5364, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5363, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5362, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5361, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5360, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5359, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5358, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5357, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5356, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5355, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5354, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5353, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5352, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5351, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5350, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5349, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5348, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5347, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5346, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5345, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5344, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5343, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5342, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5341, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5340, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5339, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5338, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5337, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5336, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5335, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5334, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5333, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5332, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5331, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5330, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5329, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5328, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5327, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5326, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5325, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5324, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5323, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5322, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5321, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5320, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5319, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5318, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5317, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5316, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5315, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5314, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5313, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5312, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5311, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5310, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5309, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5308, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5307, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5306, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5305, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5304, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5303, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5302, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5301, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5300, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5299, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5298, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5297, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5296, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5295, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5294, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5293, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5292, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5291, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5290, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5289, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5288, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5287, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5286, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5285, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5284, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5283, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5282, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5281, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5280, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5279, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5278, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5277, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5276, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5275, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5274, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5273, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5272, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5271, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5270, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5269, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5268, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5267, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5266, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5265, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5264, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5263, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5262, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5261, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5260, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5259, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5258, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5257, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5256, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5255, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5254, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5253, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5252, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5251, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5250, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5249, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5248, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5247, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5246, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5245, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5244, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5243, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5242, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5241, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5240, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5239, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5238, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5237, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5236, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5235, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5234, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5233, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5232, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5231, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5230, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5229, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5228, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5227, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5226, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5225, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5224, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5223, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5222, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5221, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5220, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5219, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5218, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5217, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5216, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5215, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5214, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5213, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5212, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5211, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5210, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5209, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5208, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5207, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5206, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5205, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5204, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5203, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5202, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5201, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5200, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5199, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5198, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5197, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5196, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5195, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5194, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5193, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5192, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5191, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5190, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5189, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5188, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5187, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5186, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5185, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5184, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5183, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5182, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5181, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5180, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5179, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5178, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5177, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5176, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5175, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5174, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5173, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5172, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5171, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5170, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5169, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5168, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5167, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5166, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5165, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5164, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5163, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5162, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5161, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5160, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5159, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5158, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5157, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5156, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5155, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5154, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5153, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5152, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5151, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5150, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5149, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5148, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5147, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5146, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5145, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5144, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5143, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5142, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5141, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5140, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5139, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5138, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5137, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5136, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5135, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5134, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5133, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5132, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5131, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5130, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5129, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5128, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5127, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5126, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5125, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5124, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5123, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5122, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5121, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5120, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5119, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5118, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5117, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5116, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5115, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5114, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5113, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5112, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5111, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5110, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5109, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5108, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5107, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5106, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5105, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5104, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5103, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5102, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5101, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5100, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5099, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5098, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5097, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5096, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5095, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5094, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5093, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5092, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5091, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5090, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5089, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5088, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5087, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5086, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5085, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5084, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5083, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5082, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5081, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5080, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5079, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5078, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5077, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5076, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5075, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5074, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5073, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5072, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5071, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5070, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5069, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5068, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5067, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5066, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5065, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5064, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5063, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5062, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5061, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5060, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5059, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5058, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5057, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5056, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5055, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5054, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5053, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5052, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5051, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5050, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5049, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5048, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5047, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5046, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5045, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5044, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5043, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5042, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5041, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5040, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5039, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5038, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5037, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5036, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5035, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5034, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5033, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5032, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5031, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5030, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5029, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5028, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5027, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5026, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5025, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5024, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5023, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5022, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5021, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5020, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5019, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5018, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5017, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5016, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5015, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5014, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5013, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5012, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5011, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5010, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5009, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5008, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5007, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5006, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5005, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5004, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5003, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5002, +#endif +#if __COUNTER__ >= 5514 + &&Resume_5001, +#endif diff -Nru mednafen-1.24.3+dfsg/src/ss/sh7095s_rsu.inc mednafen-1.26.1+dfsg/src/ss/sh7095s_rsu.inc --- mednafen-1.24.3+dfsg/src/ss/sh7095s_rsu.inc 1970-01-01 00:00:00.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sh7095s_rsu.inc 2020-11-10 06:04:17.000000000 +0000 @@ -0,0 +1,50 @@ + enum : unsigned { which = 1 }; + enum : bool { EmulateICache = true }; + enum : bool { DebugMode = SH7095_DEBUG_MODE }; + enum : bool { CacheBypassHack = false }; + +#ifdef MDFN_ENABLE_DEV_BUILD + assert(!ResumeTableP[DebugMode] || DebugMode == DM_Setting); +#endif + //if(this != &CPU[1]) + // __builtin_unreachable(); + + if(MDFN_UNLIKELY(timestamp >= bound_timestamp)) + return; + + if(ResumePoint) + { + //printf("Resume: 0x%016llx\n", (unsigned long long)(uintptr_t)ResumePoint); + const void* const tmp = ResumePoint; + ResumePoint = nullptr; + goto *tmp; + } + + do + { + if(DebugMode) + { + if(MDFN_LIKELY(ResumeTableP[DebugMode])) + DBG_CPUHandler<1>(); + } + + // + // Ideally, we would place SPEPRecover: after the FRT event check, but doing + // so causes gcc(multiple versions) to produce inconceivably awful code under certain conditions + // (such as disabling all the SS_DBG stuff at compile-time) because it thinks it's an important loop + // or something?(even with all our branch hinting!) + // + SPEPRecover:; + + if(MDFN_UNLIKELY(timestamp >= FRT_WDT_NextTS)) + { + FRT_WDT_Update(); + FRT_WDT_Recalc_NET(); + } + + instr = (uint16)Pipe_ID; + // + #include "sh7095_ops.inc" + // + } while(timestamp < bound_timestamp); + diff -Nru mednafen-1.24.3+dfsg/src/ss/smpc.cpp mednafen-1.26.1+dfsg/src/ss/smpc.cpp --- mednafen-1.24.3+dfsg/src/ss/smpc.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/smpc.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* smpc.cpp - SMPC Emulation -** Copyright (C) 2015-2017 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -153,6 +153,7 @@ static bool SoundCPUOn; static bool SlaveSH2On; +static int SlaveSH2Pending; static bool CDOn; static uint8 BusBuffer; @@ -409,6 +410,8 @@ MasterClock = master_clock_arg; SMPC_ClockRatio = 0; + SlaveSH2Pending = false; + ResetButtonPhysStatus = false; ResetPending = false; vb = false; @@ -427,27 +430,6 @@ SMPC_SetRTC(NULL, 0); } -bool SMPC_IsSlaveOn(void) -{ - return SlaveSH2On; -} - -static void SlaveOn(void) -{ - SlaveSH2On = true; - CPU[1].AdjustTS(SH7095_mem_timestamp, true); - CPU[1].Reset(true); - SS_SetEventNT(&events[SS_EVENT_SH2_S_DMA], SH7095_mem_timestamp + 1); -} - -static void SlaveOff(void) -{ - SlaveSH2On = false; - CPU[1].Reset(true); - CPU[1].AdjustTS(0x7FFFFFFF, true); - SS_SetEventNT(&events[SS_EVENT_SH2_S_DMA], SS_EVENT_DISABLED_TS); -} - static void TurnSoundCPUOn(void) { SOUND_Reset68K(); @@ -464,7 +446,10 @@ void SMPC_Reset(bool powering_up) { - SlaveOff(); + SlaveSH2Pending = 0; + SlaveSH2On = false; + CPU[1].SetActive(SlaveSH2On); + // TurnSoundCPUOff(); CDOn = true; // ? false; @@ -546,6 +531,7 @@ SFVAR(SoundCPUOn), SFVAR(SlaveSH2On), + SFVAR(SlaveSH2Pending), SFVAR(CDOn), SFVAR(BusBuffer), @@ -607,6 +593,16 @@ { JRS.CurPort &= 0x1; JRS.OWP &= 0x3F; + + for(unsigned vp = 0; vp < 12; vp++) + { + IODevice* const p = VirtualPorts[vp]; + + if(load < 0x00102600 && p->NextEventTS >= 0x40000000) + p->NextEventTS = SS_EVENT_DISABLED_TS; + else + p->NextEventTS = std::max(0, p->NextEventTS); + } } } @@ -620,6 +616,18 @@ VirtualPorts[vp]->TransformInput(VirtualPortsDPtr[vp], gun_x_scale, gun_x_offs); } +void SMPC_ProcessSlaveOffOn(void) +{ + if(SlaveSH2Pending) + { + SlaveSH2On = (SlaveSH2Pending > 0); + CPU[1].SetActive(SlaveSH2On); + SlaveSH2Pending = 0; + // + SS_DBGTI(SS_DBG_SMPC, "[SMPC] Slave pending processed; SlaveSH2On=%d", SlaveSH2On); + } +} + int32 SMPC_StartFrame(EmulateSpecStruct* espec) { if(ResetPending) @@ -631,9 +639,6 @@ PendingClockDivisor = 0; } - if(!SlaveSH2On) - CPU[1].AdjustTS(0x7FFFFFFF, true); - SMPC_ClockRatio = (1ULL << 32) * 4000000 * CurrentClockDivisor / MasterClock; SOUND_SetClockRatio((1ULL << 32) * 11289600 * CurrentClockDivisor / MasterClock); CDB_SetClockRatio((1ULL << 32) * 11289600 * CurrentClockDivisor / MasterClock); @@ -846,6 +851,17 @@ lastts = 0; } +#define SMPC_WAIT_UNTIL_COND_SHORT(cond) { \ + case __COUNTER__: \ + ClockCounter = 0; /* before if(), not after, otherwise the variable will overflow eventually. */ \ + if(!(cond)) \ + { \ + SubPhase = __COUNTER__ - SubPhaseBias - 1; \ + next_event_ts = timestamp + 8; \ + goto Breakout; \ + } \ + } + #define SMPC_WAIT_UNTIL_COND(cond) { \ case __COUNTER__: \ ClockCounter = 0; /* before if(), not after, otherwise the variable will overflow eventually. */ \ @@ -1062,16 +1078,6 @@ { } - else if(ExecutingCommand == CMD_SSHON) - { - if(!SlaveSH2On) - SlaveOn(); - } - else if(ExecutingCommand == CMD_SSHOFF) - { - if(SlaveSH2On) - SlaveOff(); - } else if(ExecutingCommand == CMD_SNDON) { if(!SoundCPUOn) @@ -1094,7 +1100,6 @@ { ResetPending = true; SMPC_WAIT_UNTIL_COND(!ResetPending); - // TODO/FIXME(unreachable currently?): } else if(ExecutingCommand == CMD_CKCHG352 || ExecutingCommand == CMD_CKCHG320) @@ -1102,7 +1107,10 @@ // Devour some time if(SlaveSH2On) - SlaveOff(); + { + SlaveSH2Pending = -1; + SS_RequestEHLExit(); + } if(SoundCPUOn) TurnSoundCPUOff(); @@ -1211,7 +1219,14 @@ UpdateIOBus(JRS.CurPort, timestamp); \ } - JR_WAIT(!vb); + JR_WAIT(!vb || (IREG[0] & 0x40)); + + if(IREG[0] & 0x40) + { + SS_DBGTI(SS_DBG_SMPC, "[SMPC] Break (early)"); + goto AbortJR; + } + JRS.NextContBit = true; if(SR & SR_NPE) { @@ -1462,6 +1477,26 @@ { ResetNMIEnable = false; } + else if(ExecutingCommand == CMD_SSHON) + { + if(!SlaveSH2On) + { + SlaveSH2Pending = 1; + SS_RequestEHLExit(); + SMPC_WAIT_UNTIL_COND_SHORT(!SlaveSH2Pending); + SS_DBGTI(SS_DBG_SMPC, "[SMPC] SlaveSH2Pending wait loop end."); + } + } + else if(ExecutingCommand == CMD_SSHOFF) + { + if(SlaveSH2On) + { + SlaveSH2Pending = -1; + SS_RequestEHLExit(); + SMPC_WAIT_UNTIL_COND_SHORT(!SlaveSH2Pending); + SS_DBGTI(SS_DBG_SMPC, "[SMPC] SlaveSH2Pending wait loop end."); + } + } } ExecutingCommand = -1; diff -Nru mednafen-1.24.3+dfsg/src/ss/smpc.h mednafen-1.26.1+dfsg/src/ss/smpc.h --- mednafen-1.24.3+dfsg/src/ss/smpc.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/smpc.h 2020-11-10 06:04:17.000000000 +0000 @@ -55,7 +55,6 @@ }; void SMPC_Init(const uint8 area_code, const int32 master_clock) MDFN_COLD; -bool SMPC_IsSlaveOn(void); void SMPC_Reset(bool powering_up) MDFN_COLD; void SMPC_LoadNV(Stream* s) MDFN_COLD; void SMPC_SaveNV(Stream* s) MDFN_COLD; @@ -69,6 +68,7 @@ sscpu_timestamp_t SMPC_Update(sscpu_timestamp_t timestamp); void SMPC_ResetTS(void); +void SMPC_ProcessSlaveOffOn(void); int32 SMPC_StartFrame(EmulateSpecStruct* espec); void SMPC_EndFrame(EmulateSpecStruct* espec, sscpu_timestamp_t timestamp); void SMPC_TransformInput(void); diff -Nru mednafen-1.24.3+dfsg/src/ss/sound.cpp mednafen-1.26.1+dfsg/src/ss/sound.cpp --- mednafen-1.24.3+dfsg/src/ss/sound.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sound.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -132,13 +132,19 @@ ne16_wbo_be(SCSP.GetRAMPtr(), A & 0x7FFFF, V); } -void SOUND_ResetTS(void) +static INLINE void ResetTS_68K(void) { next_scsp_time -= SoundCPU.timestamp; run_until_time -= (int64)SoundCPU.timestamp << 32; SoundCPU.timestamp = 0; +} - lastts = 0; +void SOUND_AdjustTS(const int32 delta) +{ + ResetTS_68K(); + // + // + lastts += delta; } void SOUND_Reset(bool powering_up) @@ -375,10 +381,13 @@ template static MDFN_FASTCALL void SoundCPU_BusWrite(uint32 A, T V) { + SoundCPU.timestamp += 2; + if(MDFN_UNLIKELY(SoundCPU.timestamp >= next_scsp_time)) RunSCSP(); SoundCPU.timestamp += 2; + SCSP.RW(A & 0x1FFFFF, V); SoundCPU.timestamp += 2; } diff -Nru mednafen-1.24.3+dfsg/src/ss/sound.h mednafen-1.26.1+dfsg/src/ss/sound.h --- mednafen-1.24.3+dfsg/src/ss/sound.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/sound.h 2020-11-10 06:04:17.000000000 +0000 @@ -34,7 +34,7 @@ void SOUND_SetClockRatio(uint32 ratio); // Ratio between SH-2 clock and 68K clock (sound clock / 2) sscpu_timestamp_t SOUND_Update(sscpu_timestamp_t timestamp); -void SOUND_ResetTS(void); +void SOUND_AdjustTS(const int32 delta); void SOUND_StartFrame(double rate, uint32 quality); int32 SOUND_FlushOutput(int16* SoundBuf, const int32 SoundBufMaxSize, const bool reverse); void SOUND_StateAction(StateMem* sm, const unsigned load, const bool data_only) MDFN_COLD; diff -Nru mednafen-1.24.3+dfsg/src/ss/ss.cpp mednafen-1.26.1+dfsg/src/ss/ss.cpp --- mednafen-1.24.3+dfsg/src/ss/ss.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/ss.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* ss.cpp - Saturn Core Emulation and Support Functions -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -37,6 +37,11 @@ #include +#if defined(HAVE_SSE2_INTRINSICS) + #include + #include +#endif + using namespace Mednafen; MDFN_HIDE extern MDFNGI EmulatedSS; @@ -60,6 +65,30 @@ #ifdef MDFN_ENABLE_DEV_BUILD uint32 ss_dbg_mask; static std::bitset<0x200> BWMIgnoreAddr[2]; // 0=read, 1=write + +void SS_DBG(uint32 which, const char* format, ...) +{ + if(MDFN_LIKELY(!(ss_dbg_mask & which))) + return; + // + va_list ap; + va_start(ap, format); + trio_vprintf(format, ap); + va_end(ap); +} + +void SS_DBGTI(uint32 which, const char* format, ...) +{ + if(MDFN_LIKELY(!(ss_dbg_mask & which))) + return; + // + va_list ap; + va_start(ap, format); + trio_vprintf(format, ap); + va_end(ap); + // + trio_printf(" @Line=0x%03x, HPos=0x%03x, memts=%d\n", VDP2::PeekLine(), VDP2::PeekHPos(), SH7095_mem_timestamp); +} #endif uint32 ss_horrible_hacks; @@ -76,7 +105,6 @@ static MDFN_COLD void BackupBackupRAM(void); static MDFN_COLD void BackupCartNV(void); - #include "sh7095.h" static uint8 SCU_MSH2VectorFetch(void); @@ -107,12 +135,7 @@ static int ActiveCartType; // Used in save states. static std::vector *cdifs = NULL; static std::bitset<1U << (27 - SH7095_EXT_MAP_GRAN_BITS)> FMIsWriteable; - -template -static void INLINE SH7095_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax); - -template -static T INLINE SH7095_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax); +static uint16 fmap_dummy[(1U << SH7095_EXT_MAP_GRAN_BITS) / sizeof(uint16)]; /* SH-2 external bus address map: @@ -158,6 +181,14 @@ // if(A >= 0x00200000 && A <= 0x003FFFFF) { + if(A & 0x100000) + { + if(IsWrite) + SS_DBG(SS_DBG_WARNING, "[RAM] %zu-byte write of 0x%08x to mirrored address 0x%08x\n", sizeof(T), DB >> (((A & 1) ^ (2 - sizeof(T))) << 3), A); + else + SS_DBG(SS_DBG_WARNING, "[RAM] %zu-byte read from mirrored address 0x%08x\n", sizeof(T), A); + } + if(IsWrite) ne16_wbo_be(WorkRAML, A & 0xFFFFF, DB >> (((A & 1) ^ (2 - sizeof(T))) << 3)); else @@ -166,7 +197,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 7; else - *SH2DMAHax -= 7; + *SH2DMAHax += 7; return; } @@ -179,7 +210,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; if(!IsWrite) DB = (DB & 0xFFFF0000) | ne16_rbo_be(BIOSROM, A & 0x7FFFE); @@ -219,7 +250,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; if(IsWrite) { @@ -243,20 +274,16 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 8; else - *SH2DMAHax -= 8; + *SH2DMAHax += 8; - //printf("FT FRT%08x %zu %08x %04x %d %d\n", A, sizeof(T), A, V, SMPC_IsSlaveOn(), SH7095_mem_timestamp); if(IsWrite) { if(sizeof(T) != 1) { const unsigned c = ((A >> 23) & 1) ^ 1; - if(!c || SMPC_IsSlaveOn()) - { - CPU[c].SetFTI(true); - CPU[c].SetFTI(false); - } + CPU[c].SetFTI(true); + CPU[c].SetFTI(false); } } return; @@ -268,7 +295,7 @@ if(!SH2DMAHax) SH7095_mem_timestamp += 4; else - *SH2DMAHax -= 4; + *SH2DMAHax += 4; if(IsWrite) SS_DBG(SS_DBG_WARNING, "[SH2 BUS] Unknown %zu-byte write of 0x%08x to 0x%08x\n", sizeof(T), DB >> (((A & 1) ^ (2 - sizeof(T))) << 3), A); @@ -277,38 +304,9 @@ } template -static INLINE void BusRW_DB_CS123(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) +static INLINE void BusRW_DB_CS12(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) { // - // CS3: High work RAM/SDRAM, 0x06000000 ... 0x07FFFFFF - // - if(A >= 0x06000000) - { - if(!IsWrite || sizeof(T) == 4) - ne16_rwbo_be(WorkRAMH, A & 0xFFFFC, &DB); - else - ne16_wbo_be(WorkRAMH, A & 0xFFFFF, DB >> (((A & 3) ^ (4 - sizeof(T))) << 3)); - - if(!BurstHax) - { - if(!SH2DMAHax) - { - if(IsWrite) - { - SH7095_mem_timestamp = (SH7095_mem_timestamp + 4) &~ 3; - } - else - { - SH7095_mem_timestamp += 7; - } - } - else - *SH2DMAHax -= IsWrite ? 3 : 6; - } - return; - } - - // // CS1 and CS2: SCU // if(!IsWrite) @@ -317,90 +315,18 @@ SCU_FromSH2_BusRW_DB(A, &DB, SH2DMAHax); } -template -static void INLINE SH7095_BusWrite(uint32 A, T V, const bool BurstHax, int32* SH2DMAHax) -{ - uint32 DB = SH7095_DB; - - if(A < 0x02000000) // CS0, configured as 16-bit - { - if(sizeof(T) == 4) - { - // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. - //if(!SH2DMAHax) - // SH7095_BusLock++; - - DB = (DB & 0xFFFF0000) | (V >> 16); - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - - DB = (DB & 0xFFFF0000) | (uint16)V; - BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); - - //if(!SH2DMAHax) - // SH7095_BusLock--; - } - else - { - const uint32 shift = ((A & 1) ^ (2 - sizeof(T))) << 3; - const uint32 mask = (0xFFFF >> ((2 - sizeof(T)) * 8)) << shift; - - DB = (DB & ~mask) | (V << shift); - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - } - } - else // CS1, CS2, CS3; 32-bit - { - const uint32 shift = ((A & 3) ^ (4 - sizeof(T))) << 3; - const uint32 mask = (0xFFFFFFFF >> ((4 - sizeof(T)) * 8)) << shift; - - DB = (DB & ~mask) | (V << shift); // //ne32_wbo_be(&DB, A & 0x3, V); - BusRW_DB_CS123(A, DB, BurstHax, SH2DMAHax); - } - - SH7095_DB = DB; -} - -template -static T INLINE SH7095_BusRead(uint32 A, const bool BurstHax, int32* SH2DMAHax) +template +static INLINE void BusRW_DB_CS3(const uint32 A, uint32& DB, const bool BurstHax, int32* SH2DMAHax) { - uint32 DB = SH7095_DB; - T ret; - - if(A < 0x02000000) // CS0, configured as 16-bit - { - if(sizeof(T) == 4) - { - // TODO/FIXME: Don't allow DMA transfers to occur between the two 16-bit accesses. - //if(!SH2DMAHax) - // SH7095_BusLock++; - - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - ret = DB << 16; - - BusRW_DB_CS0(A | 2, DB, BurstHax, SH2DMAHax); - ret |= (uint16)DB; - - //if(!SH2DMAHax) - // SH7095_BusLock--; - } - else - { - BusRW_DB_CS0(A, DB, BurstHax, SH2DMAHax); - ret = DB >> (((A & 1) ^ (2 - sizeof(T))) << 3); - } - } - else // CS1, CS2, CS3; 32-bit - { - BusRW_DB_CS123(A, DB, BurstHax, SH2DMAHax); - ret = DB >> (((A & 3) ^ (4 - sizeof(T))) << 3); - - // SDRAM leaves data bus in a weird state after read... - //if(A >= 0x06000000) - // DB = 0; - } - - SH7095_DB = DB; - return ret; + // + // CS3: High work RAM/SDRAM, 0x06000000 ... 0x07FFFFFF + // + // Timing is handled in BSC_BusWrite() and BSC_BusRead() in sh7095.inc + // + if(!IsWrite || sizeof(T) == 4) + ne16_rwbo_be(WorkRAMH, A & 0xFFFFC, &DB); + else + ne16_wbo_be(WorkRAMH, A & 0xFFFFF, DB >> (((A & 3) ^ (4 - sizeof(T))) << 3)); } // @@ -427,7 +353,7 @@ { for(uint32 Abase = 0x00000000; Abase < 0x20000000; Abase += 0x08000000) { - CPU[c].Write_UpdateCache(Abase + A, V); + CPU[c].Cache_WriteUpdate(Abase + A, V); } } } @@ -456,8 +382,6 @@ } } -static uint16 fmap_dummy[(1U << SH7095_EXT_MAP_GRAN_BITS) / sizeof(uint16)]; - static MDFN_COLD void InitFastMemMap(void) { for(unsigned i = 0; i < sizeof(fmap_dummy) / sizeof(fmap_dummy[0]); i++) @@ -491,7 +415,19 @@ #include "sh7095.inc" -static bool Running; +// +// Running is: +// 0 at end of (emulation) frame +// +// 1 during normal execution +// +// -1 when we need to temporarily break out of the execution loop to +// e.g. handle turning the slave CPU on or off, which we can't +// safely do from an event handler due to the event handler +// potentially being called from deep within the memory read/write +// functions. +// +static int Running; event_list_entry events[SS_EVENT__COUNT]; static sscpu_timestamp_t next_event_ts; @@ -569,6 +505,14 @@ void SS_SetEventNT(event_list_entry* e, const sscpu_timestamp_t next_timestamp) { +#ifdef MDFN_ENABLE_DEV_BUILD + if(next_timestamp < SS_EVENT_DISABLED_TS && (next_timestamp < 0 || next_timestamp >= 0x40000000)) + { + fprintf(stderr, "Event %u, bad next timestamp 0x%08x\n", (unsigned)(e - events), next_timestamp); + abort(); + } +#endif + if(next_timestamp < e->event_time) { event_list_entry *fe = e; @@ -612,16 +556,14 @@ e->event_time = next_timestamp; } - next_event_ts = (Running ? events[SS_EVENT__SYNFIRST].next->event_time : 0); + next_event_ts = ((Running > 0) ? events[SS_EVENT__SYNFIRST].next->event_time : 0); } // Called from debug.cpp too. void ForceEventUpdates(const sscpu_timestamp_t timestamp) { - CPU[0].ForceInternalEventUpdates(); - - if(SMPC_IsSlaveOn()) - CPU[1].ForceInternalEventUpdates(); + for(unsigned c = 0; c < 2; c++) + CPU[c].ForceInternalEventUpdates(); for(unsigned evnum = SS_EVENT__SYNFIRST + 1; evnum < SS_EVENT__SYNLAST; evnum++) { @@ -629,7 +571,7 @@ SS_SetEventNT(&events[evnum], events[evnum].event_handler(timestamp)); } - next_event_ts = (Running ? events[SS_EVENT__SYNFIRST].next->event_time : 0); + next_event_ts = ((Running > 0) ? events[SS_EVENT__SYNFIRST].next->event_time : 0); } static INLINE bool EventHandler(const sscpu_timestamp_t timestamp) @@ -656,7 +598,7 @@ SS_SetEventNT(e, nt); } - return(Running); + return Running > 0; } static void NO_INLINE MDFN_HOT CheckEventsByMemTS_Sub(void) @@ -673,6 +615,15 @@ } } +void SS_RequestEHLExit(void) +{ + if(Running) + { + Running = -1; + next_event_ts = 0; + } +} + void SS_RequestMLExit(void) { Running = 0; @@ -680,48 +631,79 @@ } #pragma GCC push_options -#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 5 - // gcc 5.3.0 and 6.1.0 produce some braindead code for the big switch() statement at -Os. - #pragma GCC optimize("Os,no-unroll-loops,no-peel-loops,no-crossjumping") -#else - #pragma GCC optimize("O2,no-unroll-loops,no-peel-loops,no-crossjumping") -#endif +#pragma GCC optimize("O2,no-unroll-loops,no-peel-loops,no-crossjumping") template -static int32 NO_INLINE MDFN_HOT RunLoop(EmulateSpecStruct* espec) +static INLINE int32 RunLoop_INLINE(EmulateSpecStruct* espec) { sscpu_timestamp_t eff_ts = 0; - //printf("%d %d\n", SH7095_mem_timestamp, CPU[0].timestamp); + for(unsigned c = 0; c < 2; c++) + CPU[c].SetDebugMode(DebugMode); + //printf("%d %d\n", SH7095_mem_timestamp, CPU[0].timestamp); do { + SMPC_ProcessSlaveOffOn(); + // + // + Running = true; + ForceEventUpdates(eff_ts); do { - if(DebugMode) - DBG_CPUHandler<0>(eff_ts); - - CPU[0].Step<0, EmulateICache, DebugMode>(); - CPU[0].DMA_BusTimingKludge(); - - while(MDFN_LIKELY(CPU[0].timestamp > CPU[1].timestamp)) + do { if(DebugMode) - DBG_CPUHandler<1>(eff_ts); + { + DBG_SetEffTS(eff_ts); + DBG_CPUHandler<0>(); + } - CPU[1].Step<1, EmulateICache, DebugMode>(); - } + CPU[0].Step<0, EmulateICache, DebugMode>(); + CPU[0].DMA_BusTimingKludge(); - eff_ts = CPU[0].timestamp; - if(SH7095_mem_timestamp > eff_ts) - eff_ts = SH7095_mem_timestamp; - else - SH7095_mem_timestamp = eff_ts; - } while(MDFN_LIKELY(eff_ts < next_event_ts)); - } while(MDFN_LIKELY(EventHandler(eff_ts))); + if(EmulateICache) + { + if(DebugMode) + CPU[1].RunSlaveUntil_Debug(CPU[0].timestamp); + else + CPU[1].RunSlaveUntil(CPU[0].timestamp); + } + else + { + while(MDFN_LIKELY(CPU[0].timestamp > CPU[1].timestamp)) + { + if(DebugMode) + DBG_CPUHandler<1>(); + + CPU[1].Step<1, false, DebugMode>(); + } + } + + eff_ts = CPU[0].timestamp; + if(SH7095_mem_timestamp > eff_ts) + eff_ts = SH7095_mem_timestamp; + else + SH7095_mem_timestamp = eff_ts; + } while(MDFN_LIKELY(eff_ts < next_event_ts)); + } while(MDFN_LIKELY(EventHandler(eff_ts))); + } while(MDFN_LIKELY(Running != 0)); //printf(" End: %d %d -- %d\n", SH7095_mem_timestamp, CPU[0].timestamp, eff_ts); return eff_ts; } + +template +static NO_INLINE MDFN_HOT int32 RunLoop(EmulateSpecStruct* espec) +{ + return RunLoop_INLINE(espec); +} + +template +static NO_INLINE MDFN_COLD int32 RunLoop_Debug(EmulateSpecStruct* espec) +{ + return RunLoop_INLINE(espec); +} + #pragma GCC pop_options // Must not be called within an event or read/write handler. @@ -819,23 +801,20 @@ // // // - Running = true; // Set before ForceEventUpdates() - ForceEventUpdates(0); - #ifdef WANT_DEBUGGER - #define RLTDAT true + #define RLTDAT(eic) RunLoop_Debug #else - #define RLTDAT false + #define RLTDAT(eic) RunLoop #endif static int32 (*const rltab[2][2])(EmulateSpecStruct*) = { - // DebugMode=false DebugMode=true - { RunLoop, RunLoop }, // EmulateICache=false - { RunLoop, RunLoop }, // EmulateICache=true + //DebugMode=false DebugMode=true + { RunLoop, RLTDAT(false) }, // EmulateICache=false + { RunLoop, RLTDAT(true) }, // EmulateICache=true }; #undef RLTDAT end_ts = rltab[NeedEmuICache][DBG_NeedCPUHooks()](espec); - + assert(end_ts >= 0); ForceEventUpdates(end_ts); // SMPC_EndFrame(espec, end_ts); @@ -845,7 +824,7 @@ RebaseTS(end_ts); CDB_ResetTS(); - SOUND_ResetTS(); + SOUND_AdjustTS(-end_ts); VDP1::AdjustTS(-end_ts); VDP2::AdjustTS(-end_ts); SMPC_ResetTS(); @@ -853,14 +832,13 @@ CART_AdjustTS(-end_ts); UpdateInputLastBigTS -= (int64)end_ts * cur_clock_div * 1000 * 1000; + // + SH7095_mem_timestamp -= end_ts; // Update before CPU[n].AdjustTS() + // + for(unsigned c = 0; c < 2; c++) + CPU[c].AdjustTS(-end_ts); - if(!(SH7095_mem_timestamp & 0x40000000)) // or maybe >= 0 instead? - SH7095_mem_timestamp -= end_ts; - - CPU[0].AdjustTS(-end_ts); - - if(SMPC_IsSlaveOn()) - CPU[1].AdjustTS(-end_ts); + //printf("B=% 7d M=% 7d S=% 7d\n", SH7095_mem_timestamp, CPU[0].timestamp, CPU[1].timestamp); // // // @@ -946,7 +924,7 @@ return true; } -static INLINE void CalcGameID(uint8* id_out16, uint8* fd_id_out16, char* sgid) +static INLINE void CalcGameID(uint8* id_out16, uint8* fd_id_out16, char* sgid, char* sgname, char* sgarea) { std::unique_ptr buf(new uint8[2048]); md5_context mctx; @@ -990,6 +968,15 @@ *tmp = 0; } while(tmp-- != sgid && (signed char)*tmp <= 0x20); } + memcpy(sgname, &buf[0x60], 0x70); + sgname[0x70] = 0; + MDFN_zapctrlchars(sgname); + MDFN_trim(sgname); + + memcpy(sgarea, &buf[0x40], 0x10); + sgarea[0x10] = 0; + MDFN_zapctrlchars(sgarea); + MDFN_trim(sgarea); } mctx.update(&buf[0], 2048); @@ -1193,7 +1180,7 @@ } // if(horrible_hacks) - MDFN_printf(_("Horrible hacks: 0x%08x\n"), horrible_hacks); + MDFN_printf(_("Horrible hacks: %s\n"), DB_GetHHDescriptions(horrible_hacks).c_str()); // { MDFN_printf(_("Region: 0x%01x\n"), smpc_area); @@ -1232,7 +1219,7 @@ NeedEmuICache = (cpucache_emumode == CPUCACHE_EMUMODE_FULL); for(unsigned c = 0; c < 2; c++) { - CPU[c].Init(cpucache_emumode == CPUCACHE_EMUMODE_DATA_CB); + CPU[c].Init((cpucache_emumode == CPUCACHE_EMUMODE_FULL), (cpucache_emumode == CPUCACHE_EMUMODE_DATA_CB)); CPU[c].SetMD5((bool)c); } SH7095_mem_timestamp = 0; @@ -1629,17 +1616,21 @@ unsigned horrible_hacks; uint8 fd_id[16]; char sgid[16 + 1] = { 0 }; + char sgname[0x70 + 1] = { 0 }; + char sgarea[0x10 + 1] = { 0 }; cdifs = CDInterfaces; - CalcGameID(MDFNGameInfo->MD5, fd_id, sgid); + CalcGameID(MDFNGameInfo->MD5, fd_id, sgid, sgname, sgarea); MDFN_printf("SGID: %s\n", sgid); + MDFN_printf("SGNAME: %s\n", sgname); + MDFN_printf("SGAREA: %s\n", sgarea); region = region_default; cart_type = MDFN_GetSettingI("ss.cart.auto_default"); cpucache_emumode = CPUCACHE_EMUMODE_DATA; DetectRegion(®ion); - DB_Lookup(nullptr, sgid, fd_id, ®ion, &cart_type, &cpucache_emumode); + DB_Lookup(nullptr, sgid, sgname, sgarea, fd_id, ®ion, &cart_type, &cpucache_emumode); horrible_hacks = DB_LookupHH(sgid, fd_id); // if(!MDFN_GetSettingB("ss.region_autodetect")) @@ -1790,7 +1781,7 @@ enum : size_t { eventcopy_first = SS_EVENT__SYNFIRST + 1 }; enum : size_t { eventcopy_bound = SS_EVENT__SYNLAST }; - bool Restore(void); + bool Restore(const unsigned state_version); void Save(void); int32 event_times[eventcopy_bound - eventcopy_first]; @@ -1810,7 +1801,7 @@ } } -INLINE bool EventsPacker::Restore(void) +INLINE bool EventsPacker::Restore(const unsigned state_version) { bool used[SS_EVENT__COUNT] = { 0 }; event_list_entry* evt = &events[SS_EVENT__SYNFIRST]; @@ -1819,6 +1810,11 @@ int32 et = event_times[i - eventcopy_first]; uint8 eo = event_order[i - eventcopy_first]; + if(state_version < 0x00102600 && et >= 0x40000000) + { + et = SS_EVENT_DISABLED_TS; + } + if(eo < eventcopy_first || eo >= eventcopy_bound) return false; @@ -1880,6 +1876,9 @@ sha256_digest sr_dig = BIOS_SHA256; int cart_type = ActiveCartType; + if(DBG_InSlaveStep()) + throw MDFN_Error(0, _("Slave step mode is incompatible with save states.")); + SFORMAT SRDStateRegs[] = { SFPTR8(sr_dig.data(), sr_dig.size()), @@ -1953,19 +1952,14 @@ { BackupRAM_Dirty = true; - if(!ep.Restore()) + if(!ep.Restore(load)) { printf("Bad state events data."); InitEvents(); } - if(NeedEmuICache && !RecordedNeedEmuICache) - { - //printf("NeedEmuICache=%d, RecordedNeedEmuICache=%d\n", NeedEmuICache, RecordedNeedEmuICache); - - for(size_t i = 0; i < 2; i++) - CPU[i].FixupICacheModeState(); // Only call it after all RAM has been loaded from the save state. - } + CPU[0].PostStateLoad(load, RecordedNeedEmuICache, NeedEmuICache); + CPU[1].PostStateLoad(load, RecordedNeedEmuICache, NeedEmuICache); } } @@ -1987,7 +1981,12 @@ { switch(cmd) { - case MDFN_MSC_POWER: SS_Reset(true); break; + case MDFN_MSC_POWER: + if(DBG_InSlaveStep()) + MDFN_Notify(MDFN_NOTICE_ERROR, _("Slave step mode is incompatible with hard resets.")); + else + SS_Reset(true); + break; // MDFN_MSC_RESET is not handled here; special reset button handling in smpc.cpp. } } @@ -2073,6 +2072,9 @@ { "sh2", SS_DBG_SH2, gettext_noop("SH-2") }, { "sh2_regw", SS_DBG_SH2_REGW, gettext_noop("SH-2 (peripherals) register writes") }, { "sh2_cache", SS_DBG_SH2_CACHE, gettext_noop("SH-2 cache") }, + { "sh2_cache_noisy",SS_DBG_SH2_CACHE_NOISY, gettext_noop("SH-2 cache, with assoc purge/addr/data array logging") }, + { "sh2_except",SS_DBG_SH2_EXCEPT, gettext_noop("SH-2 exceptions and interrupts") }, + { "sh2_dmarace",SS_DBG_SH2_DMARACE, gettext_noop("SH-2 DMA/CPU RW races") }, { "scu", SS_DBG_SCU, gettext_noop("SCU") }, { "scu_regw", SS_DBG_SCU_REGW, gettext_noop("SCU register writes") }, @@ -2089,6 +2091,7 @@ { "vdp1_regw", SS_DBG_VDP1_REGW, gettext_noop("VDP1 register writes") }, { "vdp1_vramw",SS_DBG_VDP1_VRAMW, gettext_noop("VDP1 VRAM writes") }, { "vdp1_fbw", SS_DBG_VDP1_FBW, gettext_noop("VDP1 FB writes") }, + { "vdp1_race", SS_DBG_VDP1_RACE, gettext_noop("VDP1 draw/VRAM write races") }, { "vdp2", SS_DBG_VDP2, gettext_noop("VDP2") }, { "vdp2_regw", SS_DBG_VDP2_REGW, gettext_noop("VDP2 register writes") }, diff -Nru mednafen-1.24.3+dfsg/src/ss/ssf.cpp mednafen-1.26.1+dfsg/src/ss/ssf.cpp --- mednafen-1.24.3+dfsg/src/ss/ssf.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/ssf.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -52,11 +52,12 @@ SOUND_StartFrame(espec->SoundRate / espec->soundmultiplier, MDFN_GetSettingUI("ssfplay.resamp_quality")); espec->soundmultiplier = 1; - SOUND_Update(588 * 512); - espec->MasterCycles = 588 * 256; + const int32 target_timestamp = 588 * 512; + SOUND_Update(target_timestamp); + espec->MasterCycles = target_timestamp >> 1; espec->SoundBufSize = SOUND_FlushOutput(espec->SoundBuf, espec->SoundBufMaxSize, espec->NeedSoundReverse); espec->NeedSoundReverse = false; - SOUND_ResetTS(); + SOUND_AdjustTS(-target_timestamp); if(!espec->skip) { @@ -65,7 +66,7 @@ } } -static void Cleanup(void) +static MDFN_COLD void Cleanup(void) { if(ssf_loader) { @@ -77,7 +78,7 @@ } -static bool TestMagic(GameFile* gf) +static MDFN_COLD bool TestMagic(GameFile* gf) { if(SSFLoader::TestMagic(gf->stream)) return true; @@ -85,7 +86,7 @@ return false; } -static void Reset(void) +static MDFN_COLD void Reset(void) { SOUND_Reset(true); //{ @@ -99,7 +100,7 @@ } } -static void Load(GameFile* gf) +static MDFN_COLD void Load(GameFile* gf) { try { @@ -124,12 +125,12 @@ } } -static void CloseGame(void) +static MDFN_COLD void CloseGame(void) { Cleanup(); } -static void DoSimpleCommand(int cmd) +static MDFN_COLD void DoSimpleCommand(int cmd) { switch(cmd) { diff -Nru mednafen-1.24.3+dfsg/src/ss/ss.h mednafen-1.26.1+dfsg/src/ss/ss.h --- mednafen-1.24.3+dfsg/src/ss/ss.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/ss.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* ss.h: -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -32,38 +32,43 @@ { enum { - SS_DBG_ERROR = (1U << 0), - SS_DBG_WARNING = (1U << 1), + SS_DBG_ERROR = (1U << 0), + SS_DBG_WARNING = (1U << 1), - SS_DBG_M68K = (1U << 2), + SS_DBG_M68K = (1U << 2), - SS_DBG_SH2 = (1U << 4), - SS_DBG_SH2_REGW = (1U << 5), - SS_DBG_SH2_CACHE = (1U << 6), - - SS_DBG_SCU = (1U << 8), - SS_DBG_SCU_REGW = (1U << 9), - SS_DBG_SCU_INT = (1U << 10), - SS_DBG_SCU_DSP = (1U << 11), - - SS_DBG_SMPC = (1U << 12), - SS_DBG_SMPC_REGW = (1U << 13), - - SS_DBG_BIOS = (1U << 15), - - SS_DBG_CDB = (1U << 16), - SS_DBG_CDB_REGW = (1U << 17), - - SS_DBG_VDP1 = (1U << 20), - SS_DBG_VDP1_REGW = (1U << 21), - SS_DBG_VDP1_VRAMW= (1U << 22), - SS_DBG_VDP1_FBW = (1U << 23), + SS_DBG_SH2 = (1U << 3), + SS_DBG_SH2_REGW = (1U << 4), + SS_DBG_SH2_CACHE = (1U << 5), + SS_DBG_SH2_CACHE_NOISY = (1U << 6), + SS_DBG_SH2_EXCEPT= (1U << 7), + SS_DBG_SH2_DMARACE=(1U << 8), + + SS_DBG_SCU = (1U << 9), + SS_DBG_SCU_REGW = (1U << 10), + SS_DBG_SCU_INT = (1U << 11), + //SS_DBG_SCU_TIMER = (1U << 12), + SS_DBG_SCU_DSP = (1U << 13), + + SS_DBG_SMPC = (1U << 14), + SS_DBG_SMPC_REGW = (1U << 15), + + SS_DBG_BIOS = (1U << 16), + + SS_DBG_CDB = (1U << 17), + SS_DBG_CDB_REGW = (1U << 18), + + SS_DBG_VDP1 = (1U << 19), + SS_DBG_VDP1_REGW = (1U << 20), + SS_DBG_VDP1_VRAMW= (1U << 21), + SS_DBG_VDP1_FBW = (1U << 22), + SS_DBG_VDP1_RACE = (1U << 23), SS_DBG_VDP2 = (1U << 24), SS_DBG_VDP2_REGW = (1U << 25), - SS_DBG_SCSP = (1U << 28), - SS_DBG_SCSP_REGW = (1U << 29), + SS_DBG_SCSP = (1U << 26), + SS_DBG_SCSP_REGW = (1U << 27), }; #ifdef MDFN_ENABLE_DEV_BUILD MDFN_HIDE extern uint32 ss_dbg_mask; @@ -83,9 +88,13 @@ MDFN_HIDE extern uint32 ss_horrible_hacks; #endif - static INLINE void SS_DBG_Dummy(const char* format, ...) { } - #define SS_DBG(which, ...) ((MDFN_UNLIKELY(ss_dbg_mask & (which))) ? (void)trio_printf(__VA_ARGS__) : SS_DBG_Dummy(__VA_ARGS__)) - #define SS_DBGTI(which, ...) ((MDFN_UNLIKELY(ss_dbg_mask & (which))) ? ((void)trio_printf(__VA_ARGS__), (void)trio_printf(" @Line=0x%03x, HPos=0x%03x, memts=%d\n", VDP2::PeekLine(), VDP2::PeekHPos(), SH7095_mem_timestamp)) : SS_DBG_Dummy(__VA_ARGS__)) +#ifdef MDFN_ENABLE_DEV_BUILD + void SS_DBG(uint32 which, const char* format, ...); + void SS_DBGTI(uint32 which, const char* format, ...); +#else + static INLINE void SS_DBG(uint32 which, const char* format, ...) { } + static INLINE void SS_DBGTI(uint32 which, const char* format, ...) { } +#endif template static void SS_DBG_Wrap(const char* format, ...) noexcept @@ -111,6 +120,7 @@ MDFN_HIDE extern int32 SH7095_mem_timestamp; void SS_RequestMLExit(void); + void SS_RequestEHLExit(void); void ForceEventUpdates(const sscpu_timestamp_t timestamp); enum @@ -152,14 +162,15 @@ MDFN_HIDE extern event_list_entry events[SS_EVENT__COUNT]; - #define SS_EVENT_DISABLED_TS 0x40000000 + enum : sscpu_timestamp_t { SS_EVENT_DISABLED_TS = 0x7FFFFFFF }; + void SS_SetEventNT(event_list_entry* e, const sscpu_timestamp_t next_timestamp); // Call from init code, or power/reset code, as appropriate. // (length is in units of bytes, not 16-bit units) // // is_writeable is mostly for cheat stuff. - void SS_SetPhysMemMap(uint32 Astart, uint32 Aend, uint16* ptr, uint32 length, bool is_writeable = false); + void SS_SetPhysMemMap(uint32 Astart, uint32 Aend, uint16* ptr, uint32 length, bool is_writeable = false) MDFN_COLD; void SS_Reset(bool powering_up) MDFN_COLD; } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp1_common.h mednafen-1.26.1+dfsg/src/ss/vdp1_common.h --- mednafen-1.24.3+dfsg/src/ss/vdp1_common.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp1_common.h 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_common.h: -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,17 +28,24 @@ namespace VDP1 { +enum : int { VDP1_SuspendResumeThreshold = 1000 }; +static_assert(VDP1_SuspendResumeThreshold >= 1, "out of acceptable range"); + int32 CMD_NormalSprite(const uint16*); int32 CMD_ScaledSprite(const uint16*); int32 CMD_DistortedSprite(const uint16*); +int32 RESUME_Sprite(const uint16*); int32 CMD_Polygon(const uint16*); +int32 RESUME_Polygon(const uint16*); + int32 CMD_Polyline(const uint16*); int32 CMD_Line(const uint16*); +int32 RESUME_Line(const uint16*); MDFN_HIDE extern uint16 VRAM[0x40000]; MDFN_HIDE extern uint16 FB[2][0x20000]; -MDFN_HIDE extern bool FBDrawWhich; +MDFN_HIDE extern uint16* FBDrawWhichPtr; MDFN_HIDE extern int32 SysClipX, SysClipY; MDFN_HIDE extern int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; @@ -200,21 +207,22 @@ // // // -template +template static INLINE int32 PlotPixel(int32 x, int32 y, uint16 pix, bool transparent, GourauderTheTerrible* g) { + //printf("%d %d %d %d %d %d %d\n", bpp8, die, MeshEn, MSBOn, GouraudEn, HalfFGEn, HalfBGEn); static_assert(!MSBOn || (!HalfFGEn && !HalfBGEn), "Table error; sub-optimal template arguments."); int32 ret = 0; uint16* fbyptr; if(die) { - fbyptr = &FB[FBDrawWhich][((y >> 1) & 0xFF) << 9]; + fbyptr = &FBDrawWhichPtr[((y >> 1) & 0xFF) << 9]; transparent |= ((y & 1) != (bool)(FBCR & FBCR_DIL)); } else { - fbyptr = &FB[FBDrawWhich][(y & 0xFF) << 9]; + fbyptr = &FBDrawWhichPtr[(y & 0xFF) << 9]; } if(MeshEn) @@ -259,14 +267,14 @@ { if(HalfFGEn) { - if(g) + if(GouraudEn) pix = g->Apply(pix); pix = ((pix + bg_pix) - ((pix ^ bg_pix) & 0x8421)) >> 1; } else { - if(g) + if(GouraudEn) pix = 0; else pix = ((bg_pix & 0x7BDE) >> 1) | (bg_pix & 0x8000); @@ -276,14 +284,14 @@ { if(HalfFGEn) { - if(g) + if(GouraudEn) pix = g->Apply(pix); else pix = pix; } else { - if(g) + if(GouraudEn) pix = 0; else pix = bg_pix; @@ -292,7 +300,7 @@ } else { - if(g) + if(GouraudEn) pix = g->Apply(pix); if(HalfFGEn) @@ -308,17 +316,6 @@ return ret; } - - -static INLINE void CheckUndefClipping(void) -{ - if(SysClipX < UserClipX1 || SysClipY < UserClipY1 || UserClipX0 > UserClipX1 || UserClipY0 > UserClipY1) - { - //SS_DBG(SS_DBG_WARNING, "[VDP1] Illegal clipping windows; Sys=%u:%u -- User=%u:%u - %u:%u\n", SysClipX, SysClipY, UserClipX0, UserClipY0, UserClipX1, UserClipY1); - } -} - - // // struct line_vertex @@ -328,336 +325,283 @@ int32 t; }; -struct line_data -{ - line_vertex p[2]; - bool PCD; - bool HSS; - uint16 color; - int32 ec_count; - uint32 (MDFN_FASTCALL *tffn)(uint32); - uint16 CLUT[0x10]; - uint32 cb_or; - uint32 tex_base; -}; - -MDFN_HIDE extern line_data LineSetup; - -template -static int32 DrawLine(void) +struct EdgeStepper { - const uint16 color = LineSetup.color; - line_vertex p0 = LineSetup.p[0]; - line_vertex p1 = LineSetup.p[1]; - int32 ret = 0; + void Setup(const bool gourauden, const line_vertex& p0, const line_vertex& p1, const int32 dmax); - if(!LineSetup.PCD) + template + INLINE void GetVertex(line_vertex* p) { - // TODO: - // Plain clipping treats system clip X as an unsigned 10-bit quantity... - // Pre-clipping treats system clip X as a signed 13-bit quantity... - // - bool clipped = false; - bool swapped = false; + p->x = x; + p->y = y; - ret += 4; + if(gourauden) + p->g = g.Current(); + } - if(UserClipEn) + template + INLINE void Step(void) + { + d_error += d_error_inc; + if((int32)d_error >= d_error_cmp) { - if(UserClipMode) - { - // not correct: clipped |= (p0.x >= UserClipX0) & (p1.x <= UserClipX1) & (p0.y >= UserClipY0) & (p1.y <= UserClipY1); - clipped |= (p0.x < 0) & (p1.x < 0); - clipped |= (p0.x > SysClipX) & (p1.x > SysClipX); - clipped |= (p0.y < 0) & (p1.y < 0); - clipped |= (p0.y > SysClipY) & (p1.y > SysClipY); + d_error += d_error_adj; - swapped = (p0.y == p1.y) & ((p0.x < 0) | (p0.x > SysClipX)); - } - else + x_error += x_error_inc; { - // Ignore system clipping WRT pre-clip for UserClipEn == 1 && UserClipMode == 0 - clipped |= (p0.x < UserClipX0) & (p1.x < UserClipX0); - clipped |= (p0.x > UserClipX1) & (p1.x > UserClipX1); - clipped |= (p0.y < UserClipY0) & (p1.y < UserClipY0); - clipped |= (p0.y > UserClipY1) & (p1.y > UserClipY1); + const uint32 x_mask = -((int32)x_error >= x_error_cmp); + x += x_inc & x_mask; + x_error += x_error_adj & x_mask; + } - swapped = (p0.y == p1.y) & ((p0.x < UserClipX0) | (p0.x > UserClipX1)); + y_error += y_error_inc; + { + const uint32 y_mask = -((int32)y_error >= y_error_cmp); + y += y_inc & y_mask; + y_error += y_error_adj & y_mask; } - } - else - { - clipped |= (p0.x < 0) & (p1.x < 0); - clipped |= (p0.x > SysClipX) & (p1.x > SysClipX); - clipped |= (p0.y < 0) & (p1.y < 0); - clipped |= (p0.y > SysClipY) & (p1.y > SysClipY); - swapped = (p0.y == p1.y) & ((p0.x < 0) | (p0.x > SysClipX)); + if(gourauden) + g.Step(); } + } - if(clipped) - return ret; + uint32 d_error, d_error_inc, d_error_adj; + int32 d_error_cmp; - if(swapped) - std::swap(p0, p1); - } + uint32 x, x_inc; + uint32 x_error, x_error_inc, x_error_adj; + int32 x_error_cmp; + + uint32 y, y_inc; + uint32 y_error, y_error_inc, y_error_adj; + int32 y_error_cmp; - ret += 8; + GourauderTheTerrible g; +}; + +struct line_inner_data +{ + uint32 xy; + uint32 error; + bool drawn_ac; + uint32 texel; // must be 32-bit + VileTex t; + GourauderTheTerrible g; // // - const int32 dx = p1.x - p0.x; - const int32 dy = p1.y - p0.y; - const int32 abs_dx = abs(dx); - const int32 abs_dy = abs(dy); - const int32 max_adx_ady = std::max(abs_dx, abs_dy); - int32 x_inc = (dx >= 0) ? 1 : -1; - int32 y_inc = (dy >= 0) ? 1 : -1; - int32 x = p0.x; - int32 y = p0.y; - bool drawn_ac = true; // Drawn all-clipped - uint32 texel; - GourauderTheTerrible g; - VileTex t; + // + int32 x_inc; + int32 y_inc; + uint32 aa_xy_inc; + uint32 term_xy; + + int32 error_cmp; + uint32 error_inc; + uint32 error_adj; - if(GouraudEn) - g.Setup(max_adx_ady + 1, p0.g, p1.g); + uint16 color; - if(Textured) - { - LineSetup.ec_count = 2; // Call before tffn() + bool abs_dy_gt_abs_dx; +}; - if(MDFN_UNLIKELY(max_adx_ady < abs(p1.t - p0.t) && LineSetup.HSS)) - { - LineSetup.ec_count = 0x7FFFFFFF; - t.Setup(max_adx_ady + 1, p0.t >> 1, p1.t >> 1, 2, (bool)(FBCR & FBCR_EOS)); - } - else - t.Setup(max_adx_ady + 1, p0.t, p1.t); +struct line_data +{ + line_vertex p[2]; + // + uint16 color; + int32 ec_count; + uint32 (MDFN_FASTCALL *tffn)(uint32); + uint16 CLUT[0x10]; + uint32 cb_or; + uint32 tex_base; +}; - texel = LineSetup.tffn(t.Current()); - } +MDFN_HIDE extern line_data LineData; + +MDFN_HIDE extern line_inner_data LineInnerData; + +struct prim_data +{ + EdgeStepper e[2]; + VileTex big_t; + uint32 tex_base; + int32 iter; + bool need_line_resume; +}; + +MDFN_HIDE extern prim_data PrimData; + +// Not sure the exact nature of this overhead, probably the combined effects of FBRAM and VRAM refresh, and something else. +// 8bpp mode timing is best-caseish, performance is different between horizontal and vertical lines. +// +// Must always return 0 if 'cycles' argument is zero. +static INLINE int32 AdjustDrawTiming(const int32 cycles) +{ + MDFN_HIDE extern uint32 DTACounter; + uint32 extra_cycles; + + DTACounter += cycles * ((TVMR & TVMR_8BPP) ? 24 : 48); + extra_cycles = DTACounter >> 8; + DTACounter &= 0xFF; + + return cycles + extra_cycles; +} - #define PSTART \ +bool SetupDrawLine(int32* const cycle_counter, const bool AA, const bool Textured, const uint16 mode); + +#define PSTART \ bool transparent; \ uint16 pix; \ \ if(Textured) \ { \ - /*ret++;*/ \ - while(t.IncPending()) \ + /*ret++;*/ \ + while(lid.t.IncPending()) \ { \ - int32 tx = t.DoPendingInc(); \ + int32 tx = lid.t.DoPendingInc(); \ \ - /*ret += (bool)t.IncPending();*/ \ + /*ret += (bool)t.IncPending();*/ \ \ - texel = LineSetup.tffn(tx); \ + lid.texel = LineData.tffn(tx); \ \ - if(!ECD && MDFN_UNLIKELY(LineSetup.ec_count <= 0)) \ + if(!ECD && MDFN_UNLIKELY(LineData.ec_count <= 0)) \ return ret; \ } \ - t.AddError(); \ + lid.t.AddError(); \ \ - transparent = (SPD && ECD) ? false : (texel >> 31); \ - pix = texel; \ + transparent = (SPD && ECD) ? false : (lid.texel >> 31);\ + pix = lid.texel; \ } \ else \ { \ - pix = color; \ + pix = lid.color; \ transparent = !SPD; \ } /* hmm, possible problem with AA and drawn_ac...*/ - #define PBODY(px, py) \ + #define PBODY(pxy) \ { \ - bool clipped = ((uint32)px > (uint32)SysClipX) | ((uint32)py > (uint32)SysClipY); \ + const uint32 px = (uint16)(pxy); \ + const uint32 py = (pxy) >> 16; \ + bool clipped; \ \ if(UserClipEn && !UserClipMode) \ - clipped |= (px < UserClipX0) | (px > UserClipX1) | (py < UserClipY0) | (py > UserClipY1); \ + clipped = ((uclipo1 - pxy) | (pxy - uclipo0)) & 0x80008000; \ + else \ + clipped = (clipo - pxy) & 0x80008000; \ \ - if(MDFN_UNLIKELY((clipped ^ drawn_ac) & clipped)) \ + if(MDFN_UNLIKELY((clipped ^ lid.drawn_ac) & clipped)) \ return ret; \ \ - drawn_ac &= clipped; \ + lid.drawn_ac &= clipped; \ \ - if(UserClipEn && UserClipMode) \ - clipped |= (px >= UserClipX0) & (px <= UserClipX1) & (py >= UserClipY0) & (py <= UserClipY1); \ + if(UserClipEn) \ + { \ + if(!UserClipMode) \ + clipped |= (clipo - pxy) & 0x80008000; \ + else \ + clipped |= !(((uclipo1 - pxy) | (pxy - uclipo0)) & 0x80008000); \ + } \ \ - ret += PlotPixel(px, py, pix, transparent | clipped, (GouraudEn ? &g : NULL)); \ + ret += PlotPixel(px, py, pix, transparent | clipped, (GouraudEn ? &lid.g : NULL)); \ } - #define PEND \ - { \ - if(GouraudEn) \ - g.Step(); \ - } + #define PEND \ + { \ + if(GouraudEn) \ + lid.g.Step(); \ + \ + if(MDFN_UNLIKELY(ret >= VDP1_SuspendResumeThreshold) && lid.xy != lid.term_xy) \ + { \ + LineInnerData.xy = lid.xy; \ + LineInnerData.error = lid.error; \ + LineInnerData.drawn_ac = lid.drawn_ac; \ + \ + if(Textured) \ + { \ + LineInnerData.texel = lid.texel; \ + LineInnerData.t = lid.t; \ + } \ + \ + if(GouraudEn) \ + LineInnerData.g = lid.g; \ + \ + *need_line_resume = true; \ + return ret; \ + } \ + } +template +static int32 DrawLine(bool* need_line_resume) +{ + //printf("Textured=%d, AA=%d, UserClipEn=%d, UserClipMode=%d, ECD=%d, SPD=%d, GouraudEn=%d\n", Textured, AA, UserClipEn, UserClipMode, ECD, SPD, GouraudEn); + const uint32 clipo = ((SysClipY & 0x3FF) << 16) | (SysClipX & 0x3FF); + const uint32 uclipo0 = ((UserClipY0 & 0x3FF) << 16) | (UserClipX0 & 0x3FF); + const uint32 uclipo1 = ((UserClipY1 & 0x3FF) << 16) | (UserClipX1 & 0x3FF); + line_inner_data lid = LineInnerData; + int32 ret = 0; - if(abs_dy > abs_dx) + if(lid.abs_dy_gt_abs_dx) + //if(abs_dy > abs_dx) { - int32 error_inc = 2 * abs_dx; - int32 error_adj = -(2 * abs_dy); - int32 error = abs_dy - (2 * abs_dy + (dy >= 0 || AA)); - - y -= y_inc; - do { PSTART; - y += y_inc; - if(error >= 0) + lid.xy = (lid.xy + lid.y_inc) & 0x07FF07FF; + lid.error += lid.error_inc; + if((int32)lid.error >= lid.error_cmp) { + lid.error += lid.error_adj; + if(AA) { - int32 aa_x = x, aa_y = y; - - if(y_inc < 0) - { - aa_x += (x_inc >> 31); - aa_y -= (x_inc >> 31); - } - else - { - aa_x -= (~x_inc >> 31); - aa_y += (~x_inc >> 31); - } + const uint32 aa_xy = (lid.xy + lid.aa_xy_inc) & 0x07FF07FF; - PBODY(aa_x, aa_y); + PBODY(aa_xy); } - error += error_adj; - x += x_inc; + lid.xy = (lid.xy + lid.x_inc) & 0x07FF07FF; } - error += error_inc; - PBODY(x, y); + PBODY(lid.xy); PEND; - } while(MDFN_LIKELY(y != p1.y)); + } while(MDFN_LIKELY(lid.xy != lid.term_xy)); } else { - int32 error_inc = 2 * abs_dy; - int32 error_adj = -(2 * abs_dx); - int32 error = abs_dx - (2 * abs_dx + (dx >= 0 || AA)); - - x -= x_inc; - do { PSTART; - x += x_inc; - if(error >= 0) + lid.xy = (lid.xy + lid.x_inc) & 0x07FF07FF; + lid.error += lid.error_inc; + if((int32)lid.error >= lid.error_cmp) { + lid.error += lid.error_adj; + if(AA) { - int32 aa_x = x, aa_y = y; - - if(x_inc < 0) - { - aa_x -= (~y_inc >> 31); - aa_y -= (~y_inc >> 31); - } - else - { - aa_x += (y_inc >> 31); - aa_y += (y_inc >> 31); - } + const uint32 aa_xy = (lid.xy + lid.aa_xy_inc) & 0x07FF07FF; - PBODY(aa_x, aa_y); + PBODY(aa_xy); } - error += error_adj; - y += y_inc; + lid.xy = (lid.xy + lid.y_inc) & 0x07FF07FF; } - error += error_inc; - PBODY(x, y); + PBODY(lid.xy); PEND; - } while(MDFN_LIKELY(x != p1.x)); + } while(MDFN_LIKELY(lid.xy != lid.term_xy)); } return ret; } -template -struct EdgeStepper -{ - INLINE void Setup(const line_vertex& p0, const line_vertex& p1, const int32 dmax) - { - int32 dx = p1.x - p0.x; - int32 dy = p1.y - p0.y; - int32 abs_dx = abs(dx); - int32 abs_dy = abs(dy); - int32 max_adxdy = std::max(abs_dx, abs_dy); - - x = p0.x; - x_inc = (dx >= 0) ? 1 : -1; - x_error = ~(max_adxdy - (2 * max_adxdy + (dy >= 0))); - x_error_inc = 2 * abs_dx; - x_error_adj = 2 * max_adxdy; - - y = p0.y; - y_inc = (dy >= 0) ? 1 : -1; - y_error = ~(max_adxdy - (2 * max_adxdy + (dx >= 0))); - y_error_inc = 2 * abs_dy; - y_error_adj = 2 * max_adxdy; - - d_error = -dmax; - d_error_inc = 2 *max_adxdy; - d_error_adj = 2 * dmax; - - if(gourauden) - g.Setup(max_adxdy + 1, p0.g, p1.g); - } - - INLINE void GetVertex(line_vertex* p) - { - p->x = x; - p->y = y; - - if(gourauden) - p->g = g.Current(); - } - - INLINE void Step(void) - { - uint32 mask; - - d_error += d_error_inc; - if(d_error >= 0) - { - d_error -= d_error_adj; - - x_error -= x_error_inc; - mask = (int32)x_error >> 31; - x += x_inc & mask; - x_error += x_error_adj & mask; - - y_error -= y_error_inc; - mask = (int32)y_error >> 31; - y += y_inc & mask; - y_error += y_error_adj & mask; - - if(gourauden) - g.Step(); - } - } - - int32 d_error, d_error_inc, d_error_adj; - - int32 x, x_inc; - int32 x_error, x_error_inc, x_error_adj; - - int32 y, y_inc; - int32 y_error, y_error_inc, y_error_adj; - - GourauderTheTerrible g; -}; - // // } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp1.cpp mednafen-1.26.1+dfsg/src/ss/vdp1.cpp --- mednafen-1.24.3+dfsg/src/ss/vdp1.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp1.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1.cpp - VDP1 Emulation -** Copyright (C) 2015-2019 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -19,13 +19,16 @@ ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -// TODO: 32-bit writes from the SH-2 CPUs to VDP1 registers seem to be broken on a Saturn; test, and implement here. +// TODO: Draw timing for small lines(somewhere between 2 and 15 pixels wide) on the VDP1 seems weird; investigate further +// before making timing changes to the drawing code. -// TODO: COPR shouldn't be updated(from the view of the program) until the current command finishes. +// TODO: Draw timing for (large) primitives should be about 20% higher. -// TODO: Check to see what registers are reset on reset. +// TODO: Draw timing for shrunken(even just slightly) sprite lines with HSS disabled should be 100% higher. + +// TODO: 32-bit writes from the SH-2 CPUs to VDP1 registers seem to be broken on a Saturn; test, and implement here. -// TODO: Fix preclipping when raw system clipping values have bit12==1(sign bit?). +// TODO: Check to see what registers are reset on reset. // TODO: SS_SetPhysMemMap(0x05C80000, 0x05CFFFFF, FB[FBDrawWhich], sizeof(FB[0])); // (...but goes weird in 8bpp rotated mode...) @@ -51,7 +54,74 @@ namespace VDP1 { -#if 0 +uint8 spr_w_shift_tab[8]; +uint8 gouraud_lut[0x40]; +line_data LineData; +line_inner_data LineInnerData; +prim_data PrimData; + +int32 SysClipX, SysClipY; +int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; + +int32 LocalX, LocalY; + +uint8 TVMR; +uint8 FBCR; +static uint8 PTMR; +static uint8 EDSR; + +uint16* FBDrawWhichPtr; +static bool FBDrawWhich; + +static bool DrawingActive; +static uint32 CurCommandAddr; +static int32 RetCommandAddr; +static uint16 LOPR; + +static sscpu_timestamp_t lastts; +static int32 CycleCounter; +static int32 CommandPhase; +static uint16 CommandData[0x10]; +uint32 DTACounter; + +static bool vb_status, hb_status; +static bool vbcdpending; +static bool FBManualPending; +static bool FBVBErasePending; +static bool FBVBEraseActive; +static sscpu_timestamp_t FBVBEraseLastTS; +static sscpu_timestamp_t LastRWTS; + +static uint16 EWDR; // Erase/Write Data +static uint16 EWLR; // Erase/Write Upper Left Coordinate +static uint16 EWRR; // Erase/Write Lower Right Coordinate + +static struct +{ + bool rot8; + uint32 fb_x_mask; + + uint32 y_start; + uint32 x_start; + + uint32 y_end; + uint32 x_bound; + + uint16 fill_data; +} EraseParams; + +static uint32 EraseYCounter; + +#if 1 +static uint32 InstantDrawSanityLimit; // ss_horrible_hacks +#endif + +uint16 VRAM[0x40000]; +uint16 FB[2][0x20000]; +// +// +// +#ifdef MDFN_ENABLE_DEV_BUILD struct VRAMUsageInfo { uint64 earliest; @@ -75,46 +145,58 @@ static void VRAMUsageStart(void) { - for(size_t i = 0; i < 0x40000; i++) + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) { - VRAMDrawReads[i].earliest = ~(uint64)0; - VRAMDrawReads[i].latest = ~(uint64)0; + for(size_t i = 0; i < 0x40000; i++) + { + VRAMDrawReads[i].earliest = ~(uint64)0; + VRAMDrawReads[i].latest = ~(uint64)0; - VRAMWrites[i].earliest = ~(uint64)0; - VRAMWrites[i].latest = ~(uint64)0; + VRAMWrites[i].earliest = ~(uint64)0; + VRAMWrites[i].latest = ~(uint64)0; + } } VRAMUsageStartTS = VRAMUsageTSBase; } static void VRAMUsageWrite(uint32 A) { - const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; - const size_t index = (A >> 1) & 0x3FFFF; + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) + { + const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; + const size_t index = A & 0x3FFFF; - if(VRAMWrites[index].earliest == ~(uint64)0) - VRAMWrites[index].earliest = fullts; + if(VRAMWrites[index].earliest == ~(uint64)0) + VRAMWrites[index].earliest = fullts; - VRAMWrites[index].latest = fullts; + VRAMWrites[index].latest = fullts; + } } static void VRAMUsageDrawRead(uint32 A) { - const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; - const size_t index = (A >> 1) & 0x3FFFF; + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) + { + const uint64 fullts = VRAMUsageTSBase + SH7095_mem_timestamp; + const size_t index = A & 0x3FFFF; - if(VRAMDrawReads[index].earliest == ~(uint64)0) - VRAMDrawReads[index].earliest = fullts; + if(VRAMDrawReads[index].earliest == ~(uint64)0) + VRAMDrawReads[index].earliest = fullts; - VRAMDrawReads[index].latest = fullts; + VRAMDrawReads[index].latest = fullts; + } } static void VRAMUsageEnd(void) { - for(unsigned i = 0; i < 0x40000; i++) + if(MDFN_UNLIKELY(ss_dbg_mask & SS_DBG_VDP1_RACE)) { - if(VRAMWrites[i].latest != ~(uint64)0 && VRAMDrawReads[i].latest != ~(uint64)0) + for(unsigned i = 0; i < 0x40000; i++) { - printf("VRAM[0x%06x] Race --- Write, earliest=%llu, latest=%llu --- Draw Read, earliest=%llu, latest=%llu\n", i * 2, (unsigned long long)(VRAMWrites[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMWrites[i].latest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].latest - VRAMUsageStartTS)); + if(VRAMWrites[i].latest != ~(uint64)0 && VRAMDrawReads[i].latest != ~(uint64)0) + { + SS_DBG(SS_DBG_VDP1_RACE, "[VDP1] VRAM[0x%06x] Race --- Write, earliest=%llu, latest=%llu --- Draw Read, earliest=%llu, latest=%llu\n", i * 2, (unsigned long long)(VRAMWrites[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMWrites[i].latest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].earliest - VRAMUsageStartTS), (unsigned long long)(VRAMDrawReads[i].latest - VRAMUsageStartTS)); + } } } } @@ -126,67 +208,9 @@ static INLINE void VRAMUsageDrawRead(uint32 A) { } static INLINE void VRAMUsageEnd(void) { } #endif - -uint8 spr_w_shift_tab[8]; -line_data LineSetup; -uint8 gouraud_lut[0x40]; - -uint16 VRAM[0x40000]; -uint16 FB[2][0x20000]; -bool FBDrawWhich; - -static bool FBManualPending; - -static bool FBVBErasePending; -static bool FBVBEraseActive; -static sscpu_timestamp_t FBVBEraseLastTS; -static sscpu_timestamp_t LastRWTS; // ss_horrible_hacks - -int32 SysClipX, SysClipY; -int32 UserClipX0, UserClipY0, UserClipX1, UserClipY1; -int32 LocalX, LocalY; - -static uint32 CurCommandAddr; -static int32 RetCommandAddr; -static bool DrawingActive; - -static uint16 LOPR; - -static uint16 EWDR; // Erase/Write Data -static uint16 EWLR; // Erase/Write Upper Left Coordinate -static uint16 EWRR; // Erase/Write Lower Right Coordinate - -static struct -{ - bool rot8; - uint32 fb_x_mask; - - uint32 y_start; - uint32 x_start; - - uint32 y_end; - uint32 x_bound; - - uint16 fill_data; -} EraseParams; - -static uint32 EraseYCounter; - -uint8 TVMR; -uint8 FBCR; -static uint8 PTMR; -static uint8 EDSR; - -static bool vb_status, hb_status; -static sscpu_timestamp_t lastts; -static int32 CycleCounter; - -#if 1 -static uint32 InstantDrawSanityLimit; // ss_horrible_hacks -#endif - -static bool vbcdpending; - +// +// +// void Init(void) { vbcdpending = false; @@ -243,7 +267,9 @@ for(unsigned i = 0; i < 0x20000; i++) FB[fb][i] = 0xFFFF; - memset(&LineSetup, 0, sizeof(LineSetup)); + memset(&LineData, 0, sizeof(LineData)); + memset(&LineInnerData, 0, sizeof(LineInnerData)); + memset(&PrimData, 0, sizeof(PrimData)); // // Registers with somewhat undefined state on power-on: @@ -265,6 +291,7 @@ } FBDrawWhich = 0; + FBDrawWhichPtr = FB[FBDrawWhich]; //SS_SetPhysMemMap(0x05C80000, 0x05CFFFFF, FB[FBDrawWhich], sizeof(FB[0]), true); FBManualPending = false; @@ -275,6 +302,11 @@ CurCommandAddr = 0; RetCommandAddr = -1; DrawingActive = false; + CycleCounter = 0; + CommandPhase = 0; + memset(CommandData, 0, sizeof(CommandData)); + InstantDrawSanityLimit = 0; + DTACounter = 0; // // Begin registers/variables confirmed to be initialized on reset. @@ -287,26 +319,23 @@ memset(&EraseParams, 0, sizeof(EraseParams)); EraseYCounter = ~0U; - - CycleCounter = 0; - InstantDrawSanityLimit = 0; } static int32 CMD_SetUserClip(const uint16* cmd_data) { - UserClipX0 = cmd_data[0x6] & 0x3FF; - UserClipY0 = cmd_data[0x7] & 0x1FF; + UserClipX0 = cmd_data[0x6] & 0x1FFF; + UserClipY0 = cmd_data[0x7] & 0x1FFF; - UserClipX1 = cmd_data[0xA] & 0x3FF; - UserClipY1 = cmd_data[0xB] & 0x1FF; + UserClipX1 = cmd_data[0xA] & 0x1FFF; + UserClipY1 = cmd_data[0xB] & 0x1FFF; return 0; } int32 CMD_SetSystemClip(const uint16* cmd_data) { - SysClipX = cmd_data[0xA] & 0x3FF; - SysClipY = cmd_data[0xB] & 0x1FF; + SysClipX = cmd_data[0xA] & 0x1FFF; + SysClipY = cmd_data[0xB] & 0x1FFF; return 0; } @@ -322,7 +351,7 @@ template static uint32 MDFN_FASTCALL TexFetch(uint32 x) { - const uint32 base = LineSetup.tex_base; + const uint32 base = LineData.tex_base; const bool ECD = ECDSPDMode & 0x10; const bool SPD = ECDSPDMode & 0x08; const unsigned ColorMode = ECDSPDMode & 0x07; @@ -338,10 +367,10 @@ if(!ECD && rtd == 0xF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -353,13 +382,13 @@ if(!ECD && rtd == 0xF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; - return LineSetup.CLUT[rtd] | ret_or; + return LineData.CLUT[rtd] | ret_or; case 2: // 64 colors, color bank rtd = (VRAM[(base + (x >> 1)) & 0x3FFFF] >> (((x & 0x1) ^ 0x1) << 3)) & 0xFF; @@ -367,11 +396,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -383,11 +412,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -399,11 +428,11 @@ if(!ECD && rtd == 0xFF) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } - ret_or = LineSetup.cb_or; + ret_or = LineData.cb_or; if(!SPD) ret_or |= (int32)(rtd - 1) >> 31; @@ -420,7 +449,7 @@ if(!ECD && (rtd & 0xC000) == 0x4000) { - LineSetup.ec_count--; + LineData.ec_count--; return -1; } @@ -450,79 +479,312 @@ #undef TF }; -sscpu_timestamp_t Update(sscpu_timestamp_t timestamp) +bool SetupDrawLine(int32* const cycle_counter, const bool AA, const bool Textured, const uint16 mode) { - if(MDFN_UNLIKELY(timestamp < lastts)) + const bool HSS = (mode & 0x1000); + const bool PCD = (mode & 0x800); + const bool UserClipEn = (mode & 0x400); + const bool UserClipMode = (mode & 0x200); + //const bool ECD = (mode & 0x80); + //const bool SPD = (mode & 0x40); + const bool GouraudEn = (mode & 0x8004) == 0x4; + line_vertex p0 = LineData.p[0]; + line_vertex p1 = LineData.p[1]; + line_inner_data& lid = LineInnerData; + bool clipped = false; + + p0.x &= 0x1FFF; + p0.y &= 0x1FFF; + p1.x &= 0x1FFF; + p1.y &= 0x1FFF; + + //printf("(0x%04x,0x%04x) -> (0x%04x,0x%04x)\n", p0.x, p0.y, p1.x, p1.y); + + if(!PCD) { - // Don't else { } normal execution, since this bug condition miiight occur in the call from SetHBVB(), - // and we need drawing to start ASAP before silly games overwrite the beginning of the command table. + bool swapped = false; + + *cycle_counter += 4; + + if(UserClipEn && !UserClipMode) + { + // Ignore system clipping WRT pre-clip for UserClipEn == 1 && UserClipMode == 0 + clipped |= (((UserClipX1 - p0.x) & (UserClipX1 - p1.x)) | ((p0.x - UserClipX0) & (p1.x - UserClipX0))) & 0x1000; + clipped |= (((UserClipY1 - p0.y) & (UserClipY1 - p1.y)) | ((p0.y - UserClipY0) & (p1.y - UserClipY0))) & 0x1000; + + swapped = (p0.y == p1.y) & ((p0.x < UserClipX0) | (p0.x > UserClipX1)); + } + else + { + clipped |= (((SysClipX - p0.x) & (SysClipX - p1.x)) | (p0.x & p1.x)) & 0x1000; + clipped |= (((SysClipY - p0.y) & (SysClipY - p1.y)) | (p0.y & p1.y)) & 0x1000; + + swapped = (p0.y == p1.y) & (p0.x > SysClipX); + } // - SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] [BUG] timestamp(%d) < lastts(%d)", timestamp, lastts); - timestamp = lastts; + // VDP1 reduces the line into a point to clip it, and it can be seen in the framebuffer under + // certain conditions relating to coordinate precision. + // + if(clipped) + p1 = p0; + else if(swapped) + std::swap(p0, p1); } + + *cycle_counter += 8; + // - // // - int32 cycles = timestamp - lastts; - lastts = timestamp; + const int32 dx = sign_x_to_s32(13, p1.x - p0.x); + const int32 dy = sign_x_to_s32(13, p1.y - p0.y); + const int32 abs_dx = abs(dx); // & 0xFFF; + const int32 abs_dy = abs(dy); // & 0xFFF; + const int32 max_adx_ady = std::max(abs_dx, abs_dy); + const int32 x_inc = (dx >= 0) ? 1 : -1; + const int32 y_inc = (dy >= 0) ? 1 : -1; + + lid.x_inc = (x_inc & 0x7FF) << 0; + lid.y_inc = (y_inc & 0x7FF) << 16; + lid.xy = (p0.x & 0x7FF) + ((p0.y & 0x7FF) << 16); + lid.term_xy = (p1.x & 0x7FF) + ((p1.y & 0x7FF) << 16); + lid.drawn_ac = true; // Drawn all-clipped + lid.color = LineData.color; + + //if(max_adx_ady >= 2048) + // printf("%d,%d -> %d, %d\n", p0.x, p0.y, p1.x, p1.y); - CycleCounter += cycles; - if(CycleCounter > VDP1_UpdateTimingGran) - CycleCounter = VDP1_UpdateTimingGran; + if(GouraudEn) + lid.g.Setup(max_adx_ady + 1, p0.g, p1.g); - if(CycleCounter > 0 && SCU_CheckVDP1HaltKludge()) + if(Textured) { - //puts("Kludge"); - CycleCounter = 0; + LineData.ec_count = 2; // Call before tffn() + + if(MDFN_UNLIKELY(max_adx_ady < abs(p1.t - p0.t) && HSS)) + { + LineData.ec_count = 0x7FFFFFFF; + lid.t.Setup(max_adx_ady + 1, p0.t >> 1, p1.t >> 1, 2, (bool)(FBCR & FBCR_EOS)); + } + else + lid.t.Setup(max_adx_ady + 1, p0.t, p1.t); + + lid.texel = LineData.tffn(lid.t.Current()); } - else if(DrawingActive) + { + int32 aa_x_inc; + int32 aa_y_inc; + + if(abs_dy > abs_dx) + { + if(y_inc < 0) + { + aa_x_inc = (x_inc >> 31); + aa_y_inc = -(x_inc >> 31); + } + else + { + aa_x_inc = -(~x_inc >> 31); + aa_y_inc = (~x_inc >> 31); + } + } + else + { + if(x_inc < 0) + { + aa_x_inc = -(~y_inc >> 31); + aa_y_inc = -(~y_inc >> 31); + } + else + { + aa_x_inc = (y_inc >> 31); + aa_y_inc = (y_inc >> 31); + } + } + lid.aa_xy_inc = (aa_x_inc & 0x7FF) + ((aa_y_inc & 0x7FF) << 16); + } + + // x, y, x_inc, y_inc, aa_x_inc, aa_y_inc, term_x, term_y, error, error_inc, error_adj, t, g, color + lid.abs_dy_gt_abs_dx = abs_dy > abs_dx; + + if(abs_dy > abs_dx) + { + lid.error_inc = (2 * abs_dx); + lid.error_adj = -(2 * abs_dy); + lid.error = (abs_dy - (2 * abs_dy)) - 1; + lid.error_cmp = 0; + + if(dy < 0 && !AA) + lid.error_cmp--; + + lid.error -= lid.error_inc; + lid.xy = (lid.xy + (0x8000000 - lid.y_inc)) & 0x07FF07FF; + } + else + { + lid.error_inc = (2 * abs_dy); + lid.error_adj = -(2 * abs_dx); + lid.error = (abs_dx - (2 * abs_dx)) - 1; + lid.error_cmp = 0; + + if(dx < 0 && !AA) + lid.error_cmp--; + + lid.error -= lid.error_inc; + lid.xy = (lid.xy + (0x800 - lid.x_inc)) & 0x07FF07FF; + } + if(AA) + { + lid.error++; + lid.error_cmp++; + } + + // + lid.error_inc <<= 32 - 13; + lid.error_adj <<= 32 - 13; + lid.error <<= 32 - 13; + lid.error_cmp <<= 32 - 13; + + return clipped; +} + +void EdgeStepper::Setup(const bool gourauden, const line_vertex& p0, const line_vertex& p1, const int32 dmax) +{ + int32 dx = sign_x_to_s32(13, p1.x - p0.x); + int32 dy = sign_x_to_s32(13, p1.y - p0.y); + int32 abs_dx = abs(dx); + int32 abs_dy = abs(dy); + int32 max_adxdy = std::max(abs_dx, abs_dy); + + //if(abs_dy == abs_dx) + // printf("edge abs_dy == abs_dx; dy=%d dx=%d\n", dy, dx); + + //printf("%d %d, %d\n", dx, dy, dmax); + + x = p0.x; + x_inc = (dx >= 0) ? 1 : -1; + x_error_inc = (2 * abs_dx); + x_error_adj = -(2 * max_adxdy); + x_error = (max_adxdy - (2 * max_adxdy)) - 1; + x_error_cmp = (dy < 0) ? -1 : 0; + + y = p0.y; + y_inc = (dy >= 0) ? 1 : -1; + y_error_inc = (2 * abs_dy); + y_error_adj = -(2 * max_adxdy); + y_error = (max_adxdy - (2 * max_adxdy)) - 1; + y_error_cmp = (dx < 0) ? -1 : 0; + + d_error = dmax - (2 * dmax) - 1; + d_error_inc = (2 * max_adxdy); + d_error_adj = -(2 * dmax); + d_error_cmp = (((abs_dy > abs_dx) ? dy : dx) < 0) ? -1 : 0; + // + x_error <<= (32 - 13); + x_error_inc <<= (32 - 13); + x_error_adj <<= (32 - 13); + x_error_cmp <<= (32 - 13); + + y_error <<= (32 - 13); + y_error_inc <<= (32 - 13); + y_error_adj <<= (32 - 13); + y_error_cmp <<= (32 - 13); + + d_error <<= (32 - 13); + d_error_inc <<= (32 - 13); + d_error_adj <<= (32 - 13); + d_error_cmp <<= (32 - 13); + // + if(gourauden) + g.Setup(max_adxdy + 1, p0.g, p1.g); +} + +enum : int { CommandPhaseBias = __COUNTER__ + 1 }; +#define VDP1_EAT_CLOCKS(n) \ + { \ + CycleCounter -= (n); \ + case __COUNTER__: \ + if(CycleCounter <= 0) \ + { \ + CommandPhase = __COUNTER__ - CommandPhaseBias - 1; \ + goto Breakout; \ + } \ + } \ + + +static INLINE void DoDrawing(void) +{ #if 1 - if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) - CycleCounter = InstantDrawSanityLimit; + if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) + CycleCounter = InstantDrawSanityLimit; #endif - while(CycleCounter > 0) + switch(CommandPhase + CommandPhaseBias) + { + for(;;) { - uint16 cmd_data[0x10]; + default: + VDP1_EAT_CLOCKS(0); // Fetch command data - memcpy(cmd_data, &VRAM[CurCommandAddr], sizeof(cmd_data)); - CycleCounter -= 16; + memcpy(CommandData, &VRAM[CurCommandAddr], sizeof(CommandData)); + + VDP1_EAT_CLOCKS(16); for(unsigned i = 0; i < 16; i++) VRAMUsageDrawRead((CurCommandAddr + i) * 2); //SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] Command @ 0x%06x: 0x%04x\n", CurCommandAddr, cmd_data[0]); - if(MDFN_LIKELY(!(cmd_data[0] & 0xC000))) + if(MDFN_LIKELY(!(CommandData[0] & 0xC000))) { - const unsigned cc = cmd_data[0] & 0xF; - - if(MDFN_UNLIKELY(cc >= 0xC)) + if(MDFN_UNLIKELY((CommandData[0] & 0xF) >= 0xC)) { DrawingActive = false; VRAMUsageEnd(); - break; + goto Breakout; } else { static int32 (*const command_table[0xC])(const uint16* cmd_data) = { + /* 0x0 */ /* 0x1 */ /* 0x2 */ /* 0x3 */ + CMD_NormalSprite, CMD_ScaledSprite, CMD_DistortedSprite, CMD_DistortedSprite, + + /* 0x4 */ /* 0x5 (polyline) *//* 0x6 */ /* 0x7 (polyline) */ + CMD_Polygon, CMD_Line, CMD_Line, CMD_Line, + + /* 0x8*/ /* 0x9 */ /* 0xA */ /* 0xB */ + CMD_SetUserClip, CMD_SetSystemClip, CMD_SetLocalCoord, CMD_SetUserClip + }; + + static int32 (*const resume_table[0x8])(const uint16* cmd_data) = + { /* 0x0 */ /* 0x1 */ /* 0x2 */ /* 0x3 */ - CMD_NormalSprite, CMD_ScaledSprite, CMD_DistortedSprite, CMD_DistortedSprite, + RESUME_Sprite, RESUME_Sprite, RESUME_Sprite, RESUME_Sprite, /* 0x4 */ /* 0x5 */ /* 0x6 */ /* 0x7 */ - CMD_Polygon, CMD_Polyline, CMD_Line, CMD_Polyline, - - /* 0x8*/ /* 0x9 */ /* 0xA */ /* 0xB */ - CMD_SetUserClip, CMD_SetSystemClip, CMD_SetLocalCoord, CMD_SetUserClip + RESUME_Polygon, RESUME_Line, RESUME_Line, RESUME_Line, }; - CycleCounter -= command_table[cc](cmd_data); + VDP1_EAT_CLOCKS(command_table[CommandData[0] & 0xF](CommandData)); + if(!(CommandData[0] & 0x8)) + { + for(;;) + { + int32 cycles; + + cycles = resume_table[CommandData[0] & 0x7](CommandData); + + if(!cycles) + break; + + VDP1_EAT_CLOCKS(cycles); + } + } } } - else if(MDFN_UNLIKELY(cmd_data[0] & 0x8000)) + else if(MDFN_UNLIKELY(CommandData[0] & 0x8000)) { SS_DBGTI(SS_DBG_VDP1, "[VDP1] Drawing finished at 0x%05x", CurCommandAddr); DrawingActive = false; @@ -532,24 +794,24 @@ SCU_SetInt(SCU_INT_VDP1, true); SCU_SetInt(SCU_INT_VDP1, false); - break; + goto Breakout; } CurCommandAddr = (CurCommandAddr + 0x10) & 0x3FFFF; - switch((cmd_data[0] >> 12) & 0x3) + switch((CommandData[0] >> 12) & 0x3) { case 0: break; case 1: - CurCommandAddr = (cmd_data[1] << 2) &~ 0xF; + CurCommandAddr = (CommandData[1] << 2) &~ 0xF; break; case 2: if(RetCommandAddr < 0) RetCommandAddr = CurCommandAddr; - CurCommandAddr = (cmd_data[1] << 2) &~ 0xF; + CurCommandAddr = (CommandData[1] << 2) &~ 0xF; break; case 3: @@ -560,13 +822,46 @@ } break; } + // + // + // } + } + Breakout:; #if 1 - if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) - InstantDrawSanityLimit = CycleCounter; + if(MDFN_UNLIKELY(ss_horrible_hacks & HORRIBLEHACK_VDP1INSTANT)) + InstantDrawSanityLimit = CycleCounter; #endif +} + +sscpu_timestamp_t Update(sscpu_timestamp_t timestamp) +{ + if(MDFN_UNLIKELY(timestamp < lastts)) + { + // Don't else { } normal execution, since this bug condition miiight occur in the call from SetHBVB(), + // and we need drawing to start ASAP before silly games overwrite the beginning of the command table. + // + SS_DBGTI(SS_DBG_WARNING | SS_DBG_VDP1, "[VDP1] [BUG] timestamp(%d) < lastts(%d)", timestamp, lastts); + timestamp = lastts; + } + // + // + // + int32 cycles = timestamp - lastts; + lastts = timestamp; + + CycleCounter += cycles; + if(CycleCounter > VDP1_UpdateTimingGran) + CycleCounter = VDP1_UpdateTimingGran; + + if(CycleCounter > 0 && SCU_CheckVDP1HaltKludge()) + { + //puts("Kludge"); + CycleCounter = 0; } + else if(DrawingActive) + DoDrawing(); return timestamp + (DrawingActive ? std::max(VDP1_UpdateTimingGran, 0 - CycleCounter) : VDP1_IdleTimingGran); } @@ -589,6 +884,7 @@ CurCommandAddr = 0; RetCommandAddr = -1; DrawingActive = true; + CommandPhase = 0; VRAMUsageStart(); CycleCounter = VDP1_UpdateTimingGran; @@ -685,6 +981,7 @@ } FBDrawWhich = !FBDrawWhich; + FBDrawWhichPtr = FB[FBDrawWhich]; SS_DBGTI(SS_DBG_VDP1, "[VDP1] Displayed framebuffer changed to %d.", !FBDrawWhich); @@ -821,8 +1118,7 @@ if(FBVBEraseActive) FBVBEraseLastTS += delta; - if(LastRWTS >= 0) - LastRWTS += delta; + LastRWTS = std::max(-1000000, LastRWTS + delta); VRAMUsageAddBaseTime(-delta); } @@ -917,7 +1213,7 @@ // MDFN_FASTCALL void Write_CheckDrawSlowdown(uint32 A, sscpu_timestamp_t time_thing) { - if(DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) + if(DrawingActive && time_thing > LastRWTS && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) { const int32 count = (A & 0x100000) ? 22 : 25; const uint32 a = std::min(count, time_thing - LastRWTS); @@ -930,7 +1226,7 @@ MDFN_FASTCALL void Read_CheckDrawSlowdown(uint32 A, sscpu_timestamp_t time_thing) { //printf("%08x\n", A); - if(!(A & 0x100000) && DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) + if(!(A & 0x100000) && time_thing > LastRWTS && DrawingActive && (ss_horrible_hacks & HORRIBLEHACK_VDP1RWDRAWSLOWDOWN)) { const int32 count = (A & 0x80000) ? 44 : 41; const uint32 a = std::min(count, time_thing - LastRWTS); @@ -946,7 +1242,7 @@ if(A < 0x80000) { - VRAMUsageWrite(A); + VRAMUsageWrite(A >> 1); SS_DBGTI(SS_DBG_VDP1_VRAMW, "[VDP1] Write to VRAM: 0x%02x->VRAM[0x%05x]", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, A); ne16_wbo_be(VRAM, A, DB >> (((A & 1) ^ 1) << 3) ); return; @@ -956,7 +1252,7 @@ { uint32 FBA = A; - SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%02x->FB[%d][0x%05x]", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, FBDrawWhich, A & 0x3FFFF); + SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%02x->FB[%d][0x%05x] CycleCounter=%d", (DB >> (((A & 1) ^ 1) << 3)) & 0xFF, FBDrawWhich, A & 0x3FFFF, CycleCounter); if((TVMR & (TVMR_8BPP | TVMR_ROTATE)) == (TVMR_8BPP | TVMR_ROTATE)) FBA = (FBA & 0x1FF) | ((FBA << 1) & 0x3FC00) | ((FBA >> 8) & 0x200); @@ -975,7 +1271,7 @@ if(A < 0x80000) { - VRAMUsageWrite(A); + VRAMUsageWrite(A >> 1); SS_DBGTI(SS_DBG_VDP1_VRAMW, "[VDP1] Write to VRAM: 0x%04x->VRAM[0x%05x]", DB, A); VRAM[A >> 1] = DB; return; @@ -985,7 +1281,7 @@ { uint32 FBA = A; - SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%04x->FB[%d][0x%05x]", DB, FBDrawWhich, A & 0x3FFFF); + SS_DBGTI(SS_DBG_VDP1_FBW, "[VDP1] Write to FB: 0x%04x->FB[%d][0x%05x] CycleCounter=%d", DB, FBDrawWhich, A & 0x3FFFF, CycleCounter); if((TVMR & (TVMR_8BPP | TVMR_ROTATE)) == (TVMR_8BPP | TVMR_ROTATE)) FBA = (FBA & 0x1FF) | ((FBA << 1) & 0x3FC00) | ((FBA >> 8) & 0x200); @@ -1019,6 +1315,93 @@ void StateAction(StateMem* sm, const unsigned load, const bool data_only) { + SFORMAT Prim_StateRegs[] = + { + SFVAR(PrimData.e->d_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->d_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->x, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->x_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->y, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->y_error_cmp, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.e->g.g, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.intinc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.ginc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error_inc, 0x2, sizeof(*PrimData.e), PrimData.e), + SFVAR(PrimData.e->g.error_adj, 0x2, sizeof(*PrimData.e), PrimData.e), + + SFVAR(PrimData.big_t.t), + SFVAR(PrimData.big_t.tinc), + SFVAR(PrimData.big_t.error), + SFVAR(PrimData.big_t.error_inc), + SFVAR(PrimData.big_t.error_adj), + + SFVAR(PrimData.iter), + SFVAR(PrimData.tex_base), + SFVAR(PrimData.need_line_resume), + // + // + // + SFVAR(LineInnerData.xy), + SFVAR(LineInnerData.error), + SFVAR(LineInnerData.drawn_ac), + + SFVAR(LineInnerData.texel), + + SFVAR(LineInnerData.t.t), + SFVAR(LineInnerData.t.tinc), + SFVAR(LineInnerData.t.error), + SFVAR(LineInnerData.t.error_inc), + SFVAR(LineInnerData.t.error_adj), + + SFVAR(LineInnerData.g.g), + SFVAR(LineInnerData.g.intinc), + SFVAR(LineInnerData.g.ginc), + SFVAR(LineInnerData.g.error), + SFVAR(LineInnerData.g.error_inc), + SFVAR(LineInnerData.g.error_adj), + + SFVAR(LineInnerData.x_inc), + SFVAR(LineInnerData.y_inc), + SFVAR(LineInnerData.aa_xy_inc), + SFVAR(LineInnerData.term_xy), + + SFVAR(LineInnerData.error_cmp), + SFVAR(LineInnerData.error_inc), + SFVAR(LineInnerData.error_adj), + + SFVAR(LineInnerData.color), + + SFVAR(LineInnerData.abs_dy_gt_abs_dx), + // + // + // + SFVAR(LineData.p->t, 0x2, sizeof(*LineData.p), LineData.p), + SFVAR(LineData.color), + SFVAR(LineData.ec_count), + //uint32 (MDFN_FASTCALL *tffn)(uint32); + SFVAR(LineData.CLUT), + SFVAR(LineData.cb_or), + SFVAR(LineData.tex_base), + // + // + // + SFEND + }; + SFORMAT StateRegs[] = { SFVAR(VRAM), @@ -1072,6 +1455,9 @@ SFVAR(hb_status), SFVAR(lastts), SFVAR(CycleCounter), + SFVAR(CommandPhase), + SFVAR(CommandData), + SFVAR(DTACounter), SFVAR(vbcdpending), @@ -1079,6 +1465,8 @@ SFVAR(InstantDrawSanityLimit), + SFLINK(Prim_StateRegs), + SFEND }; @@ -1090,6 +1478,8 @@ if(RetCommandAddr >= 0) RetCommandAddr &= 0x3FFFF; + DTACounter &= 0xFF; + EraseParams.fb_x_mask = EraseParams.rot8 ? 0xFF : 0x1FF; EraseParams.y_start &= 0x1FF; @@ -1097,6 +1487,13 @@ EraseParams.y_end &= 0x1FF; EraseParams.x_bound &= 0x7F << 3; + // + FBDrawWhichPtr = FB[FBDrawWhich]; + + if(load < 0x00102500) + { + CommandPhase = 0; + } } } @@ -1175,6 +1572,62 @@ void SetRegister(const unsigned id, const uint32 value) { // TODO + switch(id) + { + case GSREG_SYSCLIPX: + SysClipX = value & 0x1FFF; + break; + + case GSREG_SYSCLIPY: + SysClipY = value & 0x1FFF; + break; + + case GSREG_USERCLIPX0: + UserClipX0 = value & 0x1FFF; + break; + + case GSREG_USERCLIPY0: + UserClipY0 = value & 0x1FFF; + break; + + case GSREG_USERCLIPX1: + UserClipX1 = value & 0x1FFF; + break; + + case GSREG_USERCLIPY1: + UserClipY1 = value & 0x1FFF; + break; + +/* + case GSREG_LOCALX: + ret = LocalX; + break; + + case GSREG_LOCALY: + ret = LocalY; + break; + + case GSREG_TVMR: + ret = TVMR; + break; + + case GSREG_FBCR: + ret = FBCR; + break; + + case GSREG_EWDR: + ret = EWDR; + break; + + case GSREG_EWLR: + ret = EWLR; + break; + + case GSREG_EWRR: + ret = EWRR; + break; +*/ + } } } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp1_line.cpp mednafen-1.26.1+dfsg/src/ss/vdp1_line.cpp --- mednafen-1.24.3+dfsg/src/ss/vdp1_line.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp1_line.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_line.cpp - VDP1 Line Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,10 +28,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -70,58 +70,67 @@ #undef LINEFN_BC }; -template -static INLINE int32 CMD_Line_Polyline_T(const uint16* cmd_data) +int32 RESUME_Line(const uint16* cmd_data) { const uint16 mode = cmd_data[0x2]; + // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. + const bool SPD_Opaque = (((mode >> 3) & 0x7) < 0x6) ? ((int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0) : true; + auto* const fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + const uint32 num_lines = (cmd_data[0] & 0x1) ? 4 : 1; + uint32 iter = PrimData.iter; int32 ret = 0; - // - // - bool SPD_Opaque = true; // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. - - LineSetup.tex_base = 0; - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x800; - if(((mode >> 3) & 0x7) < 0x6) - SPD_Opaque = (int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0; - // - // - // - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; - - CheckUndefClipping(); - - for(unsigned n = 0; n < num_lines; n++) + if(MDFN_UNLIKELY(PrimData.need_line_resume)) { - LineSetup.p[0].x = sign_x_to_s32(13, cmd_data[0x6 + (((n << 1) + 0) & 0x7)] & 0x1FFF) + LocalX; - LineSetup.p[0].y = sign_x_to_s32(13, cmd_data[0x7 + (((n << 1) + 0) & 0x7)] & 0x1FFF) + LocalY; - LineSetup.p[1].x = sign_x_to_s32(13, cmd_data[0x6 + (((n << 1) + 2) & 0x7)] & 0x1FFF) + LocalX; - LineSetup.p[1].y = sign_x_to_s32(13, cmd_data[0x7 + (((n << 1) + 2) & 0x7)] & 0x1FFF) + LocalY; + PrimData.need_line_resume = false; + goto ResumeLine; + } - if(mode & 0x4) // Gouraud + if(iter < num_lines) + { + do { - const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; - - ret += 2; - LineSetup.p[0].g = gtb[(n + 0) & 0x3]; - LineSetup.p[1].g = gtb[(n + 1) & 0x3]; - } - - ret += fnptr(); + LineData.p[0].x = sign_x_to_s32(13, cmd_data[0x6 + (((iter << 1) + 0) & 0x7)] & 0x1FFF) + LocalX; + LineData.p[0].y = sign_x_to_s32(13, cmd_data[0x7 + (((iter << 1) + 0) & 0x7)] & 0x1FFF) + LocalY; + LineData.p[1].x = sign_x_to_s32(13, cmd_data[0x6 + (((iter << 1) + 2) & 0x7)] & 0x1FFF) + LocalX; + LineData.p[1].y = sign_x_to_s32(13, cmd_data[0x7 + (((iter << 1) + 2) & 0x7)] & 0x1FFF) + LocalY; + + if(mode & 0x4) // Gouraud + { + const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; + + ret += 2; + LineData.p[0].g = gtb[(iter + 0) & 0x3]; + LineData.p[1].g = gtb[(iter + 1) & 0x3]; + } + + SetupDrawLine(&ret, false, false, mode); + // + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } while(++iter < num_lines && ret < VDP1_SuspendResumeThreshold); } - return ret; -} + PrimData.iter = iter; -int32 CMD_Polyline(const uint16* cmd_data) -{ - return CMD_Line_Polyline_T<4>(cmd_data); + return ret; } int32 CMD_Line(const uint16* cmd_data) { - return CMD_Line_Polyline_T<1>(cmd_data); + int32 ret = 1; + // + // + LineData.tex_base = 0; + LineData.color = cmd_data[0x3]; + // + // + PrimData.iter = 0; + PrimData.need_line_resume = false; + + return ret; } } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp1_poly.cpp mednafen-1.26.1+dfsg/src/ss/vdp1_poly.cpp --- mednafen-1.24.3+dfsg/src/ss/vdp1_poly.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp1_poly.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_poly.cpp - VDP1 Polygon Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -28,10 +28,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -71,28 +71,84 @@ }; template -static INLINE int32 CMD_PolygonG_T(const uint16* cmd_data) +static int32 PolygonResumeBase(const uint16* cmd_data) { const uint16 mode = cmd_data[0x2]; - line_vertex p[4]; + // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. + const bool SPD_Opaque = (((mode >> 3) & 0x7) < 0x6) ? ((int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0) : true; + auto* const fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + // + // + // + EdgeStepper e[2] = { PrimData.e[0], PrimData.e[1] }; + int32 iter = PrimData.iter; int32 ret = 0; // // - bool SPD_Opaque = true; // Abusing the SPD bit passed to the line draw function to denote non-transparency when == 1, transparent when == 0. - - LineSetup.tex_base = 0; - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x800; + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + { + PrimData.need_line_resume = false; + goto ResumeLine; + } - if(((mode >> 3) & 0x7) < 0x6) - SPD_Opaque = (int32)(TexFetchTab[(mode >> 3) & 0x1F](0xFFFFFFFF)) >= 0; - // + if(iter >= 0) + { + do + { + //printf("x=0x%03x y=0x%03x x_error=0x%04x y_error=0x%04x --- x_error_inc=0x%04x, x_error_adj=0x%04x --- y_error_inc=0x%04x, y_error_adj=0x%04x\n", e[0].x & 0x7FF, e[0].y & 0x7FF, (uint32)e[0].x_error >> (32 - 13), (uint32)e[0].y_error >> (32 - 13), (uint32)e[0].x_error_inc >> (32 - 13), (uint32)e[0].x_error_adj >> (32 - 13), (uint32)e[0].y_error_inc >> (32 - 13), (uint32)e[0].y_error_adj >> (32 - 13)); + + e[0].GetVertex(&LineData.p[0]); + e[1].GetVertex(&LineData.p[1]); + +#if 0 + printf("(Edge0: x=%u y=%u, d_error=0x%04x x_error=0x%04x y_error=0x%04x) ", LineData.p[0].x, LineData.p[0].y, (e[0].d_error + e[0].d_error_inc) >> (32 - 13), (e[0].x_error + e[0].x_error_inc) >> (32 - 13), (e[0].y_error + e[0].y_error_inc) >> (32 - 13)); + printf("(Edge1: x=%u y=%u, d_error=0x%04x x_error=0x%04x y_error=0x%04x)\n", LineData.p[1].x, LineData.p[1].y, (e[1].d_error + e[1].d_error_inc) >> (32 - 13), (e[1].x_error + e[1].x_error_inc) >> (32 - 13), (e[1].y_error + e[1].y_error_inc) >> (32 - 13)); +#endif + //printf("%d,%d %d,%d\n", LineData.p[0].x, LineData.p[0].y, LineData.p[1].x, LineData.p[1].y); + // + if(!SetupDrawLine(&ret, true, false, mode) || !iter) + { + // + //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } + + e[0].Step(); + e[1].Step(); + } while(MDFN_LIKELY(--iter >= 0 && ret < VDP1_SuspendResumeThreshold)); + } // // - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][((mode >> 6) & 0x1E) | SPD_Opaque /*(mode >> 6) & 0x1F*/][(mode & 0x8000) ? 8 : (mode & 0x7)]; + PrimData.e[0] = e[0]; + PrimData.e[1] = e[1]; + PrimData.iter = iter; + + return ret; +} - CheckUndefClipping(); +int32 RESUME_Polygon(const uint16* cmd_data) +{ + if(cmd_data[0x2] & 0x4) // gouraud + return PolygonResumeBase(cmd_data); + else + return PolygonResumeBase(cmd_data); +} + +template +static INLINE int32 CMD_PolygonG_T(const uint16* cmd_data) +{ + line_vertex p[4]; + int32 ret = 0; + // + // + LineData.tex_base = 0; + LineData.color = cmd_data[0x3]; + // + // for(unsigned i = 0; i < 4; i++) { p[i].x = sign_x_to_s32(13, cmd_data[0x6 + (i << 1)]) + LocalX; @@ -110,24 +166,18 @@ // // // - const int32 dmax = std::max(std::max(abs(p[3].x - p[0].x), abs(p[3].y - p[0].y)), - std::max(abs(p[2].x - p[1].x), abs(p[2].y - p[1].y))); - EdgeStepper e[2]; - - e[0].Setup(p[0], p[3], dmax); - e[1].Setup(p[1], p[2], dmax); - - for(int32 i = 0; i <= dmax; i++) - { - e[0].GetVertex(&LineSetup.p[0]); - e[1].GetVertex(&LineSetup.p[1]); - // - //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); - ret += fnptr(); - // - e[0].Step(); - e[1].Step(); - } + int32 dmax; + + dmax = abs(sign_x_to_s32(13, p[3].x - p[0].x)); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[3].y - p[0].y))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].x - p[1].x))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].y - p[1].y))); + dmax &= 0xFFF; + + PrimData.e[0].Setup(gourauden, p[0], p[3], dmax); + PrimData.e[1].Setup(gourauden, p[1], p[2], dmax); + PrimData.iter = dmax; + PrimData.need_line_resume = false; return ret; } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp1_sprite.cpp mednafen-1.26.1+dfsg/src/ss/vdp1_sprite.cpp --- mednafen-1.24.3+dfsg/src/ss/vdp1_sprite.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp1_sprite.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -2,7 +2,7 @@ /* Mednafen Sega Saturn Emulation Module */ /******************************************************************************/ /* vdp1_sprite.cpp - VDP1 Sprite Drawing Commands Emulation -** Copyright (C) 2015-2016 Mednafen Team +** Copyright (C) 2015-2020 Mednafen Team ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License @@ -30,10 +30,10 @@ namespace VDP1 { -static int32 (*LineFuncTab[2][3][0x20][8 + 1])(void) = +static int32 (*LineFuncTab[2][3][0x20][8 + 1])(bool* need_line_resume) = { #define LINEFN_BC(die, bpp8, b, c) \ - DrawLine + DrawLine #define LINEFN_B(die, bpp8, b) \ { \ @@ -72,22 +72,77 @@ #undef LINEFN_BC }; -/* - Timing notes: - Timing is somewhat complex, and looks like the drawing of the lines of distorted sprites may be terminated - early in some conditions relating to clipping. - - Drawing a 256x1 texture with a 255x1 rectangular distorted sprite takes about twice as much time(even with blending enabled, which is weird...) as drawing - it with a 256x1 or 257x1 rectangular distorted sprite. -*/ enum { - FORMAT_NORMAL, + FORMAT_NORMAL = 0, FORMAT_SCALED, FORMAT_DISTORTED }; -template +template +static int32 SpriteResumeBase(const uint16* cmd_data) +{ + const uint16 mode = cmd_data[0x2]; + auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][(mode >> 6) & 0x1F][(mode & 0x8000) ? 8 : (mode & 0x7)]; + LineData.tffn = TexFetchTab[(mode >> 3) & 0x1F]; + // + // + // + EdgeStepper e[2] = { PrimData.e[0], PrimData.e[1] }; + VileTex big_t = PrimData.big_t; + const uint32 tex_base = PrimData.tex_base; + int32 iter = PrimData.iter; + int32 ret = 0; + // + // + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + { + PrimData.need_line_resume = false; + goto ResumeLine; + } + + if(iter >= 0) + { + do + { + e[0].GetVertex(&LineData.p[0]); + e[1].GetVertex(&LineData.p[1]); + + LineData.tex_base = tex_base + big_t.PreStep(); + // + if(!SetupDrawLine(&ret, true, true, mode) || !iter) + { + // + //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); + ResumeLine:; + ret += AdjustDrawTiming(fnptr(&PrimData.need_line_resume)); + if(MDFN_UNLIKELY(PrimData.need_line_resume)) + break; + } + + e[0].Step(); + e[1].Step(); + } while(MDFN_LIKELY(--iter >= 0 && ret < VDP1_SuspendResumeThreshold)); + } + // + // + PrimData.e[0] = e[0]; + PrimData.e[1] = e[1]; + PrimData.big_t = big_t; + PrimData.iter = iter; + + return ret; +} + +int32 RESUME_Sprite(const uint16* cmd_data) +{ + if(cmd_data[0x2] & 0x4) // gouraud + return SpriteResumeBase(cmd_data); + else + return SpriteResumeBase(cmd_data); +} + +template static INLINE int32 SpriteBase(const uint16* cmd_data) { const unsigned dir = (cmd_data[0] >> 4) & 0x3; @@ -98,15 +153,9 @@ const uint32 h = cmd_data[0x5] & 0xFF; line_vertex p[4]; int32 ret = 0; - auto* fnptr = LineFuncTab[(bool)(FBCR & FBCR_DIE)][(TVMR & TVMR_8BPP) ? ((TVMR & TVMR_ROTATE) ? 2 : 1) : 0][(mode >> 6) & 0x1F][(mode & 0x8000) ? 8 : (mode & 0x7)]; - - LineSetup.color = cmd_data[0x3]; - LineSetup.PCD = mode & 0x0800; - LineSetup.HSS = mode & 0x1000; - CheckUndefClipping(); + LineData.color = cmd_data[0x3]; - // FIXME: precision is probably not totally right. if(format == FORMAT_DISTORTED) { for(unsigned i = 0; i < 4; i++) @@ -205,7 +254,7 @@ } } - if(gourauden) + if(cmd_data[0x2] & 0x4) // gouraud { const uint16* gtb = &VRAM[cmd_data[0xE] << 2]; @@ -216,33 +265,29 @@ // // // - VileTex big_t; - int32 tex_base; - - LineSetup.tffn = TexFetchTab[(mode >> 3) & 0x1F]; - + // TODO: move? { const bool h_inv = dir & 1; - LineSetup.p[0 ^ h_inv].t = 0; - LineSetup.p[1 ^ h_inv].t = w ? (w - 1) : 0; + LineData.p[0 ^ h_inv].t = 0; + LineData.p[1 ^ h_inv].t = w ? (w - 1) : 0; } switch(cm) { - case 0: LineSetup.cb_or = color &~ 0xF; + case 0: LineData.cb_or = color &~ 0xF; break; case 1: for(unsigned i = 0; i < 16; i++) - LineSetup.CLUT[i] = VRAM[((color &~ 0x3) << 2) | i]; + LineData.CLUT[i] = VRAM[((color &~ 0x3) << 2) | i]; ret += 16; break; - case 2: LineSetup.cb_or = color &~ 0x3F; break; - case 3: LineSetup.cb_or = color &~ 0x7F; break; - case 4: LineSetup.cb_or = color &~ 0xFF; break; + case 2: LineData.cb_or = color &~ 0x3F; break; + case 3: LineData.cb_or = color &~ 0x7F; break; + case 4: LineData.cb_or = color &~ 0xFF; break; case 5: break; case 6: break; case 7: break; @@ -250,17 +295,26 @@ // // // - const int32 dmax = std::max(std::max(abs(p[3].x - p[0].x), abs(p[3].y - p[0].y)), - std::max(abs(p[2].x - p[1].x), abs(p[2].y - p[1].y))); - EdgeStepper e[2]; + int32 dmax; - e[0].Setup(p[0], p[3], dmax); - e[1].Setup(p[1], p[2], dmax); + dmax = abs(sign_x_to_s32(13, p[3].x - p[0].x)); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[3].y - p[0].y))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].x - p[1].x))); + dmax = std::max(dmax, abs(sign_x_to_s32(13, p[2].y - p[1].y))); + dmax &= 0xFFF; - tex_base = cmd_data[0x4] << 2; + int32 tex_base = cmd_data[0x4] << 2; + const bool gourauden = (bool)(cmd_data[0x2] & 0x4); if(cm == 5) // RGB tex_base &= ~0x7; + PrimData.e[0].Setup(gourauden, p[0], p[3], dmax); + PrimData.e[1].Setup(gourauden, p[1], p[2], dmax); + PrimData.iter = dmax; + PrimData.tex_base = tex_base; + PrimData.need_line_resume = false; + + //printf("0x%04x %u %d:%d %d:%d %d:%d %d:%d ---- %d %d\n", mode, format, p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y, w >> spr_w_shift_tab[cm], h); { const bool v_inv = dir & 2; int32 tv[2]; @@ -268,21 +322,7 @@ tv[0 ^ v_inv] = 0; tv[1 ^ v_inv] = h ? (h - 1) : 0; - big_t.Setup(dmax + 1, tv[0], tv[1], w >> spr_w_shift_tab[cm]); - } - - for(int32 i = 0; i <= dmax; i++) - { - e[0].GetVertex(&LineSetup.p[0]); - e[1].GetVertex(&LineSetup.p[1]); - - LineSetup.tex_base = tex_base + big_t.PreStep(); - // - //printf("%d:%d -> %d:%d\n", lp[0].x, lp[0].y, lp[1].x, lp[1].y); - ret += fnptr(); - // - e[0].Step(); - e[1].Step(); + PrimData.big_t.Setup(dmax + 1, tv[0], tv[1], w >> spr_w_shift_tab[cm]); } return ret; @@ -290,27 +330,17 @@ int32 CMD_DistortedSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } - int32 CMD_NormalSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } int32 CMD_ScaledSprite(const uint16* cmd_data) { - if(cmd_data[0x2] & 0x4) // gouraud - return SpriteBase(cmd_data); - else - return SpriteBase(cmd_data); + return SpriteBase(cmd_data); } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp2.h mednafen-1.26.1+dfsg/src/ss/vdp2.h --- mednafen-1.24.3+dfsg/src/ss/vdp2.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp2.h 2020-11-10 06:04:17.000000000 +0000 @@ -134,10 +134,10 @@ }; -uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len); -void SetRegister(const unsigned id, const uint32 value); -uint8 PeekVRAM(uint32 addr); -void PokeVRAM(uint32 addr, const uint8 val); +uint32 GetRegister(const unsigned id, char* const special, const uint32 special_len) MDFN_COLD; +void SetRegister(const unsigned id, const uint32 value) MDFN_COLD; +uint8 PeekVRAM(uint32 addr) MDFN_COLD; +void PokeVRAM(uint32 addr, const uint8 val) MDFN_COLD; void MakeDump(const std::string& path) MDFN_COLD; INLINE uint32 PeekLine(void) { MDFN_HIDE extern int32 VCounter; return VCounter; } diff -Nru mednafen-1.24.3+dfsg/src/ss/vdp2_render.h mednafen-1.26.1+dfsg/src/ss/vdp2_render.h --- mednafen-1.24.3+dfsg/src/ss/vdp2_render.h 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/ss/vdp2_render.h 2020-11-10 06:04:17.000000000 +0000 @@ -55,8 +55,8 @@ VDP2Rend_LIB* VDP2REND_GetLIB(unsigned line); void VDP2REND_DrawLine(int vdp2_line, const uint32 crt_line, const bool field); -void VDP2REND_Write8_DB(uint32 A, uint16 DB); -void VDP2REND_Write16_DB(uint32 A, uint16 DB); +void VDP2REND_Write8_DB(uint32 A, uint16 DB) MDFN_HOT; +void VDP2REND_Write16_DB(uint32 A, uint16 DB) MDFN_HOT; } diff -Nru mednafen-1.24.3+dfsg/src/trio/trio.c mednafen-1.26.1+dfsg/src/trio/trio.c --- mednafen-1.24.3+dfsg/src/trio/trio.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/trio/trio.c 2020-11-10 06:04:17.000000000 +0000 @@ -897,7 +897,7 @@ * *************************************************************************/ -static TRIO_CONST char rcsid[] = "@(#)$Id: trio.c,v 1.129 2009/09/20 11:37:15 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: trio.c,v 1.129 2009/09/20 11:37:15 breese Exp $"; #if TRIO_FEATURE_FLOAT /* diff -Nru mednafen-1.24.3+dfsg/src/trio/trionan.c mednafen-1.26.1+dfsg/src/trio/trionan.c --- mednafen-1.24.3+dfsg/src/trio/trionan.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/trio/trionan.c 2020-11-10 06:04:17.000000000 +0000 @@ -227,7 +227,7 @@ */ #if !defined(TRIO_EMBED_NAN) -static TRIO_CONST char rcsid[] = "@(#)$Id: trionan.c,v 1.33 2005/05/29 11:57:25 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: trionan.c,v 1.33 2005/05/29 11:57:25 breese Exp $"; #endif #if defined(TRIO_FUNC_INTERNAL_MAKE_DOUBLE) \ diff -Nru mednafen-1.24.3+dfsg/src/trio/triostr.c mednafen-1.26.1+dfsg/src/trio/triostr.c --- mednafen-1.24.3+dfsg/src/trio/triostr.c 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/trio/triostr.c 2020-11-10 06:04:17.000000000 +0000 @@ -160,7 +160,7 @@ */ #if !defined(TRIO_EMBED_STRING) -static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.36 2010/01/26 13:02:02 breese Exp $"; +//static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.36 2010/01/26 13:02:02 breese Exp $"; #endif /************************************************************************* diff -Nru mednafen-1.24.3+dfsg/src/vb/vb.cpp mednafen-1.26.1+dfsg/src/vb/vb.cpp --- mednafen-1.24.3+dfsg/src/vb/vb.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/vb/vb.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -814,6 +814,7 @@ #ifdef WANT_DEBUGGER static DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 4, 2, // Instruction alignment(bytes) diff -Nru mednafen-1.24.3+dfsg/src/wswan/main.cpp mednafen-1.26.1+dfsg/src/wswan/main.cpp --- mednafen-1.24.3+dfsg/src/wswan/main.cpp 2020-05-04 05:35:56.000000000 +0000 +++ mednafen-1.26.1+dfsg/src/wswan/main.cpp 2020-11-10 06:04:17.000000000 +0000 @@ -618,6 +618,7 @@ #ifdef WANT_DEBUGGER static DebuggerInfoStruct DBGInfo = { + false, "shift_jis", 7 + 1 + 8, // Fixme, probably not right... maximum number of prefixes + 1 for opcode + 4 for operand(go with 8 to be safe) 1, // Instruction alignment(bytes)