diff -Nru audacious-plugins-4.1/config.h.in audacious-plugins-4.2/config.h.in --- audacious-plugins-4.1/config.h.in 2021-02-01 23:53:25.000000000 +0000 +++ audacious-plugins-4.2/config.h.in 2022-07-10 01:12:48.000000000 +0000 @@ -43,9 +43,6 @@ */ #undef HAVE_DCGETTEXT -/* Define if using FFmpeg */ -#undef HAVE_FFMPEG - /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT @@ -55,9 +52,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define if using libav */ -#undef HAVE_LIBAV - /* Define if libcue version is >= 2.0 */ #undef HAVE_LIBCUE2 diff -Nru audacious-plugins-4.1/configure audacious-plugins-4.2/configure --- audacious-plugins-4.1/configure 2021-02-01 23:53:25.000000000 +0000 +++ audacious-plugins-4.2/configure 2022-07-10 01:12:48.000000000 +0000 @@ -1,15 +1,16 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.70 for audacious-plugins 4.1. +# Generated by GNU Autoconf 2.71 for audacious-plugins 4.2. # # -# Copyright (C) 1992-1996, 1998-2017, 2020 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 2001-2021 Audacious developers and others +# Copyright (C) 2001-2022 Audacious developers and others ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -609,8 +610,8 @@ # Identity of this package. PACKAGE_NAME='audacious-plugins' PACKAGE_TARNAME='audacious-plugins' -PACKAGE_VERSION='4.1' -PACKAGE_STRING='audacious-plugins 4.1' +PACKAGE_VERSION='4.2' +PACKAGE_STRING='audacious-plugins 4.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -683,8 +684,6 @@ FILEWRITER_CFLAGS SDL_LIBS SDL_CFLAGS -FFMPEG_LIBS -FFMPEG_CFLAGS QTX11EXTRAS_LIBS QTX11EXTRAS_CFLAGS QTOPENGL_LIBS @@ -732,6 +731,8 @@ MODPLUG_CFLAGS SNDFILE_LIBS SNDFILE_CFLAGS +FFMPEG_LIBS +FFMPEG_CFLAGS WAVPACK_LIBS WAVPACK_CFLAGS MPG123_LIBS @@ -910,6 +911,7 @@ enable_mpg123 enable_aac enable_wavpack +enable_ffaudio enable_sndfile enable_modplug enable_openmpt @@ -941,7 +943,6 @@ enable_qtglspectrum enable_qthotkey enable_coreaudio -with_ffmpeg with_libsdl enable_sdlout enable_filewriter @@ -1000,6 +1001,8 @@ MPG123_LIBS WAVPACK_CFLAGS WAVPACK_LIBS +FFMPEG_CFLAGS +FFMPEG_LIBS SNDFILE_CFLAGS SNDFILE_LIBS MODPLUG_CFLAGS @@ -1044,8 +1047,6 @@ QTOPENGL_LIBS QTX11EXTRAS_CFLAGS QTX11EXTRAS_LIBS -FFMPEG_CFLAGS -FFMPEG_LIBS SDL_CFLAGS SDL_LIBS' @@ -1596,7 +1597,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures audacious-plugins 4.1 to adapt to many kinds of systems. +\`configure' configures audacious-plugins 4.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1664,7 +1665,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of audacious-plugins 4.1:";; + short | recursive ) echo "Configuration of audacious-plugins 4.2:";; esac cat <<\_ACEOF @@ -1685,6 +1686,7 @@ --enable-mpg123 enable MP3 support (default=yes) --enable-aac enable AAC support (default=auto) --enable-wavpack enable WavPack support (default=yes) + --enable-ffaudio enable FFmpeg decoder (default=auto) --enable-sndfile enable libsndfile decoder (default=auto) --enable-modplug enable ModPlug (default=auto) --enable-openmpt enable libopenmpt (default=auto) @@ -1732,9 +1734,6 @@ --without-libintl-prefix don't search for libintl in includedir and libdir --with-system-libxml2=yes,no Use system version of libxml2 (default=yes) - --with-ffmpeg=ffmpeg,libav,none - choose between FFmpeg, libav, or neither - (default=ffmpeg) --with-libsdl=1,2 select which SDL version to use (default=auto) Some influential environment variables: @@ -1804,6 +1803,9 @@ C compiler flags for WAVPACK, overriding pkg-config WAVPACK_LIBS linker flags for WAVPACK, overriding pkg-config + FFMPEG_CFLAGS + C compiler flags for FFMPEG, overriding pkg-config + FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config SNDFILE_CFLAGS C compiler flags for SNDFILE, overriding pkg-config SNDFILE_LIBS @@ -1872,9 +1874,6 @@ C compiler flags for QTX11EXTRAS, overriding pkg-config QTX11EXTRAS_LIBS linker flags for QTX11EXTRAS, overriding pkg-config - FFMPEG_CFLAGS - C compiler flags for FFMPEG, overriding pkg-config - FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config SDL_CFLAGS C compiler flags for SDL, overriding pkg-config SDL_LIBS linker flags for SDL, overriding pkg-config @@ -1945,14 +1944,14 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -audacious-plugins configure 4.1 -generated by GNU Autoconf 2.70 +audacious-plugins configure 4.2 +generated by GNU Autoconf 2.71 -Copyright (C) 2020 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 2001-2021 Audacious developers and others +Copyright (C) 2001-2022 Audacious developers and others _ACEOF exit fi @@ -2410,8 +2409,8 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by audacious-plugins $as_me 4.1, which was -generated by GNU Autoconf 2.70. Invocation command line was +It was created by audacious-plugins $as_me 4.2, which was +generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -4361,7 +4360,10 @@ CFLAGS= fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : @@ -4385,28 +4387,28 @@ done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -ac_prog_cc_stdc_options= -case "x$ac_cv_prog_cc_c11" in #( - x) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } ;; #( - xno) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } ;; #( - *) : - ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c11" - CC="$CC$ac_prog_cc_stdc_options" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c11" != xno + +if test "x$ac_cv_prog_cc_c11" = xno then : - ac_prog_cc_stdc=c11 - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} @@ -4417,9 +4419,9 @@ ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_c_conftest_c89_program +$ac_c_conftest_c99_program _ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99 +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" @@ -4431,28 +4433,28 @@ done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -ac_prog_cc_stdc_options= -case "x$ac_cv_prog_cc_c99" in #( - x) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } ;; #( - xno) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } ;; #( - *) : - ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c99" - CC="$CC$ac_prog_cc_stdc_options" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno + +if test "x$ac_cv_prog_cc_c99" = xno then : - ac_prog_cc_stdc=c99 - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} @@ -4465,8 +4467,7 @@ /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" @@ -4478,34 +4479,25 @@ done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -ac_prog_cc_stdc_options= -case "x$ac_cv_prog_cc_c89" in #( - x) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } ;; #( - xno) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } ;; #( - *) : - ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c89" - CC="$CC$ac_prog_cc_stdc_options" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno + +if test "x$ac_cv_prog_cc_c89" = xno then : - ac_prog_cc_stdc=c89 - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } else $as_nop - ac_prog_cc_stdc=no - ac_cv_prog_cc_stdc=no + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" fi - + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 fi - fi ac_ext=c @@ -4789,19 +4781,22 @@ CXXFLAGS= fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_cxx11+y} +if test ${ac_cv_prog_cxx_11+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_cxx11=no + ac_cv_prog_cxx_11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF -for ac_arg in '' -std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" @@ -4813,36 +4808,35 @@ done rm -f conftest.$ac_ext CXX=$ac_save_CXX - fi -# AC_CACHE_VAL -ac_prog_cxx_stdcxx_options= -case "x$ac_cv_prog_cxx_cxx11" in #( - x) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } ;; #( - xno) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } ;; #( - *) : - ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx11" - CXX=$CXX$ac_prog_cxx_stdcxx_options - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } ;; -esac -if test "x$ac_cv_prog_cxx_cxx11" != xno + +if test "x$ac_cv_prog_cxx_cxx11" = xno then : - ac_prog_cxx_stdcxx=cxx11 - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 - ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_cxx98+y} +if test ${ac_cv_prog_cxx_98+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_cxx98=no + ac_cv_prog_cxx_98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4860,32 +4854,25 @@ done rm -f conftest.$ac_ext CXX=$ac_save_CXX - fi -# AC_CACHE_VAL -ac_prog_cxx_stdcxx_options= -case "x$ac_cv_prog_cxx_cxx98" in #( - x) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } ;; #( - xno) : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } ;; #( - *) : - ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx98" - CXX=$CXX$ac_prog_cxx_stdcxx_options - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 -printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } ;; -esac -if test "x$ac_cv_prog_cxx_cxx98" != xno + +if test "x$ac_cv_prog_cxx_cxx98" = xno then : - ac_prog_cxx_stdcxx=cxx98 - ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } else $as_nop - ac_prog_cxx_stdcxx=no - ac_cv_prog_cxx_stdcxx=no + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 fi - fi ac_ext=c @@ -11359,12 +11346,12 @@ pkg_cv_AUDACIOUS_CFLAGS="$AUDACIOUS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 4.1\""; } >&5 - ($PKG_CONFIG --exists --print-errors "audacious >= 4.1") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 4.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "audacious >= 4.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_AUDACIOUS_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 4.1" 2>/dev/null` + pkg_cv_AUDACIOUS_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 4.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -11376,12 +11363,12 @@ pkg_cv_AUDACIOUS_LIBS="$AUDACIOUS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 4.1\""; } >&5 - ($PKG_CONFIG --exists --print-errors "audacious >= 4.1") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 4.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "audacious >= 4.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_AUDACIOUS_LIBS=`$PKG_CONFIG --libs "audacious >= 4.1" 2>/dev/null` + pkg_cv_AUDACIOUS_LIBS=`$PKG_CONFIG --libs "audacious >= 4.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -11402,19 +11389,19 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "audacious >= 4.1" 2>&1` + AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "audacious >= 4.2" 2>&1` else - AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "audacious >= 4.1" 2>&1` + AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "audacious >= 4.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AUDACIOUS_PKG_ERRORS" >&5 - as_fn_error $? "Cannot find Audacious 4.1; have you installed Audacious yet?" "$LINENO" 5 + as_fn_error $? "Cannot find Audacious 4.2; have you installed Audacious yet?" "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - as_fn_error $? "Cannot find Audacious 4.1; have you installed Audacious yet?" "$LINENO" 5 + as_fn_error $? "Cannot find Audacious 4.2; have you installed Audacious yet?" "$LINENO" 5 else AUDACIOUS_CFLAGS=$pkg_cv_AUDACIOUS_CFLAGS @@ -11634,7 +11621,7 @@ INPUT_PLUGINS="metronom psf tonegen vtx xsf" OUTPUT_PLUGINS="" -EFFECT_PLUGINS="compressor crossfade crystalizer mixer silence-removal stereo_plugin voice_removal echo_plugin" +EFFECT_PLUGINS="bitcrusher compressor crossfade crystalizer mixer silence-removal stereo_plugin voice_removal echo_plugin" GENERAL_PLUGINS="" VISUALIZATION_PLUGINS="" CONTAINER_PLUGINS="asx asx3 audpl m3u pls xspf" @@ -12547,6 +12534,110 @@ + # Check whether --enable-ffaudio was given. +if test ${enable_ffaudio+y} +then : + enableval=$enable_ffaudio; enable_ffaudio=$enableval +else $as_nop + enable_ffaudio=auto +fi + + + have_ffaudio=no + check_allowed ffaudio $enable_ffaudio + if test $enable_ffaudio != no -a $plugin_allowed = yes ; then + +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 +printf %s "checking for FFMPEG... " >&6; } + +if test -n "$FFMPEG_CFLAGS"; then + pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FFMPEG_LIBS"; then + pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" 2>&1` + else + FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FFMPEG_PKG_ERRORS" >&5 + + + if test $enable_ffaudio = yes ; then + as_fn_error $? "Missing dependency for FFmpeg decoder: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" "$LINENO" 5 + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: FFmpeg decoder disabled due to missing dependency: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" >&5 +printf "%s\n" "$as_me: WARNING: FFmpeg decoder disabled due to missing dependency: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" >&2;} + fi + +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + if test $enable_ffaudio = yes ; then + as_fn_error $? "Missing dependency for FFmpeg decoder: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" "$LINENO" 5 + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: FFmpeg decoder disabled due to missing dependency: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" >&5 +printf "%s\n" "$as_me: WARNING: FFmpeg decoder disabled due to missing dependency: libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100" >&2;} + fi + +else + FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS + FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + have_ffaudio=yes + INPUT_PLUGINS="$INPUT_PLUGINS ffaudio" + +fi + fi + + + # Check whether --enable-sndfile was given. if test ${enable_sndfile+y} then : @@ -15703,169 +15794,6 @@ -# Check whether --with-ffmpeg was given. -if test ${with_ffmpeg+y} -then : - withval=$with_ffmpeg; ffmpeg_variant=$withval -else $as_nop - ffmpeg_variant=ffmpeg -fi - - -if test $ffmpeg_variant = ffmpeg ; then - -pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 -printf %s "checking for FFMPEG... " >&6; } - -if test -n "$FFMPEG_CFLAGS"; then - pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FFMPEG_LIBS"; then - pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0" 2>&1` - else - FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FFMPEG_PKG_ERRORS" >&5 - - as_fn_error $? "FFmpeg is not installed or too old (required: libavcodec 53.40.0, libavformat 53.25.0, libavutil 51.27.0). Use --with-ffmpeg=none to disable the ffaudio plugin or --with-ffmpeg=libav to use libav instead." "$LINENO" 5 -elif test $pkg_failed = untried; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "FFmpeg is not installed or too old (required: libavcodec 53.40.0, libavformat 53.25.0, libavutil 51.27.0). Use --with-ffmpeg=none to disable the ffaudio plugin or --with-ffmpeg=libav to use libav instead." "$LINENO" 5 -else - FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS - FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - INPUT_PLUGINS="$INPUT_PLUGINS ffaudio" - -printf "%s\n" "#define HAVE_FFMPEG 1" >>confdefs.h - -fi -elif test $ffmpeg_variant = libav ; then - -pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 -printf %s "checking for FFMPEG... " >&6; } - -if test -n "$FFMPEG_CFLAGS"; then - pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FFMPEG_LIBS"; then - pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0" 2>&1` - else - FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FFMPEG_PKG_ERRORS" >&5 - - as_fn_error $? "libav is not installed or too old (required: libavcodec 53.25.0, libavformat 53.17.0, libavutil 51.18.0)." "$LINENO" 5 -elif test $pkg_failed = untried; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - as_fn_error $? "libav is not installed or too old (required: libavcodec 53.25.0, libavformat 53.17.0, libavutil 51.18.0)." "$LINENO" 5 -else - FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS - FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - INPUT_PLUGINS="$INPUT_PLUGINS ffaudio" - -printf "%s\n" "#define HAVE_LIBAV 1" >>confdefs.h - -fi -fi - - - # Check whether --with-libsdl was given. if test ${with_libsdl+y} then : @@ -17062,8 +16990,8 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by audacious-plugins $as_me 4.1, which was -generated by GNU Autoconf 2.70. Invocation command line was +This file was extended by audacious-plugins $as_me 4.2, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -17130,11 +17058,11 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -audacious-plugins config.status 4.1 -configured by $0, generated by GNU Autoconf 2.70, +audacious-plugins config.status 4.2 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2020 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -18000,7 +17928,7 @@ echo echo " External Decoders" echo " -----------------" -echo " FFmpeg/Libav: $ffmpeg_variant" +echo " FFmpeg: $have_ffaudio" echo " libsndfile: $have_sndfile" echo echo " Chiptunes" @@ -18022,6 +17950,7 @@ echo " Effects" echo " -------" echo " Bauer stereophonic-to-binaural (bs2b): $have_bs2b" +echo " Bitcrusher: yes" echo " Channel Mixer: yes" echo " Crystalizer: yes" echo " Dynamic Range Compressor: yes" diff -Nru audacious-plugins-4.1/configure.ac audacious-plugins-4.2/configure.ac --- audacious-plugins-4.1/configure.ac 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/configure.ac 2022-07-10 01:12:34.000000000 +0000 @@ -5,8 +5,8 @@ dnl Initialize dnl ========== AC_PREREQ([2.59]) -AC_INIT([audacious-plugins], [4.1]) -AC_COPYRIGHT([Copyright (C) 2001-2021 Audacious developers and others]) +AC_INIT([audacious-plugins], [4.2]) +AC_COPYRIGHT([Copyright (C) 2001-2022 Audacious developers and others]) AC_DEFINE_UNQUOTED([PACKAGE], "$PACKAGE_NAME", [Name of package]) AC_DEFINE_UNQUOTED([VERSION], "$PACKAGE_VERSION", [Version number of package]) @@ -33,9 +33,9 @@ dnl Check for Audacious dnl =================== -PKG_CHECK_MODULES(AUDACIOUS, [audacious >= 4.1], +PKG_CHECK_MODULES(AUDACIOUS, [audacious >= 4.2], [], - [AC_MSG_ERROR([Cannot find Audacious 4.1; have you installed Audacious yet?])] + [AC_MSG_ERROR([Cannot find Audacious 4.2; have you installed Audacious yet?])] ) CPPFLAGS="$CPPFLAGS $AUDACIOUS_CFLAGS" @@ -67,7 +67,7 @@ INPUT_PLUGINS="metronom psf tonegen vtx xsf" OUTPUT_PLUGINS="" -EFFECT_PLUGINS="compressor crossfade crystalizer mixer silence-removal stereo_plugin voice_removal echo_plugin" +EFFECT_PLUGINS="bitcrusher compressor crossfade crystalizer mixer silence-removal stereo_plugin voice_removal echo_plugin" GENERAL_PLUGINS="" VISUALIZATION_PLUGINS="" CONTAINER_PLUGINS="asx asx3 audpl m3u pls xspf" @@ -256,6 +256,13 @@ WAVPACK, wavpack >= 4.31) +ENABLE_PLUGIN_WITH_DEP(ffaudio, + FFmpeg decoder, + auto, + INPUT, + FFMPEG, + libavcodec >= 56.60.100 libavformat >= 56.40.101 libavutil >= 54.31.100) + ENABLE_PLUGIN_WITH_DEP(sndfile, libsndfile decoder, auto, @@ -566,24 +573,6 @@ AC_MSG_RESULT([*** CoreAudio output plugin disabled per user request ***]) fi -dnl *** FFaudio - -AC_ARG_WITH([ffmpeg], - AS_HELP_STRING([--with-ffmpeg=ffmpeg,libav,none], [choose between FFmpeg, libav, or neither (default=ffmpeg)]), - [ffmpeg_variant=$withval], [ffmpeg_variant=ffmpeg]) - -if test $ffmpeg_variant = ffmpeg ; then - PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 53.40.0 libavformat >= 53.25.0 libavutil >= 51.27.0], - [INPUT_PLUGINS="$INPUT_PLUGINS ffaudio" - AC_DEFINE([HAVE_FFMPEG], [1], [Define if using FFmpeg])], - [AC_MSG_ERROR([FFmpeg is not installed or too old (required: libavcodec 53.40.0, libavformat 53.25.0, libavutil 51.27.0). Use --with-ffmpeg=none to disable the ffaudio plugin or --with-ffmpeg=libav to use libav instead.])]) -elif test $ffmpeg_variant = libav ; then - PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 53.25.0 libavformat >= 53.17.0 libavutil >= 51.18.0], - [INPUT_PLUGINS="$INPUT_PLUGINS ffaudio" - AC_DEFINE([HAVE_LIBAV], [1], [Define if using libav])], - [AC_MSG_ERROR([libav is not installed or too old (required: libavcodec 53.25.0, libavformat 53.17.0, libavutil 51.18.0).])]) -fi - dnl SDL Output dnl ========== @@ -748,7 +737,7 @@ echo echo " External Decoders" echo " -----------------" -echo " FFmpeg/Libav: $ffmpeg_variant" +echo " FFmpeg: $have_ffaudio" echo " libsndfile: $have_sndfile" echo echo " Chiptunes" @@ -770,6 +759,7 @@ echo " Effects" echo " -------" echo " Bauer stereophonic-to-binaural (bs2b): $have_bs2b" +echo " Bitcrusher: yes" echo " Channel Mixer: yes" echo " Crystalizer: yes" echo " Dynamic Range Compressor: yes" diff -Nru audacious-plugins-4.1/debian/audacious-plugins-data.install audacious-plugins-4.2/debian/audacious-plugins-data.install --- audacious-plugins-4.1/debian/audacious-plugins-data.install 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/audacious-plugins-data.install 2017-08-24 14:19:06.000000000 +0000 @@ -1,2 +1 @@ usr/share -debian/skins/* usr/share/audacious/Skins diff -Nru audacious-plugins-4.1/debian/changelog audacious-plugins-4.2/debian/changelog --- audacious-plugins-4.1/debian/changelog 2022-03-13 12:16:11.000000000 +0000 +++ audacious-plugins-4.2/debian/changelog 2017-12-06 01:18:33.000000000 +0000 @@ -1,800 +1,5 @@ -audacious-plugins (4.1-2build3) jammy; urgency=medium +audacious-plugins (4.2-0build1~ubuntu2204) jammy; urgency=medium - * Rebuild against new old libsndio7.0. - - -- Gianfranco Costamagna Sun, 13 Mar 2022 13:16:11 +0100 - -audacious-plugins (4.1-2build2) jammy; urgency=medium - - * Rebuild against new old libsndio7.0. - - -- Gianfranco Costamagna Sat, 12 Mar 2022 05:59:59 +0100 - -audacious-plugins (4.1-2build1) jammy; urgency=medium - - * Rebuild against new libsndio7.1. - - -- Gianfranco Costamagna Mon, 07 Mar 2022 12:12:20 +0100 - -audacious-plugins (4.1-2) unstable; urgency=medium - - * Re-add erroneously removed bindnow setting. - - -- Andrej Shadura Sun, 02 Jan 2022 14:17:15 +0100 - -audacious-plugins (4.1-1) unstable; urgency=medium - - [ Andrej Shadura ] - * New upstream release (Closes: #973678). - * Add new build dependency on libarchive-dev. - * Bump versioned depencencies. - * Relax the dependency on a-p-data. - * Bump debhelper from old 12 to 13. - + debian/rules: Drop --fail-missing argument to dh_missing, which - is now the default. - * Fix cross builds. - * Clean up debian/rules. - - [ Helmut Grohne ] - * Do not hard code build architecture pkg-config (Closes: #901161). - - -- Andrej Shadura Sun, 02 Jan 2022 13:46:08 +0100 - -audacious-plugins (4.0.5-2) unstable; urgency=medium - - * Team upload - - [ Debian Janitor ] - * Update standards version to 4.5.1, no changes needed. - * Avoid explicitly specifying -Wl,--as-needed linker flag. - - [ Sebastian Ramacher ] - * Revert "Fix the dependency on a-p-data to unbreak binNMUs" (Closes: - #996490) - * debian/control: Bump Standards-Version - - -- Sebastian Ramacher Thu, 14 Oct 2021 22:33:04 +0200 - -audacious-plugins (4.0.5-1) unstable; urgency=medium - - * New upstream release. - * Fix the dependency on audacious-plugins-data to unbreak binNMUs. - - -- Andrej Shadura Wed, 06 Jan 2021 16:09:51 +0100 - -audacious-plugins (4.0.4-1) unstable; urgency=medium - - [ Andrej Shadura ] - * New upstream bugfix release. - - [ Jonathan Rubenstein ] - * Add libopenmpt-dev as a build dependency. This allows the OpenMPT input - plugin to build and get included in the package (Closes: #955276). - - -- Andrej Shadura Wed, 03 Jun 2020 15:58:28 +0200 - -audacious-plugins (4.0.2-1) unstable; urgency=medium - - * New upstream release. - - -- Andrej Shadura Sun, 19 Apr 2020 12:05:54 +0200 - -audacious-plugins (4.0-3) unstable; urgency=medium - - * Reenable Qt builds. - * Build-depend on a suffiently new Audacious. - * Wrap long lines in changelog entries: 1.4.1-2, 1.3.5-4, 1.3.5-3, 1.3.5-2, - 1.3.5-1, 1.3.4-1, 1.2.5-1. - * Set upstream metadata fields: Repository. - * Remove obsolete field Name from debian/upstream/metadata (already present - in machine-readable debian/copyright). - * Fix day-of-week for changelog entry 2.3-2. - * Bump Standards-Version to 4.5.0. - - -- Andrej Shadura Sat, 18 Apr 2020 12:59:50 +0200 - -audacious-plugins (4.0-2) unstable; urgency=medium - - * Add the Debian XMMS skin (Closes: #504754). - * Update copyrights. - - -- Andrej Shadura Mon, 23 Mar 2020 10:34:17 +0100 - -audacious-plugins (4.0-1) unstable; urgency=medium - - [ Andrej Shadura ] - * New upstream release. - * Update the copyrights as per upstream commit 485d513. - * Update Uploaders. - * Build with GTK+ without Qt. - * Require Audacious 4.0. - * Use debhelper compat 12. - - [ Ondřej Nový ] - * Use debhelper-compat instead of debian/compat. - - -- Andrej Shadura Sun, 22 Mar 2020 22:19:22 +0100 - -audacious-plugins (3.10.1-1) unstable; urgency=medium - - * New upstream release. - - -- Andrej Shadura Wed, 20 Feb 2019 19:41:20 +0100 - -audacious-plugins (3.10-1) unstable; urgency=medium - - * Cherry-picked upstream version 3.10 - (Closes: #912315) - * debian/control - - Bumped debhelper to >= 11. - - Bumped compat to 11. - - Bumped Standards to 4.2.1, no changes needed. - - Use secure homepage uri. - - Added myself to uploaders. - - Fixed Breaks to audacious (<< 3.10) - * debian/rules: - - Added override_dh_missing. - - Fixed host OS query. - * Fixed watch file, use secure uri - * Added upstream metadata - * Updated debian/copyright - - -- Alf Gaida Sat, 03 Nov 2018 20:22:13 +0100 - -audacious-plugins (3.9-1) unstable; urgency=medium - - * Team upload. - - [ Mattia Rizzolo ] - * debian/control: - + Use /git/ instead of /cgit/ in Vcs-*. - + Bump Standards-Version to 4.1.0, no changes needed. - + Drop build-dependency on dh-autoreconf, implied by debhelper >= 10. - + Update Recommends/Breaks for audacious 3.9. - - [ Mateusz Łukasik ] - * New upstream release. - * debian/control: - - Bump minimal audacious version to 3.8. - - Bump Standards-Version to 3.9.8. - * Bump debhelper version to 10. - * Drop qt5 support. - * Update debian/copyright. - * debian/rules: Add hardening. - - [ Simon Quigley ] - * New upstream version. - * Run wrap-and-sort. - * Build-dep on the latest audacious-dev. - - -- Simon Quigley Thu, 24 Aug 2017 09:19:06 -0500 - -audacious-plugins (3.7.2-2.1) unstable; urgency=medium - - * Non-maintainer upload. - * Drop build-dependency on oss4-dev for Linux kernel (Closes: #852984) - - -- Simon McVittie Sun, 29 Jan 2017 11:54:36 +0000 - -audacious-plugins (3.7.2-2) unstable; urgency=medium - - * Team upload. - * debian/rules: - - Add disable-qtglspectrum on armel and armhf to fix FTBFS. (Closes: - #820599) - - -- Mateusz Łukasik Sun, 10 Apr 2016 22:23:43 +0200 - -audacious-plugins (3.7.2-1) unstable; urgency=medium - - [ Andrew Shadura ] - * Team upload. - * Build for Qt5 UI. - - [ Mateusz Łukasik ] - * New upstream release. - * debian/control: - - Bump Build-Depends on audacious to 3.7. - - Bump Standards-Version to 3.9.7. - - Drop audacious-plugins-dbg package. - * debian/watch: - - Bump version to 4. - * Update debian/copyright. - - -- Mateusz Łukasik Fri, 08 Apr 2016 10:24:39 +0200 - -audacious-plugins (3.6.2-2) unstable; urgency=medium - - * Team upload. - * Upload to unstable. - - -- Sebastian Ramacher Sat, 19 Dec 2015 21:36:26 +0100 - -audacious-plugins (3.6.2-1) experimental; urgency=medium - - * Team upload. - - [ Mateusz Łukasik ] - * New upstream release. - * debian/control: - - Bump Build-Depends on audacious to 3.6. - - Bump Standards-Version to 3.9.6. - - Update VCS URL's. - - [ Sebastian Ramacher ] - * debian/rules: Build with -Wl,--as-needed. - * debian/control: - - Build-Depends: - + Removed unused Build-Depends. - + Change libgtk-3-dev to libgtk2.0-dev. - + Change libsdl1.2-dev to libsdl2-dev. - + Add libsndio-dev. - + Add libsoxr-dev. - + Add libxml2-dev. - + Add libdbus-glib-1-dev. - - Remove obsolete Breaks+Replaces - - Tighten audacious-plugins-data Depends. - - Removed no longer needed Pre-Depends. - * debian/copyright: - - Update file paths. - - Remove unused paragraphs. - - -- Sebastian Ramacher Tue, 15 Dec 2015 01:03:51 +0100 - -audacious-plugins (3.5-1) unstable; urgency=low - - [ Alin Andrei ] * New upstream release - * Bump Standards-Version to 3.9.5 - - [ Andrew Shadura ] - * Drop no longer needed patches. - * Clean up the build in debian/clean. - - -- Alin Andrei Tue, 01 Jul 2014 09:25:49 +0200 - -audacious-plugins (3.4.3-2) unstable; urgency=medium - - * Team upload. - - [ Jackson Doak ] - * New upstream release. - * Change libsid package to re-enable SID support. Closes: #716776 - - [ Reinhard Tartler ] - * Add patch from Anton Khirnov to fix FTBFS against libav10, Closes: #739212 - - -- Reinhard Tartler Sun, 16 Mar 2014 16:54:56 -0400 - -audacious-plugins (3.4.1-1) unstable; urgency=low - - * Team upload. - * New upstream release. - * Bump build-dep on audacious-dev. - * Build-dep on automake. - * Avoid FTBFS on distclean failure. - * Remove myself from the Uploaders field. - - -- Alessio Treglia Tue, 03 Sep 2013 10:08:48 +0100 - -audacious-plugins (3.4-2) unstable; urgency=low - - * Add patch taken from Ubuntu to build ffaudio plugin. (LP: #1080059) - * Enable autoreconf. - - -- Alessio Treglia Fri, 16 Aug 2013 11:02:35 +0100 - -audacious-plugins (3.4-1) unstable; urgency=low - - * New upstream release. - * Bump build-dep on audacious-dev. - * Update debian/copyright. - * Remove libmcs-dev from Build-Depends. - - -- Alessio Treglia Sun, 07 Jul 2013 17:13:19 +0100 - -audacious-plugins (3.3.4-2) unstable; urgency=low - - * Upload to unstable. - - -- Alessio Treglia Tue, 07 May 2013 09:42:27 +0200 - -audacious-plugins (3.3.4-1) experimental; urgency=low - - * New upstream release. - * Bump Standards. - - -- Alessio Treglia Tue, 05 Feb 2013 08:30:55 +0000 - -audacious-plugins (3.3.3-1) experimental; urgency=low - - * New upstream release. - - -- Alessio Treglia Mon, 17 Dec 2012 20:40:48 +0000 - -audacious-plugins (3.3.2-1) experimental; urgency=low - - * New upstream release. - * Append myself to the Uploaders field. - - -- Alessio Treglia Mon, 10 Dec 2012 10:41:34 +0000 - -audacious-plugins (3.3.1-1) experimental; urgency=low - - * Team upload. - * New upstream release. - * Bump build-dep on audacious-dev >= 3.3. - * Remove debian/patches/ffaudio.diff, no longer needed. - * Remove debian/patches/bp-lirc.patch, applied upstream. - - -- Alessio Treglia Thu, 06 Sep 2012 19:32:38 +0200 - -audacious-plugins (3.2.3-1) unstable; urgency=low - - * Team upload. - * New upstream bugfix release. - * Refresh patches. - - -- Alessio Treglia Sat, 02 Jun 2012 13:33:01 +0200 - -audacious-plugins (3.2.2-1) unstable; urgency=low - - * Team upload. - - [ Alessio Treglia ] - * New upstream release. - * Refresh debian/patches/ffaudio.diff. - * Remove debian/patches/gmodule.patch, applied upstream. - - [ Benjamin Drung ] - * Remove unused build-dependency on libprojectm-dev, which is - being removed from armel. Thanks to Colin Watson - - -- Alessio Treglia Sat, 19 May 2012 17:39:19 +0200 - -audacious-plugins (3.2.1-4) unstable; urgency=low - - * Team upload. - * Backport lirc plugin from upstream. - - -- Benjamin Drung Wed, 28 Mar 2012 22:24:20 +0200 - -audacious-plugins (3.2.1-3) unstable; urgency=low - - * Team upload. - * Build with GTK3, drop GTK2's stuff. - - -- Alessio Treglia Thu, 01 Mar 2012 00:18:45 +0100 - -audacious-plugins (3.2.1-2) unstable; urgency=low - - * Team upload. - * Add gmodule.patch to fix build failure on Ubuntu. - * Bump Standards-Version to 3.9.3, no changes needed. - * Update machine-readable copyright Format to 1.0. - * Do not disable PSF any more. - * Run autoconf again to really apply the FFaudio patch - (Closes: #640931, #641701, LP: #880192, #922985). - - -- Benjamin Drung Sat, 25 Feb 2012 17:57:39 +0100 - -audacious-plugins (3.2.1-1) unstable; urgency=low - - * Team upload. - * New upstream bugfix release. - * Remove correct_spelling_error.diff, applied upstream. - * Refresh ffaudio.diff. - * Reintroduce src/psf/*, it seems DFSG clean now. - * Fix and update debian/copyright. - * Update watch file. - - -- Alessio Treglia Mon, 20 Feb 2012 00:28:16 +0100 - -audacious-plugins (3.2-2) unstable; urgency=low - - [ Cyril Lavier ] - * debian/control: - + Clean Build-deps. (Closes: #634505) - + Removed the TTA support has it's not supported - anymore. (Closes: #650847) - * Performed review on old bugs. (Closes: #589756, #644554, #645347, #636847) - * Added ffaudio.diff patch to make audacious work with current debian - unstable version of ffaudio. (Closes: #641701) - - [ Alessio Treglia ] - * Introduce Multiarch, split audacious-plugins in: - - audacious-plugins, which is Multi-Arch: same and contains runtime - objects. - - audacious-plugins-data to provide architecture-independent data files; - it is set to Multi-Arch: foreign - * Pass -Sautoconf to 'dh' sequencer rather than call autoconf in - override_dh_auto_configure. - - -- Cyril Lavier Sun, 19 Feb 2012 12:35:33 +0100 - -audacious-plugins (3.2-1) unstable; urgency=low - - * New upstream release. (Closes: #657095) - * debian/control: - + Added build-deps necessary for mp3, bs2b and modplug support. - + Enabling OSS4 support. (Closes: #632303) - + Raised the build-dep of audacious-dev to 3.2. - * debian/rules: - + Removed "--enable-chardet" and "--disable-altivec" config flags as they - are not used anymore. - * Add correct_spelling_error.diff to suppress the lintian warning (patch - submitted upstream) - - -- Cyril Lavier Fri, 27 Jan 2012 09:02:40 +0100 - -audacious-plugins (2.4.4-1) unstable; urgency=low - - * New upstream release. - - Fix FTBFS with GCC 4.5 (Closes: #621989) - * Upload to unstable. - * debian/control: - - Update versioned dependencies according to upstream changes. - - Bump Standards-Version to 3.9.2 (no changes needed). - - Since the package will be building against the new FFMpeg libs, - fix the problem of depending on old uninstallable libav* - packages (Closes: #617603) - - -- Bilal Akhtar Sun, 10 Apr 2011 18:56:21 +0300 - -audacious-plugins (2.4.3-1) experimental; urgency=low - - * New upstream release. - * debian/control: - - Bump build-depend on audacious-dev to >= 2.4.3. - - Bump Recommends,Breaks,Replaces on audacious to 2.4.3. - - -- Bilal Akhtar Tue, 25 Jan 2011 15:27:50 +0100 - -audacious-plugins (2.4.2-1) experimental; urgency=low - - * New upstream release. - - Fixes error with alsa-gapless and dmix (Closes: #585574). - - Remove "Audacious standard menu" from status icon (Closes: #485491). - - Allow updating FLAC tags (Closes: #586453, LP: #211946). - - Adds scrobbler plugin again (Closes: #552466, #584962, LP: #568651). - - Fix volume decreases with every new song with PulseAudio output - (Closes: #544097). - - Fix shows meaningless timer values when playing Internet streams - (Closes: #584249). - - Provides RoarAudio plugin (Closes: #589756). - - Fix 100% CPU load on pause in amidi-plugin (Closes: #598808). - * Drop all patches. - * Drop override_dh_auto_clean. - * Bump build dependency on audacious-dev to >= 2.4.2. - * Bump breaks & replaces of audacious to 2.4.2. - * Update my email address. - - -- Benjamin Drung Wed, 29 Dec 2010 23:35:46 +0100 - -audacious-plugins (2.3+dfsg-1) unstable; urgency=low - - * Put Audacious under the umbrella of the Multimedia Maintainers team. - * Update debian/copyright. - thanks to Luca Falavigna - * Remove psf plugin from source because its license does not comply to the - DFSG and add a NEWS entry (Closes: #594519). - * Bump Standards-Version to 3.9.1 (no changes required). - - -- Benjamin Drung Sun, 12 Dec 2010 18:36:24 +0100 - -audacious-plugins (2.3-2) unstable; urgency=low - - [Chris Taylor] - * Update debian/copyright. - * Upload to unstable. - - [Benjamin Drung] - * Build-Depend on libav* for ffaudio. - * Add myself to uploaders. - * Break and replace audacious (<< 2.3) (Closes: #577283). - * Remove version libjack build dependencies. - * Drop audacious-plugins-dev package. "apt-get build-dep audacious-plugins" - will do the same job. - * audacious-plugins recommends audacious instead of depending on it to - break the circular dependency (Closes: #528588). - * Enable parallel build. - * Add panel-icon.patch to make panel icon themable (LP: #563043). - * Disable SSE2 on i386 (LP: #565381). - - -- Chris Taylor Mon, 10 May 2010 18:15:26 -0700 - -audacious-plugins (2.3-1) experimental; urgency=low - - * New uploader. - - Remove old uploaders. - * New upstream release. - * Bump standards version. - * Use source format 3.0 (quilt). - * Remove audacious-plugins-extra. - - Add replaces in debian/control. - * Updates to debian/copyright. - * Use dh7 in debian/rules. - - -- Chris Taylor Sat, 03 Apr 2010 01:16:52 +0000 - -audacious-plugins (2.1-1.1) unstable; urgency=low - - * NMU from Moenchengladbach BSP - * Fixes FTBFS due to conflicting types for jack_free (Closes: #560510) - [debian/patches/10_jack_fix_conflicting_types.diff] - * Fixes FTBFS on kFreeBSD (Closes: #543329) - - -- Axel Beckert Sun, 24 Jan 2010 01:09:51 +0100 - -audacious-plugins (2.1-1) unstable; urgency=low - - * New upstream release. - - Fix a file descriptor leak in madplug. (Closes: #524470) - - -- William Pitcock Tue, 07 Jul 2009 20:57:23 -0500 - -audacious-plugins (2.0.1-3) unstable; urgency=low - - * Fix deadlock in vorbis plugin which was dependent on a codepath that only - holds true with certain ALSA output methods (but not all of them). - (Closes: #531835) - - -- William Pitcock Thu, 04 Jun 2009 19:40:12 -0500 - -audacious-plugins (2.0.1-2) unstable; urgency=low - - * Fix improper dependency on audacious-plugins-dev. (Closes: #531776) - - -- William Pitcock Thu, 04 Jun 2009 02:42:20 -0500 - -audacious-plugins (2.0.1-1) unstable; urgency=low - - * New upstream release. - - New skins plugin with many less design flaws than the old XMMS code. - (Closes: #456558, #460802, #500081) - - Do not crash when invalid monkey's audio chunks are encountered. - (Closes: #514674) - - * Acknowledge NMU, thanks Rafael for your work. - - debian/patches/004-compile-with-libmtp8.patch: dropped, - different patch integrated upstream to solve the same issue. - - * debian/audacious-plugins.install: add crossfade.so, skins.so. - * debian/audacious-plugins-extra.install: add icecast.so, psf2.so, xsf.so - * debian/control: enable projectm again. - * debian/patches/*: dropped, integrated upstream. - * debian/control: remove dependency on libmpcdec-dev and disable musepack - support, as musepack sv7 and sv8 will be regained by audacious-ffaudio - shortly, e.g. before squeeze ships. - (Closes: #518679, #476383) - - -- William Pitcock Fri, 29 May 2009 21:36:59 -0500 - -audacious-plugins (1.5.1-2.1) unstable; urgency=low - - * NMU for helping with the libmtp7 -> libmtp8 transition, with the - authorization of the Release Team - (http://lists.debian.org/debian-release/2009/03/msg00085.html) - * debian/patches/004-compile-with-libmtp8.patch: New patch for fixing - the new number of arguments in function LIBMTP_Send_Track_From_File - (closes: #516559) - * debian/audacious-plugins-extra.install: Do not install musepack.so, as - this plugin is not built anymore when the current version of - libmpcdec-dev now in unstable (1:0.1~r435-1) is used. This is related - to Bug#518679. In this bug report, a patch was proposed for - src/musepack/libmpc.h, but it does actually not work. This version of - audacious-plugins-extra will not ship the musepack plugin as in the - previous version. - - -- Rafael Laboissiere Sun, 08 Mar 2009 16:24:32 +0100 - -audacious-plugins (1.5.1-2) unstable; urgency=low - - * debian/patches/003-fix-ftbfs-ia64.patch: Fix FTBFS on ia64. - - -- William Pitcock Thu, 17 Jul 2008 20:25:56 -0500 - -audacious-plugins (1.5.1-1) unstable; urgency=low - - * New upstream release. Highlights include: - - HTTP GET support is improved. (Closes: #466320) - - Improved HTTP proxy support. (Closes: #483029) - - Many bugs in the neon plugin have been fixed. (Closes: #468926) - * Packaging improvements: - - debian/control, debian/rules: Add audacious-plugins-dbg, which - contains debugging symbols for the plugins. Please install this - package before reporting segfaults, it makes bug fixing easier. - - debian/control, debian/rules, debian/patches/*: switch to Quilt. - - debian/control: update my e-mail address. - - debian/audacious-plugins-{extra,dev}.links: remove pointless symlink, - the copyright file isn't that large. - - -- William Pitcock Fri, 06 Jun 2008 19:29:59 -0500 - -audacious-plugins (1.5.0-2) unstable; urgency=low - - * Remove unnecessary Pre-Depends. (Closes: #471041) - - -- William Pitcock Thu, 15 May 2008 06:21:07 -0500 - -audacious-plugins (1.5.0-1) unstable; urgency=low - - * New upstream release. Highlights include: - - Usage of libsndfile for WAV playback. (Closes: #452563) - - Fixed FTBFS with gcc 4.3. (Closes: #455291) - - More tolerant FLAC plugin. (Closes: #437362) - - Improved support for pulse audio. (Closes: #459211) - - Corrected discid calculation with cdaudio-ng. (Closes: #464612) - - New from-scratch Monkey's Audio codec. (Closes: #463247) - - Rewritten scrobbler plugin. (Closes: #444095) - * debian/audacious-plugins.install: Add demac.so to the target list. - - -- William Pitcock Thu, 13 Mar 2008 21:42:39 -0500 - -audacious-plugins (1.4.5-1) unstable; urgency=low - - * New upstream release, no packaging changes needed. Highlights include: - - Major fixing of the last.fm submission plugin. (Closes: #431956) - - Fix handling of HTTP redirects. (Closes: #451519) - - -- William Pitcock Thu, 31 Jan 2008 14:51:34 -0600 - -audacious-plugins (1.4.4-1) unstable; urgency=low - - * New upstream release. No packaging changes needed. Highlights include: - - WMA plugin supports URIs properly. (Closes: #458479) - - M3U playlists support relative paths without crashing. - - -- William Pitcock Tue, 01 Jan 2008 15:20:07 -0600 - -audacious-plugins (1.4.2-1) unstable; urgency=low - - * New upstream release. - * Added William Pitcock (upstream) as co-maintainer. - * Add libimlib2-dev (>= 1.1.0) b-depend to build rootvis plugin. - * Bump Standards-Version to 3.7.3. - - -- Adam Cécile (Le_Vert) Tue, 11 Dec 2007 19:28:20 +0100 - -audacious-plugins (1.4.1-2) unstable; urgency=low - - * Configure with --chardet (Closes: #452413). - * Add b-deps on libprojectm-dev and add the plugin to extra package - (Closes: #451487). - - -- Adam Cécile (Le_Vert) Fri, 23 Nov 2007 22:51:00 +0100 - -audacious-plugins (1.4.1-1) unstable; urgency=low - - * New upstream release. - * Bump audacious b-deps/depends (API fix). - - -- Adam Cécile (Le_Vert) Wed, 21 Nov 2007 21:40:57 +0100 - -audacious-plugins (1.4.0-1) unstable; urgency=low - - * New upstream release. - * Bump libvorbis-dev b-dep to (>= 1.2). - - -- Adam Cécile (Le_Vert) Tue, 13 Nov 2007 11:39:33 +0100 - -audacious-plugins (1.4.0~beta4-1) unstable; urgency=low - - * New upstream release: - - Drop libaudacious stuff from debian/rules (not used anymore), - - Add 002-Disable_Makefile_silent_output patch (new build system), - - Add libneon build depend, - - Add libcdio-cdda-dev and libcddb-dev build depend, - - Many changes to audacious-plugins(-extra).install, - - Add libmtp-dev build depend. - * Use new dpkg 'homepage' field. - * Update debian/watch. - - -- Adam Cécile (Le_Vert) Sun, 28 Oct 2007 22:04:21 +0100 - -audacious-plugins (1.3.5-4) unstable; urgency=low - - * Move libcurl.so to audacious-plugins package (needed to play online streams) - (Closes: #444777). - * audacious-plugins conflicts with audacious-plugins-extra << 1.3.5-4 to allow - update. - * Add libbinio-dev b-d to build adplug input backend and install it to - audacious-plugins-extra package. - - -- Adam Cécile (Le_Vert) Sat, 13 Oct 2007 21:32:25 +0200 - -audacious-plugins (1.3.5-3) unstable; urgency=low - - * Add audacious (>> 1.3), audacious (<< 1.4~) dependency to - audacious-plugins(-extra) to support Etch partial upgrade. - * Update build-depends and audacious-plugins-dev dependencies with the same - way. - - -- Adam Cécile (Le_Vert) Sun, 08 Jul 2007 19:33:50 +0200 - -audacious-plugins (1.3.5-2) unstable; urgency=low - - * audacious-plugins and audacious-plugins-extra now depend on libaudaciousX - (Closes: #431499, #431482). - * Use -[ ! -f Makefile ] || $(MAKE) distclean instead of -$(MAKE) distclean - (fix lintian warning). - * Add || exit 1 in debian/rules loops. - - -- Adam Cécile (Le_Vert) Sun, 08 Jul 2007 16:14:35 +0200 - -audacious-plugins (1.3.5-1) unstable; urgency=low - - * New upstream release. - * Drop 002-Disable_SSE2 patch, fixed upstream. - * Build without sse2 and altivec. - * Make libfluidsynth-dev build-depend Linux only, as it indirectly depends on - ALSA. - * Only try to install evdev plugin on Linux systems. - * audacious-plugins-dev now depends on libcurl4-gnutls-dev (Closes: #428806). - - -- Adam Cécile (Le_Vert) Wed, 13 Jun 2007 16:02:58 +0200 - -audacious-plugins (1.3.4-2) unstable; urgency=low - - * Make build being more verbose, (make V=1). - * Always disable SSE2 (Closes: #423833). - * Add missing libxcomposite-dev build-depends (Closes: #425210). - - -- Adam Cécile (Le_Vert) Tue, 22 May 2007 09:51:27 +0200 - -audacious-plugins (1.3.4-1) unstable; urgency=low - - * New upstream release. - - Drop 001-Move_amidi_backend_in_usr_lib_audacious patch, fixed upstream. - - Update 001-Fix_FTBFS_with_gcc4.3 patch. - * Update CURL build-depends to libcurl4-gnutls-dev to fix FTBFS - (Closes: #423450). - - -- Adam Cécile (Le_Vert) Sat, 12 May 2007 22:17:05 +0200 - -audacious-plugins (1.3.3-2) unstable; urgency=low - - * Extra plugins now pre-depends on plugins to avoid overwrites. - * Add missing includes to fix FTBFS with GCC 4.3 (Closes: #417115). - * Add libmcs-dev to audacious-dev depends (Closes: #420592). - * Install aosd plugin to audacious-plugins-extra. - - -- Adam Cécile (Le_Vert) Mon, 23 Apr 2007 08:59:19 +0200 - -audacious-plugins (1.3.3-1) unstable; urgency=low - - * New upstream release. - * Update debian/watch. - * Remove 001-Fix-FTBFS-on-arm patch, fixed upstream. - * Add 001-Move_amidi_backend_in_usr_lib_audacious patch. - * Enable new plugins (Closes: #408691). - - -- Adam Cécile (Le_Vert) Tue, 20 Mar 2007 10:23:18 +0100 - -audacious-plugins (1.2.5-1) unstable; urgency=low - - * New upstream release. - * Fix FTBFS on arm (Closes: 400482). - * Touch mk/rules.mk to avoid configure to be run when building in a clean - sources tree. - * Don't build PulseAudio backend on hurd/kfreebsd (FTBFS). - - -- Adam Cécile (Le_Vert) Sun, 26 Nov 2006 23:30:15 +0100 - -audacious-plugins (1.2.2-3) unstable; urgency=low - - * Conflicts with audacious (<< 1.2) (Closes: #399448). - - -- Adam Cécile (Le_Vert) Mon, 20 Nov 2006 08:15:57 +0100 - -audacious-plugins (1.2.2-2) unstable; urgency=low - - * Build-depend on audacious-dev (>= 1.2.1-2) to avoid using a buggy - audacious-dev package. - - -- Adam Cécile (Le_Vert) Sun, 19 Nov 2006 18:06:40 +0100 - -audacious-plugins (1.2.2-1) unstable; urgency=low - - * Initial release. - -- Adam Cécile (Le_Vert) Fri, 3 Nov 2006 18:24:53 +0100 + -- pandajim (key for lives deb) Wed, 06 Dec 2017 01:18:33 +0000 diff -Nru audacious-plugins-4.1/debian/compat audacious-plugins-4.2/debian/compat --- audacious-plugins-4.1/debian/compat 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/debian/compat 2017-08-24 13:10:12.000000000 +0000 @@ -0,0 +1 @@ +10 diff -Nru audacious-plugins-4.1/debian/control audacious-plugins-4.2/debian/control --- audacious-plugins-4.1/debian/control 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/control 2017-12-06 01:18:33.000000000 +0000 @@ -1,15 +1,15 @@ Source: audacious-plugins Section: sound Priority: optional -Maintainer: Debian Multimedia Maintainers +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian Multimedia Maintainers Uploaders: - Andrej Shadura , - Alf Gaida , - Mateusz Łukasik + Chris Taylor , + Bilal Akhtar , + Cyril Lavier Build-Depends: - audacious-dev (>= 4.1~), - debhelper-compat (= 13), - libarchive-dev, + audacious-dev (>= 3.8), + debhelper, libasound2-dev (>= 1.0) [linux-any], libavcodec-dev (>= 4:0.6.1), libavformat-dev (>= 4:0.6.1), @@ -35,9 +35,7 @@ libneon27-gnutls-dev (>= 0.26), libnotify-dev, libogg-dev (>= 1.0), - libopenmpt-dev (>= 0.2), libpulse-dev (>= 0.9) [linux-any], - libqt5opengl5-dev, libsamplerate0-dev (>= 0.0.15), libsdl2-dev, libsidplayfp-dev, @@ -49,25 +47,25 @@ libwavpack-dev (>= 4.31), libxcomposite-dev, libxml2-dev, - oss4-dev [!linux-any], qtbase5-dev, - qtmultimedia5-dev, -Standards-Version: 4.6.0 -Homepage: https://www.audacious-media-player.org/ -Vcs-Browser: https://salsa.debian.org/multimedia-team/audacious-plugins -Vcs-Git: https://salsa.debian.org/multimedia-team/audacious-plugins.git + qttools5-dev-tools, + oss4-dev [!linux-any] +Standards-Version: 4.1.0 +Homepage: http://www.audacious-media-player.org/ +Vcs-Browser: https://anonscm.debian.org/git/pkg-multimedia/audacious-plugins.git +Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/audacious-plugins.git Package: audacious-plugins Architecture: any Multi-Arch: same Depends: - audacious-plugins-data (>= ${source:Version}), + audacious-plugins-data (= ${source:Version}), ${misc:Depends}, ${shlibs:Depends} Recommends: - audacious (>= 4.1~) + audacious (>= 3.9) Breaks: - audacious (<< 4.1~) + audacious (<< 3.9) Description: Base plugins for audacious Audacious is a fork of beep-media-player which supports winamp skins and many codecs. diff -Nru audacious-plugins-4.1/debian/copyright audacious-plugins-4.2/debian/copyright --- audacious-plugins-4.1/debian/copyright 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/copyright 2017-08-24 14:19:06.000000000 +0000 @@ -1,48 +1,15 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: audacious-plugins -Source: https://www.audacious-media-player.org/ +Source: http://www.audacious-media-player.org/ Files: * -Copyright: 2001-2020, Audacious development team - 2017-2018, René J.V. Bertin - 2017, John Lindgren and Eugene Paskevich - 2015-2016, Róbert Čerňanský - 2015-2016, Róbert Čerňanský and John Lindgren - 2015, Eugene Paskevich - 2014, Michał Lipski and Ariadne Conill - 2013, Martin Steiger and John Lindgren - 2012-2013, Luís Picciochi Oliveira - 2011-2017, John Lindgren and René J.V. Bertin - 2011-2012, John Lindgren, Ariadne Conill, and Michał Lipski - 2011, Joachim Bengtsson - 2010-2017, Michał Lipski and John Lindgren - 2010-2017, John Lindgren - 2010-2015, Michał Lipski - 2010-2014, Ariadne Conill - 2010-2013, Ariadne Conill and John Lindgren - 2010, Spotify AB - 2009-2012, Ariadne Conill, Tomasz Moń, Michał Lipski, and John Lindgren - 2007-2008, R. Belmont and Richard Bannister - 2007-2008, Sascha Hlusiak - 2006-2014, Giacomo Lozito, John Lindgren, and Thomas Lange - 2006-2014, Ariadne Conill - 2005-2007, Giacomo Lozito - 2000-2008, Richard F. Bannister -License: BSD-2-clause +Copyright: 2001-2015 Audacious development team + 2007-2008 R. Belmont and Richard Bannister + 2000-2008 Richard F. Bannister +License: BSD-3-clause -Files: src/alarm/* - src/amidiplug/amidi-plug.cc - src/amidiplug/backend-fluidsynth/* - src/amidiplug/i_backend.h - src/amidiplug/i_configure-fluidsynth.cc - src/amidiplug/i_configure-fluidsynth.h - src/amidiplug/i_configure.cc - src/amidiplug/i_configure.h - src/amidiplug/i_fileinfo.cc - src/amidiplug/i_fileinfo.h - src/amidiplug/i_midi.cc - src/amidiplug/i_midi.h - src/amidiplug/i_midievent.h +Files: src/adplug/core/adl.cc + src/alarm/* src/aosd/* src/blur_scope/* src/bs2b/* @@ -50,246 +17,136 @@ src/cue/* src/ffaudio/* src/filewriter/* - src/flac/flacng.h - src/flac/plugin.cc - src/flac/seekable_stream_callbacks.cc - src/flac/tools.cc src/gio/* - src/glspectrum/gl-spectrum.cc + src/gnomeshortcuts/* src/hotkey/* - src/lirc/* src/m3u/* src/metronom/* src/mms/* src/neon/* src/pls/* - src/psf/peops/* - src/psf/peops2/* - src/pulse/pulse_audio.cc - src/qtglspectrum/gl-spectrum.cc + src/psf/peops*/* src/sid/* src/sndfile/* src/statusicon/* src/tonegen/* src/vorbis/* src/vtx/* + src/xsf/desmume/* src/xspf/* -Copyright: 2005-2015, Audacious development team - 2013, Christophe Budé, John Lindgren, and Carlo Bramini - 2013, Cristian Morales Vega and Hans de Goede - 2012, Joonas Harjumäki - 2012, Thomas Lange - 2010-2013, Michał Lipski - 2009-2016, John Lindgren - 2009, Jussi Judin - 2009, Sebastian Pipping +Copyright: 2010-2011, Michał Lipski 2009, Tony Vroon - 2008, Cristi Măgherușan - 2008, Eugene Zagidullin - 2007-2015, Ariadne Conill and John Lindgren - 2007-2008, Sascha Hlusiak - 2007, Daniel Bradshaw - 2007, Michael Färber - 2006-2010, Ariadne Conill, Tony Vroon, George Averill, Giacomo - 2006-2007, Bastien Nocera - 2006-2007, shash - 2006-2007, Theo Berkau - 2006-2007, Vladimir Paskov - 2006-2007, Yoshiki Yazawa - 2006, Christian Birchinger - 2006, Evan Martin - 2006, The ScummVM project - 2006, thoduv - 2006, Torbjorn Andersson and Johannes Schickel - 2006, Ariadne Conill, Tony Vroon, George Averill - 2006, yopyop - 2005-2014, Ariadne Conill - 2005-2008, Marcel Holtmann - 2005-2007, Ralf Ertzinger - 2005-2007, Giacomo Lozito - 2005-2006, Guillaume Duhamel - 2004, Clemens Ladisch - 2003-2005, M. Bakker, Nero AG, http://www.nero.com - 2003-2004, BMP development team - 2003, Chris Moeller, eh, whatever - 2002-2004, Sashnov Alexander - 2002, Gian-Carlo Pascutto - 2002, Lars Siebold - 2002, Pete Bernert - 2000-2002, Erik de Castro Lopo - 2000-2002, Ville Syrjälä - 2000, Christoph Bartelmus - 2000, Martin Strauß - 1999-2009, Tecnic Software productions (TNSP) - 1999-2002, Haavard Kvaalen - 1998-2000, Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson - 1998-2003, XMMS development team - 1998-1999, Carl van Schaik + 2009, Sebastian Pipping + 2009 Jussi Judin + 2009-2011, John Lindgren + 2008 Eugene Zagidullin + 2008 Cristi Măgherușan + 2007 Michael Färber + 2007 Daniel Bradshaw + 2007-2008 Sascha Hlusiak + 2006 yopyop + 2006 Torbjorn Andersson and Johannes Schickel + 2006 thoduv + 2006 The ScummVM project + 2006 Evan Martin + 2006 Christian Birchinger + 2006-2010 William Pitcock, Tony Vroon, George Averill, Giacomo + Lozito, Derek Pomery and Yoshiki Yazawa, and John Lindgren. + 2006-2007 Yoshiki Yazawa + 2006-2007 Vladimir Paskov + 2006-2007 Theo Berkau + 2006-2007 shash + 2006-2007 Bastien Nocera + 2005-2011 Audacious development team + 2005-2010 William Pitcock + 2005-2008 Marcel Holtmann + 2005-2007 Ralf Ertzinger + 2005-2007 Giacomo Lozito + 2005-2006 Guillaume Duhamel + 2004 Clemens Ladisch + 2003 by Chris Moeller, eh, whatever + 2003-2005 M. Bakker, Nero AG, http://www.nero.com + 2003-2004 Sashnov Alexander + 2003-2004 BMP development team + 2002 Lars Siebold + 2002 Gian-Carlo Pascutto + 2002 by Pete Bernert + 2000 Martin Strau? + 2000-2002 Ville Syrjälä + 2000, 2002 Erik de Castro Lopo + 1999-2007 Tecnic Software productions (TNSP) + 1999-2001 Haavard Kvaalen + 1998-2003 XMMS development team License: GPL-2+ Files: src/adplug/* src/console/* - src/ladspa/* -Copyright: 2005-2014, Audacious development team - 2003-2006, Chris Morgan - 2003-2007, Shay Green - 2002-2007, Simon Peter - 2002, Brad Martin - 2002, Jarek Burczynski - 2002, Stéphane Dallongeville - 2000-2002, Richard W.E. Furse, Paul Barton-Davis - 2000-2002, Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld - 1999-2000, Tatsuyuki Satoh , MultiArcadeMachineEmurator development - 1998-2001, Ken Silverman + src/ladspa/ladspa.h +Copyright: 2003-2006 Shay Green + 2003-2006 Chris Morgan + 2002-2007 Simon Peter + 2000-2002 Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld + 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmurator development + 1998-2001 Ken Silverman License: LGPL-2.1+ -Files: src/cdaudio/cdaudio-ng.cc - src/skins-qt/actions-mainwin.h - src/skins-qt/actions-playlist.h - src/skins-qt/actions.cc - src/skins-qt/button.cc - src/skins-qt/button.h - src/skins-qt/dnd.h - src/skins-qt/eq-graph.cc - src/skins-qt/eq-graph.h - src/skins-qt/eq-slider.cc - src/skins-qt/eq-slider.h - src/skins-qt/equalizer.cc - src/skins-qt/equalizer.h - src/skins-qt/hslider.cc - src/skins-qt/hslider.h - src/skins-qt/main.cc - src/skins-qt/main.h - src/skins-qt/menurow.cc - src/skins-qt/menurow.h - src/skins-qt/monostereo.cc - src/skins-qt/monostereo.h - src/skins-qt/number.cc - src/skins-qt/number.h - src/skins-qt/playlist-slider.cc - src/skins-qt/playlist-slider.h - src/skins-qt/playlist-widget.cc - src/skins-qt/playlist-widget.h - src/skins-qt/playlistwin.cc - src/skins-qt/playlistwin.h - src/skins-qt/playstatus.cc - src/skins-qt/playstatus.h - src/skins-qt/plugin.cc - src/skins-qt/plugin.h - src/skins-qt/skin-ini.cc - src/skins-qt/skin.cc - src/skins-qt/skin.h - src/skins-qt/skins_cfg.cc - src/skins-qt/skins_cfg.h - src/skins-qt/skins_util.cc - src/skins-qt/skins_util.h - src/skins-qt/skinselector.h - src/skins-qt/svis.cc - src/skins-qt/textbox.cc - src/skins-qt/textbox.h - src/skins-qt/vis-callbacks.cc - src/skins-qt/vis-callbacks.h - src/skins-qt/vis.cc - src/skins-qt/vis.h - src/skins/* - src/songchange/formatter.cc -Copyright: 2005-2015, Audacious development team - 2009-2012, John Lindgren - 2009-2011, John Lindgren - 2009, Tomasz Moń - 2008, Ariadne Conill - 2007-2012, Calin Crisan - 2007-2008, Tomasz Moń - 2005-2007, Audacious team - 2003-2004, BMP development team - 1999-2003, Haavard Kvaalen - 1998-2003, Peter Alm, Mikael Alm, Olle Hallnas - Thomas Nilsson and 4Front Technologies - 1998-2003, XMMS development team -License: GPL-3 +Files: src/alsa/* + src/audpl/* + src/compressor/* + src/crossfade/* + src/ladspa/* + src/mixer/* + src/mpris2/* + src/oss4/* + src/resample/* + src/sdlout/* +Copyright: 2010-2011,2013 Michał Lipski + 2009-2012 John Lindgren +License: BSD-2-clause -Files: src/xsf/desmume/* -Copyright: 2006-2007, shash - 2006, thoduv - 2006, yopyop - 2005-2007, Theo Berkau - 2005-2006, Guillaume Duhamel -License: GPL-2+ -Comment: No explicit license found, using license(s) from: - src/xsf/desmume/COPYING +Files: src/asx/* +Copyright: 2010-2013 John Lindgren + 2010-2013 William Pitcock +License: BSD-2-clause + +Files: src/search-tool/search-tool.cc +Copyright: 2011-2012 John Lindgren +License: BSD-2-clause -Files: src/skins-qt/dock.cc - src/skins-qt/drag-handle.cc - src/skins-qt/drag-handle.h - src/skins-qt/menus.cc - src/skins-qt/menus.h - src/skins-qt/plugin-window.cc - src/skins-qt/plugin-window.h - src/skins-qt/skinselector.cc - src/skins-qt/view.cc - src/skins-qt/view.h - src/skins-qt/widget.cc - src/skins-qt/widget.h - src/skins-qt/window.cc - src/skins-qt/window.h - src/skins/dock.cc - src/skins/drag-handle.cc - src/skins/drag-handle.h - src/skins/menus.cc - src/skins/menus.h - src/skins/plugin-window.cc - src/skins/plugin-window.h - src/skins/skinselector.cc - src/skins/surface.cc - src/skins/surface.h - src/skins/view.cc - src/skins/view.h - src/skins/widget.cc - src/skins/widget.h - src/skins/window.cc - src/skins/window.h -Copyright: 2003-2004, BMP Development Team - 2009-2015, John Lindgren - 1998-2003, XMMS Development Team -License: GPL-2 or GPL-3 - -Files: build-aux/* - src/albumart/* - src/aosd/ghosd-internal.h - src/aosd/ghosd-license - src/aosd/ghosd-main.c - src/aosd/ghosd.c - src/aosd/ghosd.h +Files: src/albumart/* src/cairo-spectrum/* src/crystalizer/* - src/lyricwiki/* - src/mpg123/* src/voice_removal/* -Copyright: 2010-2013, John Lindgren - 2007-2011, Ariadne Conill - 2007, Giacomo Lozito - 2006, Evan Martin - 2005, Shay Green - 1994, X Consortium + src/aosd/ghosd* + src/mpg123/* + src/lyricwiki/* +Copyright: 2010-2011 John Lindgren + 2007-2011 William Pitcock + 2006 Evan Martin + 2005 Shay Green License: Expat -Files: src/mac-media-keys/SPInvocationGrabbing.h - src/mac-media-keys/SPInvocationGrabbing.m - src/mac-media-keys/SPMediaKeyTap.h - src/mac-media-keys/SPMediaKeyTap.m - src/psf/corlett.cc - src/psf/eng_psf.cc - src/psf/eng_psf2.cc - src/psf/eng_spx.cc - src/psf/plugin.cc - src/psf/psx_hw.cc - src/xsf/corlett.cc - src/xsf/plugin.cc -Copyright: 2011, Joachim Bengtsson - 2007-2008, R. Belmont and Richard Bannister - 2000-2008, Richard F. Bannister - 2010, Spotify AB -License: BSD-3-clause +Files: src/notify/* +Copyright: 2010-2011 John Lindgren + 2010 Michał Lipski + 2010 Maximilian Bogner + 2005 Ralf Ertzinger +License: GPL-3+ + +Files: src/gtkui/* + src/lirc/* + src/skins/* +Copyright: 2009 John Lindgren + 2007 Cristian Magherusan + 2007 Calin Crisan + 2007-2009 Tomasz Moń + 2005-2011 Audacious development team + 2003-2004 BMP development team + 1999-2003 Haavard Kvaalen + 1998-2003 XMMS development team + 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas, + Thomas Nilsson and 4Front Technologies +License: GPL-3 Files: src/modplug/* Copyright: No copyright holders @@ -300,132 +157,20 @@ Adam Goode Kenton Varda -Files: src/flac/metadata.cc - src/notify/* -Copyright: 2010, John Lindgren - 2011-2013, John Lindgren and Jean-Alexandre Anglès d'Auriac - 2010-2011, John Lindgren - 2010, Maximilian Bogner - 2010, Michał Lipski - 2005, Ralf Ertzinger -License: GPL-3+ - -Files: src/openmpt/* -Copyright: 2015-2019 Chris Spiegel -License: BSD-2-clause - -Files: buildsys.mk.in - m4/* - src/cairo-spectrum/cairo-spectrum.cc - src/crystalizer/crystalizer.cc - src/lyricwiki-qt/lyricwiki.cc - src/lyricwiki/lyricwiki.cc - src/mpg123/mpg123.cc - src/voice_removal/voice_removal.cc -Copyright: 2010-2012, John Lindgren - 2007-2017, Jonathan Schleifer - 2010-2014, Ariadne Conill - 2008, Ariadne Conill -License: ISC - -Files: src/vorbis/vcedit.cc - src/vorbis/vcedit.h - src/vtx/ayemu.h - src/vtx/ayemu_8912.h - src/vtx/ayemu_vtxfile.h -Copyright: 2000-2001, Michael Smith - 2003-2004, Sashnov Alexander +Files: src/vorbis/vcedit.* + src/vtx/ayemu* +Copyright: 2003-2004 Sashnov Alexander + 2000-2001 Michael Smith License: LGPL-2 Files: debian/* -Copyright: 2012-2013, Alessio Treglia - 2010, Benjamin Drung - 2010, Chris Taylor - 2006-2009, Adam Cécile (Le_Vert) +Copyright: + 2012-2013 Alessio Treglia + 2010 Chris Taylor + 2010 Benjamin Drung + 2006-2009 Adam Cécile (Le_Vert) License: GPL-2+ -Files: debian/skins/Debian/* -Copyright: 2004, Jesper Schultz -License: Artistic - -License: Artistic - On Debian systems, the full text of the Artistic license - can be found in the file `/usr/share/common-licenses/Artistic'. - -License: BSD-2-clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - . - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - . - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - provided with the distribution. - . - This software is provided "as is" and without any warranty, express or - implied. In no event shall the authors be liable for any damages arising from - the use of this software. - -License: BSD-3-clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - . - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - . - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - . - - Neither the names of R. Belmont and Richard Bannister nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: Expat - Permission to use, copy, modify, and/or distribute this software for - any purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: GPL-2 - 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; under version 2 of the License. - . - 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. -Comment: - You should have received a copy of the GNU General Public License - along with this program. If not, see . - . - On Debian systems, the full text of the GNU General Public License version 2 - can be found in the file `/usr/share/common-licenses/GPL-2'. - License: GPL-2+ 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 @@ -443,10 +188,11 @@ On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. -License: GPL-3 +License: GPL-3+ 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; under version 3 of the License. + the Free Software Foundation; either version 3 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 @@ -459,11 +205,10 @@ On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. -License: GPL-3+ +License: GPL-3 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 3 of the License, or - (at your option) any later version. + the Free Software Foundation; under version 3 of the License. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -476,19 +221,6 @@ On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. -License: ISC - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - . - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - License: LGPL-2 This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -522,3 +254,61 @@ . On Debian systems, the full text of the GNU Lesser General Public License version 2 can be found in the file `/usr/share/common-licenses/LGPL-2'. + +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions, and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions, and the following disclaimer in the documentation + provided with the distribution. + . + This software is provided "as is" and without any warranty, express or + implied. In no event shall the authors be liable for any damages arising from + the use of this software. + +License: BSD-3-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + . + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + - Neither the names of R. Belmont and Richard Bannister nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: Expat + Permission to use, copy, modify, and/or distribute this software for + any purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -Nru audacious-plugins-4.1/debian/patches/0001-Do-not-hard-code-build-architecture-pkg-config.patch audacious-plugins-4.2/debian/patches/0001-Do-not-hard-code-build-architecture-pkg-config.patch --- audacious-plugins-4.1/debian/patches/0001-Do-not-hard-code-build-architecture-pkg-config.patch 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/patches/0001-Do-not-hard-code-build-architecture-pkg-config.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -From: Helmut Grohne -Date: Sat, 9 Jun 2018 18:11:29 +0200 -Subject: Do not hard code build architecture pkg-config - -Closes: #901161 ---- - configure.ac | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 642443e..f231491 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -16,6 +16,7 @@ AC_CONFIG_HEADERS([config.h]) - AC_CONFIG_MACRO_DIR([m4]) - - AUD_COMMON_PROGS -+PKG_PROG_PKG_CONFIG - - BUILDSYS_INIT - BUILDSYS_SHARED_LIB -@@ -676,7 +677,7 @@ fi - - dnl *** End of all plugin checks *** - --plugindir=`pkg-config audacious --variable=plugin_dir` -+plugindir=`$PKG_CONFIG audacious --variable=plugin_dir` - AC_SUBST(plugindir) - - dnl XXX diff -Nru audacious-plugins-4.1/debian/patches/series audacious-plugins-4.2/debian/patches/series --- audacious-plugins-4.1/debian/patches/series 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -0001-Do-not-hard-code-build-architecture-pkg-config.patch diff -Nru audacious-plugins-4.1/debian/rules audacious-plugins-4.2/debian/rules --- audacious-plugins-4.1/debian/rules 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/rules 2017-08-24 13:10:12.000000000 +0000 @@ -1,28 +1,28 @@ #!/usr/bin/make -f -include /usr/share/dpkg/architecture.mk +DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) -ifeq ($(DEB_HOST_ARCH),i386) +ifeq ($(DEB_BUILD_ARCH),i386) additional_confflags := --disable-sse2 endif -ifeq ($(DEB_HOST_ARCH),armel) +ifeq ($(DEB_BUILD_ARCH),armel) additional_confflags := --disable-qtglspectrum endif -ifeq ($(DEB_HOST_ARCH),armhf) +ifeq ($(DEB_BUILD_ARCH),armhf) additional_confflags := --disable-qtglspectrum endif -export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow +export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed +export DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow,-fortify %: dh $@ override_dh_auto_configure: dh_auto_configure -- $(additional_confflags) \ - --disable-rpath --enable-gtk + --disable-rpath override_dh_auto_clean: - -dh_auto_clean - + dh_auto_clean || true Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/balance.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/balance.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/cbuttons.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/cbuttons.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/eq_ex.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/eq_ex.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/eqmain.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/eqmain.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/main.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/main.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/monoster.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/monoster.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/nums_ex.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/nums_ex.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/playpaus.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/playpaus.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/pledit.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/pledit.bmp differ diff -Nru audacious-plugins-4.1/debian/skins/Debian/pledit.txt audacious-plugins-4.2/debian/skins/Debian/pledit.txt --- audacious-plugins-4.1/debian/skins/Debian/pledit.txt 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/skins/Debian/pledit.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -[Text] -Normal=#7ba7cd -Current=#999999 -NormalBG=#ccddec -SelectedBG=#eeeeee -Font=Helvetica Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/posbar.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/posbar.bmp differ diff -Nru audacious-plugins-4.1/debian/skins/Debian/README audacious-plugins-4.2/debian/skins/Debian/README --- audacious-plugins-4.1/debian/skins/Debian/README 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/skins/Debian/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -============================================= -Debian 1.0 skin for XMMS - -Created by Jesper Schultz -Visit www.schultz-net.dk -Released Jan 25 2004 - -Graphics done in The Gimp 1.3.2 -Tested with XMMS 1.2.8 -============================================= - - -Installation ------------- -You should have received this file in a gzip'ed tar -archive named Debian.tar.gz. Simply copy or extract it -into your XMMS skins directory. - -Comments --------- -Dedicated to Debian GNU/Linux ! - -Copyright --------- -Jesper Schultz - -License -------- -This is released under the artistic license !! -http://www.opensource.org/licenses/artistic-license.php Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/shufrep.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/shufrep.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/text.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/text.bmp differ Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/titlebar.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/titlebar.bmp differ diff -Nru audacious-plugins-4.1/debian/skins/Debian/viscolor.txt audacious-plugins-4.2/debian/skins/Debian/viscolor.txt --- audacious-plugins-4.1/debian/skins/Debian/viscolor.txt 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/skins/Debian/viscolor.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -204,221,236 // [background color 1] -128,170,206 // [background color 2] -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -128,170,206 -126,126,126 // [osc 1] -126,126,126 // [osc 2] -126,126,126 // [osc 3] -126,126,126 // [osc 4] -126,126,126 // [osc 5] -130,130,131 // [peak color] Binary files /tmp/tmpf8gedlnu/7Zwj4APLKD/audacious-plugins-4.1/debian/skins/Debian/volume.bmp and /tmp/tmpf8gedlnu/awPwaOUhP1/audacious-plugins-4.2/debian/skins/Debian/volume.bmp differ diff -Nru audacious-plugins-4.1/debian/source/include-binaries audacious-plugins-4.2/debian/source/include-binaries --- audacious-plugins-4.1/debian/source/include-binaries 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/source/include-binaries 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -debian/skins/Debian/balance.bmp -debian/skins/Debian/cbuttons.bmp -debian/skins/Debian/eq_ex.bmp -debian/skins/Debian/eqmain.bmp -debian/skins/Debian/main.bmp -debian/skins/Debian/monoster.bmp -debian/skins/Debian/nums_ex.bmp -debian/skins/Debian/playpaus.bmp -debian/skins/Debian/pledit.bmp -debian/skins/Debian/posbar.bmp -debian/skins/Debian/shufrep.bmp -debian/skins/Debian/text.bmp -debian/skins/Debian/titlebar.bmp -debian/skins/Debian/volume.bmp diff -Nru audacious-plugins-4.1/debian/upstream/metadata audacious-plugins-4.2/debian/upstream/metadata --- audacious-plugins-4.1/debian/upstream/metadata 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -Bug-Database: https://redmine.audacious-media-player.org/projects/audacious/issues -Changelog: https://github.com/audacious-media-player/audacious-plugins/commits/master -Repository: https://github.com/audacious-media-player/audacious-plugins.git -Repository-Browse: https://github.com/audacious-media-player/audacious-plugins diff -Nru audacious-plugins-4.1/debian/watch audacious-plugins-4.2/debian/watch --- audacious-plugins-4.1/debian/watch 2022-01-02 13:17:15.000000000 +0000 +++ audacious-plugins-4.2/debian/watch 2017-08-24 13:10:12.000000000 +0000 @@ -1,2 +1,2 @@ version=4 -https://distfiles.audacious-media-player.org/audacious-plugins-([^-]*)\.tar\.bz2 +http://distfiles.audacious-media-player.org/audacious-plugins-([^-]*)\.tar\.bz2 diff -Nru audacious-plugins-4.1/meson.build audacious-plugins-4.2/meson.build --- audacious-plugins-4.1/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,14 +1,14 @@ project('audacious-plugins', 'c', 'cpp', - version: '4.1', - meson_version: '>= 0.46', + version: '4.2', + meson_version: '>= 0.51', default_options: [ 'c_std=gnu99', - 'cpp_std=gnu++11', + 'cpp_std=gnu++17', 'warning_level=1' ]) -copyright = 'Copyright (C) 2001-2021 Audacious developers and others' +copyright = 'Copyright (C) 2001-2022 Audacious developers and others' have_darwin = host_machine.system() == 'darwin' @@ -34,27 +34,27 @@ zlib_dep = dependency('zlib', required: true) -audacious_req = '>= 4.1' +audacious_req = '>= 4.2' audacious_dep = dependency('audacious', version: audacious_req, required: true) # XXX - make this its own .pc file audtag_dep = declare_dependency(link_args: [ - '-L@0@'.format(audacious_dep.get_pkgconfig_variable('lib_dir')), + '-L@0@'.format(audacious_dep.get_variable(pkgconfig: 'lib_dir')), '-laudtag' ]) # XXX - make this its own .pc file audqt_dep = declare_dependency(link_args: [ - '-L@0@'.format(audacious_dep.get_pkgconfig_variable('lib_dir')), + '-L@0@'.format(audacious_dep.get_variable(pkgconfig: 'lib_dir')), '-laudqt' ]) # XXX - make this its own .pc file audgui_dep = declare_dependency(link_args: [ - '-L@0@'.format(audacious_dep.get_pkgconfig_variable('lib_dir')), + '-L@0@'.format(audacious_dep.get_variable(pkgconfig: 'lib_dir')), '-laudgui' ]) @@ -63,8 +63,13 @@ if get_option('qt') - qt_req = '>= 5.2' - qt_dep = dependency('qt5', version: qt_req, required: true, modules: ['Core', 'Widgets', 'Gui']) + if get_option('qt6') + qt_req = '>= 6.0' + qt_dep = dependency('qt6', version: qt_req, required: true, modules: ['Core', 'Widgets', 'Gui']) + else + qt_req = '>= 5.2' + qt_dep = dependency('qt5', version: qt_req, required: true, modules: ['Core', 'Widgets', 'Gui']) + endif endif @@ -155,7 +160,7 @@ endif -install_plugindir = audacious_dep.get_pkgconfig_variable('plugin_dir') +install_plugindir = audacious_dep.get_variable(pkgconfig: 'plugin_dir') conf.set_quoted('INSTALL_PLUGINDIR', install_plugindir) @@ -199,8 +204,9 @@ }, section: 'Directories') summary({ - 'Qt support': conf.has('USE_QT'), - 'GTK support': conf.has('USE_GTK'), + 'Qt 5 support': get_option('qt') and not get_option('qt6'), + 'Qt 6 support': get_option('qt6'), + 'GTK support': get_option('gtk'), }, section: 'GUI Toolkits') summary({ @@ -214,7 +220,7 @@ }, section: 'Audio Formats') summary({ - 'FFmpeg/Libav': get_variable('have_ffaudio', false), + 'FFmpeg': get_variable('have_ffaudio', false), 'Libsndfile': get_variable('have_sndfile', false), }, section: 'External Decoders') @@ -236,6 +242,7 @@ summary({ 'Bauer stereophonic-to-binaural (bs2b)': get_variable('have_bs2b', false), + 'Bitcrusher': true, 'Channel Mixer': true, 'Crystalizer': true, 'Dynamic Range Compressor': true, diff -Nru audacious-plugins-4.1/meson_options.txt audacious-plugins-4.2/meson_options.txt --- audacious-plugins-4.1/meson_options.txt 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/meson_options.txt 2022-07-10 01:12:34.000000000 +0000 @@ -3,6 +3,8 @@ description: 'Whether GTK support is enabled') option('qt', type: 'boolean', value: true, description: 'Whether Qt support is enabled') +option('qt6', type: 'boolean', value: false, + description: 'Whether Qt 6 support is enabled') # container plugins @@ -28,8 +30,8 @@ description: 'Whether CD audio support is enabled') option('console', type: 'boolean', value: true, description: 'Whether Game Music Emu support is enabled') -option('ffaudio', type: 'combo', choices: ['ffmpeg', 'libav', 'disabled'], - description: 'Choose between ffmpeg, libav or disabled') +option('ffaudio', type: 'boolean', value: true, + description: 'Whether FFmpeg support is enabled') option('flac', type: 'boolean', value: true, description: 'Whether FLAC support is enabled') option('modplug', type: 'boolean', value: true, diff -Nru audacious-plugins-4.1/po/af.po audacious-plugins-4.2/po/af.po --- audacious-plugins-4.1/po/af.po 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/po/af.po 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,4991 @@ +# Afrikaans translation for Audacious Plugins +# Copyright (C) Audacious translators +# This file is distributed under the same license as the Audacious Plugins package. +# +# Translators: +# Reynier West, 2022 +msgid "" +msgstr "" +"Project-Id-Version: Audacious Plugins\n" +"Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Reynier West, 2022\n" +"Language-Team: Afrikaans (http://www.transifex.com/audacious/audacious/" +"language/af/)\n" +"Language: af\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/aac/aac.cc:19 +msgid "AAC (Raw) Decoder" +msgstr "AAC (Rou) Dekodeerder" + +#: src/adplug/adplug-xmms.cc:70 +msgid "AdPlug (AdLib Player)" +msgstr "AdPlug (AdLib Speler)" + +#: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 +msgid "sequenced" +msgstr "gerangskik" + +#: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 +msgid "Output" +msgstr "Uitsette" + +#: src/adplug/adplug-xmms.cc:350 +msgid "OPL Emulator:" +msgstr "OPL Emuleerder:" + +#: src/adplug/adplug-xmms.cc:353 +msgid "Sample rate" +msgstr "Monstertempo" + +#: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 +#: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 +#: src/modplug/plugin_main.cc:77 src/resample/resample.cc:201 +#: src/resample/resample.cc:207 src/resample/resample.cc:211 +#: src/resample/resample.cc:215 src/resample/resample.cc:219 +#: src/resample/resample.cc:223 src/resample/resample.cc:227 +#: src/resample/resample.cc:231 src/resample/resample.cc:235 +#: src/resample/resample.cc:239 src/resample/resample.cc:243 +#: src/sid/xs_config.cc:67 src/soxr/sox-resampler.cc:205 +msgid "Hz" +msgstr "Hz" + +#: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 +#: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 +msgid "Miscellaneous" +msgstr "Allerlei" + +#: src/adplug/adplug-xmms.cc:356 +msgid "Repeat song in endless loop" +msgstr "Herhaal liedjie in eindelose lus" + +#: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 +msgid "Alarm" +msgstr "Wekker" + +#: src/alarm/alarm.cc:782 +msgid "Set Alarm ..." +msgstr "Stel Wekker..." + +#: src/alarm/alarm.cc:810 +msgid "" +"A plugin that can be used to start playing at a certain time.\n" +"\n" +"Originally written by Adam Feakin and Daniel Stodden." +msgstr "" +"'n Inprop wat gebruik kan word om op 'n sekere tyd te begin speel.\n" +"\n" +"Oorspronklik geskryf deur Adam Feakin en Daniel Stodden." + +#: src/alarm/interface.cc:28 +msgid "" +"Time\n" +" Alarm at:\n" +" The time for the alarm to come on.\n" +"\n" +" Quiet after:\n" +" Stop alarm after this amount of time.\n" +" (if the wakeup dialog is not closed)\n" +"\n" +"\n" +"Days\n" +" Day:\n" +" Select the days for the alarm to activate.\n" +"\n" +" Time:\n" +" Choose the time for the alarm on each day,\n" +" or select the toggle button to use the default\n" +" time.\n" +"\n" +"\n" +"Volume\n" +" Fading:\n" +" Fade the volume up to the chosen volume\n" +" for this amount of time.\n" +"\n" +" Start at:\n" +" Start fading from this volume.\n" +"\n" +" Final:\n" +" The volume to stop fading at. If the fading\n" +" time is 0 then set volume to this and start\n" +" playing.\n" +"\n" +"\n" +"Options:\n" +" Additional Command:\n" +" Run this command at the alarm time.\n" +"\n" +" Playlist:\n" +" Load this playlist. If no playlist\n" +" is given, the current one will be used.\n" +" The URL of an mp3/ogg stream\n" +" can also be entered here.\n" +"\n" +" Reminder:\n" +" Display a reminder when the alarm goes off.\n" +" Type the reminder in the input field and enable\n" +" the checkbox if you want it to be shown." +msgstr "" +"Tyd\n" +" Lui teen:\n" +" Die tyd vir die Wekker om aan te kom.\n" +"\n" +" Stil na:\n" +" Stop die wekker na hierdie hoeveelheid tyd.\n" +" (as die word-wakker dialoog nog oop is)\n" +"\n" +"\n" +"Dae\n" +" Dag:\n" +" Kies dae wanneer die wekker aktief moet wees.\n" +"\n" +" Tyd:\n" +" Kies die tyd vir die wekker op elke dag,\n" +" of kies die wissel knoppie om die verstek tyd te gebruik.\n" +"\n" +"\n" +"Volume\n" +" Vervaging:\n" +" Vervaag die volume op na die gekose volume\n" +" vir dié hoeveelheid tyd.\n" +"\n" +" Begin teen:\n" +" Begin van hierdie volume te vervaag.\n" +"\n" +" Finaal:\n" +" Die volume waar die vervaging moet stop.\n" +" As die vervaging-tyd 0 is, dan stel die volume\n" +" na dit en begin te speel.\n" +"\n" +"\n" +"Opsies:\n" +" Bykomende Bevel:\n" +" Hardloop hierdie bevel wanneer die wekker\n" +" af gaan.\n" +"\n" +" Snitlys:\n" +" Laai hierdie snitlys. As geen snitlys\n" +" gegee is nie, dan sal die huidige een\n" +" gebruik word. Die URL van 'n mp3/ogg\n" +" stroom kan ook hier gebruik word.\n" +"\n" +" Herinnering:\n" +" Wys 'n herinnering wanneer die wekker af\n" +" gaan. Tik die herinnering in die invoer veld\n" +" en aktiveer die merkblokkie as jy dit wil wys." + +#: src/alarm/interface.cc:78 +msgid "This is your wakeup call." +msgstr "Dit is jou wekroep." + +#: src/alarm/interface.cc:96 +msgid "Your reminder for today is..." +msgstr "Jou herinnering vir vandag is..." + +#: src/alarm/interface.cc:98 src/alarm/interface.cc:372 +msgid "Reminder" +msgstr "Herinnering" + +#: src/alarm/interface.cc:122 +msgid "Monday" +msgstr "Maandag" + +#: src/alarm/interface.cc:122 +msgid "Tuesday" +msgstr "Dinsdag" + +#: src/alarm/interface.cc:122 +msgid "Wednesday" +msgstr "Woensdag" + +#: src/alarm/interface.cc:123 +msgid "Thursday" +msgstr "Donderdag" + +#: src/alarm/interface.cc:123 +msgid "Friday" +msgstr "Vrydag" + +#: src/alarm/interface.cc:123 +msgid "Saturday" +msgstr "Saterdag" + +#: src/alarm/interface.cc:123 +msgid "Sunday" +msgstr "Sondag" + +#: src/alarm/interface.cc:160 src/alarm/interface.cc:219 +#: src/alarm/interface.cc:234 +msgid "Time" +msgstr "Tyd" + +#: src/alarm/interface.cc:167 +msgid "Alarm at (default):" +msgstr "Stel Wekker vir (verstek):" + +#: src/alarm/interface.cc:189 +msgid "h" +msgstr "u" + +#: src/alarm/interface.cc:192 +msgid "Quiet after:" +msgstr "Stil na:" + +#: src/alarm/interface.cc:204 +msgid "hours" +msgstr "ure" + +#: src/alarm/interface.cc:215 +msgid "minutes" +msgstr "minute" + +#: src/alarm/interface.cc:224 +msgid "Choose the days for the alarm to come on" +msgstr "Kies die dae vir die wekker op aan te skakel" + +#: src/alarm/interface.cc:231 +msgid "Day" +msgstr "Dag" + +#: src/alarm/interface.cc:248 src/bs2b/plugin.cc:130 +msgid "Default" +msgstr "Verstek" + +#: src/alarm/interface.cc:277 +msgid "Days" +msgstr "Dae" + +#: src/alarm/interface.cc:286 +msgid "Fading" +msgstr "Vervaging" + +#: src/alarm/interface.cc:294 src/console/plugin.cc:41 +#: src/crossfade/crossfade.cc:52 src/crossfade/crossfade.cc:58 +#: src/lirc/lirc.cc:395 src/notify/notify.cc:113 src/sid/xs_config.cc:85 +#: src/sid/xs_config.cc:94 src/sid/xs_config.cc:103 +#: src/vumeter-qt/vumeter_qt.cc:39 +msgid "seconds" +msgstr "sekondes" + +#: src/alarm/interface.cc:301 src/alarm/interface.cc:342 +msgid "Volume" +msgstr "Volume" + +#: src/alarm/interface.cc:306 +msgid "Start at" +msgstr "Begin teen" + +#: src/alarm/interface.cc:322 +msgid "Final" +msgstr "Finaal" + +#: src/alarm/interface.cc:335 +msgid "Current" +msgstr "Huidige" + +#: src/alarm/interface.cc:348 +msgid "Additional Command" +msgstr "Bykomende Bevel" + +#: src/alarm/interface.cc:354 src/alarm/interface.cc:377 +msgid "enable" +msgstr "aktiveer" + +#: src/alarm/interface.cc:361 +msgid "Playlist (optional)" +msgstr "Snitlys (opsioneel)" + +#: src/alarm/interface.cc:365 +msgid "Select a playlist" +msgstr "Kies 'n snitlys" + +#: src/alarm/interface.cc:385 +msgid "Options" +msgstr "Opsies" + +#: src/alarm/interface.cc:390 +msgid "What do these options mean?" +msgstr "Wat beteken hierdie opsies?" + +#: src/alarm/interface.cc:404 +msgid "Help" +msgstr "Hulp" + +#: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 +msgid "Album Art" +msgstr "Albumkuns" + +#: src/alsa/alsa.h:64 +msgid "ALSA Output" +msgstr "ALSA Uitset" + +#: src/alsa/config.cc:28 +msgid "" +"ALSA Output Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren\n" +"\n" +"My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " +"code served as a reference when the ALSA manual was not enough." +msgstr "" +"ALSA Uitset Inprop vir Audacious\n" +"Kopiereg 2009-2012 John Lindgren\n" +"\n" +"My dank aan William Pitcock, skrywer van die ALSA Uitset Inprop NG, wie se " +"kode as 'n verwysing gedien het toe die ALSA handleiding nie genoeg was nie." + +#: src/alsa/config.cc:61 +msgid "(no description)" +msgstr "(geen beskrywing)" + +#: src/alsa/config.cc:166 +msgid "Default PCM device" +msgstr "Verstek PCM toestel" + +#: src/alsa/config.cc:188 +msgid "Default mixer device" +msgstr "Verstek menger toestel" + +#: src/alsa/config.cc:296 +msgid "PCM device:" +msgstr "PCM toestel:" + +#: src/alsa/config.cc:299 +msgid "Mixer device:" +msgstr "Menger toestel:" + +#: src/alsa/config.cc:302 +msgid "Mixer element:" +msgstr "Menger element" + +#: src/amidiplug/amidi-plug.cc:42 +msgid "AMIDI-Plug (MIDI Player)" +msgstr "AMIDI-Plug (MIDI Speler)" + +#: src/amidiplug/amidi-plug.cc:445 +msgid "" +"AMIDI-Plug\n" +"modular MIDI music player\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"written by Giacomo Lozito\n" +"\n" +"\n" +"special thanks to...\n" +"\n" +"Clemens Ladisch and Jaroslav Kysela\n" +"for their cool programs aplaymidi and amixer; those\n" +"were really useful, along with alsa-lib docs, in order\n" +"to learn more about the ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"for the nice midi keyboard logo\n" +"\n" +"Tony Vroon\n" +"for the good help with alpha testing" +msgstr "" +"AMIDI-Plug\n" +"modulêre MIDI-musiekspeler\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"geskryf deur Giacomo Lozito\n" +"\n" +"\n" +"spesiale dank aan...\n" +"\n" +"Clemens Ladisch en Jaroslav Kysela\n" +"vir hulle kwaai programme aplaymidi en amixer; hulle\n" +"was regtig nuttig, saam met die alsa-lib doks, om\n" +"meer te leer van die ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"vir die mooi midi-sleutelbord logo\n" +"\n" +"Tony Vroon\n" +"vir die goeie hulp met alpha-toetsing" + +#: src/amidiplug/i_configure.cc:94 +msgid "Override default gain:" +msgstr "Oorskryf verstek versterking:" + +#: src/amidiplug/i_configure.cc:102 +msgid "Override default polyphony:" +msgstr "Oorskryf verstek polifonie:" + +#: src/amidiplug/i_configure.cc:110 +msgid "Override default reverb:" +msgstr "Oorskryf verstek galm:" + +#: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 +msgid "On" +msgstr "Aan" + +#: src/amidiplug/i_configure.cc:118 +msgid "Override default chorus:" +msgstr "Oorskryf verstek koor:" + +#: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 +msgid "Playback" +msgstr "Terugspeel" + +#: src/amidiplug/i_configure.cc:129 +msgid "Transpose:" +msgstr "Transponeer:" + +#: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 +msgid "semitones" +msgstr "halftone" + +#: src/amidiplug/i_configure.cc:132 +msgid "Drum shift:" +msgstr "Dromme skuif:" + +#: src/amidiplug/i_configure.cc:134 +msgid "note numbers" +msgstr "noot nommers" + +#: src/amidiplug/i_configure.cc:135 +msgid "Skip leading silence" +msgstr "Slaan leiende stilte oor" + +#: src/amidiplug/i_configure.cc:137 +msgid "Skip trailing silence" +msgstr "Slaan agterstilte oor" + +#: src/amidiplug/i_configure.cc:141 +msgid "SoundFont" +msgstr "SoundFont" + +#: src/amidiplug/i_configure.cc:148 +msgid "Synthesizer" +msgstr "Sintetiseerder" + +#: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 +#: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 +msgid "Sample rate:" +msgstr "Monstertempo:" + +#: src/amidiplug/i_configure-fluidsynth.cc:57 +#: src/amidiplug/i_configure-fluidsynth.cc:536 +msgid "AMIDI-Plug - select SoundFont file" +msgstr "AMIDI-Plug - kies SoundFont lêer" + +#: src/amidiplug/i_configure-fluidsynth.cc:60 +msgid "_Cancel" +msgstr "_Kanselleer" + +#: src/amidiplug/i_configure-fluidsynth.cc:61 +msgid "_Open" +msgstr "_Oop" + +#: src/amidiplug/i_configure-fluidsynth.cc:230 +#: src/amidiplug/i_configure-fluidsynth.cc:476 src/gtkui/columns.cc:46 +msgid "File name" +msgstr "Lêer naam" + +#: src/amidiplug/i_configure-fluidsynth.cc:234 +#: src/amidiplug/i_configure-fluidsynth.cc:479 +msgid "Size (bytes)" +msgstr "Grote (grepe)" + +#: src/amidiplug/i_fileinfo.cc:169 +msgid "Name:" +msgstr "Naam:" + +#: src/amidiplug/i_fileinfo.cc:187 +msgid " MIDI Info " +msgstr "MIDI Info" + +#: src/amidiplug/i_fileinfo.cc:201 +msgid "Format:" +msgstr "Formaat:" + +#: src/amidiplug/i_fileinfo.cc:204 +msgid "Length (msec):" +msgstr "Lengte (msek):" + +#: src/amidiplug/i_fileinfo.cc:207 +msgid "No. of Tracks:" +msgstr "Aantal Snitte:" + +#: src/amidiplug/i_fileinfo.cc:213 +msgid "variable" +msgstr "veranderlik" + +#: src/amidiplug/i_fileinfo.cc:215 +msgid "BPM:" +msgstr "SPM:" + +#: src/amidiplug/i_fileinfo.cc:223 +msgid "BPM (wavg):" +msgstr "SPM (ggem):" + +#: src/amidiplug/i_fileinfo.cc:226 +msgid "Time Div:" +msgstr "Tydverdeling:" + +#: src/amidiplug/i_fileinfo.cc:237 +msgid " MIDI Comments and Lyrics " +msgstr "MIDI Kommentaar en Lirieke" + +#: src/amidiplug/i_fileinfo.cc:284 +msgid "* no comments available in this MIDI file *" +msgstr "* geen kommentaar beskikbaar in hierdie MIDI lêer nie *" + +#: src/amidiplug/i_fileinfo.cc:296 +msgid "* no lyrics available in this MIDI file *" +msgstr "* geen lirieke beskikbaar in hierdie MIDI lêer nie *" + +#: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 +msgid "_Close" +msgstr "_Toe" + +#: src/amidiplug/i_fileinfo.cc:331 +msgid " (invalid UTF-8)" +msgstr "(ongeldige UTF-8)" + +#: src/ampache/ampache.cc:33 +msgid "Ampache Browser" +msgstr "Ampache Blaaier" + +#: src/ampache/ampache.cc:46 +msgid "" +"Ampache Browser for Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský and John Lindgren\n" +"License: GNU GPLv3" +msgstr "" +"Ampache Blaaier vir Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Kopiereg (K) Róbert Čerňanský en John Lindgren\n" +"Lisensie: GNU GPLv3" + +#: src/aosd/aosd.cc:31 +msgid "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Written by Giacomo Lozito \n" +"\n" +"Based in part on Evan Martin's Ghosd library:\n" +"http://neugierig.org/software/ghosd/" +msgstr "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Geskryf deur Giacomo Lozito \n" +"\n" +"Gedeeltelik gebaseer op Evan Martin se Ghosd biblioteek:\n" +"http://neugierig.org/software/ghosd/" + +#: src/aosd/aosd.h:37 +msgid "AOSD (On-Screen Display)" +msgstr "AOSD (Op-Skerm-Vertoon)" + +#: src/aosd/aosd_style.cc:54 +msgid "Rectangle" +msgstr "Reghoek" + +#: src/aosd/aosd_style.cc:59 +msgid "Rounded Rectangle" +msgstr "Geronde reghoek" + +#: src/aosd/aosd_style.cc:64 +msgid "Concave Rectangle" +msgstr "Konkawe reghoek" + +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 +msgid "None" +msgstr "Geen" + +#: src/aosd/aosd_trigger.cc:49 +msgid "Playback Start" +msgstr "Begin Terugspeel" + +#: src/aosd/aosd_trigger.cc:50 +msgid "Triggers OSD when a playlist entry is played." +msgstr "Aktiveer OSV wanneer 'n snitlys item gespeel word." + +#: src/aosd/aosd_trigger.cc:55 +msgid "Title Change" +msgstr "Titel verandering" + +#: src/aosd/aosd_trigger.cc:56 +msgid "Triggers OSD when the song title changes (for internet streams)." +msgstr "Aktiveer OSV wanneer die lied se titel verander (vir internet strome)" + +#: src/aosd/aosd_trigger.cc:61 +msgid "Pause On" +msgstr "Pouse Aan" + +#: src/aosd/aosd_trigger.cc:62 +msgid "Triggers OSD when playback is paused." +msgstr "Aktiveer OSV wanneer terugspeel pouse aan geskakel word." + +#: src/aosd/aosd_trigger.cc:67 +msgid "Pause Off" +msgstr "Pouse Af" + +#: src/aosd/aosd_trigger.cc:68 +msgid "Triggers OSD when playback is unpaused." +msgstr "Aktiveer OSV wanneer terugspeel pouse af geskakel word." + +#: src/aosd/aosd_ui.cc:162 +msgid "Placement" +msgstr "Plasing" + +#: src/aosd/aosd_ui.cc:195 +msgid "Relative X offset:" +msgstr "Relatiewe X verreken:" + +#: src/aosd/aosd_ui.cc:202 +msgid "Relative Y offset:" +msgstr "Relatiewe Y verreken:" + +#: src/aosd/aosd_ui.cc:209 +msgid "Max OSD width:" +msgstr "Maks. OSV wydte:" + +#: src/aosd/aosd_ui.cc:220 +msgid "Multi-Monitor options" +msgstr "Multi-Skerm opsies" + +#: src/aosd/aosd_ui.cc:224 +msgid "Display OSD using:" +msgstr "Vertoon OSV met:" + +#: src/aosd/aosd_ui.cc:226 +msgid "all monitors" +msgstr "alle skerms" + +#: src/aosd/aosd_ui.cc:229 +#, c-format +msgid "monitor %i" +msgstr "skerm %i" + +#: src/aosd/aosd_ui.cc:281 +msgid "Timing (ms)" +msgstr "Tydsberekening (ms)" + +#: src/aosd/aosd_ui.cc:286 +msgid "Display:" +msgstr "Vertoon:" + +#: src/aosd/aosd_ui.cc:291 +msgid "Fade in:" +msgstr "Vervaag in:" + +#: src/aosd/aosd_ui.cc:296 +msgid "Fade out:" +msgstr "Vervaag uit:" + +#: src/aosd/aosd_ui.cc:360 +msgid "Fonts" +msgstr "Lettertipes" + +#: src/aosd/aosd_ui.cc:367 +#, c-format +msgid "Font %i:" +msgstr "Lettertipe %i:" + +#: src/aosd/aosd_ui.cc:381 +msgid "Shadow" +msgstr "Skaduwee" + +#: src/aosd/aosd_ui.cc:485 +msgid "Render Style" +msgstr "Lewer styl" + +#: src/aosd/aosd_ui.cc:501 +msgid "Colors" +msgstr "Kleure" + +#: src/aosd/aosd_ui.cc:512 +#, c-format +msgid "Color %i:" +msgstr "Kleur %i:" + +#: src/aosd/aosd_ui.cc:599 +msgid "Enable trigger" +msgstr "Aktiveer sneller" + +#: src/aosd/aosd_ui.cc:626 +msgid "Event" +msgstr "Gebeurtenis" + +#: src/aosd/aosd_ui.cc:653 +msgid "Composite manager detected" +msgstr "Saamgestelde bestuurder bespeur" + +#: src/aosd/aosd_ui.cc:660 +msgid "" +"Composite manager not detected;\n" +"unless you know that you have one running, please activate a composite " +"manager otherwise the OSD won't work properly" +msgstr "" +"Saamgestelde bestuurder nie bespeur nie;\n" +"tensy jy weet dat jy een het wat hardloop, aktiveer een asseblief anders sal " +"die OSV nie reg werk nie" + +#: src/aosd/aosd_ui.cc:668 +msgid "Composite manager not required for fake transparency" +msgstr "Saamgestelde bestuurder word nie vereis vir vals deursigtigheid nie" + +#: src/aosd/aosd_ui.cc:705 +msgid "Transparency" +msgstr "Deursigtigheid " + +#: src/aosd/aosd_ui.cc:711 +msgid "Fake transparency" +msgstr "Vals deursigtigheid" + +#: src/aosd/aosd_ui.cc:713 +msgid "Real transparency (requires X Composite Ext.)" +msgstr "Egte deursigtigheid (vereis X Composite Ext.)" + +#: src/aosd/aosd_ui.cc:754 +msgid "Composite extension not loaded" +msgstr "Saamgestelde uitbreiding nie gelaai nie" + +#: src/aosd/aosd_ui.cc:771 +#, c-format +msgid "Audacious OSD" +msgstr "Audacious OSV" + +#: src/aosd/aosd_ui.cc:834 +msgid "Position" +msgstr "Posisie" + +#: src/aosd/aosd_ui.cc:839 +msgid "Animation" +msgstr "Animasie" + +#: src/aosd/aosd_ui.cc:844 +msgid "Text" +msgstr "Teks" + +#: src/aosd/aosd_ui.cc:849 +msgid "Decoration" +msgstr "Versiering" + +#: src/aosd/aosd_ui.cc:854 +msgid "Trigger" +msgstr "Sneller" + +#: src/aosd/aosd_ui.cc:859 src/streamtuner/shoutcast-model.cc:202 +msgid "Misc" +msgstr "Allerlei" + +#: src/aosd/aosd_ui.cc:868 +msgid "Test" +msgstr "Toets" + +#: src/asx3/asx3.cc:35 +msgid "ASXv3 Playlists" +msgstr "ASXv3 Snitlyste" + +#: src/asx/asx.cc:33 +msgid "ASXv1/ASXv2 Playlists" +msgstr "ASXv1/ASXv2 Snitlyste" + +#: src/audpl/audpl.cc:33 +msgid "Audacious Playlists (audpl)" +msgstr "Audacious Snitlyste (audpl)" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + +#: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 +msgid "Color" +msgstr "Kleur" + +#: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 +msgid "Blur Scope" +msgstr "Vervaag Skoop" + +#: src/bs2b/plugin.cc:38 +msgid "Bauer Stereophonic-to-Binaural (BS2B)" +msgstr "Bauer Stereofonies-tot-Binauraal (BS2B)" + +#: src/bs2b/plugin.cc:129 +msgid "Presets:" +msgstr "Voorinstellings" + +#: src/bs2b/plugin.cc:136 +msgid "Feed level:" +msgstr "Voervlak:" + +#: src/bs2b/plugin.cc:138 +msgid "x1/10 dB" +msgstr "x1/10 dB" + +#: src/bs2b/plugin.cc:139 +msgid "Cut frequency:" +msgstr "Uitsny frekwensie:" + +#: src/cairo-spectrum/cairo-spectrum.cc:41 src/qt-spectrum/qt-spectrum.cc:107 +msgid "Spectrum Analyzer" +msgstr "Spektrum ontleder" + +#: src/cdaudio/cdaudio-ng.cc:71 +msgid "Audio CD Plugin" +msgstr "Oudio CD Inprop" + +#: src/cdaudio/cdaudio-ng.cc:118 +msgid "" +"Copyright (C) 2007-2012 Calin Crisan and others.\n" +"\n" +"Many thanks to libcdio developers \n" +"and to libcddb developers .\n" +"\n" +"Also thank you to Tony Vroon for mentoring and guiding me.\n" +"\n" +"This was a Google Summer of Code 2007 project." +msgstr "" +"Kopiereg (K) 2007-2012 Calin Crisan en ander.\n" +"\n" +"Baie dank aan die libcdio onwikkelaars \n" +"en aan die libcddb ontwikkelaars.\n" +"\n" +"Ook, dankie aan Tony Vroon vir my mentorskap en leiding.\n" +"\n" +"Dit was 'n Google Summer of Code 2007 projek." + +#: src/cdaudio/cdaudio-ng.cc:134 +msgid "Device" +msgstr "Toestel" + +#: src/cdaudio/cdaudio-ng.cc:135 +msgid "Read speed:" +msgstr "Lees spoed:" + +#: src/cdaudio/cdaudio-ng.cc:138 +msgid "Override device:" +msgstr "Oorheers toestel:" + +#: src/cdaudio/cdaudio-ng.cc:140 +msgid "Metadata" +msgstr "Metadata" + +#: src/cdaudio/cdaudio-ng.cc:141 +msgid "Use CD-Text" +msgstr "Gebruik CD-Teks" + +#: src/cdaudio/cdaudio-ng.cc:143 +msgid "Use CDDB" +msgstr "Gebruik CDDB" + +#: src/cdaudio/cdaudio-ng.cc:145 +msgid "Use HTTP instead of CDDBP" +msgstr "Gebruik HTTP inplaas van CDDBP" + +#: src/cdaudio/cdaudio-ng.cc:148 +msgid "Server:" +msgstr "Bediener:" + +#: src/cdaudio/cdaudio-ng.cc:152 +msgid "Path:" +msgstr "Pad:" + +#: src/cdaudio/cdaudio-ng.cc:156 +msgid "Port:" +msgstr "Poort:" + +#: src/cdaudio/cdaudio-ng.cc:220 +msgid "Failed to initialize cdio subsystem." +msgstr "Kon nie die CDIO-substelsel inisialiseer nie." + +#: src/cdaudio/cdaudio-ng.cc:250 +#, c-format +msgid "Invalid URI %s." +msgstr "Ongeldige URI %s." + +#: src/cdaudio/cdaudio-ng.cc:252 +#, c-format +msgid "Track %d not found." +msgstr "Snit %d nie gevind nie." + +#: src/cdaudio/cdaudio-ng.cc:254 +#, c-format +msgid "Track %d is a data track." +msgstr "Snit %d is 'n data baan." + +#: src/cdaudio/cdaudio-ng.cc:329 +msgid "Error reading audio CD." +msgstr "Fout met die lees van die oudio-CD." + +#: src/cdaudio/cdaudio-ng.cc:398 +msgid "Audio CD" +msgstr "Oudio-CD" + +#: src/cdaudio/cdaudio-ng.cc:435 src/cdaudio/cdaudio-ng.cc:444 +#, c-format +msgid "Failed to open CD device %s." +msgstr "Kon nie CD-toestel %s oopmaak nie." + +#: src/cdaudio/cdaudio-ng.cc:447 +msgid "No audio capable CD drive found." +msgstr "Geen oudio-bekwame CD-aandrywer gevind nie." + +#: src/cdaudio/cdaudio-ng.cc:470 +msgid "Drive is empty." +msgstr "Aandrywer is leeg." + +#: src/cdaudio/cdaudio-ng.cc:472 +msgid "Unsupported disk type." +msgstr "Onondersteunde skyftipe." + +#: src/cdaudio/cdaudio-ng.cc:496 +msgid "Failed to finish initializing opened CD drive." +msgstr "Kon nie die inisialisering van geopende CD-aandrywer voltooi nie." + +#: src/cdaudio/cdaudio-ng.cc:509 +msgid "Failed to retrieve first/last track number." +msgstr "Kon nie eerste/laaste snitnommer herwin nie." + +#: src/cdaudio/cdaudio-ng.cc:530 +#, c-format +msgid "Cannot read start/end LSN for track %d." +msgstr "Kan nie begin/ einde LSN vir snit %d lees nie." + +#: src/cdaudio/cdaudio-ng.cc:612 +msgid "Failed to create the CDDB connection." +msgstr "Kon nie die CDDB-verbinding skep nie." + +#: src/cdaudio/cdaudio-ng.cc:678 +msgid "Failed to query the CDDB server" +msgstr "Navraag by die CDDB-bediener het misluk" + +#: src/cdaudio/cdaudio-ng.cc:680 +#, c-format +msgid "Failed to query the CDDB server: %s" +msgstr "Navraag het misluk by die CDDB-bediener: %s" + +#: src/cdaudio/cdaudio-ng.cc:704 +#, c-format +msgid "Failed to read the CDDB info: %s" +msgstr "Lees het misluk by die CDDB-bediener: %s" + +#: src/cd-menu-items/cd-menu-items.cc:33 +msgid "Audio CD Menu Items" +msgstr "Oudio-CD kieslysitems" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "Pla_y CD" +msgstr "Speel CD" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "_Add CD" +msgstr "Voeg CD by" + +#: src/compressor/compressor.cc:45 +msgid "Compression" +msgstr "Kompressie" + +#: src/compressor/compressor.cc:46 +msgid "Center volume:" +msgstr "Sentrale volume:" + +#: src/compressor/compressor.cc:49 +msgid "Dynamic range:" +msgstr "Dinamiese reikwydte:" + +#: src/compressor/compressor.cc:57 +msgid "" +"Dynamic Range Compression Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" +"Dinamiese Reikwydte Kompressie Inprop vir Audacious\n" +"Kopiereg 2010-2014 John Lindgren" + +#: src/compressor/compressor.cc:64 +msgid "Dynamic Range Compressor" +msgstr "Dinamiese reeks kompressor" + +#: src/console/plugin.cc:15 +msgid "" +"Console music decoder engine based on Game_Music_Emu 0.5.2\n" +"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Shay Green " +msgstr "" +"Konsole musiek dekodeerder enjin gebaseer op Game_Music_Emu 0.5.2\n" +"Ondersteunde formate: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Audacious inprop deur:\n" +"William Pitcock \n" +"Shay Green " + +#: src/console/plugin.cc:30 +msgid "Bass:" +msgstr "Bas:" + +#: src/console/plugin.cc:33 +msgid "Treble:" +msgstr "Sopraan:" + +#: src/console/plugin.cc:36 +msgid "Echo:" +msgstr "Eggo:" + +#: src/console/plugin.cc:39 +msgid "Default song length:" +msgstr "Verstek lied lengte:" + +#: src/console/plugin.cc:42 src/modplug/plugin_main.cc:58 +msgid "Resampling" +msgstr "Hermonster" + +#: src/console/plugin.cc:43 +msgid "Enable audio resampling" +msgstr "Aktiveer oudi-hermonstering" + +#: src/console/plugin.cc:49 +msgid "SPC" +msgstr "SPC" + +#: src/console/plugin.cc:50 +msgid "Ignore length from SPC tags" +msgstr "Ignoreer lengte van SPC-etikette" + +#: src/console/plugin.cc:52 +msgid "Increase reverb" +msgstr "Verhoog galm" + +#: src/console/plugin.h:26 +msgid "Game Console Music Decoder" +msgstr "Spelkonsole Musiek-dekodeerder" + +#: src/coreaudio/coreaudio.cc:53 +msgid "CoreAudio output" +msgstr "CoreAudio uitset" + +#: src/coreaudio/coreaudio.cc:156 +msgid "" +"CoreAudio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"Copyright 2017,18 René J.V. Bertin\n" +" (original code and code adapted from\n" +" Apple examples, (C) Apple 2013)\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"CoreAudio-uitvoer-inprop vir Audacious\n" +"Kopiereg 2014 William Pitcock\n" +"Kopiereg 2017/2018 René J.V. Bertin\n" +"(oorspronklike kode en kode aangepas vanaf\n" +"Apple voorbeelde, (K) Apple 2013)\n" +"\n" +"Gebaseer op SDL Output Plugin vir Audacious\n" +"Kopiereg 2010 John Lindgren" + +#: src/coreaudio/coreaudio.cc:172 +msgid "Use exclusive mode" +msgstr "Gebruik eksklusiewe modus" + +#: src/coreaudio/coreaudio.cc:174 +msgid "Use bit perfect audio (adapt device sampling rate)" +msgstr "Gebruik bis perfekte oudio (pas toestelmonstertempo aan)" + +#: src/crossfade/crossfade.cc:43 +msgid "" +"Crossfade Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" +"Kruisvervaag Inprop vir Audacious\n" +"Kopiereg 2010-2014 John Lindgren" + +#: src/crossfade/crossfade.cc:47 +msgid "Crossfade" +msgstr "Kruisvervaag" + +#: src/crossfade/crossfade.cc:48 +msgid "On automatic song change" +msgstr "Op outomatiese lied verander" + +#: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 +msgid "Overlap:" +msgstr "Oorvleuel:" + +#: src/crossfade/crossfade.cc:54 +msgid "On seek or manual song change" +msgstr "Op soek of handmatige liedjieverandering" + +#: src/crossfade/crossfade.cc:60 +msgid "Tip" +msgstr "Wenk" + +#: src/crossfade/crossfade.cc:61 +msgid "" +"For better crossfading, enable\n" +"the Silence Removal effect." +msgstr "" +"Vir beter kruisvervaag, aktiveer \n" +"die Stilte-Verwyder effek." + +#: src/crossfade/crossfade.cc:71 +msgid "Crossfade" +msgstr "Kruisvervaag" + +#: src/crystalizer/crystalizer.cc:31 +msgid "Crystalizer" +msgstr "Kristaliseerder" + +#: src/crystalizer/crystalizer.cc:32 src/stereo_plugin/stereo.cc:45 +msgid "Intensity:" +msgstr "Intensiteit:" + +#: src/crystalizer/crystalizer.cc:43 +msgid "Crystalizer" +msgstr "Kristaliseerder" + +#: src/cue/cue.cc:42 +msgid "Cue Sheet Plugin" +msgstr "Tou Blad Inprop" + +#: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 +#: src/delete-files/delete-files.cc:230 +msgid "Delete Files" +msgstr "Skrap lêers" + +#: src/delete-files/delete-files.cc:120 +msgid "No files are selected." +msgstr "Geen lêers was geselekteer nie." + +#: src/delete-files/delete-files.cc:125 +#, c-format +msgid "Do you want to move %s to the trash?" +msgstr "Wil jy %s na die drom skuif?" + +#: src/delete-files/delete-files.cc:126 +#, c-format +msgid "Do you want to permanently delete %s?" +msgstr "Wil jy %s permanent skrap?" + +#: src/delete-files/delete-files.cc:133 +#, c-format +msgid "Do you want to move %d files to the trash?" +msgstr "Wil jy %dlêers na die drom skuif?" + +#: src/delete-files/delete-files.cc:134 +#, c-format +msgid "Do you want to permanently delete %d files?" +msgstr "Wil jy permanent %d lêers skrap?" + +#: src/delete-files/delete-files.cc:146 +msgid "Move to trash" +msgstr "Skuif na drom" + +#: src/delete-files/delete-files.cc:146 +msgid "Delete" +msgstr "Skrap" + +#: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 +msgid "Cancel" +msgstr "Kanselleer" + +#: src/delete-files/delete-files.cc:266 +msgid "Delete Selected Files" +msgstr "Skrap geselekteerde lêers" + +#: src/delete-files/delete-files.cc:286 +msgid "Delete Method" +msgstr "Skrap Metode" + +#: src/delete-files/delete-files.cc:287 +msgid "Move to trash instead of deleting immediately" +msgstr "Skuif na drom inplaas van skrap onmiddelik" + +#: src/echo_plugin/echo.cc:9 +msgid "" +"Echo Plugin\n" +"By Johan Levin, 1999\n" +"Surround echo by Carl van Schaik, 1999\n" +"Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" +msgstr "" +"Echo-inprop \n" +"Deur Johan Levin, 1999 \n" +"Omringende eggo deur Carl van Schaik, 1999\n" +"Opgedateer vir Audacious deur William Pitcock en John Lindgren, 2010-2014" + +#: src/echo_plugin/echo.cc:21 +msgid "Echo" +msgstr "Eggo" + +#: src/echo_plugin/echo.cc:22 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 +msgid "Delay:" +msgstr "Vertraag:" + +#: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 +msgid "ms" +msgstr "ms" + +#: src/echo_plugin/echo.cc:25 +msgid "Feedback:" +msgstr "Terugvoer:" + +#: src/echo_plugin/echo.cc:28 src/modplug/plugin_main.cc:86 +msgid "Volume:" +msgstr "Volume:" + +#: src/echo_plugin/echo.cc:39 +msgid "Echo" +msgstr "Eggo" + +#: src/ffaudio/ffaudio-core.cc:49 +msgid "FFmpeg Plugin" +msgstr "FFmpeg Inprop" + +#: src/ffaudio/ffaudio-core.cc:635 +msgid "" +"Multi-format audio decoding plugin for Audacious using\n" +"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Matti Hämäläinen " +msgstr "" +"Multi-formaat klank dekodering inprop vir Audacious, \n" +"wat gebruik maak van FFmpeg multimedia-raamwerk \n" +"(http://www.ffmpeg.org/)\n" +"\n" +"Audacious inprop deur:\n" +"William Pitcock \n" +"Matti Hämäläinen " + +#: src/filewriter/filewriter.cc:48 +msgid "FileWriter Plugin" +msgstr "Lêerskrywer-inprop" + +#: src/filewriter/filewriter.cc:316 +#, c-format +msgid "" +"Error opening %s:\n" +"%s" +msgstr "" +"Fout tydens oopmaak van %s:\n" +"%s" + +#: src/filewriter/filewriter.cc:358 +msgid "" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" +"Hierdie program is gratis sagteware; jy kan dit herverdeel en/of wysig onder " +"die bepalings van die GNU General Public License soos gepubliseer deur die " +"Free Software Foundation; óf weergawe 2 van die lisensie, óf (na jou keuse) " +"enige latere weergawe.\n" +"\n" +"Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar " +"SONDER ENIGE WAARBORG; selfs sonder die stilswyende waarborg van " +"VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien die GNU " +"General Public License vir meer besonderhede.\n" +"\n" +"Jy moes 'n afskrif van die GNU General Public License saam met hierdie " +"program ontvang het; indien nie, skryf aan die Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, VSA." + +#: src/filewriter/filewriter.cc:385 +msgid "Output file format:" +msgstr "Uitset lêer formaat:" + +#: src/filewriter/filewriter.cc:389 +msgid "Save into original directory" +msgstr "Stoor in oorspronklike gids" + +#: src/filewriter/filewriter.cc:392 +msgid "Save into custom directory:" +msgstr "Stoor in pasgemaakte gids:" + +#: src/filewriter/filewriter.cc:400 +msgid "Generate file name from:" +msgstr "Genereer lêernaam vanaf:" + +#: src/filewriter/filewriter.cc:401 +msgid "Original file name" +msgstr "Oorspronklike lêernaam" + +#: src/filewriter/filewriter.cc:404 +msgid "Original file name (no suffix)" +msgstr "Oorspronklike lêernaam (geen agtervoegsel)" + +#: src/filewriter/filewriter.cc:407 +msgid "Original file tag" +msgstr "Oorspronklike lêeretiket" + +#: src/filewriter/filewriter.cc:411 +msgid "Prepend track number to file name" +msgstr "Las snitnommer voor aan lêernaam" + +#: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 +msgid "Auto" +msgstr "Outo" + +#: src/filewriter/filewriter.cc:418 +msgid "8000 Hz" +msgstr "8000 Hz" + +#: src/filewriter/filewriter.cc:419 +msgid "11025 Hz" +msgstr "11025 Hz" + +#: src/filewriter/filewriter.cc:420 +msgid "12000 Hz" +msgstr "12000 Hz" + +#: src/filewriter/filewriter.cc:421 +msgid "16000 Hz" +msgstr "16000 Hz" + +#: src/filewriter/filewriter.cc:422 +msgid "22050 Hz" +msgstr "22050 Hz" + +#: src/filewriter/filewriter.cc:423 +msgid "24000 Hz" +msgstr "24000 Hz" + +#: src/filewriter/filewriter.cc:424 +msgid "32000 Hz" +msgstr "32000 Hz" + +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 +msgid "44100 Hz" +msgstr "44100 Hz" + +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 +msgid "48000 Hz" +msgstr "48000 Hz" + +#: src/filewriter/filewriter.cc:430 +msgid "8 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:431 +msgid "16 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:432 +msgid "32 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:433 +msgid "40 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:434 +msgid "48 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:435 +msgid "56 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:436 +msgid "64 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:437 +msgid "80 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:438 +msgid "96 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:439 +msgid "112 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:440 +msgid "128 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:441 +msgid "160 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:442 +msgid "192 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:443 +msgid "224 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:444 +msgid "256 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:445 +msgid "320 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:450 +msgid "Joint Stereo" +msgstr "Gesamentlike stereo" + +#: src/filewriter/filewriter.cc:451 src/modplug/plugin_main.cc:57 +#: src/mpg123/mpg123.cc:255 +msgid "Stereo" +msgstr "Stereo" + +#: src/filewriter/filewriter.cc:452 src/modplug/plugin_main.cc:56 +#: src/mpg123/mpg123.cc:256 +msgid "Mono" +msgstr "Mono" + +#: src/filewriter/filewriter.cc:456 +msgid "VBR" +msgstr "VBT" + +#: src/filewriter/filewriter.cc:457 +msgid "ABR" +msgstr "ABT" + +#: src/filewriter/filewriter.cc:478 +msgid "Algorithm quality:" +msgstr "Algoritme kwaliteit:" + +#: src/filewriter/filewriter.cc:484 +msgid "Bitrate:" +msgstr "Bistempo:" + +#: src/filewriter/filewriter.cc:491 +msgid "Compression ratio:" +msgstr "Kompressieverhouding:" + +#: src/filewriter/filewriter.cc:498 +msgid "Audio mode:" +msgstr "Oudio modus:" + +#: src/filewriter/filewriter.cc:501 +msgid "Enforce strict ISO compliance" +msgstr "Handhaaf streng ISO-nakoming" + +#: src/filewriter/filewriter.cc:503 +msgid "Error protection" +msgstr "Foutbeskerming" + +#: src/filewriter/filewriter.cc:508 +msgid "Enable VBR/ABR" +msgstr "Aktiveer VBT/ABT" + +#: src/filewriter/filewriter.cc:510 +msgid "Type:" +msgstr "Tipe:" + +#: src/filewriter/filewriter.cc:514 +msgid "Minimum bitrate:" +msgstr "Minimum bistempo:" + +#: src/filewriter/filewriter.cc:518 +msgid "Maximum bitrate:" +msgstr "Maksimum bistempo:" + +#: src/filewriter/filewriter.cc:522 +msgid "Average bitrate:" +msgstr "Gemiddelde bistempo:" + +#: src/filewriter/filewriter.cc:526 +msgid "VBR quality level:" +msgstr "VBT kwaliteit vlak:" + +#: src/filewriter/filewriter.cc:530 +msgid "Strictly enforce minimum bitrate" +msgstr "Handhaaf streng minimum bistempo" + +#: src/filewriter/filewriter.cc:533 +msgid "Omit Xing VBR header" +msgstr "Laat Xing VBT kopskrif weg" + +#: src/filewriter/filewriter.cc:539 +msgid "Frame Headers" +msgstr "Raam Kopskrif" + +#: src/filewriter/filewriter.cc:540 +msgid "Mark as copyright" +msgstr "Merk as kopiereg" + +#: src/filewriter/filewriter.cc:542 +msgid "Mark as original" +msgstr "Merk as oorspronklik" + +#: src/filewriter/filewriter.cc:544 +msgid "ID3 Tags" +msgstr "ID3-etikette" + +#: src/filewriter/filewriter.cc:545 +msgid "Force addition of version 2 tag" +msgstr "Forseer toevoeging van weergawe 2 etiket" + +#: src/filewriter/filewriter.cc:547 +msgid "Only add v1 tag" +msgstr "Voeg slegs v1 etiket by" + +#: src/filewriter/filewriter.cc:549 +msgid "Only add v2 tag" +msgstr "Voeg slegs v2 etiket by" + +#: src/filewriter/filewriter.cc:554 +msgid "Quality" +msgstr "Kwaliteit" + +#: src/filewriter/filewriter.cc:555 +msgid "VBR/ABR" +msgstr "VBT/ABT" + +#: src/filewriter/filewriter.cc:556 +msgid "Tags" +msgstr "Etikette" + +#: src/filewriter/filewriter.cc:566 +msgid "Quality (0-1):" +msgstr "Kwaliteit (0-1):" + +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 +#: src/skins/skins_cfg.cc:285 +msgid "General" +msgstr "Algemeen" + +#: src/flac/flacng.h:36 +msgid "FLAC Decoder" +msgstr "FLAC Dekodeerder" + +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 +msgid "lossless" +msgstr "verliesvry" + +#: src/flac/plugin.cc:180 +msgid "" +"Original code by\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" +msgstr "" +"Oorspronklike kode deur\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" + +#: src/gio/gio.cc:34 +msgid "" +"GIO Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren" +msgstr "" +"GIO Inprop vir Audacious\n" +"Kopiereg 2009-2012 John Lindgren" + +#: src/gio/gio.cc:42 +msgid "GIO Plugin" +msgstr "GIO Inprop" + +#: src/gio/gio.cc:152 +msgid "Read-and-append mode not supported" +msgstr "Lees-en-byvoeg modus word nie ondersteun nie" + +#: src/gio/gio.cc:165 +msgid "Invalid open mode" +msgstr "Ongeldige oop modus" + +#: src/glspectrum/gl-spectrum.cc:51 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" +"OpenGL Spektrum Ontleder vir Audacious\n" +"Kopiereg 2013 Christophe Budé, John Lindgren en Carlo Bramini\n" +"\n" +"Gebaseer op die XMMS-inprop:\n" +"Kopiereg 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson en " +"4Front Technologies\n" +"\n" +"Lisensie: GPLv2+" + +#: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 +msgid "OpenGL Spectrum Analyzer" +msgstr "OpenGL Spektrum Ontleder" + +#: src/gtkui/columns.cc:35 +msgid "Entry number" +msgstr "Inskrywingsnommer" + +#: src/gtkui/columns.cc:36 src/moonstone/playlist_model.cc:38 +#: src/moonstone/playlist_selection.cc:62 +#: src/playlist-manager/playlist-manager.cc:199 +#: src/playlist-manager-qt/playlist-manager-qt.cc:186 +#: src/qtui/playlist_model.cc:33 src/streamtuner/icecast-model.cc:120 +#: src/streamtuner/ihr-model.cc:159 src/streamtuner/shoutcast-model.cc:122 +msgid "Title" +msgstr "Titel" + +#: src/gtkui/columns.cc:37 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Artist" +msgstr "Kunstenaar" + +#: src/gtkui/columns.cc:38 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Year" +msgstr "Jaar" + +#: src/gtkui/columns.cc:39 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:34 +msgid "Album" +msgstr "Album" + +#: src/gtkui/columns.cc:40 +msgid "Album artist" +msgstr "Album kunstenaar" + +#: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 +msgid "Track" +msgstr "Snit" + +#: src/gtkui/columns.cc:42 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 src/streamtuner/icecast-model.cc:123 +#: src/streamtuner/shoutcast-model.cc:125 +#: src/streamtuner/shoutcast-model.cc:236 +msgid "Genre" +msgstr "Genre" + +#: src/gtkui/columns.cc:43 +msgid "Queue position" +msgstr "Tou posisie" + +#: src/gtkui/columns.cc:44 src/moonstone/playlist_model.cc:41 +#: src/qtui/playlist_model.cc:35 +msgid "Length" +msgstr "Lengte" + +#: src/gtkui/columns.cc:45 +msgid "File path" +msgstr "Lêer pad" + +#: src/gtkui/columns.cc:47 +msgid "Custom title" +msgstr "Pasgemaakte titel" + +#: src/gtkui/columns.cc:48 src/moonstone/playlist_model.cc:42 +#: src/qtui/playlist_model.cc:36 src/streamtuner/icecast-model.cc:129 +#: src/streamtuner/shoutcast-model.cc:134 +msgid "Bitrate" +msgstr "Bistempo" + +#: src/gtkui/columns.cc:49 src/moonstone/playlist_model.cc:43 +#: src/qtui/playlist_model.cc:36 +msgid "Comment" +msgstr "Kommentaar" + +#: src/gtkui/columns.cc:315 +msgid "Available columns" +msgstr "Beskikbare kolomme" + +#: src/gtkui/columns.cc:341 +msgid "Displayed columns" +msgstr "Vertoonde kolomme" + +#: src/gtkui/layout.cc:73 src/search-tool-qt/search-tool-qt.cc:58 +#: src/search-tool/search-tool.cc:48 +msgid "Search Tool" +msgstr "Soek gereedskap" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Left" +msgstr "Dok aan Linkerkant" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Right" +msgstr "Dok aan Regterkant" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Top" +msgstr "Dok aan Bokant" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Bottom" +msgstr "Dok aan Onderkant" + +#: src/gtkui/layout.cc:169 +msgid "Undock" +msgstr "Ontdok" + +#: src/gtkui/layout.cc:169 src/ladspa/plugin.cc:534 +msgid "Disable" +msgstr "Deaktiveer" + +#: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 +#: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 +msgid "_Open Files ..." +msgstr "Maak Lêers _Oop ..." + +#: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 +msgid "Open _URL ..." +msgstr "Maak _URL Oop ..." + +#: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 +msgid "_Add Files ..." +msgstr "Voeg Lêers By ..." + +#: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 +msgid "Add U_RL ..." +msgstr "Voeg U_RL By ..." + +#: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 +msgid "Search _Library" +msgstr "Deursoek Biblioteek " + +#: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 +msgid "A_bout ..." +msgstr "Aangaande ..." + +#: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 +msgid "_Settings ..." +msgstr "_Stellings ..." + +#: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 +#: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 +msgid "_Quit" +msgstr "Verlaat" + +#: src/gtkui/menus.cc:92 src/gtkui/menus.cc:224 +#: src/moonstone/playlist_tabs.cc:306 src/qtui/menus.cc:135 +#: src/qtui/playlist_tabs.cc:328 src/search-tool-qt/search-tool-qt.cc:499 +#: src/search-tool/search-tool.cc:343 src/statusicon-qt/statusicon.cc:106 +#: src/statusicon/statusicon.cc:276 +msgid "_Play" +msgstr "_Speel" + +#: src/gtkui/menus.cc:93 src/qtui/menus.cc:137 +#: src/statusicon-qt/statusicon.cc:107 src/statusicon/statusicon.cc:277 +msgid "Paus_e" +msgstr "Pous_eer" + +#: src/gtkui/menus.cc:94 src/qtui/menus.cc:139 +#: src/statusicon-qt/statusicon.cc:108 src/statusicon/statusicon.cc:278 +msgid "_Stop" +msgstr "_Stop" + +#: src/gtkui/menus.cc:95 src/qtui/menus.cc:141 +#: src/statusicon-qt/statusicon.cc:109 src/statusicon/statusicon.cc:279 +msgid "Pre_vious" +msgstr "Vorige" + +#: src/gtkui/menus.cc:96 src/qtui/menus.cc:143 +#: src/statusicon-qt/statusicon.cc:110 src/statusicon/statusicon.cc:280 +msgid "_Next" +msgstr "Volgende" + +#: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 +#: src/skins-qt/menus.cc:105 +msgid "Previous Album" +msgstr "Vorige Album" + +#: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 +#: src/skins-qt/menus.cc:106 +msgid "Next Album" +msgstr "Volgende Album" + +#: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 +msgid "_Repeat" +msgstr "Herhaal" + +#: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 +msgid "S_huffle" +msgstr "Skommel" + +#: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 +msgid "Shuffle by Albu_m" +msgstr "Skoffel volgens Albu_ms" + +#: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 +msgid "N_o Playlist Advance" +msgstr "Geen Snitlys Outo-vordering Nie" + +#: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 +msgid "Stop A_fter This Song" +msgstr "Stop Na Hierdie Lied" + +#: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 +#: src/qtui/menus.cc:292 +msgid "Song _Info ..." +msgstr "Lied _Info ..." + +#: src/gtkui/menus.cc:107 +msgid "Jump to _Time ..." +msgstr "Spring tot _Tyd ..." + +#: src/gtkui/menus.cc:108 +msgid "_Jump to Song ..." +msgstr "Spring tot Lied ..." + +#: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 +msgid "Set Repeat Point _A" +msgstr "Stel Herhaal Punt _A" + +#: src/gtkui/menus.cc:111 src/qtui/menus.cc:167 +msgid "Set Repeat Point _B" +msgstr "Stel Herhaal Punt _B" + +#: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 +msgid "_Clear Repeat Points" +msgstr "Maak herhalingspunte skoon" + +#: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 +#: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 +msgid "By _Title" +msgstr "Volgens _Titel" + +#: src/gtkui/menus.cc:117 src/qtui/menus.cc:174 +msgid "By _File Name" +msgstr "Volgens Lêer Naam" + +#: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 +msgid "By File _Path" +msgstr "Volgens Lêer Pad" + +#: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 +#: src/qtui/menus.cc:196 +msgid "By Track _Number" +msgstr "Volgens Snit _Nommer" + +#: src/gtkui/menus.cc:124 src/gtkui/menus.cc:141 src/qtui/menus.cc:181 +#: src/qtui/menus.cc:198 +msgid "By _Artist" +msgstr "Volgens Kunstenaar" + +#: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 +#: src/qtui/menus.cc:199 +msgid "By Al_bum" +msgstr "Volgens Al_bum" + +#: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 +#: src/qtui/menus.cc:200 +msgid "By Albu_m Artist" +msgstr "Volgens Albu_m Kunstenaar" + +#: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 +#: src/qtui/menus.cc:201 +msgid "By Release _Date" +msgstr "Volgens Vrystelling _Datum" + +#: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 +#: src/qtui/menus.cc:202 +msgid "By _Genre" +msgstr "Volgens _Genre" + +#: src/gtkui/menus.cc:129 src/gtkui/menus.cc:146 src/qtui/menus.cc:186 +#: src/qtui/menus.cc:203 +msgid "By _Length" +msgstr "Volgens _Lengte" + +#: src/gtkui/menus.cc:130 src/gtkui/menus.cc:147 src/qtui/menus.cc:187 +#: src/qtui/menus.cc:204 +msgid "By _File Path" +msgstr "Volgens Lêer Pad" + +#: src/gtkui/menus.cc:131 src/gtkui/menus.cc:148 src/qtui/menus.cc:188 +#: src/qtui/menus.cc:205 +msgid "By _Custom Title" +msgstr "By Pasgemaakte Titel" + +#: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 +#: src/qtui/menus.cc:206 +msgid "By C_omment" +msgstr "By K_ommentaar" + +#: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 +#: src/qtui/menus.cc:208 +msgid "R_everse Order" +msgstr "Omg_ekeerde Volgorde" + +#: src/gtkui/menus.cc:135 src/gtkui/menus.cc:152 src/qtui/menus.cc:193 +#: src/qtui/menus.cc:210 +msgid "_Random Order" +msgstr "Ewekansige Volgorde" + +#: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 +msgid "_Play/Resume" +msgstr "Speel/Hervat" + +#: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 +msgid "_Refresh" +msgstr "Verfris" + +#: src/gtkui/menus.cc:159 src/qtui/menus.cc:220 +msgid "_Sort" +msgstr "_Sorteer" + +#: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 +msgid "Sort Se_lected" +msgstr "Sorteer Seleksie" + +#: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 +msgid "Remove _Duplicates" +msgstr "Verwyder _Duplikate" + +#: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 +msgid "Remove _Unavailable Files" +msgstr "Verwyder Onbeskikbare Lêers" + +#: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 +#: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 +msgid "_New" +msgstr "_Nuwe" + +#: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 +msgid "Ren_ame ..." +msgstr "Hernoem ..." + +#: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 +#: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 +#: src/qtui/playlist_tabs.cc:333 +msgid "Remo_ve" +msgstr "Verwyder" + +#: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 +msgid "_Import ..." +msgstr "Voer in ..." + +#: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 +msgid "_Export ..." +msgstr "Voer uit ..." + +#: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 +msgid "Playlist _Manager ..." +msgstr "Snitlys Bestuurder ..." + +#: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 +msgid "_Queue Manager ..." +msgstr "Tou Bestuurder ..." + +#: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 +msgid "Volume _Up" +msgstr "Volume Op" + +#: src/gtkui/menus.cc:177 src/qtui/menus.cc:243 +msgid "Volume _Down" +msgstr "Volume Af" + +#: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 +msgid "_Equalizer ..." +msgstr "Gelykmaker ..." + +#: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 +msgid "E_ffects ..." +msgstr "E_ffekte ..." + +#: src/gtkui/menus.cc:182 +msgid "_Record Stream" +msgstr "Neem Stroom Op" + +#: src/gtkui/menus.cc:183 +msgid "Audio _Settings ..." +msgstr "Oudio _Stellings ..." + +#: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 +msgid "Show _Menu Bar" +msgstr "Wys kieslysbalk" + +#: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 +msgid "Show I_nfo Bar" +msgstr "Wys Infobalk" + +#: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 +msgid "Show Info Bar _Album Art" +msgstr "Wys Infobalk _Album Kuns" + +#: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 +msgid "Show Info Bar Vis_ualization" +msgstr "Wys Infobalk Vis_ualisering" + +#: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 +msgid "Show _Status Bar" +msgstr "Wys _Status Balk" + +#: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 +msgid "Show _Remaining Time" +msgstr "Wys Oorblywende Tyd" + +#: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 +#: src/skins-qt/menus.cc:152 +msgid "_Visualizations ..." +msgstr "_Visualiserings ..." + +#: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 +msgid "_File" +msgstr "Lêer ..." + +#: src/gtkui/menus.cc:200 src/qtui/menus.cc:279 +msgid "_Playback" +msgstr "Terugspeel" + +#: src/gtkui/menus.cc:201 src/qtui/menus.cc:280 +msgid "P_laylist" +msgstr "Snit_lys" + +#: src/gtkui/menus.cc:202 src/gtkui/menus.cc:220 src/qtui/menus.cc:281 +#: src/qtui/menus.cc:310 +msgid "_Services" +msgstr "Dienste" + +#: src/gtkui/menus.cc:203 src/qtui/menus.cc:282 +msgid "_Output" +msgstr "Uitset" + +#: src/gtkui/menus.cc:204 src/qtui/menus.cc:283 +msgid "_View" +msgstr "Aansig" + +#: src/gtkui/menus.cc:209 src/qtui/menus.cc:294 +msgid "_Queue/Unqueue" +msgstr "Tou/Ontou" + +#: src/gtkui/menus.cc:211 src/qtui/menus.cc:297 +msgid "_Open Containing Folder" +msgstr "Maak Bevattende Gids _Oop" + +#: src/gtkui/menus.cc:212 src/qtui/menus.cc:299 +msgid "_Refresh Selected" +msgstr "Verfris Seleksie" + +#: src/gtkui/menus.cc:214 src/qtui/menus.cc:302 +msgid "Cu_t" +msgstr "Sny" + +#: src/gtkui/menus.cc:215 src/qtui/menus.cc:303 +msgid "_Copy" +msgstr "Kopie" + +#: src/gtkui/menus.cc:216 src/qtui/menus.cc:304 +msgid "_Paste" +msgstr "_Plak" + +#: src/gtkui/menus.cc:217 src/qtui/menus.cc:305 +msgid "Paste at _End" +msgstr "Plak op _Einde" + +#: src/gtkui/menus.cc:218 src/qtui/menus.cc:307 +msgid "Select _All" +msgstr "Selekteer _Alles" + +#: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 +#: src/qtui/playlist_tabs.cc:331 +msgid "_Rename ..." +msgstr "Hernoem ..." + +#: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 +msgid "Playlist Tabs" +msgstr "Snitlys Oortjies" + +#: src/gtkui/settings.cc:36 +msgid "Always show tabs" +msgstr "Wys oortjies altyd" + +#: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 +msgid "Show entry counts" +msgstr "Wys item tellings" + +#: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 +msgid "Show close buttons" +msgstr "Wys maak toe knoppies" + +#: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 +msgid "Playlist Columns" +msgstr "Snitlys Kolomme" + +#: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 +msgid "Show column headers" +msgstr "Wys kolom opskrifte" + +#: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 +msgid "Scroll on song change" +msgstr "Rollees op lied verandering" + +#: src/gtkui/ui_gtk.cc:74 +msgid "GTK Interface" +msgstr "GTK Koppelvlak" + +#: src/gtkui/ui_gtk.cc:210 src/skins/main.cc:227 src/skins-qt/main.cc:225 +#, c-format +msgid "%s - Audacious" +msgstr "%s - Audacious" + +#: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 +#: src/qtui/main_window.cc:384 +msgid "Buffering ..." +msgstr "Buffer tans..." + +#: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 +msgid "Audacious" +msgstr "Audacious" + +#: src/gtkui/ui_gtk.cc:428 src/gtkui/ui_gtk.cc:459 src/gtkui/ui_gtk.cc:817 +#: src/hotkey/gui.cc:71 src/moonstone/main_window.cc:67 +#: src/moonstone/main_window.cc:145 src/moonstone/main_window.cc:146 +#: src/notify/osd.cc:85 src/qthotkey/gui.cc:64 src/qtui/main_window.cc:154 +#: src/qtui/main_window.cc:346 src/qtui/main_window.cc:347 +#: src/skins/menus.cc:109 src/skins-qt/menus.cc:100 +msgid "Play" +msgstr "Speel" + +#: src/gtkui/ui_gtk.cc:428 src/moonstone/main_window.cc:151 +#: src/moonstone/main_window.cc:152 src/notify/osd.cc:82 +#: src/qtui/main_window.cc:352 src/qtui/main_window.cc:353 +#: src/skins/menus.cc:110 src/skins-qt/menus.cc:101 +msgid "Pause" +msgstr "Pouseer" + +#: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 +#: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 +msgid "Search Library" +msgstr "Deursoek Biblioteek" + +#: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 +#: src/qtui/main_window.cc:147 +msgid "Open Files" +msgstr "Maak Lêers Oop" + +#: src/gtkui/ui_gtk.cc:811 src/moonstone/main_window.cc:62 +#: src/qtui/main_window.cc:149 +msgid "Add Files" +msgstr "Voeg Lêers By" + +#: src/gtkui/ui_gtk.cc:816 src/moonstone/main_window.cc:65 +#: src/qtui/main_window.cc:152 src/skins/menus.cc:112 src/skins-qt/menus.cc:103 +msgid "Previous" +msgstr "Vorige" + +#: src/gtkui/ui_gtk.cc:818 src/hotkey/gui.cc:73 src/moonstone/main_window.cc:69 +#: src/qthotkey/gui.cc:66 src/qtui/main_window.cc:156 src/skins/menus.cc:111 +#: src/skins-qt/menus.cc:102 +msgid "Stop" +msgstr "Stop" + +#: src/gtkui/ui_gtk.cc:819 src/moonstone/main_window.cc:76 src/notify/osd.cc:89 +#: src/qtui/main_window.cc:163 src/skins/menus.cc:113 src/skins-qt/menus.cc:104 +msgid "Next" +msgstr "Volgende" + +#: src/gtkui/ui_gtk.cc:821 src/moonstone/main_window.cc:79 +#: src/qtui/main_window.cc:166 src/qtui/menus.cc:252 src/skins/menus.cc:79 +#: src/skins-qt/menus.cc:69 +msgid "Record Stream" +msgstr "Neem Stroom Op" + +#: src/gtkui/ui_gtk.cc:854 src/moonstone/main_window.cc:86 +#: src/qtui/main_window.cc:173 src/skins/menus.cc:103 src/skins-qt/menus.cc:94 +msgid "Repeat" +msgstr "Herhaal" + +#: src/gtkui/ui_gtk.cc:857 src/moonstone/main_window.cc:89 +#: src/qtui/main_window.cc:176 src/skins/menus.cc:104 src/skins-qt/menus.cc:95 +msgid "Shuffle" +msgstr "Skoffel" + +#: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 +msgid "Menu" +msgstr "Kieslys" + +#: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 +msgid "mono" +msgstr "mono" + +#: src/gtkui/ui_statusbar.cc:65 src/qtui/status_bar.cc:157 +msgid "stereo" +msgstr "stereo" + +#: src/gtkui/ui_statusbar.cc:67 src/qtui/status_bar.cc:160 +#, c-format +msgid "%d channel" +msgid_plural "%d channels" +msgstr[0] "%d kanaal" +msgstr[1] "%d kanale" + +#: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 +#, c-format +msgid "%d kHz" +msgstr "%d kHz" + +#: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 +#, c-format +msgid "%d kbit/s" +msgstr "" + +#: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 +msgid "Single mode." +msgstr "Enkel modus." + +#: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 +msgid "Playlist mode." +msgstr "Snitlys modus." + +#: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 +msgid "Stopping after song." +msgstr "Gaan stop na lied." + +#: src/hotkey/gui.cc:70 src/qthotkey/gui.cc:63 +msgid "Previous track" +msgstr "Vorige snit" + +#: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 +msgid "Pause/Resume" +msgstr "Pouseer/Hervat" + +#: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 +msgid "Next track" +msgstr "Volgende snit" + +#: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 +msgid "Step forward" +msgstr "Tree voorwaarts" + +#: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 +msgid "Step backward" +msgstr "Tree terugwaarts" + +#: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 +msgid "Mute" +msgstr "Demp" + +#: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 +msgid "Volume up" +msgstr "Volume op" + +#: src/hotkey/gui.cc:79 src/qthotkey/gui.cc:72 +msgid "Volume down" +msgstr "Volume af" + +#: src/hotkey/gui.cc:80 src/qthotkey/gui.cc:73 +msgid "Jump to file" +msgstr "Spring tot lêer" + +#: src/hotkey/gui.cc:81 src/qthotkey/gui.cc:74 +msgid "Toggle player window(s)" +msgstr "Wissel speler venster(s)" + +#: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 +msgid "Show On-Screen-Display" +msgstr "Wys Op-Skerm-Vertoon" + +#: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 +msgid "Toggle repeat" +msgstr "Wissel herhaal" + +#: src/hotkey/gui.cc:84 src/qthotkey/gui.cc:77 +msgid "Toggle shuffle" +msgstr "Wissel skoffel" + +#: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 +msgid "Toggle stop after current" +msgstr "Wissel stop na huidige" + +#: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 +msgid "Raise player window(s)" +msgstr "Lig speler venster(s) op" + +#: src/hotkey/gui.cc:97 src/qthotkey/gui.cc:97 +msgid "(none)" +msgstr "(geen)" + +#: src/hotkey/gui.cc:260 +msgid "" +"It is not recommended to bind the primary mouse buttons without modifiers.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Dit word nie aanbeveel om die primêre muisknoppies te sonder wysigers te " +"bind nie.\n" +"\n" +"Wil jy voortgaan?" + +#: src/hotkey/gui.cc:263 +msgid "Binding mouse buttons" +msgstr "Binding van muisknoppies" + +#: src/hotkey/gui.cc:426 +msgid "" +"Press a key combination inside a text field.\n" +"You can also bind mouse buttons." +msgstr "" +"Druk 'n sleutelkombinasie binne 'n teksveld.\n" +"Jy kan ook muisknoppies bind." + +#: src/hotkey/gui.cc:432 src/qthotkey/gui.cc:167 +msgid "Hotkeys:" +msgstr "Snelsleutels:" + +#: src/hotkey/gui.cc:448 src/qthotkey/gui.cc:169 +msgid "Action:" +msgstr "Aksie:" + +#: src/hotkey/gui.cc:454 src/qthotkey/gui.cc:170 +msgid "Key Binding:" +msgstr "Sleutel Binding:" + +#: src/hotkey/gui.cc:501 src/qthotkey/gui.cc:172 +msgid "_Add" +msgstr "Voeg by" + +#: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 +msgid "Global Hotkeys" +msgstr "Globale Snelsleutels" + +#: src/hotkey/plugin.cc:76 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" +"Globale Snelsleutel Inprop\n" +"Beheer die speler met globale sleutelkombinasies of multimediasleutels.\n" +"\n" +"Kopiereg (K) 2007-2008 Sascha Hlusiak \n" +"\n" +"Bydraers sluit in:\n" +"Kopiereg (K) 2006-2007 Vladimir Paskov \n" +"Kopiereg (K) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonathan A. Davis ,\n" +"Jeremy Tan " + +#: src/jack/jack-ng.cc:54 +msgid "JACK Output" +msgstr "JACK Uitset" + +#: src/jack/jack-ng.cc:126 +msgid "Client name:" +msgstr "Kliënt naam:" + +#: src/jack/jack-ng.cc:128 +msgid "Automatically connect to output ports" +msgstr "Konnekteer outomaties aan uitset poorte" + +#: src/jack/jack-ng.cc:130 +msgid "Filter ports (regex, use any port if blank):" +msgstr "Filtreer poorte (regex, gebruik enige poort as leeg):" + +#: src/jack/jack-ng.cc:136 +msgid "Connect to physical ports only" +msgstr "Koppel slegs aan fisiese poorte" + +#: src/jack/jack-ng.cc:139 +msgid "Upmix to" +msgstr "\"Upmix\" na" + +#: src/jack/jack-ng.cc:141 +msgid "ports if input has fewer channels" +msgstr "poorte as invoeg minder kanale het" + +#: src/jack/jack-ng.cc:143 +msgid "Ignore insufficient number of ports" +msgstr "Ignoreer onvoldoende aantal poorte" + +#: src/jack/jack-ng.cc:181 +msgid "No JACK output ports were found. Please check settings." +msgstr "Geen JACK uitset poorte was gevind nie. Hersien asseblief stellings." + +#: src/jack/jack-ng.cc:195 +#, c-format +msgid "Only %d JACK output ports were found but %d are required." +msgstr "Slegs %dJACK uitset poorte was gevind maar %dword benodig." + +#: src/jack/jack-ng.cc:210 +#, c-format +msgid "Failed to connect to JACK port %s." +msgstr "Kon nie aan JACK-poort %s koppel nie." + +#: src/jack/jack-ng.cc:230 +msgid "" +"JACK supports only floating-point audio. You must change the output bit " +"depth to floating-point in Audacious settings." +msgstr "" +"JACK ondersteun slegs drywende-punt-klank. Jy moet die uitset bisdiepte na " +"drywende-punt in Audacious-instellings verander." + +#: src/jack/jack-ng.cc:245 +msgid "Failed to connect to the JACK server; is it running?" +msgstr "Kon nie aan JACK-bediener koppel nie; Hardloop dit?" + +#: src/jack/jack-ng.cc:321 +#, c-format +msgid "" +"The JACK server requires a sample rate of %d Hz, but Audacious is playing at " +"%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." +msgstr "" +"Die JACK-bediener vereis 'n monstertempo van %d Hz, maar Audacious speel " +"teen %d Hz. Gebruik asseblief die MonsterTempoOmsitter-effek om die " +"wanpassing reg te stel." + +#: src/ladspa/plugin.cc:415 +#, c-format +msgid "%s Settings" +msgstr "%s Stellings" + +#: src/ladspa/plugin.cc:481 +msgid "Module paths:" +msgstr "Module paaie:" + +#: src/ladspa/plugin.cc:486 +msgid "" +"Separate multiple paths with a colon.\n" +"These paths are searched in addition to LADSPA_PATH.\n" +"After adding new paths, press Enter to scan for new plugins." +msgstr "" +"Skei verskeie paaie met 'n dubbelpunt.\n" +"Hierdie paaie, so wel as LADSPA_PATH, word deursoek.\n" +"Nadat u nuwe paaie bygevoeg het, druk Enter om vir nuwe inproppe te soek." + +#: src/ladspa/plugin.cc:502 +msgid "Available plugins:" +msgstr "Beskikbare inproppe:" + +#: src/ladspa/plugin.cc:515 src/modplug/plugin_main.cc:91 +#: src/modplug/plugin_main.cc:94 src/modplug/plugin_main.cc:97 +#: src/modplug/plugin_main.cc:100 +msgid "Enable" +msgstr "Aktiveer" + +#: src/ladspa/plugin.cc:521 +msgid "Enabled plugins:" +msgstr "Aktiveer inproppe:" + +#: src/ladspa/plugin.cc:537 +msgid "Settings" +msgstr "Stellings" + +#: src/ladspa/plugin.cc:554 +msgid "" +"LADSPA Host for Audacious\n" +"Copyright 2011 John Lindgren" +msgstr "" +"LADSPA Gasheer vir Audacious\n" +"Kopiereg 2011 John Lindgren" + +#: src/ladspa/plugin.h:78 +msgid "LADSPA Host" +msgstr "LADSPA Gasheer" + +#: src/lirc/lirc.cc:55 +msgid "LIRC Plugin" +msgstr "LIRC Inprop" + +#: src/lirc/lirc.cc:379 +msgid "" +"A simple plugin to control Audacious using the LIRC remote control daemon\n" +"\n" +"Adapted for Audacious by:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Based on the XMMS LIRC plugin by:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"For more information about LIRC, see http://lirc.org." +msgstr "" +"'n Eenvoudige inprop om Audacious te beheer deur die LIRC-afstandbeheer " +"damonion te gebruik\n" +"\n" +"Aangepas vir Audacious deur:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Gebaseer op die XMMS LIRC-inprop deur:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"Vir meer inligting oor LIRC, sien http://lirc.org." + +#: src/lirc/lirc.cc:390 +msgid "Connection" +msgstr "Konneksie" + +#: src/lirc/lirc.cc:391 +msgid "Reconnect to LIRC server" +msgstr "Herkoppel aan LIRC-bediener" + +#: src/lirc/lirc.cc:393 +msgid "Wait before reconnecting:" +msgstr "Wag voor herkoppel:" + +#: src/lyricwiki-qt/lyricwiki.cc:89 +msgid "Lyrics" +msgstr "Lirieke" + +#: src/lyricwiki-qt/lyricwiki.cc:116 +msgid "Nowhere" +msgstr "Nêrens nie" + +#: src/lyricwiki-qt/lyricwiki.cc:117 +msgid "lyrics.ovh" +msgstr "lyrics.ovh" + +#: src/lyricwiki-qt/lyricwiki.cc:121 +msgid "Artist is truncated at the start, Title -- at the end" +msgstr "" +"Kunstenaar word aan die begin afgekap, Titel -- aan die einde" + +#: src/lyricwiki-qt/lyricwiki.cc:122 +msgid "Chars to truncate on:" +msgstr "Karakters om af te kap:" + +#: src/lyricwiki-qt/lyricwiki.cc:126 +msgid "Chars are ORed in RegExp, surrounded by whitespace" +msgstr "Karakters word ge-OF in RegExp, omring deur witspasie" + +#: src/lyricwiki-qt/lyricwiki.cc:127 +msgid "Chars to split on:" +msgstr "Karakters om op te verdeel:" + +#: src/lyricwiki-qt/lyricwiki.cc:128 +msgid "Further truncate those on chars" +msgstr "Knip dié op karakters verder af" + +#: src/lyricwiki-qt/lyricwiki.cc:134 +msgid "General" +msgstr "Algemeen" + +#: src/lyricwiki-qt/lyricwiki.cc:135 +msgid "Split title into artist and title on chars" +msgstr "Verdeel titel in kunstenaar en titel op karakters" + +#: src/lyricwiki-qt/lyricwiki.cc:138 +msgid "Internet Sources" +msgstr "Internet Bronne" + +#: src/lyricwiki-qt/lyricwiki.cc:139 +msgid "Fetch lyrics from:" +msgstr "Gaan haal lirieke van:" + +#: src/lyricwiki-qt/lyricwiki.cc:142 +msgid "Store fetched lyrics in local cache" +msgstr "Stoor afgehaalde lirieke in plaaslike kas" + +#: src/lyricwiki-qt/lyricwiki.cc:144 +msgid "Local Storage" +msgstr "Plaaslike Berging" + +#: src/lyricwiki-qt/lyricwiki.cc:145 +msgid "Load lyric files (.lrc) from local storage" +msgstr "Laai lirieklêers (.lrc) vanaf plaaslike berging" + +#: src/lyricwiki-qt/lyricwiki.cc:356 +#, c-format +msgid "Unable to fetch %s" +msgstr "Kan nie %s gaan haal nie" + +#: src/lyricwiki-qt/lyricwiki.cc:365 +#, c-format +msgid "Unable to parse %s" +msgstr "Kan nie %s ontleed nie" + +#: src/lyricwiki-qt/lyricwiki.cc:403 +msgid "Looking for lyrics ..." +msgstr "Soek vir lirieke ..." + +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 +msgid "Error" +msgstr "Fout" + +#: src/lyricwiki-qt/lyricwiki.cc:433 +msgid "Lyrics could not be found." +msgstr "Lirieke kon nie gevind word nie." + +#: src/lyricwiki-qt/lyricwiki.cc:501 +msgid "Missing title and/or artist." +msgstr "Titel en/of kunstenaar ontbreek." + +#: src/lyricwiki-qt/lyricwiki.cc:553 +msgid "Save Locally" +msgstr "Stoor Plaaslik" + +#: src/lyricwiki-qt/lyricwiki.cc:561 +msgid "Refresh" +msgstr "Verfris" + +#: src/m3u/m3u.cc:32 +msgid "M3U Playlists" +msgstr "M3U Snitlyste" + +#: src/metronom/metronom.cc:44 +msgid "Tact Generator" +msgstr "Tact Generator" + +#: src/metronom/metronom.cc:145 +#, c-format +msgid "Tact generator: %d bpm" +msgstr "Tact generator: %d spm" + +#: src/metronom/metronom.cc:147 +#, c-format +msgid "Tact generator: %d bpm %d/%d" +msgstr "Tact generator: %d spm %d/%d" + +#: src/metronom/metronom.cc:235 +msgid "" +"A Tact Generator by Martin Strauss \n" +"\n" +"To use it, add a URL: tact://beats*num/den\n" +"e.g. tact://77 to play 77 beats per minute\n" +"or tact://60*3/4 to play 60 bpm in 3/4 tacts" +msgstr "" +"A Tact Generator deur Martin Strauss \n" +"\n" +"Om dit te gebruik, voeg 'n URL by: tact://beats*num/den\n" +"bv. tact://77 om 77 slae per minuut te speel\n" +"of tact://60*3/4 om 60 spm in 3/4 takte te speel" + +#: src/mixer/mixer.cc:43 +msgid "Channel Mixer" +msgstr "Kanaal Menger" + +#: src/mixer/mixer.cc:255 +msgid "" +"Channel Mixer Plugin for Audacious\n" +"Copyright 2011-2012 John Lindgren and Michał Lipski" +msgstr "" +"Kanaal Menger Inprop vir Audacious\n" +"Kopiereg 2011-2012 John Lindgren en Michał Lipski" + +#: src/mixer/mixer.cc:259 +msgid "Channel Mixer" +msgstr "Kanaal Menger" + +#: src/mixer/mixer.cc:260 +msgid "Output channels:" +msgstr "Uitset kanale:" + +#: src/mms/mms.cc:35 +msgid "MMS Plugin" +msgstr "MMS Inprop" + +#: src/mms/mms.cc:82 +msgid "Error connecting to MMS server" +msgstr "Kon nie aan MMS bediener koppel nie" + +#: src/modplug/modplugbmp.h:57 +msgid "ModPlug (Module Player)" +msgstr "ModPlug (Module Speler)" + +#: src/modplug/plugin_main.cc:55 +msgid "Channels" +msgstr "Kanale" + +#: src/modplug/plugin_main.cc:59 +msgid "Nearest (fastest)" +msgstr "Naaste (vinnigste)" + +#: src/modplug/plugin_main.cc:60 +msgid "Linear (fast)" +msgstr "Lineêr (vinnig)" + +#: src/modplug/plugin_main.cc:61 +msgid "Spline (good)" +msgstr "Spline (goed)" + +#: src/modplug/plugin_main.cc:62 +msgid "Polyphase (best)" +msgstr "Polifase (beste)" + +#: src/modplug/plugin_main.cc:63 +msgid "Sample rate" +msgstr "Monstertempo" + +#: src/modplug/plugin_main.cc:64 +msgid "22 kHz" +msgstr "22 kHz" + +#: src/modplug/plugin_main.cc:65 +msgid "44 kHz" +msgstr "44 kHz" + +#: src/modplug/plugin_main.cc:66 +msgid "48 kHz" +msgstr "48 kHz" + +#: src/modplug/plugin_main.cc:67 +msgid "96 kHz" +msgstr "96 kHz" + +#: src/modplug/plugin_main.cc:71 src/modplug/plugin_main.cc:76 +#: src/modplug/plugin_main.cc:81 +msgid "Level:" +msgstr "Vlak:" + +#: src/modplug/plugin_main.cc:77 +msgid "Cutoff:" +msgstr "Afsnypunt:" + +#: src/modplug/plugin_main.cc:90 +msgid "Reverb" +msgstr "Weerklank" + +#: src/modplug/plugin_main.cc:93 +msgid "Bass Boost" +msgstr "Basversterking" + +#: src/modplug/plugin_main.cc:96 +msgid "Surround" +msgstr "Omring" + +#: src/modplug/plugin_main.cc:99 +msgid "Preamp" +msgstr "Voorversterk" + +#: src/modplug/plugin_main.cc:106 +msgid "Oversample" +msgstr "Oormonster" + +#: src/modplug/plugin_main.cc:107 +msgid "Noise reduction" +msgstr "Geraas vermindering" + +#: src/modplug/plugin_main.cc:108 +msgid "Play Amiga MODs" +msgstr "Speel Amiga MODs" + +#: src/modplug/plugin_main.cc:109 +msgid "Repeat" +msgstr "Herhaal" + +#: src/modplug/plugin_main.cc:110 +msgid "Repeat count:" +msgstr "Herhaal telling:" + +#: src/modplug/plugin_main.cc:111 +msgid "To repeat forever, set the repeat count to -1." +msgstr "Om vir ewig te herhaal, stel die herhalingtelling op -1." + +#: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 +msgid "These settings will take effect when Audacious is restarted." +msgstr "" +"Hierdie instellings sal in werking tree wanneer Audacious herbegin word." + +#: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 +#: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 +#: src/skins/menus.cc:107 src/skins-qt/menus.cc:98 +msgid "Stop After This Song" +msgstr "Stop na hierdie lied" + +#: src/moonstone/moonstone.cc:39 +msgid "Moonstone" +msgstr "Maansteen" + +#: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 +msgid "Reset to Defaults" +msgstr "Stel terug na verstek waardes" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 +msgid "Now Playing" +msgstr "Speel nou" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_model.cc:33 +msgid "Entry Number" +msgstr "Inskrywingsnommer" + +#: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 +msgid "Album Artist" +msgstr "Album Kunstenaar" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "Queue Position" +msgstr "Tou Posisie" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "File Path" +msgstr "Lêer Pad" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:35 +msgid "File Name" +msgstr "Lêer Naam" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:36 +msgid "Custom Title" +msgstr "Pas gemaakte titel" + +#: src/moonstone/playlist_selection.cc:64 +#: src/playlist-manager/playlist-manager.cc:200 +#: src/playlist-manager-qt/playlist-manager-qt.cc:188 +msgid "Entries" +msgstr "Inskrywings" + +#: src/mpg123/mpg123.cc:54 +msgid "MPG123 Plugin" +msgstr "MPG123 Inprop" + +#: src/mpg123/mpg123.cc:81 +msgid "Advanced" +msgstr "Gevorderd" + +#: src/mpg123/mpg123.cc:82 +msgid "Use accurate length calculation (slow)" +msgstr "Gebruik akkurate lengte berekeninge (stadig)" + +#: src/mpg123/mpg123.cc:256 +msgid "Surround" +msgstr "Omsingel" + +#: src/mpris2/plugin.cc:38 +msgid "MPRIS 2 Server" +msgstr "MPRIS 2 Bediener" + +#: src/neon/neon.cc:97 +msgid "Neon HTTP/HTTPS Plugin" +msgstr "Neon HTTP/HTTPS Inprop" + +#: src/neon/neon.cc:526 +msgid "Error parsing redirect" +msgstr "Kon nie herleiding ontleed nie" + +#: src/neon/neon.cc:540 +msgid "Unknown HTTP error" +msgstr "Onbekende HTTP fout" + +#: src/neon/neon.cc:590 +msgid "Error parsing URL" +msgstr "Kon nie URL ontleed nie" + +#: src/neon/neon.cc:660 +msgid "Too many redirects" +msgstr "Te veel herleidings" + +#: src/notify/event.cc:97 +msgid "Stopped" +msgstr "Gestop" + +#: src/notify/event.cc:97 +msgid "Audacious is not playing." +msgstr "Audacious is nie besig om te speel nie." + +#: src/notify/notify.cc:39 +msgid "Desktop Notifications" +msgstr "Werkskermkennisgewings" + +#: src/notify/notify.cc:57 +msgid "" +"Desktop Notifications Plugin for Audacious\n" +"Copyright (C) 2010 Maximilian Bogner\n" +"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" +"\n" +"This plugin 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 3 of the License, or (at your option) " +"any later version.\n" +"\n" +"This plugin 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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see ." +msgstr "" +"Werkskermkennisgewings-inprop vir Audacious\n" +"Kopiereg (C) 2010 Maximilian Bogner\n" +"Kopiereg (C) 2011-2013 John Lindgren en Jean-Alexandre Anglès d'Auriac\n" +"\n" +"Hierdie inprop is gratis sagteware: jy kan dit herverdeel en/of wysig onder " +"die bepalings van die GNU General Public License soos gepubliseer deur die " +"Free Software Foundation, óf weergawe 3 van die lisensie, óf (na jou keuse) " +"enige latere weergawe.\n" +"\n" +"Hierdie inprop word versprei in die hoop dat dit nuttig sal wees, maar " +"SONDER ENIGE WAARBORG; selfs sonder die stilswyende waarborg van " +"VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien die GNU " +"General Public License vir meer besonderhede.\n" +"\n" +"Jy moes 'n afskrif van die GNU General Public License saam met hierdie " +"program ontvang het. Indien nie, sien ." + +#: src/notify/notify.cc:104 +msgid "Show playback controls" +msgstr "Wys terugspeel kontroles" + +#: src/notify/notify.cc:106 +msgid "Always show notification" +msgstr "Wys altyd 'n kennisgewing" + +#: src/notify/notify.cc:108 +msgid "Include album name in notification" +msgstr "Sluit album naam in kennisgewing in" + +#: src/notify/notify.cc:110 +msgid "Custom notification duration:" +msgstr "Pas gemaakte kennisgewingsduur:" + +#: src/notify/osd.cc:74 +msgid "Show" +msgstr "Wys" + +#: src/openmpt/mpt.cc:50 +msgid "OpenMPT (Module Player)" +msgstr "OpenMPT (Module Speler)" + +#: src/openmpt/mpt.cc:133 +msgid "" +"Module player based on libopenmpt\n" +"\n" +"Written by: Chris Spiegel " +msgstr "" +"Module speler gebaseer op libopenmpt\n" +"\n" +"Geskryf deur: Chris Spiegel " + +#: src/openmpt/mpt.cc:152 +msgid "Stereo separation:" +msgstr "Stereo skeiding:" + +#: src/openmpt/mpt.cc:154 +msgid "%" +msgstr "%" + +#: src/openmpt/mpt.cc:158 +msgid "Interpolation:" +msgstr "Interpolasie:" + +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 +msgid "Linear" +msgstr "Lineêr" + +#: src/openmpt/mptwrap.h:52 +msgid "Cubic" +msgstr "Kubies" + +#: src/openmpt/mptwrap.h:53 +msgid "Windowed sinc" +msgstr "Venster sink" + +#: src/oss4/oss.h:75 +msgid "OSS4 Output" +msgstr "OSS4 Uitset" + +#: src/oss4/oss.h:77 +msgid "OSS3 Output" +msgstr "OSS3 Uitset" + +#: src/oss4/plugin.cc:35 +msgid "Default device" +msgstr "Verstek toestel" + +#: src/oss4/plugin.cc:78 +msgid "Audio device:" +msgstr "Oudio toestel:" + +#: src/oss4/plugin.cc:81 +msgid "Use alternate device:" +msgstr "Gebruik alternatiewe toestel:" + +#: src/oss4/plugin.cc:85 +msgid "Save volume between sessions." +msgstr "Berg volume tussen sessies." + +#: src/oss4/plugin.cc:87 +msgid "Enable format conversions made by the OSS software." +msgstr "Aktiveer formaatomskakelings wat deur die OSS-sagteware gemaak word." + +#: src/oss4/plugin.cc:89 +msgid "Enable exclusive mode to prevent virtual mixing." +msgstr "Aktiveer eksklusiewe modus om virtuele menging te voorkom." + +#: src/oss4/plugin.cc:101 +msgid "" +"OSS4 Output Plugin for Audacious\n" +"Copyright 2010-2012 Michał Lipski\n" +"\n" +"I would like to thank people on #audacious, especially Tony Vroon and John " +"Lindgren and of course the authors of the previous OSS plugin." +msgstr "" +"OSS4-uitvoerinprop vir Audacious\n" +"Kopiereg 2010-2012 Michał Lipski\n" +"\n" +"Ek wil graag mense op #audacious bedank, veral Tony Vroon en John Lindgren " +"en natuurlik die skrywers van die vorige OSS-inprop." + +#: src/playlist-manager/playlist-manager.cc:37 +#: src/playlist-manager-qt/playlist-manager-qt.cc:40 +msgid "Playlist Manager" +msgstr "Snitlys Bestuurder" + +#: src/playlist-manager/playlist-manager.cc:220 +#: src/playlist-manager-qt/playlist-manager-qt.cc:354 +msgid "_Remove" +msgstr "_Verwyder" + +#: src/playlist-manager/playlist-manager.cc:221 +#: src/playlist-manager-qt/playlist-manager-qt.cc:349 +msgid "Ren_ame" +msgstr "Hernoem" + +#: src/pls/pls.cc:35 +msgid "PLS Playlists" +msgstr "PLS Snilyste" + +#: src/psf/plugin.cc:53 +msgid "OpenPSF PSF1/PSF2 Decoder" +msgstr "OpenPSF PSF1/PSF2 Dekodeerder" + +#: src/psf/plugin.cc:270 +msgid "OpenPSF Configuration" +msgstr "OpenPSF Konfigurasie" + +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 +msgid "Ignore length from file" +msgstr "Ignoreer lengte van lêer" + +#: src/pulse/pulse_audio.cc:42 +msgid "PulseAudio Output" +msgstr "PulseAudio Uitset" + +#: src/pulse/pulse_audio.cc:72 +msgid "Context name:" +msgstr "Konteksnaam:" + +#: src/pulse/pulse_audio.cc:74 +msgid "Stream name:" +msgstr "Stroom naam:" + +#: src/pulse/pulse_audio.cc:575 +msgid "" +"Audacious PulseAudio Output Plugin\n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" +"Audacious PulseAudio Uitset-inprop\n" +"\n" +"Hierdie program is gratis sagteware; jy kan dit herverdeel en/of wysig onder " +"die bepalings van die GNU General Public License soos gepubliseer deur die " +"Free Software Foundation; óf weergawe 2 van die lisensie, óf (na jou keuse) " +"enige latere weergawe.\n" +"\n" +"Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar " +"SONDER ENIGE WAARBORG; selfs sonder die stilswyende waarborg van " +"VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien die GNU " +"General Public License vir meer besonderhede.\n" +"\n" +"Jy moes 'n afskrif van die GNU General Public License saam met hierdie " +"program ontvang het; indien nie, skryf aan die Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, VSA." + +#: src/qtaudio/qtaudio.cc:44 +msgid "QtMultimedia Output" +msgstr "QtMultimedia Uitset" + +#: src/qtaudio/qtaudio.cc:72 +msgid "" +"QtMultimedia Audio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"QtMultimedia oudio-uitvoer-inprop vir Audacious\n" +"Kopiereg 2014 William Pitcock\n" +"\n" +"Gebaseer op SDL Output Plugin vir Audacious\n" +"Kopiereg 2010 John Lindgren" + +#: src/qtglspectrum/gl-spectrum.cc:41 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" +"OpenGL Spectrum Analyzer vir Audacious\n" +"Kopiereg 2013 Christophe Budé, John Lindgren en Carlo Bramini\n" +"Kopiereg 2014, 2020 Ariadne Conill\n" +"\n" +"Gebaseer op die XMMS-inprop:\n" +"Kopiereg 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson en " +"4Front Technologies\n" +"\n" +"Lisensie: GPLv2+" + +#: src/qthotkey/gui.cc:165 +msgid "Press a key combination inside a text field." +msgstr "Druk 'n sleutelkombinasie binne 'n teksveld." + +#: src/qthotkey/plugin.cc:103 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" +"Global Hotkey Plugin\n" +"Beheer die speler met globale sleutelkombinasies of multimediasleutels.\n" +"\n" +"Kopiereg (C) 2020 i.Dark_Templar \n" +"Kopiereg (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Bydraers sluit in:\n" +"Kopiereg (C) 2006-2007 Vladimir Paskov \n" +"Kopiereg (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonathan A. Davis ,\n" +"Jeremy Tan " + +#: src/qtui/menus.cc:109 +msgid "_Open Folder ..." +msgstr "Maak vouer oop..." + +#: src/qtui/menus.cc:115 +msgid "_Add Folder ..." +msgstr "Voeg vouer by..." + +#: src/qtui/menus.cc:128 +msgid "_Log Inspector ..." +msgstr "_Log inspekteur..." + +#: src/qtui/menus.cc:218 +msgid "_Find ..." +msgstr "Vind..." + +#: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 +msgid "Audio Settings ..." +msgstr "Oudio Instellings..." + +#: src/qtui/playlist_model.cc:186 +msgid "Q#" +msgstr "T#" + +#: src/qtui/playlist_model.cc:188 +msgid "T#" +msgstr "S#" + +#: src/qtui/qtui.cc:40 +msgid "Qt Interface" +msgstr "Qt-Kopperlvlak" + +#: src/qtui/search_bar.cc:46 +msgid "Search playlist" +msgstr "Deursoek snitlys" + +#: src/qtui/settings.cc:58 +msgid "Always" +msgstr "Altyd" + +#: src/qtui/settings.cc:59 +msgid "Auto-hide" +msgstr "Versteek outomaties" + +#: src/qtui/settings.cc:60 +msgid "Never" +msgstr "Nooit" + +#: src/qtui/settings.cc:64 +msgid "Show playlist tabs:" +msgstr "Wys snitlys oortjies:" + +#: src/qtui/settings.cc:78 +msgid "Use bold font for column headers" +msgstr "Gebruik vetdruk vir kolomopskrifte" + +#: src/resample/resample.cc:43 +msgid "Sample Rate Converter" +msgstr "Monstertempo Omskakelaar" + +#: src/resample/resample.cc:183 +msgid "" +"Sample Rate Converter Plugin for Audacious\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" +"Monstertempo Omskakelaar Inprop vir Audacious\n" +"Kopiereg 2010-2012 John Lindgren" + +#: src/resample/resample.cc:187 +msgid "Skip/repeat samples" +msgstr "Slaan oor/herhaal monsters" + +#: src/resample/resample.cc:188 +msgid "Linear interpolation" +msgstr "Lineêre interpolasie" + +#: src/resample/resample.cc:189 +msgid "Fast sinc interpolation" +msgstr "Vinnige sinc interpolasie" + +#: src/resample/resample.cc:190 +msgid "Medium sinc interpolation" +msgstr "Medium sinc interpolasie" + +#: src/resample/resample.cc:191 +msgid "Best sinc interpolation" +msgstr "Beste sinc interpolasie" + +#: src/resample/resample.cc:195 +msgid "Conversion" +msgstr "Omskakeling" + +#: src/resample/resample.cc:196 +msgid "Method:" +msgstr "Metode:" + +#: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 +msgid "Rate:" +msgstr "Tempo:" + +#: src/resample/resample.cc:202 +msgid "Rate Mappings" +msgstr "Tempo Karterings" + +#: src/resample/resample.cc:203 +msgid "Use rate mappings" +msgstr "Gebruik tempo karterings" + +#: src/resample/resample.cc:205 +msgid "8 kHz:" +msgstr "8 kHz:" + +#: src/resample/resample.cc:209 +msgid "16 kHz:" +msgstr "16 kHz:" + +#: src/resample/resample.cc:213 +msgid "22.05 kHz:" +msgstr "22.05 kHz:" + +#: src/resample/resample.cc:217 +msgid "32.0 kHz:" +msgstr "32.0 kHz:" + +#: src/resample/resample.cc:221 +msgid "44.1 kHz:" +msgstr "44.1 kHz:" + +#: src/resample/resample.cc:225 +msgid "48 kHz:" +msgstr "48 kHz:" + +#: src/resample/resample.cc:229 +msgid "88.2 kHz:" +msgstr "88.2 kHz:" + +#: src/resample/resample.cc:233 +msgid "96 kHz:" +msgstr "96 kHz:" + +#: src/resample/resample.cc:237 +msgid "176.4 kHz:" +msgstr "176.4 kHz:" + +#: src/resample/resample.cc:241 +msgid "192 kHz:" +msgstr "192 kHz:" + +#: src/scrobbler2/config_window.cc:19 +msgid "Checking Last.fm access ..." +msgstr "Gaan Last.fm-toegang na ..." + +#: src/scrobbler2/config_window.cc:27 +msgid "" +"Your scrobbles are being saved on your computer temporarily. They will be " +"submitted as soon as Audacious is allowed access." +msgstr "" +"Jou scrobbles word tydelik op jou rekenaar gestoor. Dit sal ingedien word " +"sodra Audacious toegang kry." + +#: src/scrobbler2/config_window.cc:33 +#, c-format +msgid "Permission granted. Scrobbling for user %s." +msgstr "Toestemming verleen. Scrobbling vir gebruiker %s." + +#: src/scrobbler2/config_window.cc:37 +msgid "" +"Permission denied. Open the following URL in a browser, allow Audacious " +"access to your account, and then click 'Check Permission' again:" +msgstr "" +"Toestemming geweier. Maak die volgende URL in 'n blaaier oop, laat Audacious " +"toegang tot jou rekening toe, en klik dan weer 'Kontroleer toestemming':" + +#: src/scrobbler2/config_window.cc:47 +msgid "There was a problem contacting Last.fm." +msgstr "Daar was 'n probleem om Last.fm te kontak." + +#: src/scrobbler2/config_window.cc:86 +msgid "Check Permission" +msgstr "Gaan toestemming na" + +#: src/scrobbler2/config_window.cc:87 +msgid "Revoke Permission" +msgstr "Herroep toestemming" + +#: src/scrobbler2/config_window.cc:91 +msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." +msgstr "" +"Jy moet Audacious toelaat om snitte na jou Last.fm-rekening te scrobble." + +#: src/scrobbler2/scrobbler.cc:29 +msgid "Scrobbler 2.0" +msgstr "Scrobbler 2.0" + +#: src/scrobbler2/scrobbler.cc:226 +msgid "" +"The Scrobbler plugin could not be started.\n" +"There might be a problem with your installation." +msgstr "" +"Die Scrobbler-inprop kon nie begin word nie.\n" +"Daar is dalk 'n probleem met jou installasie." + +#: src/scrobbler2/scrobbler.cc:291 +msgid "" +"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" +"\n" +"Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Thanks to John Lindgren for giving me a hand at the beginning of this " +"project.\n" +"\n" +msgstr "" +"Audacious Scrobbler Plugin 2.0 deur Pitxyoki,\n" +"\n" +"Kopiereg © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Dankie aan John Lindgren wat my 'n hand gegee het aan die begin van hierdie " +"projek.\n" +"\n" + +#: src/scrobbler2/scrobbler_communication.cc:663 +msgid "" +"Audacious is now using an improved version of the Last.fm Scrobbler.\n" +"Please check the Preferences for the Scrobbler plugin." +msgstr "" +"Audacious gebruik nou 'n verbeterde weergawe van die Last.fm Scrobbler.\n" +"Gaan asseblief die Voorkeure vir die Scrobbler-inprop na." + +#: src/sdlout/sdlout.cc:43 +msgid "SDL Output" +msgstr "SDL-uitset" + +#: src/sdlout/sdlout.cc:72 +msgid "" +"SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"SDL-uitvoerinprop vir Audacious\n" +"Kopiereg 2010 John Lindgren" + +#: src/search-tool/library.cc:35 src/search-tool/library.cc:46 +#: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 +msgid "Library" +msgstr "Biblioteek" + +#: src/search-tool-qt/search-model.cc:49 src/search-tool/search-tool.cc:291 +#, c-format +msgid "%d song" +msgid_plural "%d songs" +msgstr[0] "%dlied" +msgstr[1] "%dliedjies" + +#: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 +msgid "of this genre" +msgstr "van hierdie genre" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "on" +msgstr "op" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "by" +msgstr "deur" + +#: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 +msgid "Number of results to show:" +msgstr "Aantal resultate om te wys:" + +#: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 +msgid "Rescan library at startup" +msgstr "Skandeer biblioteek weer gedurende begin" + +#: src/search-tool-qt/search-tool-qt.cc:170 +msgid "Monitor library for changes" +msgstr "Monitor biblioteek vir veranderinge" + +#: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 +msgid "" +"To import your music library into Audacious, choose a folder and then click " +"the \"refresh\" icon." +msgstr "" +"Om jou musiekbiblioteek in Audacious in te voer, kies 'n vouer en klik dan " +"op die \"herlaai\"-ikoon." + +#: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 +msgid "Please wait ..." +msgstr "Wag asseblief ..." + +#: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 +msgid "Choose Folder" +msgstr "Kies Omslag" + +#: src/search-tool-qt/search-tool-qt.cc:201 +msgid "Search library" +msgstr "Deursoek biblioteek" + +#: src/search-tool-qt/search-tool-qt.cc:327 src/search-tool/search-tool.cc:155 +#, c-format +msgid "%d of %d result shown" +msgid_plural "%d of %d results shown" +msgstr[0] "%d of %d resultaat word gewys" +msgstr[1] "%d van %d resultate word gewys" + +#: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 +#, c-format +msgid "%d result" +msgid_plural "%d results" +msgstr[0] "%d resultaat" +msgstr[1] "%d resultate" + +#: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 +msgid "_Create Playlist" +msgstr "Maak Snitlys" + +#: src/search-tool-qt/search-tool-qt.cc:503 src/search-tool/search-tool.cc:347 +msgid "_Add to Playlist" +msgstr "Voeg Snitlys by" + +#: src/sid/xmms-sid.cc:43 +msgid "SID Player" +msgstr "SID Speler" + +#: src/sid/xs_config.cc:62 +msgid "Channels:" +msgstr "Kanale:" + +#: src/sid/xs_config.cc:68 +msgid "Emulation" +msgstr "Emulasie" + +#: src/sid/xs_config.cc:69 +msgid "Emulate MOS 8580 (default: MOS 6581)" +msgstr "Emuleer MOS 8580 (verstek: MOS 6581)" + +#: src/sid/xs_config.cc:71 +msgid "Do not automatically select chip model" +msgstr "Moenie outomaties skyfiemodel kies nie" + +#: src/sid/xs_config.cc:73 +msgid "Emulate filter" +msgstr "Emulasie filtreerder" + +#: src/sid/xs_config.cc:75 +msgid "Clock speed:" +msgstr "Klokspoed:" + +#: src/sid/xs_config.cc:78 +msgid "Do not automatically select clock speed" +msgstr "Moenie outomaties klokspoed kies nie" + +#: src/sid/xs_config.cc:80 +msgid "Playback time" +msgstr "Terugspeel tyd" + +#: src/sid/xs_config.cc:81 +msgid "Set maximum playback time:" +msgstr "Stel maksimum terugspeel tyd:" + +#: src/sid/xs_config.cc:87 +msgid "Use only when song length is unknown" +msgstr "Gebruik slegs wanneer die lengte van die liedjie onbekend is" + +#: src/sid/xs_config.cc:90 +msgid "Set minimum playback time:" +msgstr "Stel minimum speeltyd:" + +#: src/sid/xs_config.cc:96 +msgid "Subtunes" +msgstr "Subtunes" + +#: src/sid/xs_config.cc:97 +msgid "Enable subtunes" +msgstr "Aktiveer subtunes" + +#: src/sid/xs_config.cc:99 +msgid "Ignore subtunes shorter than:" +msgstr "Ignoreer subtunes korter as:" + +#: src/sid/xs_config.cc:105 +msgid "Note" +msgstr "Nota" + +#: src/silence-removal/silence-removal.cc:39 +msgid "Silence Removal" +msgstr "Stilte verwydering" + +#: src/silence-removal/silence-removal.cc:58 +msgid "" +"Silence Removal Plugin for Audacious\n" +"Copyright 2014 John Lindgren" +msgstr "" +"Stilte Verwydering Inprop vir Audacious\n" +"Kopiereg 2014 John Lindgren" + +#: src/silence-removal/silence-removal.cc:67 +msgid "Silence Removal" +msgstr "Stilte Verwydering" + +#: src/silence-removal/silence-removal.cc:68 +msgid "Threshold:" +msgstr "Drempel:" + +#: src/silence-removal/silence-removal.cc:70 +msgid "dB" +msgstr "dB" + +#: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 +msgid "Repeat points cleared." +msgstr "Herhaal punte uitgevee." + +#: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 +msgid "Repeat point A set." +msgstr "Herhaal punt A gestel." + +#: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 +msgid "Repeat point B set." +msgstr "Herhaal punt B gestel." + +#: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 +msgid "Preamp" +msgstr "Voorversterker" + +#: src/skins/equalizer.cc:228 src/skins-qt/equalizer.cc:225 +msgid "31 Hz" +msgstr "31 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "63 Hz" +msgstr "63 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "125 Hz" +msgstr "125 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "250 Hz" +msgstr "250 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "500 Hz" +msgstr "500 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "1 kHz" +msgstr "1 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "2 kHz" +msgstr "2 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "4 kHz" +msgstr "4 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "8 kHz" +msgstr "8 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "16 kHz" +msgstr "16 kHz" + +#: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 +msgid "Audacious Equalizer" +msgstr "Audacious-gelykmaker" + +#: src/skins/main.cc:452 src/skins-qt/main.cc:436 +msgid "Recording on" +msgstr "Opname aan" + +#: src/skins/main.cc:454 src/skins-qt/main.cc:438 +msgid "Recording off" +msgstr "Opname af" + +#: src/skins/main.cc:749 src/skins-qt/main.cc:690 +#, c-format +msgid "Seek to %d:%-2.2d / %d:%-2.2d" +msgstr "Soek tot %d:%-2.2d / %d:%-2.2d" + +#: src/skins/main.cc:766 src/skins-qt/main.cc:707 +#, c-format +msgid "Volume: %d%%" +msgstr "Volume: %d%%" + +#: src/skins/main.cc:779 src/skins-qt/main.cc:720 +#, c-format +msgid "Balance: %d%% left" +msgstr "Balans: %d%% links" + +#: src/skins/main.cc:781 src/skins-qt/main.cc:722 +msgid "Balance: center" +msgstr "Balans: middel" + +#: src/skins/main.cc:783 src/skins-qt/main.cc:724 +#, c-format +msgid "Balance: %d%% right" +msgstr "Balans: %d%% regs" + +#: src/skins/main.cc:875 src/skins-qt/main.cc:816 +msgid "Options Menu" +msgstr "Opsieskieslys" + +#: src/skins/main.cc:879 src/skins-qt/main.cc:820 +msgid "Disable 'Always On Top'" +msgstr "Deaktiveer 'Altyd bo-op'" + +#: src/skins/main.cc:881 src/skins-qt/main.cc:822 +msgid "Enable 'Always On Top'" +msgstr "Aktiveer 'Altyd bo-op'" + +#: src/skins/main.cc:884 src/skins-qt/main.cc:825 +msgid "File Info Box" +msgstr "Lêer inligtingskassie" + +#: src/skins/main.cc:887 src/skins/menus.cc:149 src/skins-qt/main.cc:828 +#: src/skins-qt/menus.cc:142 +msgid "Double Size" +msgstr "Dubbel grootte" + +#: src/skins/main.cc:890 src/skins-qt/main.cc:831 +msgid "Visualizations" +msgstr "Visualisasies" + +#: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 +msgid "Volume Up" +msgstr "Volume Op" + +#: src/skins/menus.cc:75 src/skins-qt/menus.cc:65 +msgid "Volume Down" +msgstr "Volume Af" + +#: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 +msgid "Effects ..." +msgstr "Effekte ..." + +#: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 +msgid "Open Files ..." +msgstr "Maak lêers oop ..." + +#: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 +msgid "Open URL ..." +msgstr "Maak URL oop ..." + +#: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 +msgid "Playback" +msgstr "Terugspeel" + +#: src/skins/menus.cc:89 src/skins-qt/menus.cc:80 +msgid "Playlist" +msgstr "Snitlys" + +#: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 +msgid "Output" +msgstr "Uitset" + +#: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 +msgid "View" +msgstr "Aansig" + +#: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 +#: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 +msgid "Services" +msgstr "Dienste" + +#: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 +msgid "About ..." +msgstr "Aangaande ..." + +#: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 +msgid "Settings ..." +msgstr "Stellings ..." + +#: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 +msgid "Quit" +msgstr "Verlaat" + +#: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 +#: src/skins-qt/menus.cc:229 +msgid "Song Info ..." +msgstr "Lied Info ..." + +#: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 +msgid "Shuffle by Album" +msgstr "Skommel volgens Album" + +#: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 +msgid "No Playlist Advance" +msgstr "Geen Snitlys Bevordering nie" + +#: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 +msgid "Set A-B Repeat" +msgstr "Stel A-B Herhaal" + +#: src/skins/menus.cc:118 src/skins-qt/menus.cc:109 +msgid "Clear A-B Repeat" +msgstr "Verwyder A-B Herhaal" + +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 +msgid "Jump to Song ..." +msgstr "Spring tot Lied ..." + +#: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 +msgid "Jump to Time ..." +msgstr "Spring tot Tyd ..." + +#: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 +msgid "Play/Resume" +msgstr "Speel/Hervat" + +#: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 +msgid "New Playlist" +msgstr "Nuwe Snitlys" + +#: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 +msgid "Rename Playlist ..." +msgstr "Hernoem Snitlys ..." + +#: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 +msgid "Remove Playlist" +msgstr "Verwyder Snitlys" + +#: src/skins/menus.cc:131 src/skins-qt/menus.cc:124 +msgid "Previous Playlist" +msgstr "Vorige Snitlys" + +#: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 +msgid "Next Playlist" +msgstr "Volgende Snitlys" + +#: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 +msgid "Import Playlist ..." +msgstr "Voer Snitlys in ..." + +#: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 +msgid "Export Playlist ..." +msgstr "Voer Snitlys uit ..." + +#: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 +msgid "Playlist Manager ..." +msgstr "Snitlys Bestuurder ..." + +#: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 +msgid "Queue Manager ..." +msgstr "Tou Bestuurder ..." + +#: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 +msgid "Refresh Playlist" +msgstr "Verfris Snitlys" + +#: src/skins/menus.cc:144 src/skins-qt/menus.cc:137 +msgid "Show Playlist Editor" +msgstr "Wys Snitlys Redigeerder" + +#: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 +msgid "Show Equalizer" +msgstr "Wys Gelykmaker" + +#: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 +msgid "Show Remaining Time" +msgstr "Wys Oorblywende Tyd" + +#: src/skins/menus.cc:150 src/skins-qt/menus.cc:143 +msgid "Always on Top" +msgstr "Altyd Bo-op" + +#: src/skins/menus.cc:151 src/skins-qt/menus.cc:145 +msgid "On All Workspaces" +msgstr "Op Alle Werkskerms" + +#: src/skins/menus.cc:153 src/skins-qt/menus.cc:148 +msgid "Roll Up Player" +msgstr "Rol Speler Op" + +#: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 +msgid "Roll Up Playlist Editor" +msgstr "Rol Snitlys Redigeerder Op" + +#: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 +msgid "Roll Up Equalizer" +msgstr "Rol Gelykmaker Op" + +#: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 +msgid "Add URL ..." +msgstr "Voeg URL by ..." + +#: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 +msgid "Add Files ..." +msgstr "Voeg Lêers by ..." + +#: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 +msgid "By Title" +msgstr "Volgens Titel" + +#: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 +msgid "By File Name" +msgstr "Volgens Lêer Naam" + +#: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 +msgid "By File Path" +msgstr "Volgens Lêer Pad" + +#: src/skins/menus.cc:176 src/skins-qt/menus.cc:172 +msgid "Remove All" +msgstr "Verwyder Alles" + +#: src/skins/menus.cc:177 src/skins-qt/menus.cc:173 +msgid "Clear Queue" +msgstr "Vee tou uit" + +#: src/skins/menus.cc:179 src/skins-qt/menus.cc:175 +msgid "Remove Unavailable Files" +msgstr "Verwyder onbeskikbare lêers" + +#: src/skins/menus.cc:180 src/skins-qt/menus.cc:176 +msgid "Remove Duplicates" +msgstr "Verwyder Duplikate" + +#: src/skins/menus.cc:182 src/skins-qt/menus.cc:178 +msgid "Remove Unselected" +msgstr "Verwyder Ongekiesdes" + +#: src/skins/menus.cc:183 src/skins-qt/menus.cc:179 +msgid "Remove Selected" +msgstr "Verwyder Gekiesdes" + +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 +msgid "Search and Select" +msgstr "Soek en kies" + +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 +msgid "Invert Selection" +msgstr "Keer Seleksie Om" + +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 +msgid "Select None" +msgstr "Kies Geen" + +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 +msgid "Select All" +msgstr "Kies Alles" + +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 +msgid "By Track Number" +msgstr "Volgens Snit Nommer" + +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 +msgid "By Artist" +msgstr "Volgens Kunstenaar" + +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 +msgid "By Album" +msgstr "Volgens Album" + +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 +msgid "By Album Artist" +msgstr "Volgens Album Kunstenaar" + +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 +msgid "By Release Date" +msgstr "Volgens Vrystellingsdatum" + +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 +msgid "By Genre" +msgstr "Volgens Genre" + +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 +msgid "By Length" +msgstr "Volgens Lengte" + +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 +msgid "By Custom Title" +msgstr "Volgens Pasgemaakte Titel" + +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 +msgid "By Comment" +msgstr "Volgens Kommentaar" + +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 +msgid "Randomize List" +msgstr "Maak Lys Ewekansig" + +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 +msgid "Reverse List" +msgstr "Keer Lys Om" + +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 +msgid "Sort Selected" +msgstr "Sorteer Gekiesdes" + +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 +msgid "Sort List" +msgstr "Sorteer lys" + +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 +msgid "Open Containing Folder" +msgstr "Maak Bevat-vouer oop" + +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 +msgid "Cut" +msgstr "Sny" + +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 +msgid "Copy" +msgstr "Kopieer" + +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 +msgid "Paste" +msgstr "Plak" + +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 +msgid "Paste at End" +msgstr "Plak op Einde" + +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 +msgid "Queue/Unqueue" +msgstr "Sit in Tou/Haal uit Tou" + +#: src/skins/playlist-widget.cc:55 src/skins-qt/playlist-widget.cc:56 +#, c-format +msgid "%s (%d of %d)" +msgstr "%s (%d of %d)" + +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 +msgid "Audacious Playlist Editor" +msgstr "Audacious Snitlys Redigeerder" + +#: src/skins/plugin.cc:49 src/skins-qt/plugin.cc:64 +msgid "Winamp Classic Interface" +msgstr "Winamp Klassieke Koppelvlak" + +#: src/skins-qt/menus.cc:75 +msgid "Open Folder ..." +msgstr "Maak Vouer Oop ..." + +#: src/skins-qt/menus.cc:159 +msgid "Add Folder ..." +msgstr "Voeg Vouer By ..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Soek inskrywings in aktiewe snitlys" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Kies inskrywings in snitlys deur een of meer velde in te vul. Velde gebruik " +"gewone uitdrukkings sintaksis, hoofletter-onsensitief. As jy nie weet hoe " +"gereelde uitdrukkings werk nie, voeg eenvoudig dan 'n letterlike gedeelte in " +"van waarna jy soek." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titel:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Kunstenaar:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Lêer Naam:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Vee vorige keuse uit voordat jy soek" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Wissel outomaties tou vir bypassende inskrywings" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Skep 'n nuwe snitlys met bypassende inskrywings" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Soek" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 +msgid "Player:" +msgstr "Speler:" + +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 +msgid "Select main player window font:" +msgstr "Kies hoof speler venster lettertipe:" + +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 +msgid "Playlist:" +msgstr "Snitlys:" + +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 +msgid "Select playlist font:" +msgstr "Kies snitlys lettertipe:" + +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 +msgid "Skin" +msgstr "Vel" + +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Vertoon aktiewe titelbalk wanneer enige venster gefokus is" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 +msgid "Fonts" +msgstr "Lettertipes" + +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 +msgid "Use bitmap fonts (supports ASCII only)" +msgstr "Gebruik bitmap-lettertipes (ondersteun slegs ASCII)" + +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 +msgid "Scroll song title" +msgstr "Rollees liedjie titel" + +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 +msgid "Scroll song title in both directions" +msgstr "Rollees liedjie titel in beide rigtings" + +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 +msgid "Analyzer" +msgstr "Ontleder" + +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 +msgid "Scope" +msgstr "Skoop" + +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 +msgid "Voiceprint / VU meter" +msgstr "Stemafdruk / VU meter" + +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 +msgid "Off" +msgstr "Af" + +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 +#: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 +msgid "Normal" +msgstr "Normaal" + +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 +#: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 +msgid "Fire" +msgstr "Vuur" + +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 +msgid "Vertical lines" +msgstr "Vertikale lyne" + +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 +msgid "Lines" +msgstr "Lyne" + +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 +msgid "Bars" +msgstr "Balke" + +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 +msgid "Slowest" +msgstr "Stadigste" + +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 +msgid "Slow" +msgstr "Stadig" + +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 +#: src/soxr/sox-resampler.cc:180 +msgid "Medium" +msgstr "Medium" + +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 +msgid "Fast" +msgstr "Vinnig" + +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 +msgid "Fastest" +msgstr "Vinnigste" + +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 +msgid "Dots" +msgstr "Kolletjies" + +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 +msgid "Line" +msgstr "Lyne" + +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 +msgid "Solid" +msgstr "Solied" + +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 +msgid "Ice" +msgstr "Ys" + +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 +msgid "Smooth" +msgstr "Glad" + +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 +msgid "Coloring:" +msgstr "Kleur:" + +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 +msgid "Style:" +msgstr "Style:" + +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 +msgid "Falloff:" +msgstr "Daling:" + +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 +msgid "Peak falloff:" +msgstr "Piek daling:" + +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 +msgid "Scope Style:" +msgstr "Skoop styl:" + +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 +msgid "Voiceprint Coloring:" +msgstr "Stemafdruk Kleur:" + +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 +msgid "VU Meter Style:" +msgstr "VU Meter Styl:" + +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 +msgid "Type" +msgstr "Tipe" + +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 +msgid "Visualization type:" +msgstr "Visualisering tipe:" + +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 +msgid "Analyzer" +msgstr "Ontleder" + +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 +msgid "Show peaks" +msgstr "Wys pieke:" + +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 +msgid "Visualization" +msgstr "Visualisering" + +#: src/skins-qt/skinselector.cc:98 src/skins/skinselector.cc:111 +msgid "Archived Winamp 2.x skin" +msgstr "Geargiveer Winamp 2.x vel" + +#: src/skins-qt/skinselector.cc:102 src/skins/skinselector.cc:115 +msgid "Unarchived Winamp 2.x skin" +msgstr "Gedeargiveerde Winamp 2.x vel" + +#: src/sndfile/plugin.cc:38 +msgid "Sndfile Plugin" +msgstr "Sndfile Inprop" + +#: src/sndfile/plugin.cc:372 +msgid "" +"Based on the xmms_sndfile plugin:\n" +"Copyright (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Adapted for Audacious by Tony Vroon \n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" +"Gebaseer op die xmms_sndfile-inprop:\n" +"Kopiereg (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Aangepas vir Audacious deur Tony Vroon \n" +"\n" +"Hierdie program is gratis sagteware; jy kan dit herverdeel en/of wysig onder " +"die bepalings van die GNU General Public License soos gepubliseer deur die " +"Free Software Foundation; óf weergawe 2 van die lisensie, óf (na jou keuse) " +"enige latere weergawe.\n" +"\n" +"Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar " +"SONDER ENIGE WAARBORG; selfs sonder die stilswyende waarborg van " +"VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien die GNU " +"General Public License vir meer besonderhede.\n" +"\n" +"Jy moes 'n afskrif van die GNU General Public License saam met hierdie " +"program ontvang het; indien nie, skryf aan die Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, VSA." + +#: src/sndio/sndio.cc:43 +msgid "Sndio Output" +msgstr "Sndio Uitset" + +#: src/sndio/sndio.cc:98 +msgid "Device (blank for default):" +msgstr "Toestel (leeg vir verstek):" + +#: src/sndio/sndio.cc:100 +msgid "Save and restore volume:" +msgstr "Stoor en herstel volume:" + +#: src/sndio/sndio.cc:181 +#, c-format +msgid "Sndio error: Unsupported audio format (%d)" +msgstr "Sndio-fout: ongesteunde oudioformaat (%d)" + +#: src/sndio/sndio.cc:192 +msgid "Sndio error: sio_open() failed" +msgstr "Sndio-fout: sio_open() het misluk" + +#: src/sndio/sndio.cc:221 +msgid "Sndio error: sio_setpar() failed" +msgstr "Sndio-fout: sio_setpar() het misluk" + +#: src/sndio/sndio.cc:233 +msgid "Sndio error: sio_start() failed" +msgstr "Sndio-fout: sio_start() het misluk" + +#: src/songchange/song_change.cc:30 +msgid "Song Change" +msgstr "Lied Verander" + +#: src/songchange/song_change.cc:245 +msgid "Commands" +msgstr "Bevele" + +#: src/songchange/song_change.cc:247 +msgid "Command to run when starting a new song:" +msgstr "Bevel om te hardloop wanneer 'n nuwe lied begin:" + +#: src/songchange/song_change.cc:250 +msgid "Command to run at the end of a song:" +msgstr "Bevel om te hardloop na die einde van 'n lied:" + +#: src/songchange/song_change.cc:253 +msgid "Command to run at the end of the playlist:" +msgstr "Bevel om te hardloop na die einde van die snitlys:" + +#: src/songchange/song_change.cc:256 +msgid "Command to run when song title changes (for network streams):" +msgstr "" +"Bevel om uit te voer wanneer liedjietitel verander (vir netwerkstrome):" + +#: src/songchange/song_change.cc:259 +msgid "" +"You can use the following format codes, which will be replaced before " +"running the command (not all are useful for the end-of-playlist command):" +msgstr "" +"Jy kan die volgende formaatkodes gebruik, wat vervang sal word voordat die " +"bevel uitgevoer word (nie almal is nuttig vir die einde-van-snitlys-opdrag " +"nie):" + +#: src/songchange/song_change.cc:262 +msgid "" +"%a: Artist\n" +"%b: Album\n" +"%c: Number of channels\n" +"%f: File name (full path)\n" +"%F: Frequency (Hertz)\n" +"%l: Length (milliseconds)\n" +"%n or %s: Formatted title (see playlist settings)\n" +"%p: Currently playing (1 or 0)\n" +"%r: Rate (bits per second)\n" +"%t: Playlist position\n" +"%T: Title (unformatted)" +msgstr "" +"%a: Kunstenaar\n" +"%b: Album\n" +"%c: Aantal kanale\n" +"%f: Lêernaam (volledige pad)\n" +"%F: Frekwensie (Hertz)\n" +"%l: Lengte (millisekondes)\n" +"%n of %s: Geformateerde titel (sien snitlys instellings)\n" +"%p: Speel tans (1 of 0)\n" +"%r: Koers (bisse per sekonde)\n" +"%t: Snitlys Posisie\n" +"%T: Titel (ongeformateer)" + +#: src/songchange/song_change.cc:273 +msgid "" +"Parameters passed to the shell should be enclosed in quotation marks. " +"Unquoted parameters may lead to unexpected results." +msgstr "" +"Parameters wat na die dop oorgedra word, moet tussen aanhalingstekens " +"ingesluit word. Onaangehaalde parameters kan tot onverwagte resultate lei." + +#: src/song-info-qt/song-info.cc:30 +msgid "Song Info" +msgstr "Lied Info" + +#: src/soxr/sox-resampler.cc:44 +msgid "SoX Resampler" +msgstr "SoX Hermonster" + +#: src/soxr/sox-resampler.cc:172 +msgid "" +"SoX Resampler Plugin for Audacious\n" +"Copyright 2013 Michał Lipski\n" +"\n" +"Based on Sample Rate Converter Plugin:\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" +"SoX Hermonster Inprop vir Audacious\n" +"Kopiereg 2013 Michał Lipski\n" +"\n" +"Gebaseer op Sample Rate Converter Plugin:\n" +"Kopiereg 2010-2012 John Lindgren" + +#: src/soxr/sox-resampler.cc:178 +msgid "Quick" +msgstr "Vinnig" + +#: src/soxr/sox-resampler.cc:179 +msgid "Low" +msgstr "Laag" + +#: src/soxr/sox-resampler.cc:181 +msgid "High" +msgstr "Hoog" + +#: src/soxr/sox-resampler.cc:182 +msgid "Very High" +msgstr "Baie Hoog" + +#: src/soxr/sox-resampler.cc:183 +msgid "Ultra High" +msgstr "Ultra Hoog" + +#: src/soxr/sox-resampler.cc:187 +msgid "Minimum" +msgstr "Minimum" + +#: src/soxr/sox-resampler.cc:188 +msgid "Intermediate" +msgstr "Intermediêr" + +#: src/soxr/sox-resampler.cc:193 +msgid "Quality:" +msgstr "Kwaliteit:" + +#: src/soxr/sox-resampler.cc:196 +msgid "Phase:" +msgstr "Fase:" + +#: src/soxr/sox-resampler.cc:200 +msgid "Allow aliasing" +msgstr "Laat aliasering toe" + +#: src/soxr/sox-resampler.cc:202 +msgid "Use steep filter" +msgstr "Gebruik steil filtreerder" + +#: src/speedpitch/speed-pitch.cc:54 +msgid "Speed and Pitch" +msgstr "Spoed en Toonhoogte" + +#: src/speedpitch/speed-pitch.cc:247 +msgid "Speed" +msgstr "Spoed" + +#: src/speedpitch/speed-pitch.cc:248 +msgid "Decouple from pitch" +msgstr "Ontkoppel van Toonhoogte" + +#: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 +msgid "Multiplier:" +msgstr "Vermenigvuldiger:" + +#: src/speedpitch/speed-pitch.cc:254 +msgid "Pitch" +msgstr "Toonhoogte" + +#: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 +msgid "Status Icon" +msgstr "Status Ikoon" + +#: src/statusicon-qt/statusicon.cc:65 +msgid "" +"Status Icon Plugin (partial port for Qt interface)\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"Copyright 2015 Eugene Paskevich \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" +"Status Ikoon Inprop (gedeeltelike poort vir Qt-koppelvlak)\n" +"\n" +"Kopiereg 2005-2007 Giacomo Lozito \n" +"Kopiereg 2010 Michał Lipski \n" +"Kopiereg 2015 Eugene Paskevich \n" +"\n" +"Hierdie inprop verskaf 'n status ikoon, geplaas in\n" +"die sisteem laai area van die venster bestuurder." + +#: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 +msgid "Mouse Scroll Action" +msgstr "Muis Rollees Aksie" + +#: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 +msgid "Change volume" +msgstr "Verander volume" + +#: src/statusicon-qt/statusicon.cc:90 src/statusicon/statusicon.cc:384 +msgid "Change playing song" +msgstr "Verander spelende lied" + +#: src/statusicon-qt/statusicon.cc:93 src/statusicon/statusicon.cc:387 +msgid "Other Settings" +msgstr "Ander Stellings" + +#: src/statusicon-qt/statusicon.cc:94 src/statusicon/statusicon.cc:388 +msgid "Disable the popup window" +msgstr "Deaktiveer die opspring venster" + +#: src/statusicon-qt/statusicon.cc:96 src/statusicon/statusicon.cc:390 +msgid "Close to the system tray" +msgstr "Maak toe na die sisteem laai" + +#: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 +msgid "Advance in playlist when scrolling upward" +msgstr "Bevorder die snitlys wanneer jy rollees opwaarts" + +#: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 +msgid "Se_ttings ..." +msgstr "S_tellings ..." + +#: src/statusicon/statusicon.cc:373 +msgid "" +"Status Icon Plugin\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" +"Status-ikoon-inprop\n" +"\n" +"Kopiereg 2005-2007 Giacomo Lozito \n" +"Kopiereg 2010 Michał Lipski \n" +"\n" +"Hierdie inprop verskaf 'n statusikoon, geplaas in\n" +"die system tray area van die vensterbestuurder." + +#: src/stereo_plugin/stereo.cc:19 +msgid "Extra Stereo" +msgstr "Ekstra Stereo" + +#: src/stereo_plugin/stereo.cc:36 +msgid "" +"Extra Stereo Plugin\n" +"\n" +"By Johan Levin, 1999" +msgstr "" +"Ekstra Stereo Inprop\n" +"\n" +"Deur Johan Levin, 1999" + +#: src/stereo_plugin/stereo.cc:44 +msgid "Extra Stereo" +msgstr "Ekstra Stereo" + +#: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 +msgid "Type" +msgstr "Tipe" + +#: src/streamtuner/icecast-model.cc:132 +msgid "Current Song" +msgstr "Huidige Lied" + +#: src/streamtuner/icecast-model.cc:164 +msgid "Other" +msgstr "Ander" + +#: src/streamtuner/ihr-model.cc:63 +msgid "Market" +msgstr "Mark" + +#: src/streamtuner/ihr-model.cc:156 +msgid "Call Letters" +msgstr "Roep Letters" + +#: src/streamtuner/ihr-model.cc:162 +msgid "Description" +msgstr "Beskrywing" + +#: src/streamtuner/shoutcast-model.cc:128 +msgid "Listeners" +msgstr "Luisteraars" + +#: src/streamtuner/shoutcast-model.cc:188 +msgid "Top 500 Stations" +msgstr "Top 500 Stasies" + +#: src/streamtuner/shoutcast-model.cc:189 +msgid "Alternative" +msgstr "Alternatief" + +#: src/streamtuner/shoutcast-model.cc:190 +msgid "Blues" +msgstr "Blues" + +#: src/streamtuner/shoutcast-model.cc:191 +msgid "Classical" +msgstr "Klassieke" + +#: src/streamtuner/shoutcast-model.cc:192 +msgid "Country" +msgstr "Country" + +#: src/streamtuner/shoutcast-model.cc:193 +msgid "Decades" +msgstr "Dekades" + +#: src/streamtuner/shoutcast-model.cc:194 +msgid "Easy Listening" +msgstr "Gemaklike Luister" + +#: src/streamtuner/shoutcast-model.cc:195 +msgid "Electronic" +msgstr "Elektronies" + +#: src/streamtuner/shoutcast-model.cc:196 +msgid "Folk" +msgstr "Volk" + +#: src/streamtuner/shoutcast-model.cc:197 +msgid "Inspirational" +msgstr "Inspirerend" + +#: src/streamtuner/shoutcast-model.cc:198 +msgid "International" +msgstr "Internasionaal" + +#: src/streamtuner/shoutcast-model.cc:199 +msgid "Jazz" +msgstr "Jazz" + +#: src/streamtuner/shoutcast-model.cc:200 +msgid "Latin" +msgstr "Latyns" + +#: src/streamtuner/shoutcast-model.cc:201 +msgid "Metal" +msgstr "Metal" + +#: src/streamtuner/shoutcast-model.cc:203 +msgid "New Age" +msgstr "Nuwe Era" + +#: src/streamtuner/shoutcast-model.cc:204 +msgid "Pop" +msgstr "Pop" + +#: src/streamtuner/shoutcast-model.cc:205 +msgid "Public Radio" +msgstr "Publieke Radio" + +#: src/streamtuner/shoutcast-model.cc:206 +msgid "R&B and Urban" +msgstr "R&B en Urban" + +#: src/streamtuner/shoutcast-model.cc:207 +msgid "Rap" +msgstr "Rap" + +#: src/streamtuner/shoutcast-model.cc:208 +msgid "Reggae" +msgstr "Reggae" + +#: src/streamtuner/shoutcast-model.cc:209 +msgid "Rock" +msgstr "Rock" + +#: src/streamtuner/shoutcast-model.cc:210 +msgid "Seasonal and Holiday" +msgstr "Seisoenale en Vakansie" + +#: src/streamtuner/shoutcast-model.cc:211 +msgid "Soundtracks" +msgstr "Klankbane" + +#: src/streamtuner/shoutcast-model.cc:212 +msgid "Talk" +msgstr "Praat" + +#: src/streamtuner/shoutcast-model.cc:213 +msgid "Themes" +msgstr "Temas" + +#: src/streamtuner/streamtuner.cc:59 +msgid "Shoutcast" +msgstr "Shoutcast" + +#: src/streamtuner/streamtuner.cc:60 +msgid "Icecast" +msgstr "Icecast" + +#: src/streamtuner/streamtuner.cc:71 +msgid "Stream Tuner" +msgstr "Stroomontvanger" + +#: src/tonegen/tonegen.cc:45 +msgid "Tone Generator" +msgstr "Toongenerator" + +#: src/tonegen/tonegen.cc:92 +#, c-format +msgid "%s %.1f Hz" +msgstr "%s %.1f Hz" + +#: src/tonegen/tonegen.cc:92 +msgid "Tone Generator: " +msgstr "Toongenerator:" + +#: src/tonegen/tonegen.cc:161 +msgid "" +"Sine tone generator by Håvard Kvålen \n" +"Modified by Daniel J. Peng \n" +"\n" +"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" +"e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" +msgstr "" +"Sinustoongenerator deur Håvard Kvålen \n" +"Gewysig deur Daniel J. Peng \n" +"\n" +"Om dit te gebruik, voeg 'n URL by: tone://frekwensie1;frekwensie2;" +"frekwensie3;...\n" +"bv. tone://2000;2005 om 'n 2000 Hz-toon en 'n 2005 Hz-toon te speel" + +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Verdere boodskappe is versteek.)" + +#: src/ui-common/dialogs-qt.cc:52 +msgid "Working ..." +msgstr "In Werking ..." + +#: src/ui-common/dialogs-qt.cc:72 +msgid "Information" +msgstr "Informasie" + +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + +#: src/voice_removal/voice_removal.cc:28 +msgid "Voice Removal" +msgstr "Stem Verwydering" + +#: src/vorbis/vorbis.cc:429 +msgid "" +"Audacious Ogg Vorbis Decoder\n" +"\n" +"Based on the Xiph.org Foundation's Ogg Vorbis Plugin:\n" +"http://www.xiph.org/\n" +"\n" +"Original code by:\n" +"Tony Arcieri \n" +"\n" +"Contributions from:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " +msgstr "" +"Audacious Ogg Vorbis-dekodeerder\n" +"\n" +"Gebaseer op die Xiph.org-stigting se Ogg Vorbis-inprop:\n" +"http://www.xiph.org/\n" +"\n" +"Oorspronklike kode deur:\n" +"Tony Arcieri \n" +"\n" +"Bydraes van:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " + +#: src/vorbis/vorbis.h:18 +msgid "Ogg Vorbis Decoder" +msgstr "Ogg Vorbis Dekodeerder" + +#: src/vtx/info.cc:24 +#, c-format +msgid "Details about %s" +msgstr "Besonderhede oor %s" + +#: src/vtx/info.cc:26 +msgid "" +"Title: %t\n" +"Author: %a\n" +"From: %f\n" +"Tracker: %T\n" +"Comment: %C\n" +"Chip type: %c\n" +"Stereo: %s\n" +"Loop: %l\n" +"Chip freq: %F\n" +"Player Freq: %P\n" +"Year: %y" +msgstr "" +"Titel: %t\n" +"Skrywer: %a\n" +"Van: %f\n" +"Spoor: %T\n" +"Kommentaar: %C\n" +"Chip tipe: %c\n" +"Stereo: %s\n" +"Lus: %l\n" +"Chip frekwensie: %F\n" +"Speler frekwensie: %P\n" +"Jaar: %y" + +#: src/vtx/vtx.cc:38 +msgid "VTX Decoder" +msgstr "VTX Dekodeerder" + +#: src/vtx/vtx.cc:178 +msgid "" +"Vortex file format player by Sashnov Alexander \n" +"Based on in_vtx.dll by Roman Sherbakov \n" +"Audacious plugin by Pavel Vymetalek " +msgstr "" +"Vortex-lêerformaatspeler deur Sashnov Alexander \n" +"Gebaseer op in_vtx.dll deur Roman Sherbakov \n" +"Audacious plugin deur Pavel Vymetalek " + +#: src/vumeter-qt/vumeter_qt.cc:31 +msgid "" +"VU Meter Plugin for Audacious\n" +"Copyright 2017-2019 Marc Sánchez Fauste" +msgstr "" +"VU Meter-inprop vir Audacious\n" +"Kopiereg 2017-2019 Marc Sánchez Faustea" + +#: src/vumeter-qt/vumeter_qt.cc:35 +msgid "VU Meter Settings" +msgstr "VU Meter Stellings" + +#: src/vumeter-qt/vumeter_qt.cc:37 +msgid "Peak hold time:" +msgstr "Piek hou tyd:" + +#: src/vumeter-qt/vumeter_qt.cc:42 +msgid "Fall-off time:" +msgstr "Daling tyd:" + +#: src/vumeter-qt/vumeter_qt.cc:44 +msgid "dB/second" +msgstr "dB/sekonde" + +#: src/vumeter-qt/vumeter_qt.cc:46 +msgid "Display legend" +msgstr "Wys legende" + +#: src/vumeter-qt/vumeter_qt.h:37 +msgid "VU Meter" +msgstr "VU Meter" + +#: src/waveout/waveout.cc:43 +msgid "Win32 waveOut" +msgstr "Win32 waveOut" + +#: src/waveout/waveout.cc:69 +msgid "" +"Win32 waveOut Plugin for Audacious\n" +"Copyright 2016 John Lindgren" +msgstr "" +"Win32 waveOut-inprop vir Audacious\n" +"Kopiereg 2016 John Lindgren" + +#: src/wavpack/wavpack.cc:25 +msgid "WavPack Decoder" +msgstr "WavPack-dekodeerder" + +#: src/wavpack/wavpack.cc:217 +msgid "lossy (hybrid)" +msgstr "verliesagtig (hibriede)" + +#: src/wavpack/wavpack.cc:219 +msgid "lossy" +msgstr "verliesagtig" + +#: src/wavpack/wavpack.cc:259 +msgid "" +"Copyright 2006 William Pitcock \n" +"\n" +"Some of the plugin code was by Miles Egan." +msgstr "" +"Kopiereg 2006 William Pitcock \n" +"\n" +"Sommige van die inpropkode was deur Miles Egan." + +#: src/xsf/plugin.cc:74 +msgid "2SF Decoder" +msgstr "2SF dekodeerder" + +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Skerp" + +#: src/xsf/plugin.cc:443 +msgid "XSF Configuration" +msgstr "XSF Konfigurasie" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Verstek vervaag tyd:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolasiemodus:" + +#: src/xspf/xspf.cc:95 +msgid "XML Shareable Playlists (XSPF)" +msgstr "XML deelbare snitlyste (XSPF)" diff -Nru audacious-plugins-4.1/po/ar.po audacious-plugins-4.2/po/ar.po --- audacious-plugins-4.1/po/ar.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ar.po 2022-07-10 01:12:34.000000000 +0000 @@ -5,14 +5,14 @@ # Translators: # abouzakaria kov , 2016 # Rached Noureddine , 2019 -# Riyadh Talal , 2020 +# Riyadh Talal , 2020,2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-31 14:24+0000\n" -"Last-Translator: Riyadh Talal \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Riyadh Talal , 2020,2022\n" "Language-Team: Arabic (http://www.transifex.com/audacious/audacious/language/" "ar/)\n" "Language: ar\n" @@ -31,13 +31,13 @@ msgstr "مكتبة AdPlug (مشغّل AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "متسلسلة" #: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 msgid "Output" -msgstr "مخرج" +msgstr "المُخرَج" #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "متفرقات" @@ -472,6 +472,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "معدل العينة:" @@ -547,6 +548,7 @@ msgstr "* لا كلمات متاحة في ملف MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_اخرج" @@ -606,7 +608,7 @@ msgid "Concave Rectangle" msgstr "مستطيل مقعر" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "لا شيء" @@ -803,6 +805,22 @@ msgid "Audacious Playlists (audpl)" msgstr "قوائم Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "ماحق البت" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "عمق البت:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "نسبة إنقاص العيّنة" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "ماحق البت" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "لون" @@ -1194,7 +1212,7 @@ msgstr "حذف" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "إلغ" @@ -1232,7 +1250,7 @@ msgstr "تأخير:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "م ث" @@ -1252,7 +1270,7 @@ msgid "FFmpeg Plugin" msgstr "ملحَقة FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1375,77 +1393,77 @@ msgid "32000 Hz" msgstr "32000 هرتز" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 هرتز" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 هرتز" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 كب/ث" +msgid "8 kbit/s" +msgstr "8 ك‌بت/ث" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 كب/ث" +msgid "16 kbit/s" +msgstr "16 ك‌بت/ث" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 كب/ث" +msgid "32 kbit/s" +msgstr "32 ك‌بت/ث" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 كب/ث" +msgid "40 kbit/s" +msgstr "40 ك‌بت/ث" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 كب/ث" +msgid "48 kbit/s" +msgstr "48 ك‌بت/ث" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 كب/ث" +msgid "56 kbit/s" +msgstr "56 ك‌بت/ث" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 كب/ث" +msgid "64 kbit/s" +msgstr "64 ك‌بت/ث" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 كب/ث" +msgid "80 kbit/s" +msgstr "80 ك‌بت/ث" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 كب/ث" +msgid "96 kbit/s" +msgstr "96 ك‌بت/ث" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 كب/ث" +msgid "112 kbit/s" +msgstr "112 ك‌بت/ث" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 كب/ث" +msgid "128 kbit/s" +msgstr "128 ك‌بت/ث" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 كب/ث" +msgid "160 kbit/s" +msgstr "160 ك‌بت/ث" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 كب/ث" +msgid "192 kbit/s" +msgstr "192 ك‌بت/ث" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 كب/ث" +msgid "224 kbit/s" +msgstr "224 ك‌بت/ث" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 كب/ث" +msgid "256 kbit/s" +msgstr "256 ك‌بت/ث" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 كب/ث" +msgid "320 kbit/s" +msgstr "320 ك‌بت/ث" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1569,7 +1587,7 @@ msgid "Quality (0-1):" msgstr "الجودة (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "عامْ" @@ -1578,11 +1596,11 @@ msgid "FLAC Decoder" msgstr "FLAC مفكك" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "lossless" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2246,8 +2264,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d كب/ث" +msgid "%d kbit/s" +msgstr "%d ك‌بت/ث" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2627,7 +2645,7 @@ msgid "Looking for lyrics ..." msgstr "أبحث عن lyrics ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "خطأ" @@ -2988,9 +3006,9 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "استيفاء:" +msgstr "الاستيفاء:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "خطّيّ" @@ -3075,7 +3093,7 @@ msgid "OpenPSF Configuration" msgstr "إعدادات OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "تجاهل الطول من الملف" @@ -3276,15 +3294,15 @@ #: src/resample/resample.cc:189 msgid "Fast sinc interpolation" -msgstr "استيفاء sinc السريع" +msgstr "استيفاء سينك sinc السريع" #: src/resample/resample.cc:190 msgid "Medium sinc interpolation" -msgstr "متوسط استيفاء sinc " +msgstr "استيفاء سينك sinc متوسط" #: src/resample/resample.cc:191 msgid "Best sinc interpolation" -msgstr "أفضل الاستيفاء sinc " +msgstr "استيفاء سينك sinc الأفضل" #: src/resample/resample.cc:195 msgid "Conversion" @@ -3772,7 +3790,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "خدمات" @@ -3789,7 +3807,7 @@ msgstr "اخرج" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "معلومات المقطع ..." @@ -3809,7 +3827,7 @@ msgid "Clear A-B Repeat" msgstr "مسح تكرار أ-ي" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "إذهب للمقطع ..." @@ -3902,20 +3920,20 @@ msgstr "أضف ملفات ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "حسب العنوان" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "حسب إسم الملف" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "حسب مسار الملف" @@ -3943,104 +3961,104 @@ msgid "Remove Selected" msgstr "حذف المحددة" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "ابحث و حدد" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "عكس التحديد" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "لا تحدد شيء" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "تحديد الكل" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "حسب رقم المقطع" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "حسب المؤدي" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "حسب الألبوم" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "حسب الالبوم المؤدي" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "حسب تاريخ الإصدار" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "حسب النوع" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "حسب الطول" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "حسب العنوان المخصص" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "حسب التعليق" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "قائمة عشوائية" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "عكس القائمة" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "عرض المحدد" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "عرض القائمة" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "فتح المجلد المحتوي" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "قص" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "نسخ" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "لصق" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "لصق عند الانتهاء" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "اضف/ازل من قائمة الانتظار" @@ -4049,7 +4067,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d الى %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "محرر قائمة أوداشيَس" @@ -4065,167 +4083,218 @@ msgid "Add Folder ..." msgstr "اضافة مجلد..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "بحث عن مدخلة في قائمة التشغيل النشطة" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"تحديد إدخالات في قائمة التشغيل عن طريق تعبئة حقل واحد أو أكثر. استخدام " +"تعبيرات تركيب منتظم، تحسس حالة الأحرف. إذا كنت لا تعرف كيفية التعبير " +"العادية ، ببساطة إدراج جزء من الحروف لما تبحث عنه" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "العنوان:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "الألبوم:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "المؤدي:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "اسم الملف:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "مسح التحديد السابقة قبل البحث" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "تبديل تلقائيا لقائمة الانتظار لمطابقة الإدخالات" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "إنشاء قائمة تشغيل جديدة مع إدخالات مطابقة" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "بحث" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "مشغل:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "حدد الخط الرئيسي لنافذة التشغيل:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "قائمة التشغيل:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "كحدد خط قائمة التشغيل" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "المظهر" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "اعرِض شريط العنوان النشط عندما تكون أية نافذة مستحوِذة" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "خطوط" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "استخدم صورة خطوط (supports ASCII only)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "تمرير عنوان المقطع" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "تمرير عنوان المقطع في كلا الاتجاهين" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "محلل" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "نطاق" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Voiceprint / VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "إيقاف" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "عادي" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "ناري" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "خطوط افقية" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "خطوط" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "اشرطة" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "أبطأ" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "بطيء" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "متوسطة" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "سرعة" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "أسرع" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "النقاط" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "خط" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "صلب" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "جليد" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "ناعم" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "تلوين:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "نمط:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "سقوط" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "سقوط الذروة:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "نمط النطاق:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "تلوين Voiceprint" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "نمط ميتر" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "النمط" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "نوع مرئيات:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "محلل" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "اظهار القمة" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "مرئيات" @@ -4237,58 +4306,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "إلغاء أرشفة مظهر Winamp 2.x " -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "بحث عن مدخلة في قائمة التشغيل النشطة" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "بحث" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"تحديد إدخالات في قائمة التشغيل عن طريق تعبئة حقل واحد أو أكثر. استخدام " -"تعبيرات تركيب منتظم، تحسس حالة الأحرف. إذا كنت لا تعرف كيفية التعبير " -"العادية ، ببساطة إدراج جزء من الحروف لما تبحث عنه" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "العنوان:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "الألبوم:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "المؤدي:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "اسم الملف:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "مسح التحديد السابقة قبل البحث" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "تبديل تلقائيا لقائمة الانتظار لمطابقة الإدخالات" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "إنشاء قائمة تشغيل جديدة مع إدخالات مطابقة" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile اضافة" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4768,14 +4790,27 @@ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(تنبيهات أخرى تم إخفائها.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "جاري العمل..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "معلومات" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s لا يبدو مجلداً صحيحًا." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "إزالة صوت" @@ -4933,14 +4968,38 @@ "\n" "Some of the plugin code was by Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF مفكك" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 هرتز" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 هرتز" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "جيب تمام" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "حادّ" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF خيارات" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "وقت التلاشي المبدئي:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "نمط الاستيفاء:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "قوائم تشغيل XML قابلة للمشاركة (XSPF)" diff -Nru audacious-plugins-4.1/po/audacious-plugins.pot audacious-plugins-4.2/po/audacious-plugins.pot --- audacious-plugins-4.1/po/audacious-plugins.pot 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/audacious-plugins.pot 2022-07-10 01:12:34.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,7 +27,7 @@ msgstr "" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "" @@ -57,7 +57,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "" @@ -394,6 +394,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -469,6 +470,7 @@ msgstr "" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "" @@ -516,7 +518,7 @@ msgid "Concave Rectangle" msgstr "" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "" @@ -711,6 +713,22 @@ msgid "Audacious Playlists (audpl)" msgstr "" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "" @@ -1072,7 +1090,7 @@ msgstr "" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "" @@ -1106,7 +1124,7 @@ msgstr "" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "" @@ -1126,7 +1144,7 @@ msgid "FFmpeg Plugin" msgstr "" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1228,76 +1246,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1422,7 +1440,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "" @@ -1431,11 +1449,11 @@ msgid "FLAC Decoder" msgstr "" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2081,7 +2099,7 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" +msgid "%d kbit/s" msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 @@ -2425,7 +2443,7 @@ msgid "Looking for lyrics ..." msgstr "" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "" @@ -2758,7 +2776,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2838,7 +2856,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3456,7 +3474,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "" @@ -3473,7 +3491,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3493,7 +3511,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3586,20 +3604,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3627,104 +3645,104 @@ msgid "Remove Selected" msgstr "" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3733,7 +3751,7 @@ msgid "%s (%d of %d)" msgstr "" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "" @@ -3749,167 +3767,215 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "" @@ -3921,55 +3987,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4388,14 +4410,25 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "" @@ -4515,14 +4548,38 @@ "Some of the plugin code was by Miles Egan." msgstr "" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "" diff -Nru audacious-plugins-4.1/po/be.po audacious-plugins-4.2/po/be.po --- audacious-plugins-4.1/po/be.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/be.po 2022-07-10 01:12:34.000000000 +0000 @@ -9,18 +9,18 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Mikalai Udodau , 2012,2017\n" "Language-Team: Belarusian (http://www.transifex.com/audacious/audacious/" "language/be/)\n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" -"%100>=11 && n%100<=14)? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -31,7 +31,7 @@ msgstr "AdPlug (AdLib Плэер)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "" @@ -398,6 +398,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -473,6 +474,7 @@ msgstr "* у гэтым MIDI-файле лірыка недаступная *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Закры_ць" @@ -520,7 +522,7 @@ msgid "Concave Rectangle" msgstr "Увагнуты Прамавугольнік" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Няма" @@ -718,6 +720,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Плэйлісты Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Колер" @@ -1079,7 +1097,7 @@ msgstr "Сцерці" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Скасаваць" @@ -1113,7 +1131,7 @@ msgstr "Затрымка:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "мс" @@ -1133,7 +1151,7 @@ msgid "FFmpeg Plugin" msgstr "Плагін FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1237,76 +1255,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1431,7 +1449,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Агульныя" @@ -1440,11 +1458,11 @@ msgid "FLAC Decoder" msgstr "Дэкодар FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2092,8 +2110,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d кб/с" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2436,7 +2454,7 @@ msgid "Looking for lyrics ..." msgstr "Шукаюцца словы ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Памылка" @@ -2769,7 +2787,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2849,7 +2867,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3473,7 +3491,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Сэрвісы" @@ -3490,7 +3508,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3510,7 +3528,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3603,20 +3621,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Па загалоўку" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3644,104 +3662,104 @@ msgid "Remove Selected" msgstr "Сцерці вылучаныя" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Пошук і вылучэнне" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Інвертаваць вылучэнне" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Зняць вылучэнне" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Вылучыць усе" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Па нумары трэка" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Па выканаўцу" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Па альбому" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Раскідаць спіс" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Спіс наадварот" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Сартаваць вылучаныя" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Сартаваць спіс" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Выразаць" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Капіраваць" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Уставіць" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3750,7 +3768,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d з %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Рэдактар плэйлістоў Audacious" @@ -3766,167 +3784,215 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Шукаць запісы ў бягучым плэйлісце" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Назва:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Альбом:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Выканаўца:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Назва файла:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Ачысціць папярэдняе вылучэнне перад пошукам" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Аўтаматычна пераключыць чаргу для адпаведных запісаў" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Стварыць новы плэйліст з адпаведнымі запісамі" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Вылучыце шрыфт для галоўнага вакна плэера:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Выберыце шрыфт для плэйліста:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Пракручваць назву песні ў абодвух кірунках" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Аналізатар" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Асцылограф" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Выкл" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Норма" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Полымя" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Лініі" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Слупкі" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Наймарудней" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Марудна" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Сярэдне" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Хутка" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Найхутчэй" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Лінія" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лёд" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Гладка" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Колер:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Стыль:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Візуалізацыя" @@ -3938,55 +4004,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Несціснутая абалонка Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Шукаць запісы ў бягучым плэйлісце" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Назва:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Альбом:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Выканаўца:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Назва файла:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Ачысціць папярэдняе вылучэнне перад пошукам" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Аўтаматычна пераключыць чаргу для адпаведных запісаў" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Стварыць новы плэйліст з адпаведнымі запісамі" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Плагін Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4405,14 +4427,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Далейшыя паведамленні былі прыхаваныя.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Выконваецца..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Інфармацыя" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Выдаленне голасу" @@ -4532,14 +4567,38 @@ "Some of the plugin code was by Miles Egan." msgstr "" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Дэкодар 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "" diff -Nru audacious-plugins-4.1/po/bg.po audacious-plugins-4.2/po/bg.po --- audacious-plugins-4.1/po/bg.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/bg.po 2022-07-10 01:12:34.000000000 +0000 @@ -5,7 +5,7 @@ # Translators: # Ivailo Monev , 2014 # Kiril Kirilov , 2014-2015,2017-2019 -# Myselus, 2016-2017 +# Myselus, 2016-2017,2022 # Pandi3a , 2012 # Pandi3a , 2012 # Радослав Иванов , 2013-2014 @@ -15,9 +15,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Myselus, 2016-2017,2022\n" "Language-Team: Bulgarian (http://www.transifex.com/audacious/audacious/" "language/bg/)\n" "Language: bg\n" @@ -35,7 +35,7 @@ msgstr "AdPlug (AdLib Плейър)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "подредени" @@ -45,7 +45,7 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "OPL емулатор:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" @@ -65,7 +65,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Разни" @@ -478,6 +478,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Честота на дискретизация" @@ -553,6 +554,7 @@ msgstr "* няма достъпна лирика за този MIDI файл *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Затваряне" @@ -612,7 +614,7 @@ msgid "Concave Rectangle" msgstr "Вдлъбнат правоъгълник" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Без" @@ -813,6 +815,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious Списъци (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Цвят" @@ -1207,7 +1225,7 @@ msgstr "Изтриване" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Отказ" @@ -1245,7 +1263,7 @@ msgstr "Забавяне:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "мс" @@ -1265,7 +1283,7 @@ msgid "FFmpeg Plugin" msgstr "Приставка за FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1387,77 +1405,77 @@ msgid "32000 Hz" msgstr "32000 Хц" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Хц" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Хц" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 кбвс" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 кбвс" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 кбвс" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 кбвс" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 кбвс" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 кбвс" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 кбвс" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 кбвс" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 кбвс" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 кбвс" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 кбвс" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 кбвс" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 кбвс" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 кбвс" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 кбвс" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 кбвс" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1581,7 +1599,7 @@ msgid "Quality (0-1):" msgstr "Качество (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Общи" @@ -1590,11 +1608,11 @@ msgid "FLAC Decoder" msgstr "Разкодиране на FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "по-малко загуби" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1824,12 +1842,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "Предишен Албум" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "Следващ Албум" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -2230,7 +2248,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Меню" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2254,8 +2272,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d кбвс" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2283,11 +2301,11 @@ #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "Придвижване напред" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "Придвижване назад" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2389,6 +2407,17 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Приставка за Общи бързи клавиши\n" +"Управление на плеъра с комбинации от общи клавиши или мултимедийни бутони.\n" +"\n" +"Авторски права (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Сътрудници, включително:\n" +"Авторски права (C) 2006-2007 Vladimir Paskov \n" +"Авторски права (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2396,7 +2425,7 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "Име на клиента:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" @@ -2405,10 +2434,11 @@ #: src/jack/jack-ng.cc:130 msgid "Filter ports (regex, use any port if blank):" msgstr "" +"Филтриране на портове (регулярен израз, ако е празно използва всеки порт):" #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "Свързване само към физически портове" #: src/jack/jack-ng.cc:139 msgid "Upmix to" @@ -2416,15 +2446,15 @@ #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "" +msgstr "портове ако входа има по-малко канали" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "Игнориране на недостатъчен брой портове" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." -msgstr "" +msgstr "Не са намерени JACK изходящи портове. Моля проверете настройките." #: src/jack/jack-ng.cc:195 #, c-format @@ -2555,15 +2585,15 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "Текстове" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "" +msgstr "Никъде" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lyrics.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" @@ -2627,7 +2657,7 @@ msgid "Looking for lyrics ..." msgstr "Търсене на текст..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Грешка" @@ -2982,7 +3012,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Линейно" @@ -3067,7 +3097,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Игнориране на дължината от файла" @@ -3730,7 +3760,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Услуги" @@ -3747,7 +3777,7 @@ msgstr "Изход" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Информация за песен..." @@ -3767,7 +3797,7 @@ msgid "Clear A-B Repeat" msgstr "Изчистване на А-Б повторение" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Прескачане до песен..." @@ -3860,20 +3890,20 @@ msgstr "Добавяне на файлове..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "По заглавие" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "По име на файл" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "По път до файл" @@ -3901,104 +3931,104 @@ msgid "Remove Selected" msgstr "Премахване на избраните" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Търсене и избиране" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Обръщане на избраното" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Без избрани" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Избор на всички" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "По номер на записа" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "По изпълнител" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "По Албум" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "По изпълнител на албум" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "По дата на издаване" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "По жанр" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "По времетраене" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "По избрано заглавие" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "По коментар" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Случаен списък" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Обръщане на списъка" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Подреждане на избраното" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Подреждане на списъка" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Отваряне на Съдържащата Папка" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Изрязване" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Копиране" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Поставяне" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Поставяне на Края" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "На опашка/без опашка" @@ -4007,7 +4037,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d от %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious Редактор на списъка за изпълнение" @@ -4023,167 +4053,219 @@ msgid "Add Folder ..." msgstr "Добавяне на папка..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Търсене на записи в активния списък" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Избор на записи в списъка, филтрирайки едно или повече полета. Полетата " +"използват синтаксис с препинателни знаци, без значение от размера на " +"буквата. Ако не знаете как работи този синтаксис, просто въведете част от " +"това, което търсите." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Заглавие:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Албум:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Изпълнител:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Име на файл:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Изчистване на предишния избор преди търсене" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Автоматично превключване в опашката за съвпадащите елементи" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Създаване на нов списък със съвпадащите елементи" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Търсене" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Плейър:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Избор на основен шрифт за прозореца на плеъра:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Списък за изпълнение:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Избор на шрифт за списъка:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Кожа" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Шрифтове" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Избор на растерни шрифтове (поддържа само ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Превъртане на заглавието на песента" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Превъртане на заглавието на песента в двете посоки" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Осцилоскоп" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Гласов отпечатък / VU-метър" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Изглючено" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Нормално" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Огън" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Вертикални линии" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Линии" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Стълбове" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Най-бавно" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Бавно" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Средно" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Бързо" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Най-бързо" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Точки" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Линия" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Плътно" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лед" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Размито" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Оцветяване:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Стил:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Падане:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Падане на пиковете:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Осцилоскопичен стил:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Цвят на гласовия отпечатък:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Стил на VU-метър:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Вид" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Вид на визуализация:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Показвай пикове" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Изобразяване" @@ -4195,59 +4277,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Неархивирана кожа на Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Търсене на записи в активния списък" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Търсене" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Избор на записи в списъка, филтрирайки едно или повече полета. Полетата " -"използват синтаксис с препинателни знаци, без значение от размера на " -"буквата. Ако не знаете как работи този синтаксис, просто въведете част от " -"това, което търсите." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Заглавие:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Албум:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Изпълнител:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Име на файл:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Изчистване на предишния избор преди търсене" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Автоматично превключване в опашката за съвпадащите елементи" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Създаване на нов списък със съвпадащите елементи" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Приставка Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4730,14 +4764,27 @@ "frequency3;...\n" "напр. tone://2000;2005 за изпълняването на тон от 2000 Хц и тон от 2005 Хц" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Допълнителните съобщения са били скрити.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Работи ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Информация" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Премахване на глас" @@ -4893,14 +4940,38 @@ "\n" "Част от кода е написана от Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Разкодиране 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Настройки на XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Споделяеми списъци XML (XSPF)" diff -Nru audacious-plugins-4.1/po/ca.po audacious-plugins-4.2/po/ca.po --- audacious-plugins-4.1/po/ca.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ca.po 2022-07-10 01:12:34.000000000 +0000 @@ -14,9 +14,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Marc Sánchez , 2020\n" "Language-Team: Catalan (http://www.transifex.com/audacious/audacious/" "language/ca/)\n" "Language: ca\n" @@ -34,7 +34,7 @@ msgstr "AdPlug (reproductor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "seqüenciat" @@ -64,7 +64,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Altres" @@ -471,6 +471,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Freqüència de mostreig:" @@ -546,6 +547,7 @@ msgstr "* aquest fitxer MIDI no té lletra *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Tan_car" @@ -605,7 +607,7 @@ msgid "Concave Rectangle" msgstr "Rectangle còncau" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Cap" @@ -805,6 +807,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Llistes de reproducció d'Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Color" @@ -1195,7 +1213,7 @@ msgstr "Elimina" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancel·la" @@ -1233,7 +1251,7 @@ msgstr "Retard:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1253,7 +1271,7 @@ msgid "FFmpeg Plugin" msgstr "Connector FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1377,77 +1395,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1571,7 +1589,7 @@ msgid "Quality (0-1):" msgstr "Qualitat (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "General" @@ -1580,11 +1598,11 @@ msgid "FLAC Decoder" msgstr "Descodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sense pèrdues" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2244,8 +2262,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2618,7 +2636,7 @@ msgid "Looking for lyrics ..." msgstr "S'estan cercant les lletres..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Error" @@ -2974,7 +2992,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineal" @@ -3054,7 +3072,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignora la longitud del fitxer" @@ -3700,7 +3718,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Serveis" @@ -3717,7 +3735,7 @@ msgstr "Surt" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informació de la cançó..." @@ -3737,7 +3755,7 @@ msgid "Clear A-B Repeat" msgstr "Neteja la repetició A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Salta a la cançó..." @@ -3830,20 +3848,20 @@ msgstr "Afegeix els fitxers..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Per títol" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Per nom de fitxer" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Per camí al fitxer" @@ -3871,104 +3889,104 @@ msgid "Remove Selected" msgstr "Treu els seleccionats" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Cerca i selecciona" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverteix la selecció" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Selecciona no res" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Selecciona tots els elements" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Per número de pista" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Per artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Per àlbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Per artista de l'àlbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Per data de llançament" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Per gènere" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Per longitud" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Per títol personalitzat" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Per comentari" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Barreja la llista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Inverteix la llista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordena els seleccionats" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordena la llista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Obre la carpeta contenidora" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Retalla" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copia" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Enganxa" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Enganxa a l'acabament" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Afegeix/treu de la cua" @@ -3977,7 +3995,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de la llista de reproducció d'Audacious" @@ -3993,168 +4011,220 @@ msgid "Add Folder ..." msgstr "Afegeix la carpeta..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Cerca les entrades a la llista de reproducció activa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleccioneu elements de la llista de reproducció omplint un o diversos " +"camps. Aquests camps admeten la sintaxi d'expressions regulars i són " +"insensibles a la capitalització. Si no sabeu com funcionen les expressions " +"regulars, podeu escriure literalment el text que busqueu." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Títol: " + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Àlbum:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nom del fitxer:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Neteja la selecció anterior abans de cercar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Posa o treu de la cua automàticament els elements trobats" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crea una llista de reproducció nova amb els elements trobats" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Cerca" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reproductor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "" "Seleccioneu el tipus de lletra de la finestra principal del reproductor:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Llista de reproducció:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Seleccioneu el tipus de lletra de la llista de reproducció:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Tema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Tipus de lletres" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Utilitza els tipus de lletra bitmap (només és compatible amb ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Desplaça el títol de la cançó" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Desplaça el títol de la cançó en ambdues direccions" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analitzador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Oscil·loscopi" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Apagat" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Foc" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Línies verticals" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Línies" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barres" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Mínim" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lent" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Mitja" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Ràpid" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Al màxim" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punts" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Línia" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Sòlid" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Gel" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suau" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Acoloriment:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estil:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Caiguda:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Caiguda dels pics:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estil de l'oscil·loscopi:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Acoloriment de l'empremta de veu:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipus" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipus de visualització:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analitzador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostra els pics" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualització" @@ -4166,59 +4236,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema de Winamp 2.x no arxivat" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Cerca les entrades a la llista de reproducció activa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Cerca" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleccioneu elements de la llista de reproducció omplint un o diversos " -"camps. Aquests camps admeten la sintaxi d'expressions regulars i són " -"insensibles a la capitalització. Si no sabeu com funcionen les expressions " -"regulars, podeu escriure literalment el text que busqueu." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Títol: " - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Àlbum:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nom del fitxer:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Neteja la selecció anterior abans de cercar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Posa o treu de la cua automàticament els elements trobats" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crea una llista de reproducció nova amb els elements trobats" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Connector Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4536,7 +4558,7 @@ #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "Descripció" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" @@ -4682,14 +4704,27 @@ "feqüència3;...\n" "p. ex. tone://2000;2005 per a reproduir un to de 2000 Hz i un to de 2005 Hz." -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Els missatges següents han estat amagats)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "S'està treballant..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informació" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Eliminació de la veu" @@ -4848,14 +4883,38 @@ "\n" "Part del codi del connector va ser feta per Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Descodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr " Configuració de XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XSPF (llistes de reproducció XML que es poden compartir)" diff -Nru audacious-plugins-4.1/po/cmn.po audacious-plugins-4.2/po/cmn.po --- audacious-plugins-4.1/po/cmn.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/cmn.po 2022-07-10 01:12:34.000000000 +0000 @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: 趙惟倫 , 2013\n" "Language-Team: Chinese (Mandarin) (http://www.transifex.com/audacious/" "audacious/language/cmn/)\n" "Language: cmn\n" @@ -29,7 +29,7 @@ msgstr "AdPlug (AdLib 播放器)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "編曲機" @@ -59,7 +59,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "其他選項" @@ -404,6 +404,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -479,6 +480,7 @@ msgstr "* 這個 MIDI 檔不包含歌詞資料 *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "關閉(_C)" @@ -526,7 +528,7 @@ msgid "Concave Rectangle" msgstr "角落凹陷的矩形" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "無" @@ -723,6 +725,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious 播放列表 (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "色彩" @@ -1098,7 +1116,7 @@ msgstr "刪除" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "取消" @@ -1132,7 +1150,7 @@ msgstr "延遲:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "毫秒" @@ -1152,7 +1170,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg 外掛程式" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1260,76 +1278,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1454,7 +1472,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "一般" @@ -1463,11 +1481,11 @@ msgid "FLAC Decoder" msgstr "FLAC 解碼器" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "無損" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2118,8 +2136,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2481,7 +2499,7 @@ msgid "Looking for lyrics ..." msgstr "尋找歌詞中…" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "錯誤" @@ -2834,7 +2852,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2919,7 +2937,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3549,7 +3567,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "" @@ -3566,7 +3584,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3586,7 +3604,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3679,20 +3697,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "標題" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3720,104 +3738,104 @@ msgid "Remove Selected" msgstr "移除選擇的項目" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "搜尋並選擇" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "反向選擇" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "取消選擇" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "選擇全部" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "音軌編號" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "演出者" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "專輯" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "列表隨機排序" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "列表反向排序" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "排序選擇的項目" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "排序列表" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "剪下" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "拷貝" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "貼上" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3826,7 +3844,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d/%d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious 播放列表編輯器" @@ -3842,167 +3860,217 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "在使用中的播放列表裡搜尋播放項目" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"填入一個或多個欄位以選擇播放列表中的項目。欄位使用正規表示法,大小寫視為不同" +"字元。若您不知道如何使用正規表示法,請輸入您想搜尋的部分文字。" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "進行搜尋前清空上次的選擇項目" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "自動切換至符合項目的佇列" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "以符合的項目建立新的播放列表" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "選擇播放器主視窗字型:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "選擇播放列表字型:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "使用點陣字型 (只支援 ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "雙向捲動歌曲標題" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "分析儀" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "示波器" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "關閉" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "標準" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "火焰" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "線條" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "棒狀" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "最慢" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "慢" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "中等" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "快" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "最快" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "冰霜" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "平滑" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "視覺特效" @@ -4014,57 +4082,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "未壓縮的 Winamp 2.x skin" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "在使用中的播放列表裡搜尋播放項目" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"填入一個或多個欄位以選擇播放列表中的項目。欄位使用正規表示法,大小寫視為不同" -"字元。若您不知道如何使用正規表示法,請輸入您想搜尋的部分文字。" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "進行搜尋前清空上次的選擇項目" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "自動切換至符合項目的佇列" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "以符合的項目建立新的播放列表" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile 外掛程式" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4518,14 +4540,27 @@ "用法:加入網址:tone://frequency1;frequency2;frequency3;…\n" "範例:tone://2000;2005 會播放 2000 HZ 和 2005HZ 的正弦波" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(詳細訊息已被隱藏。)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "人聲移除" @@ -4668,14 +4703,38 @@ "\n" "其中一些外掛程式碼是由 Miles Egan 編寫。" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF 解碼器" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML 可分享式播放列表 (XSPF)" diff -Nru audacious-plugins-4.1/po/cs.po audacious-plugins-4.2/po/cs.po --- audacious-plugins-4.1/po/cs.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/cs.po 2022-07-10 01:12:34.000000000 +0000 @@ -21,9 +21,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Lukáš Kotek , 2020\n" "Language-Team: Czech (http://www.transifex.com/audacious/audacious/language/" "cs/)\n" "Language: cs\n" @@ -42,7 +42,7 @@ msgstr "AdPlug (AdLib přehrávač)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "seřazen" @@ -72,7 +72,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Různé" @@ -480,6 +480,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Vzorkovací frekvence:" @@ -555,6 +556,7 @@ msgstr "* v MIDI souboru se nenachází text skladby *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Zavřít" @@ -614,7 +616,7 @@ msgid "Concave Rectangle" msgstr "Konkávní obdélník" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Žádný" @@ -812,6 +814,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious seszam skladeb (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Barva" @@ -1201,7 +1219,7 @@ msgstr "Smazat" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Zrušit" @@ -1239,7 +1257,7 @@ msgstr "Zpoždění:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1259,7 +1277,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1381,77 +1399,77 @@ msgid "32000 Hz" msgstr "32000Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8kb/s" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16kb/s" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32kb/s" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40kb/s" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48kb/s" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56kb/s" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64kb/s" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80kb/s" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96kb/s" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112kb/s" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128kb/s" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160kb/s" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192kb/s" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224kb/s" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256kb/s" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320kb/s" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1575,7 +1593,7 @@ msgid "Quality (0-1):" msgstr "Kvalita (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Obecné" @@ -1584,11 +1602,11 @@ msgid "FLAC Decoder" msgstr "FLAC dekodér" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "Bezztrátová kvalita" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2250,8 +2268,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2640,7 +2658,7 @@ msgid "Looking for lyrics ..." msgstr "Hledám text skladby..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Chyba" @@ -2999,7 +3017,7 @@ msgid "Interpolation:" msgstr "Interpolace:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineární" @@ -3084,7 +3102,7 @@ msgid "OpenPSF Configuration" msgstr "Konfigurace OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignoruj délku ze souboru" @@ -3748,7 +3766,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Služby" @@ -3765,7 +3783,7 @@ msgstr "Ukončit" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informace o skladbě ..." @@ -3785,7 +3803,7 @@ msgid "Clear A-B Repeat" msgstr "Smazat A-B opakování" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Přejít na skladbu ..." @@ -3878,20 +3896,20 @@ msgstr "Přidej soubory ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Podle názvu" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Podle názvu souboru" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Podle cesty k souboru" @@ -3919,104 +3937,104 @@ msgid "Remove Selected" msgstr "Odebrat označené" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Hledání a výběr" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertovat výběr" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Nevybrat žádné" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Vybrat vše" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Podle čísla stopy" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Podle umělce" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Podle alba" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Podle umělce alba" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Podle data vydání" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Podle žánru" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Podle délky" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Podle vlastního názvu" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Podle komentáře" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Zamíchat pořadí" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Otočit seznam" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Seřadit vybrané" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Seřadit seznam" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Otevřít obsahující složku" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Oříznout" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopírovat" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Vložit" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Vložit na konec" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Přidat/odebrat do/z fronty" @@ -4025,7 +4043,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d z %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Zobrazit editor seznamu skladeb" @@ -4041,167 +4059,219 @@ msgid "Add Folder ..." msgstr "Přidat složku..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Vyhledat skladby v současném seznamu skladeb" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Položky seznamu skladeb vyberete vyplněním jednoho, nebo více polí. Pole " +"používají regulární výrazy a neberou ohled na velikost písmen. Pokud " +"regulárním výrazům nerozumíte, jednoduše vložte části textu, které chcete " +"vyhledat." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Název:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Umělec:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Jméno souboru:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Před hledáním vymazat předchozí výběr" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Shodující se položky automaticky zařadit/vyřadit z fronty" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Ze shodujících se položek vytvořit nový seznam skladeb" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Hledej" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Přehrávač:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Font v hlavním okně přehrávače:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Seznam skladeb:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Vyberte font pro seznam skladeb:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Téma vzhledu" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Písma" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Použít bitmapové fonty (podporuje pouze ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Posouvání názvu skladby" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Převíjet název skladby oběma směry" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyzátor" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Vlnovka" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Zvukový otisk / VU metr" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Žádný" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normální" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Oheň" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Svislé čáry" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Čáry" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Sloupce" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Nejpomalejší" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Pomalé" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Střední" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rychlé" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Nejrychlejší" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Body" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Čára" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Plná vlnovka" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Led" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Plynulý" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Barevné schéma:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Styl:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Klesání:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Klesání vrcholku:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Styl vlnovky:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Barevné schéma zvukového otisku:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Styl VU metru." -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Typ" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Typ vizualizace:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analyzátor" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Zobrazovat zvukové špičky" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizace" @@ -4213,59 +4283,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Nezabalený skin Winampu 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Vyhledat skladby v současném seznamu skladeb" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Hledej" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Položky seznamu skladeb vyberete vyplněním jednoho, nebo více polí. Pole " -"používají regulární výrazy a neberou ohled na velikost písmen. Pokud " -"regulárním výrazům nerozumíte, jednoduše vložte části textu, které chcete " -"vyhledat." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Název:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Umělec:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Jméno souboru:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Před hledáním vymazat předchozí výběr" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Shodující se položky automaticky zařadit/vyřadit z fronty" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Ze shodujících se položek vytvořit nový seznam skladeb" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile modul" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4745,14 +4767,27 @@ "Návod: Použij URL: tone://frekvence1;frekvence2;frekvence3;...\n" "např. tone://2000;2005 přehraje 2000 Hz tón a 2005 Hz tón" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Další zprávy jsou skryty.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Pracuji ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informace" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Odstranění hlasu" @@ -4910,14 +4945,38 @@ "\n" "Některý kód pluginů vytvořil Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF dekodér" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr " Konfigurace XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Shareable Playlists (XSPF)" diff -Nru audacious-plugins-4.1/po/da.po audacious-plugins-4.2/po/da.po --- audacious-plugins-4.1/po/da.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/da.po 2022-07-10 01:12:34.000000000 +0000 @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-17 15:01+0000\n" -"Last-Translator: Joe Hansen \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Joe Hansen , 2013-2014,2016,2020-2021\n" "Language-Team: Danish (http://www.transifex.com/audacious/audacious/language/" "da/)\n" "Language: da\n" @@ -29,7 +29,7 @@ msgstr "AdPlug (AdLib-afspiller)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekventeret" @@ -59,7 +59,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Diverse" @@ -471,6 +471,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Samplefrekvens:" @@ -546,6 +547,7 @@ msgstr "* ingen sangtekster tilgængelige i denne MIDI-fil *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Luk" @@ -605,7 +607,7 @@ msgid "Concave Rectangle" msgstr "Konkav rektangel" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ingen" @@ -803,6 +805,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious-afspilningslister (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Farve" @@ -1193,7 +1211,7 @@ msgstr "Slet" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Annuller" @@ -1231,7 +1249,7 @@ msgstr "Forsinkelse:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1251,7 +1269,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg-udvidelsesmodul" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1374,77 +1392,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1568,7 +1586,7 @@ msgid "Quality (0-1):" msgstr "Kvalitet (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Generelt" @@ -1577,11 +1595,11 @@ msgid "FLAC Decoder" msgstr "FLAC-afkoder" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "uden kvalitetstab" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2241,8 +2259,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2627,7 +2645,7 @@ msgid "Looking for lyrics ..." msgstr "Kigger efter sangtekster ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Fejl" @@ -2986,7 +3004,7 @@ msgid "Interpolation:" msgstr "Interpolation:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linær" @@ -3071,7 +3089,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF-konfiguration" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorer længde fra fil" @@ -3754,7 +3772,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Tjenester" @@ -3771,7 +3789,7 @@ msgstr "Afslut" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Sanginformation ..." @@ -3791,7 +3809,7 @@ msgid "Clear A-B Repeat" msgstr "Ryd A-B-gentagelse" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Gå til sang ..." @@ -3884,20 +3902,20 @@ msgstr "Tilføj filer ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Efter titel" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Efter filnavn" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Efter filsti" @@ -3925,104 +3943,104 @@ msgid "Remove Selected" msgstr "Fjern de valgte" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Søg og vælg" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Vend markering om" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Vælg ingen" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Vælg alle" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Efter spornummer" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Efter kunstner" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Efter album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Efter kunstner" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Efter udgivelsesdato" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Efter genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Efter længde" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Efter tilpasset titel" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Efter kommentar" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Sæt listen i tilfældig rækkefølge" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Vend listen om" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Sortér valgt" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Sortér listen" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Åbn indeholdende mappe" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Klip" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopiér" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Indsæt" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Indsæt ved slutning" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Tilføj/fjern fra kø" @@ -4031,7 +4049,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d of %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Redigeringsprogram for Audacious' afspilningslister" @@ -4047,167 +4065,219 @@ msgid "Add Folder ..." msgstr "Tilføj mappe ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Søg i punkter i aktiv afspilningsliste" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Vælg punkter i afspilningslisten ved at udfylde et eller flere felter. " +"Felter bruger regulære udtryk, tager ikke hensyn til store/små bogstaver. " +"Hvis du ikke ved hvordan regulære udtryk fungerer, så indsæt bare en lille " +"del af hvad du søger efter." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titel:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Kunstner:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Filnavn:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Ryd forrige valg før søgning" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Skift automatisk kø for matchende punkter" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Opret en ny afspilningsliste med matchende punkter" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Søg" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Afspiller:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Vælg skrifttype for hovedafspillerens vindue:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Afspilningsliste:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Vælg skrifttype for afspilningslisten:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Tema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Skrifttyper" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Brug bitmap-skrifttyper (understøtter kun ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Rul igennem sangtitel" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Rul sangtitel i begge retninger" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyseprogram" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Skop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Stemmeprint/VU-viser" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Slukket" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ild" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Lodrette linjer" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linjer" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Bjælker" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Langsomst" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Langsom" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Mellem" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Hurtig" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Hurtigst" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punktummer" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linje" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Fast" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Is" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Blød" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Farver:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stil:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Falloff:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Spidspunkts-falloff:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Skopstil:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Farvelægning af stemmeprint:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU-viserstil:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Type" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualiseringstype:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analyseprogram" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Vis toppunkter" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisering" @@ -4219,59 +4289,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Winamp 2.x-tema der ikke er i arkiv" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Søg i punkter i aktiv afspilningsliste" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Søg" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Vælg punkter i afspilningslisten ved at udfylde et eller flere felter. " -"Felter bruger regulære udtryk, tager ikke hensyn til store/små bogstaver. " -"Hvis du ikke ved hvordan regulære udtryk fungerer, så indsæt bare en lille " -"del af hvad du søger efter." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titel:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Kunstner:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Filnavn:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Ryd forrige valg før søgning" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Skift automatisk kø for matchende punkter" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Opret en ny afspilningsliste med matchende punkter" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile-udvidelsesmodul" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4752,14 +4774,27 @@ "For at bruge tilføjes en URL: tone://frequency1;frequency2;frequency3;...\n" "f.eks. tone://2000;2005 for at afspille en 2000 Hz tone og en 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Yderligere beskeder er blevet skjult)." + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Arbejder ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Information" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Stemmefjernelse" @@ -4917,14 +4952,38 @@ "\n" "Lidt af udvidelsesmodulets kode blev udført af Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF-afkoder" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Konfiguration af XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML delbare-afspilningslister (XSPF)" diff -Nru audacious-plugins-4.1/po/de.po audacious-plugins-4.2/po/de.po --- audacious-plugins-4.1/po/de.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/de.po 2022-07-10 01:12:34.000000000 +0000 @@ -10,14 +10,14 @@ # mschwendt , 2012 # mschwendt , 2012 # Chris , 2012 -# Thomas Lange, 2014-2015,2018-2019,2021 +# Thomas Lange, 2014-2015,2018-2019,2021-2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-16 23:24+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Thomas Lange, 2014-2015,2018-2019,2021-2022\n" "Language-Team: German (http://www.transifex.com/audacious/audacious/language/" "de/)\n" "Language: de\n" @@ -35,7 +35,7 @@ msgstr "AdPlug (AdLib-Spieler)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "Sequenziell" @@ -65,7 +65,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Sonstiges" @@ -477,6 +477,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Abtastrate:" @@ -552,6 +553,7 @@ msgstr "* keine Liedtexte in dieser MIDI-Datei verfügbar *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "S_chließen" @@ -611,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Konkaves Rechteck" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Kein" @@ -809,6 +811,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious Wiedergabelisten (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Bittiefe:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Downsample-Verhältnis:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Farbe" @@ -1199,7 +1217,7 @@ msgstr "Löschen" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Abbrechen" @@ -1237,7 +1255,7 @@ msgstr "Verzögerung:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1257,7 +1275,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg Plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1380,77 +1398,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1574,7 +1592,7 @@ msgid "Quality (0-1):" msgstr "Qualität (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Allgemein" @@ -1583,11 +1601,11 @@ msgid "FLAC Decoder" msgstr "FLAC Dekodierer" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "Verlustfrei" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2247,8 +2265,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2633,7 +2651,7 @@ msgid "Looking for lyrics ..." msgstr "Suche nach Liedtexten ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Fehler" @@ -2992,7 +3010,7 @@ msgid "Interpolation:" msgstr "Interpolation:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linear" @@ -3077,7 +3095,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF-Konfiguration" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Länge aus Datei ignorieren" @@ -3761,7 +3779,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Dienste" @@ -3778,7 +3796,7 @@ msgstr "Beenden" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Titelinfo ..." @@ -3798,7 +3816,7 @@ msgid "Clear A-B Repeat" msgstr "A-B Wiederholung leeren" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Zu Titel springen ..." @@ -3891,20 +3909,20 @@ msgstr "Dateien hinzufügen ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Nach Titel" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Nach Dateinamen" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Nach Dateipfad" @@ -3932,104 +3950,104 @@ msgid "Remove Selected" msgstr "Auswahl entfernen" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Suchen und Auswählen" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Auswahl invertieren" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Keine auswählen" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Alle auswählen" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Nach Titelnummer" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Nach Künstler" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Nach Album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Nach Album-Künstler" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Nach Erscheinungsdatum" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Nach Genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Nach Länge" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Nach benutzerdefiniertem Titel" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Nach Kommentar" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Wiedergabeliste zufällig anordnen" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Wiedergabeliste umkehren" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Auswahl sortieren" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Wiedergabeliste sortieren" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Beinhaltenden Ordner öffen" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Ausschneiden" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopieren" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Einfügen" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Am Ende einfügen" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "In/Aus Warteschlange" @@ -4038,7 +4056,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d von %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious Wiedergabeliste" @@ -4054,167 +4072,220 @@ msgid "Add Folder ..." msgstr "Ordner hinzufügen ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Suche Einträge in aktiver Wiedergabeliste" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Wählen Sie Einträge in der Wiedergabeliste durch Ausfüllen eines oder " +"mehrerer Eingabefelder aus. Diese nutzen reguläre Ausdrücke, unterscheiden " +"Groß- und Kleinschreibung aber nicht. Falls Sie nicht wissen, wie reguläre " +"Ausdrücke funktionieren, geben Sie einfach nur einen Teilbegriff für Ihre " +"Suche ein." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titel:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Künstler:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Dateiname:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Vorherige Auswahl vor dem Suchen löschen" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Warteschlange automatisch umschalten für passende Einträge" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Erstelle neue Wiedergabeliste mit passenden Einträgen" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Suchen" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Hauptfenster:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Hauptfenster-Schrift auswählen:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Wiedergabeliste:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Wiedergabelisten-Schrift auswählen:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Skin" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Titelleiste als aktiv anzeigen, wenn irgendein Fenster fokussiert ist" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Schriftarten" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Benutze Bitmap-Schriftarten (nur ASCII-Unterstützung)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Titel scrollen" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Titel in beide Richtungen scrollen" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analysator" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Oszilloskop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Spektrogramm" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Aus" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Feuer" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vertikale Linien" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linien" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Balken" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Am langsamsten" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Langsam" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Schnell" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Am schnellsten" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punkte" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linie" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Beständig" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Eis" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Weich" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Farbgebung:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stil:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Fallgeschwindigkeit:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Spitzen-Fallgeschwindigkeit:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Oszilloskop-Stil:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Spektrogramm-Farbgebung:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU-Meter-Stil:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Modus" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualisierungsmodus:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analysator" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Spitzen anzeigen" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisierung" @@ -4226,60 +4297,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Nicht archivierter Winamp 2.x-Skin" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Suche Einträge in aktiver Wiedergabeliste" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Suchen" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Wählen Sie Einträge in der Wiedergabeliste durch Ausfüllen eines oder " -"mehrerer Eingabefelder aus. Diese nutzen reguläre Ausdrücke, unterscheiden " -"Groß- und Kleinschreibung aber nicht. Falls Sie nicht wissen, wie reguläre " -"Ausdrücke funktionieren, geben Sie einfach nur einen Teilbegriff für Ihre " -"Suche ein." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titel:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Künstler:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Dateiname:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Vorherige Auswahl vor dem Suchen löschen" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Automatisch zwischen passenden Einträgen wechseln" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Erstelle neue Wiedergabeliste mit passenden Einträgen" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile Plugin" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4763,14 +4785,27 @@ "tone://frequenz1;frequenz2;frequenz3;...\n" "z.B. tone://2000;2005 für einen Ton mit 2000 Hz und einen mit 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Weitere Meldungen wurden nicht angezeigt.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "In Bearbeitung ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Information" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s scheint kein gültiger Ordner zu sein." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Stimmenaufhebung" @@ -4928,14 +4963,38 @@ "\n" "Ein Teil des Plugin-Quelltextes war von Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF Dekodierer" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Kosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Scharf" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF Konfiguration" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Standard-Überblendzeit:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolationsmodus:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Wiedergabelisten (XSPF)" diff -Nru audacious-plugins-4.1/po/el.po audacious-plugins-4.2/po/el.po --- audacious-plugins-4.1/po/el.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/el.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,23 +3,28 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: +# 79353a696ad19dc202b261b3067b7640_bec941e, 2015 +# othon alexandros stamataras , 2021 # DImitrios Zakas , 2013 -# Giorgos Kardamis , 2020 +# Γιώργος Καρδάμης , 2020 # gis mapps , 2014 +# GreekLUG , 2021 # Ioannis LM, 2018,2020 -# Ioannis LM, 2018,2020 +# Ioannis LM, 2018,2020-2022 # Nick Tsakalidis , 2021 # DImitrios Zakas , 2013 +# othon alexandros stamataras , 2021 # Wasilis Mandratzis-Walz, 2015 # 79353a696ad19dc202b261b3067b7640_bec941e, 2015 # Yannis Anthymidis, 2012-2013 +# Γιώργος Καρδάμης , 2020 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-17 18:58+0000\n" -"Last-Translator: Nick Tsakalidis \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Ioannis LM, 2018,2020-2022\n" "Language-Team: Greek (http://www.transifex.com/audacious/audacious/language/" "el/)\n" "Language: el\n" @@ -30,14 +35,14 @@ #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" -msgstr "Αποκωδικοποιητής AAC (Raw)" +msgstr "Αποκωδικοποιητής AAC (ακατέργαστος) " #: src/adplug/adplug-xmms.cc:70 msgid "AdPlug (AdLib Player)" msgstr "AdPlug (Αναπαραγωγή AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "αλληλουχία" @@ -67,7 +72,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Διάφορα" @@ -81,7 +86,7 @@ #: src/alarm/alarm.cc:782 msgid "Set Alarm ..." -msgstr "Ρύθμιση συναγερμού ..." +msgstr "Ρύθμιση ειδοποίησης ..." #: src/alarm/alarm.cc:810 msgid "" @@ -163,15 +168,15 @@ "\n" "\n" "Ένταση\n" -" Βαθμιαία:\n" -" Βαθμιαία αύξηση της έντασης στο επιλεγμένο επίπεδο\n" +" Μετάβαση:\n" +" Σταδιακή αύξηση της έντασης στο επιλεγμένο επίπεδο\n" " για τόσο χρόνο.\n" "\n" " Επίπεδο έναρξης:\n" -" Βαθμιαία αύξηση ξεκινώντας από αυτό το επίπεδο.\n" +" Σταδιακή αύξηση ξεκινώντας από αυτό το επίπεδο.\n" "\n" " Επίπεδο τέλους:\n" -" Το επίπεδο έντασης όπου θα σταματήσει η βαθμιαία αύξηση.\n" +" Το επίπεδο έντασης όπου θα σταματήσει η σταδιακή αύξηση.\n" " Αν ο χρόνος είναι 0 τότε η αναπαραγωγή θα ξεκινήσει σε αυτή την ένταση.\n" "\n" "\n" @@ -272,7 +277,7 @@ #: src/alarm/interface.cc:286 msgid "Fading" -msgstr "Εξασθένηση" +msgstr "Μετάβαση" #: src/alarm/interface.cc:294 src/console/plugin.cc:41 #: src/crossfade/crossfade.cc:52 src/crossfade/crossfade.cc:58 @@ -477,6 +482,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Ρυθμός δειγματοληψίας:" @@ -552,6 +558,7 @@ msgstr "* δεν υπάρχουν στίχοι σε αυτό το αρχείο MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Κλείσιμο" @@ -597,7 +604,7 @@ #: src/aosd/aosd.h:37 msgid "AOSD (On-Screen Display)" -msgstr "AOSD (Απεικόνιση στην Οθόνη)" +msgstr "AOSD (Απεικόνιση στην οθόνη)" #: src/aosd/aosd_style.cc:54 msgid "Rectangle" @@ -611,7 +618,7 @@ msgid "Concave Rectangle" msgstr "Κοίλο ορθογώνιο" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Κανένα" @@ -621,7 +628,9 @@ #: src/aosd/aosd_trigger.cc:50 msgid "Triggers OSD when a playlist entry is played." -msgstr "Εμφάνιση του OSD όταν αναπαράγεται καταχώρηση της λίστας αναπαραγωγής." +msgstr "" +"Ενεργοποίηση απεικόνισης στην οθόνη (OSD) όταν αναπαράγεται η λίστα " +"αναπαραγωγής." #: src/aosd/aosd_trigger.cc:55 msgid "Title Change" @@ -630,8 +639,8 @@ #: src/aosd/aosd_trigger.cc:56 msgid "Triggers OSD when the song title changes (for internet streams)." msgstr "" -"Εμφάνιση του OSD όταν αλλάζει ο τίτλος του τραγουδιού (για ροές στο " -"διαδίκτυο)." +"Ενεργοποίηση απεικόνισης στην οθόνη (OSD) όταν αλλάζει ο τίτλος του " +"τραγουδιού (για ροές στο διαδίκτυο)." #: src/aosd/aosd_trigger.cc:61 msgid "Pause On" @@ -639,7 +648,9 @@ #: src/aosd/aosd_trigger.cc:62 msgid "Triggers OSD when playback is paused." -msgstr "Εμφάνιση του OSD όταν γίνεται παύση της αναπαραγωγής." +msgstr "" +"Ενεργοποίηση απεικόνισης στην οθόνη (OSD) όταν γίνεται παύση της " +"αναπαραγωγής." #: src/aosd/aosd_trigger.cc:67 msgid "Pause Off" @@ -647,7 +658,9 @@ #: src/aosd/aosd_trigger.cc:68 msgid "Triggers OSD when playback is unpaused." -msgstr "Εμφάνιση του OSD όταν η αναπαραγωγή επανέρχεται από παύση." +msgstr "" +"Ενεργοποίηση απεικόνισης στην οθόνη (OSD) όταν η αναπαραγωγή επανέρχεται από " +"παύση." #: src/aosd/aosd_ui.cc:162 msgid "Placement" @@ -663,7 +676,7 @@ #: src/aosd/aosd_ui.cc:209 msgid "Max OSD width:" -msgstr "Μέγιστο πλάτος του OSD:" +msgstr "Μέγιστο πλάτος απεικόνισης στην οθόνη (OSD):" #: src/aosd/aosd_ui.cc:220 msgid "Multi-Monitor options" @@ -671,7 +684,7 @@ #: src/aosd/aosd_ui.cc:224 msgid "Display OSD using:" -msgstr "Προβολή OSD σε:" +msgstr "Προβολή απεικόνισης στην οθόνη (OSD) σε:" #: src/aosd/aosd_ui.cc:226 msgid "all monitors" @@ -692,11 +705,11 @@ #: src/aosd/aosd_ui.cc:291 msgid "Fade in:" -msgstr "Ομαλή είσοδος:" +msgstr "Σταδιακή είσοδος:" #: src/aosd/aosd_ui.cc:296 msgid "Fade out:" -msgstr "Ξεθώριασμα:" +msgstr "Βαθμιαίο σβήσιμο:" #: src/aosd/aosd_ui.cc:360 msgid "Fonts" @@ -726,7 +739,7 @@ #: src/aosd/aosd_ui.cc:599 msgid "Enable trigger" -msgstr "Ενεργοποίηση εναύσματος" +msgstr "Ενεργοποίηση εμφάνισης" #: src/aosd/aosd_ui.cc:626 msgid "Event" @@ -744,7 +757,7 @@ msgstr "" "Δεν ανιχνεύθηκε διαχειριστής σύνθεσης!\n" "αν γνωρίζετε ότι έχετε κάποιον σε λειτουργία παρακαλώ ενεργοποιήστε τον, " -"διαφορετικά δεν θα λειτουργήσει σωστά το OSD" +"διαφορετικά δεν θα λειτουργήσει σωστά η απεικόνιση στην οθόνη (OSD)" #: src/aosd/aosd_ui.cc:668 msgid "Composite manager not required for fake transparency" @@ -789,7 +802,7 @@ #: src/aosd/aosd_ui.cc:854 msgid "Trigger" -msgstr "Έναυσμα" +msgstr "Εμφάνιση" #: src/aosd/aosd_ui.cc:859 src/streamtuner/shoutcast-model.cc:202 msgid "Misc" @@ -811,6 +824,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Λίστες αναπαραγωγής Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Βάθος bit:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Αναλογία υποδειγματοληψίας:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher (εφέ ήχου)" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Χρώμα" @@ -943,7 +972,7 @@ #: src/cdaudio/cdaudio-ng.cc:447 msgid "No audio capable CD drive found." -msgstr "Δεν βρέθηκε συσκευή με ικανότητα CD ήχου." +msgstr "Δεν βρέθηκε συσκευή με CD ήχου." #: src/cdaudio/cdaudio-ng.cc:470 msgid "Drive is empty." @@ -1116,12 +1145,12 @@ "Crossfade Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" -"Πρόσθετο Σταδιακό σβήσιμο για το Audacious\n" +"Πρόσθετο Σταδιακής μετάβασης (Crossfade) για το Audacious\n" "Πνευματικά δικαιώματα 2010-2014 John Lindgren" #: src/crossfade/crossfade.cc:47 msgid "Crossfade" -msgstr "Σταδιακό σβήσιμο" +msgstr "Σταδιακή μετάβαση" #: src/crossfade/crossfade.cc:48 msgid "On automatic song change" @@ -1144,12 +1173,12 @@ "For better crossfading, enable\n" "the Silence Removal effect." msgstr "" -"Για καλύτερο σταδιακό σβήσιμο, ενεργοποιήσετε την \n" +"Για καλύτερη σταδιακή μετάβαση, ενεργοποιήσετε την \n" "Αφαίρεση σιωπής." #: src/crossfade/crossfade.cc:71 msgid "Crossfade" -msgstr "Σταδιακό σβήσιμο" +msgstr "Σταδιακή μετάβαση (Crossfade)" #: src/crystalizer/crystalizer.cc:31 msgid "Crystalizer" @@ -1205,7 +1234,7 @@ msgstr "Διαγραφή" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Ακύρωση" @@ -1244,7 +1273,7 @@ msgstr "Καθυστέρηση:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1264,7 +1293,7 @@ msgid "FFmpeg Plugin" msgstr "Πρόσθετο FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1333,7 +1362,7 @@ #: src/filewriter/filewriter.cc:392 msgid "Save into custom directory:" -msgstr "Αποθήκευση σε προσαρμοσμένο κατάλογο:" +msgstr "Αποθήκευση στον προσαρμοσμένο κατάλογο:" #: src/filewriter/filewriter.cc:400 msgid "Generate file name from:" @@ -1345,7 +1374,7 @@ #: src/filewriter/filewriter.cc:404 msgid "Original file name (no suffix)" -msgstr "Αρχικό όνομα αρχείου (χωρίς κατάληξη)" +msgstr "Αρχικό όνομα αρχείου (χωρίς την επέκταση)" #: src/filewriter/filewriter.cc:407 msgid "Original file tag" @@ -1387,77 +1416,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1487,7 +1516,7 @@ #: src/filewriter/filewriter.cc:484 msgid "Bitrate:" -msgstr "Ρυθμός διαμεταγωγής (bitrate)" +msgstr "Ρυθμός μετάδοσης (bitrate):" #: src/filewriter/filewriter.cc:491 msgid "Compression ratio:" @@ -1581,7 +1610,7 @@ msgid "Quality (0-1):" msgstr "Ποιότητα (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Γενικά" @@ -1590,11 +1619,11 @@ msgid "FLAC Decoder" msgstr "Αποκωδικοποιητής FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "Χωρίς απώλειες" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1637,7 +1666,7 @@ "\n" "License: GPLv2+" msgstr "" -"Αναλυτής φάσματος OpenGL για το Audacious\n" +"Πρόσθετο Αναλυτής φάσματος OpenGL για το Audacious\n" "Πνευματικά δικαιώματα 2013, Christophe Bude, John Lindgren και Carlo " "Bramini\n" "\n" @@ -1968,7 +1997,7 @@ #: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 msgid "Remove _Duplicates" -msgstr "Αφαίρεση _διπλών" +msgstr "Αφαίρεση _διπλότυπων" #: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 msgid "Remove _Unavailable Files" @@ -2035,15 +2064,15 @@ #: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 msgid "Show I_nfo Bar" -msgstr "Εμφάνιση π_λαισίου πληροφοριών" +msgstr "Εμφάνιση _πληροφοριών" #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Εμφάνιση _εικόνας άλμπουμ" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" -msgstr "Εμφάνιση πλαισίου απεικόνισης πλη_ροφοριών" +msgstr "Εμφάνιση οπ_τικού εφέ" #: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 msgid "Show _Status Bar" @@ -2056,7 +2085,7 @@ #: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 #: src/skins-qt/menus.cc:152 msgid "_Visualizations ..." -msgstr "_Απεικονίσεις ..." +msgstr "_Οπτικά εφέ ..." #: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 msgid "_File" @@ -2255,8 +2284,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "%dkbit/s " #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2391,7 +2420,7 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" -"Πρόσθετο Global Hotkey\n" +"Πρόσθετο Γενικών συντομεύσεων\n" "Έλεγχος της αναπαραγωγής με καθολικούς συνδυασμούς πλήκτρων ή με τα πλήκτρα " "πολυμέσων\n" "Πνευματικά δικαιώματα (C) 2007-2008 Sascha Hlusiak Artist is truncated at the start, Title -- at the end" msgstr "" +" Ο καλλιτέχνης περικόπτεται στην αρχή, Τίτλος -- στο τέλος " #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Χαρακτήρες για περικοπή στις: " #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +" Οι χαρακτήρες είναι ORed στο RegExp, περιτριγυρισμένοι από κενό " +"διάστημα " #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Χαρακτήρες στους οποίους θα γίνει ο χωρισμός " #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Περικοπή περαιτέρω αυτών των χαρακτήρων" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Γενικά" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Διαχωρίστε τον τίτλο σε καλλιτέχνη και τον τίτλο σε χαρακτήρες" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2641,7 +2673,7 @@ msgid "Looking for lyrics ..." msgstr "Αναζήτηση για στίχους ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Σφάλμα" @@ -2816,7 +2848,7 @@ #: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 msgid "These settings will take effect when Audacious is restarted." -msgstr "Οι ρυθμίσεις θα τεθούν σε ισχύ όταν επανεκκινηθεί το Audacious." +msgstr "Αυτές οι ρυθμίσεις θα τεθούν σε ισχύ όταν επανεκκινηθεί το Audacious." #: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 #: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 @@ -2826,11 +2858,11 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" -msgstr "Επαναφορά στις προεπιλογές" +msgstr "Επαναφορά προεπιλογών" #: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 msgid "Now Playing" @@ -2970,7 +3002,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Διάρκεια ειδοποίησης:" #: src/notify/osd.cc:74 msgid "Show" @@ -3002,7 +3034,7 @@ msgid "Interpolation:" msgstr "Παρεμβολή:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Γραμμική" @@ -3012,7 +3044,7 @@ #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "Ημιτονοειδής παρεμβολή κορυφής (windowed)" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -3092,7 +3124,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF Ρυθμίσεις" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Παράβλεψη διάρκειας αρχείου" @@ -3172,10 +3204,20 @@ "\n" "License: GPLv2+" msgstr "" +"Πρόσθετο Αναλυτής φάσματος OpenGL για το Audacious\n" +"Πνευματικά δικαιώματα 2013 Christophe Budé, John Lindgren, και Carlo " +"Bramini\n" +"Πνευματικά δικαιώματα 2014, 2020 Ariadne Conill\n" +"\n" +"Βασισμένο στο πρόσθετο XMMS:\n" +"Πνευματικά δικαιώματα 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas " +"Nilsson, και 4Front Technologies\n" +"\n" +"Άδεια: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Πατήστε έναν συνδυασμό πλήκτρων μέσα σε ένα πεδίο κειμένου." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3192,6 +3234,22 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Πρόσθετο Γενικών συντομεύσεων\n" +"Έλεγχος της αναπαραγωγής με καθολικούς συνδυασμούς πλήκτρων ή με τα πλήκτρα " +"πολυμέσων.\n" +"\n" +"Πνευματικά δικαιώματα (C) 2020 i.Dark_Templar \n" +"Πνευματικά δικαιώματα (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Στους συντελεστές περιλαμβάνονται:\n" +"Πνευματικά δικαιώματα (C) 2006-2007 Vladimir Paskov \n" +"Πνευματικά δικαιώματα (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonathan A. Davis ,\n" +"Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3215,11 +3273,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Σ#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "Κ#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3247,7 +3305,7 @@ #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Έντονη γραμματοσειρά στις επικεφαλίδες στηλών" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3551,7 +3609,7 @@ #: src/sid/xs_config.cc:81 msgid "Set maximum playback time:" -msgstr "Ορισμός μέγιστου χρόνου αναπαραγωγής:" +msgstr "Ρύθμιση μέγιστου χρόνου αναπαραγωγής:" #: src/sid/xs_config.cc:87 msgid "Use only when song length is unknown" @@ -3607,11 +3665,11 @@ #: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 msgid "Repeat point A set." -msgstr "Καθορισμός του σημείου επανάληψης Α." +msgstr "Ορισμός του σημείου επανάληψης Α." #: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 msgid "Repeat point B set." -msgstr "Καθορισμός του σημείου επανάληψης Β." +msgstr "Ορισμός του σημείου επανάληψης Β." #: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 msgid "Preamp" @@ -3716,7 +3774,7 @@ #: src/skins/main.cc:890 src/skins-qt/main.cc:831 msgid "Visualizations" -msgstr "Απεικονίσεις" +msgstr "Οπτικά εφέ" #: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 msgid "Volume Up" @@ -3756,7 +3814,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Υπηρεσίες" @@ -3773,7 +3831,7 @@ msgstr "Έξοδος" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Πληροφορίες τραγουδιού" @@ -3793,7 +3851,7 @@ msgid "Clear A-B Repeat" msgstr "Αφαίρεση σημείων επανάληψης A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Μετάβαση στο τραγούδι" @@ -3886,20 +3944,20 @@ msgstr "Προσθήκη αρχείων..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Κατά τίτλο" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Κατά όνομα αρχείου" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Κατά διαδρομή αρχείου" @@ -3917,7 +3975,7 @@ #: src/skins/menus.cc:180 src/skins-qt/menus.cc:176 msgid "Remove Duplicates" -msgstr "Αφαίρεση διπλών" +msgstr "Αφαίρεση διπλότυπων" #: src/skins/menus.cc:182 src/skins-qt/menus.cc:178 msgid "Remove Unselected" @@ -3927,104 +3985,104 @@ msgid "Remove Selected" msgstr "Αφαίρεση επιλεγμένων" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Αναζήτηση και επιλογή" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Αντιστροφή επιλογής" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Επιλογή κανενός" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Επιλογή όλων" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Κατά αριθμό κομματιού" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Κατά καλλιτέχνη" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Κατά άλμπουμ" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Κατά καλλιτέχνη άλμπουμ" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Κατά ημερομηνία κυκλοφορίας" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Κατά είδος" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Κατά διάρκεια" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Κατά προσαρμοσμένο τίτλο" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Κατά σχόλιο" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Τυχαιοποίηση λίστας" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Αντίστροφη λίστα" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ταξινόμηση επιλεγμένων" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ταξινόμηση λίστας" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Άνοιγμα φακέλου που περιέχεται" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Αποκοπή" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Αντιγραφή" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Επικόλληση" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Επικόλληση στο τέλος" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Προσθήκη/Αφαίρεση από την σειρά" @@ -4033,7 +4091,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d από %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Επεξεργαστής λίστας αναπαραγωγής Audacious" @@ -4049,169 +4107,222 @@ msgid "Add Folder ..." msgstr "Προσθήκη φακέλου ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Αναζήτηση καταχωρήσεων σε ενεργή λίστα αναπαραγωγής" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Επιλογή καταχωρήσεων στην λίστα αναπαραγωγής συμπληρώνοντας ένα ή " +"περισσότερα πεδία. Τα πεδία χρησιμοποιούν τη σύνταξη έκφρασης με διάκριση " +"πεζών-κεφαλαίων. Αν δεν ξέρετε πώς λειτουργούν οι κανονικές εκφράσεις, απλά " +"εισάγετε ένα μικρό τμήμα από αυτό που αναζητάτε." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Τίτλος:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Αλμπουμ:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Καλλιτέχνης:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Όνομα αρχείου:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Εκκαθάριση προηγούμενων επιλογών πριν από την αναζήτηση" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Αυτόματη εναλλαγή σειράς αναμονής για τις καταχωρήσεις που ταιριάζουν" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Δημιουργία νέας λίστας αναπαραγωγής με τις καταχωρήσεις που ταιριάζουν" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Αναζήτηση" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Πρόγραμμα αναπαραγωγής:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Επιλογή γραμματοσειράς του κυρίως παραθύρου αναπαραγωγής:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Λίστα αναπαραγωγής:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Επιλογή γραμματοσειράς για τη λίστα αναπαραγωγής:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Εμφάνιση" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" +"Εμφάνιση ενεργής γραμμής τίτλου όταν οποιοδήποτε παράθυρο είναι εστιασμένο" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Γραμματοσειρές" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Χρήση γραμματοσειρών bitmap (υποστηρίζει μόνο ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Κύλιση τίτλου τραγουδιού" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Κύλιση τίτλου τραγουδιού και στις δύο κατευθύνσεις" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Αναλυτής" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Κυματομορφή" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Ηχητικό αποτύπωμα / Μετρητής VU" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Κλειστό" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Κανονικά" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Φωτεινός" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Κατακόρυφες γραμμές" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Γραμμές" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Μπάρες" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Πολύ αργά" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Αργά" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Μεσαία" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Γρήγορα" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Πολύ γρήγορα" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Αποσιωπητικά" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Γραμμές" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Συμπαγές" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ψυχρός" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Ομαλά" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Χρωματισμός:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Στυλ:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Μείωση:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Μείωση κορυφής:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Στυλ κυματομορφής:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Χρωματισμός ηχητικού αποτυπώματος:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Στυλ μετρητή VU:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Τύπος" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" -msgstr "Τύπος απεικόνισης:" +msgstr "Τύπος οπτικού εφέ:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Αναλυτής" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Εμφάνιση κορυφών" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" -msgstr "Απεικόνιση" +msgstr "Οπτικό εφέ" #: src/skins-qt/skinselector.cc:98 src/skins/skinselector.cc:111 msgid "Archived Winamp 2.x skin" @@ -4221,59 +4332,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Αποαρχειοθετημένη εμφάνιση Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Αναζήτηση καταχωρήσεων σε ενεργή λίστα αναπαραγωγής" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Αναζήτηση" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Επιλογή καταχωρήσεων στην λίστα αναπαραγωγής συμπληρώνοντας ένα ή " -"περισσότερα πεδία. Τα πεδία χρησιμοποιούν τη σύνταξη έκφρασης με διάκριση " -"πεζών-κεφαλαίων. Αν δεν ξέρετε πώς λειτουργούν οι κανονικές εκφράσεις, απλά " -"εισάγετε ένα μικρό τμήμα από αυτό που αναζητάτε." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Τίτλος:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Αλμπουμ:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Καλλιτέχνης:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Όνομα αρχείου:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Εκκαθάριση προηγούμενων επιλογών πριν από την αναζήτηση" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Αυτόματη εναλλαγή σειράς αναμονής για τις καταχωρήσεις που ταιριάζουν" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Δημιουργία νέας λίστας αναπαραγωγής με τις καταχωρήσεις που ταιριάζουν" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Πρόσθετο Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4323,7 +4386,7 @@ #: src/sndio/sndio.cc:100 msgid "Save and restore volume:" -msgstr "Αποθήκευση και επαναφορά του ήχου:" +msgstr "Αποθήκευση και επαναφορά της έντασης:" #: src/sndio/sndio.cc:181 #, c-format @@ -4469,7 +4532,7 @@ #: src/soxr/sox-resampler.cc:200 msgid "Allow aliasing" -msgstr "" +msgstr "Να επιτρέπεται η χρήση ψευδώνυμων " #: src/soxr/sox-resampler.cc:202 msgid "Use steep filter" @@ -4545,7 +4608,7 @@ #: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 msgid "Advance in playlist when scrolling upward" -msgstr "Προώθηση της λίστας αναπαραγωγής, κατά την κύλιση προς τα επάνω" +msgstr "Προώθηση στη λίστα αναπαραγωγής, κατά την κύλιση προς τα επάνω" #: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 msgid "Se_ttings ..." @@ -4601,11 +4664,11 @@ #: src/streamtuner/ihr-model.cc:63 msgid "Market" -msgstr "" +msgstr "Αγορά" #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "" +msgstr "Γράμματα κλήσης" #: src/streamtuner/ihr-model.cc:162 msgid "Description" @@ -4685,7 +4748,7 @@ #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B και Urban" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4705,11 +4768,11 @@ #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "Κομμάτια τραγουδιών " #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "Μίλησε" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" @@ -4717,15 +4780,15 @@ #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "Shoutcast" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "Icecast" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" -msgstr "" +msgstr "Ρυθμιστής αναμετάδοσης " #: src/tonegen/tonegen.cc:45 msgid "Tone Generator" @@ -4755,14 +4818,27 @@ "frequency3;..\n" "π.χ. τόνος://2000;2005 για να παίξει ένα τόνο 2000 Hz και ένα τόνο 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Έχουν κρυφτεί τα περαιτέρω μηνύματα.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Εργασία ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Πληροφόρηση" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "Ο φάκελος %s δεν φαίνεται να είναι σωστός." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Αφαίρεση φωνής" @@ -4858,12 +4934,12 @@ "VU Meter Plugin for Audacious\n" "Copyright 2017-2019 Marc Sánchez Fauste" msgstr "" -"Πρόσθετο VU Meter για το Audacious\n" +"Πρόσθετο Μετρητή VU για το Audacious\n" "Πνευματικά δικαιώματα 2017-2019 Marc Sánchez Fauste" #: src/vumeter-qt/vumeter_qt.cc:35 msgid "VU Meter Settings" -msgstr "VU Meter Ρυθμίσεις" +msgstr "Μετρητής VU Ρυθμίσεις" #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" @@ -4883,7 +4959,7 @@ #: src/vumeter-qt/vumeter_qt.h:37 msgid "VU Meter" -msgstr "VU Meter" +msgstr "Μετρητής VU" #: src/waveout/waveout.cc:43 msgid "Win32 waveOut" @@ -4919,14 +4995,38 @@ "\n" "Μερικός κώδικας από τον Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Αποκωδικοποιητής 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Συνημιτόνιο" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Έντονο" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Ρύθμιση XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Προεπιλεγμένος χρόνος:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Λειτουργία παρεμβολής:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Διαμοιραζόμενες λίστες αναπαραγωγής ΧΜL (XSPF)" diff -Nru audacious-plugins-4.1/po/en_GB.po audacious-plugins-4.2/po/en_GB.po --- audacious-plugins-4.1/po/en_GB.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/en_GB.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,14 +3,14 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# Andi Chandler , 2013,2016-2019 +# Andi Chandler , 2013,2016-2019,2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Andi Chandler , 2013,2016-2019,2022\n" "Language-Team: English (United Kingdom) (http://www.transifex.com/audacious/" "audacious/language/en_GB/)\n" "Language: en_GB\n" @@ -28,7 +28,7 @@ msgstr "AdPlug (AdLib Player)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sequenced" @@ -38,7 +38,7 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "OPL Emulator:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" @@ -58,7 +58,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Miscellaneous" @@ -469,6 +469,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Sample rate:" @@ -544,6 +545,7 @@ msgstr "* no lyrics available in this MIDI file *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Close" @@ -603,7 +605,7 @@ msgid "Concave Rectangle" msgstr "Concave Rectangle" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "None" @@ -801,6 +803,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious Playlists (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Bit Depth:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Downsample ratio:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Colour" @@ -1174,37 +1192,37 @@ #: src/delete-files/delete-files.cc:133 #, c-format msgid "Do you want to move %d files to the trash?" -msgstr "" +msgstr "Do you want to move %d files to the rubbish bin?" #: src/delete-files/delete-files.cc:134 #, c-format msgid "Do you want to permanently delete %d files?" -msgstr "" +msgstr "Do you want to permanently delete %d files?" #: src/delete-files/delete-files.cc:146 msgid "Move to trash" -msgstr "" +msgstr "Move to Rubbish Bin" #: src/delete-files/delete-files.cc:146 msgid "Delete" -msgstr "" +msgstr "Delete" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancel" #: src/delete-files/delete-files.cc:266 msgid "Delete Selected Files" -msgstr "" +msgstr "Delete Selected Files" #: src/delete-files/delete-files.cc:286 msgid "Delete Method" -msgstr "" +msgstr "Delete Method" #: src/delete-files/delete-files.cc:287 msgid "Move to trash instead of deleting immediately" -msgstr "" +msgstr "Move to Rubbish Bin instead of deleting immediately" #: src/echo_plugin/echo.cc:9 msgid "" @@ -1213,38 +1231,42 @@ "Surround echo by Carl van Schaik, 1999\n" "Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" msgstr "" +"Echo Plugin\n" +"By Johan Levin, 1999\n" +"Surround echo by Carl van Schaik, 1999\n" +"Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" #: src/echo_plugin/echo.cc:21 msgid "Echo" -msgstr "" +msgstr "Echo" #: src/echo_plugin/echo.cc:22 src/modplug/plugin_main.cc:72 #: src/modplug/plugin_main.cc:82 msgid "Delay:" -msgstr "" +msgstr "Delay:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" #: src/echo_plugin/echo.cc:25 msgid "Feedback:" -msgstr "" +msgstr "Feedback:" #: src/echo_plugin/echo.cc:28 src/modplug/plugin_main.cc:86 msgid "Volume:" -msgstr "" +msgstr "Volume:" #: src/echo_plugin/echo.cc:39 msgid "Echo" -msgstr "" +msgstr "Echo" #: src/ffaudio/ffaudio-core.cc:49 msgid "FFmpeg Plugin" -msgstr "" +msgstr "FFmpeg Plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1348,76 +1370,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1542,7 +1564,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "General" @@ -1551,11 +1573,11 @@ msgid "FLAC Decoder" msgstr "" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2201,8 +2223,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2550,7 +2572,7 @@ msgid "Looking for lyrics ..." msgstr "" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Error" @@ -2883,7 +2905,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2963,7 +2985,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3581,7 +3603,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Services" @@ -3598,7 +3620,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3618,7 +3640,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3711,20 +3733,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3752,104 +3774,104 @@ msgid "Remove Selected" msgstr "" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copy" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3858,7 +3880,7 @@ msgid "%s (%d of %d)" msgstr "" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "" @@ -3874,167 +3896,215 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Select main player window font:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Select playlist font:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Use bitmap fonts (supports ASCII only)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Scroll song title in both directions" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Line" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisation" @@ -4046,55 +4116,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4513,14 +4539,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Further messages have been hidden.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Working ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Information" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "" @@ -4640,14 +4679,38 @@ "Some of the plugin code was by Miles Egan." msgstr "" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "" diff -Nru audacious-plugins-4.1/po/es_AR.po audacious-plugins-4.2/po/es_AR.po --- audacious-plugins-4.1/po/es_AR.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/es_AR.po 2022-07-10 01:12:34.000000000 +0000 @@ -5,6 +5,7 @@ # Translators: # Adrián Ramirez Escalante , 2012-2013 # Cosme Domínguez Díaz , 2010 +# Guillermo Cabana, 2022 # Jorge Andrés , 2011 # Rodolfo , 2017 # xukosky , 2011 @@ -12,16 +13,17 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Guillermo Cabana, 2022\n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/audacious/" "audacious/language/es_AR/)\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -32,21 +34,21 @@ msgstr "AdPlug (Reproductor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "Secuenciado" #: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 msgid "Output" -msgstr "" +msgstr "Salida" #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "Emulador OPL:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "" +msgstr "Frecuencia de muestreo" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -62,13 +64,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Varios" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "" +msgstr "Repetir canción en bucle sin fin" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -139,6 +141,53 @@ " Type the reminder in the input field and enable\n" " the checkbox if you want it to be shown." msgstr "" +"Hora\n" +" Alarma a:\n" +" La hora a la que la alarma sonará.\n" +"\n" +" Silenciar después de:\n" +" Detiene la alarma después de este tiempo.\n" +" (si el dialogo despertar no está cerrado)\n" +"\n" +"\n" +"Días\n" +" Día:\n" +" Selecciona los días que la alarma estará activa.\n" +"\n" +" Hora:\n" +" Elige la hora para la alarma de cada día,\n" +" o selecciona el botón para usar la hora\n" +" predeterminada.\n" +"\n" +"\n" +"Volumen\n" +" Fading:\n" +" Aumenta progresivamente el volumen hasta el elegido\n" +" por este tiempo.\n" +"\n" +" Comenzar a:\n" +" Inicia el fading desde este volumen.\n" +"\n" +" Final:\n" +" El volumen al que llegará. Si la hora de\n" +" fading es 0 entonces elige el volumen de aquí e inicia la\n" +" reproducción.\n" +"\n" +"\n" +"Opciones:\n" +" Comando Adicional:\n" +" Ejecuta este comando en la hora de la alarma.\n" +"\n" +" Lista de Reprod.:\n" +" Carga esta lista. Si no una hay lista dada,\n" +" la actual será usada.\n" +" El URL de un stream mp3/ogg \n" +" tambien puede ingresarse aquí.\n" +"\n" +" Recordatorio:\n" +" Muestra un recordatorio cuando la alarma se apaga.\n" +" Escríbelo en el campo de entrada y habilita\n" +" la caja is quieres que se muestre." #: src/alarm/interface.cc:78 msgid "This is your wakeup call." @@ -350,67 +399,87 @@ "Tony Vroon\n" "for the good help with alpha testing" msgstr "" +"AMIDI-Plug\n" +"Reproductor de música MIDI\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"Escrito por Giacomo Lozito\n" +"\n" +"\n" +"Agradecimientos especiales...\n" +"\n" +"A Clemens Ladisch y Jaroslav Kysela\n" +"por sus estupendos programas aplaymidi y amixer; \n" +"me resultaron muy útiles, junto con la documentación\n" +"de alsa-lib, para comprender mejor la API de ALSA.\n" +"\n" +"A Alfredo Spadafina\n" +"por ese logo tan bonito de un teclado midi.\n" +"\n" +"A Tony Vroon\n" +"por su inestimable ayuda probando las versiones alfa." #: src/amidiplug/i_configure.cc:94 msgid "Override default gain:" -msgstr "" +msgstr "Anular ganancia predeterminada:" #: src/amidiplug/i_configure.cc:102 msgid "Override default polyphony:" -msgstr "" +msgstr "Anular polifonía predeterminada:" #: src/amidiplug/i_configure.cc:110 msgid "Override default reverb:" -msgstr "" +msgstr "Anular reverberación predeterminada:" #: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 msgid "On" -msgstr "" +msgstr "Activar" #: src/amidiplug/i_configure.cc:118 msgid "Override default chorus:" -msgstr "" +msgstr "Anular coro predeterminado:" #: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 msgid "Playback" -msgstr "" +msgstr "Reproducir" #: src/amidiplug/i_configure.cc:129 msgid "Transpose:" -msgstr "" +msgstr "Transponer: " #: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 msgid "semitones" -msgstr "" +msgstr "semitonos" #: src/amidiplug/i_configure.cc:132 msgid "Drum shift:" -msgstr "" +msgstr "Cambio de batería: " #: src/amidiplug/i_configure.cc:134 msgid "note numbers" -msgstr "" +msgstr "números de nota" #: src/amidiplug/i_configure.cc:135 msgid "Skip leading silence" -msgstr "" +msgstr "Omitir el silencio inicial" #: src/amidiplug/i_configure.cc:137 msgid "Skip trailing silence" -msgstr "" +msgstr "Omitir el silencio final" #: src/amidiplug/i_configure.cc:141 msgid "SoundFont" -msgstr "" +msgstr "SoundFont" #: src/amidiplug/i_configure.cc:148 msgid "Synthesizer" -msgstr "" +msgstr "Sintetizador" #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" -msgstr "" +msgstr "Frecuencia de muestreo" #: src/amidiplug/i_configure-fluidsynth.cc:57 #: src/amidiplug/i_configure-fluidsynth.cc:536 @@ -484,6 +553,7 @@ msgstr "* no hay letras disponibles en este archivo MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Cerrar" @@ -493,7 +563,7 @@ #: src/ampache/ampache.cc:33 msgid "Ampache Browser" -msgstr "" +msgstr "Navegador Ampache" #: src/ampache/ampache.cc:46 msgid "" @@ -503,6 +573,11 @@ "Copyright (C) Róbert Čerňanský and John Lindgren\n" "License: GNU GPLv3" msgstr "" +"Ampache Browser para Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský y John Lindgren\n" +"Licencia: GNU GPLv3" #: src/aosd/aosd.cc:31 msgid "" @@ -514,6 +589,13 @@ "Based in part on Evan Martin's Ghosd library:\n" "http://neugierig.org/software/ghosd/" msgstr "" +"OSD Audacious\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Escrito por Giacomo Lozito \n" +"\n" +"Basado en parte en la librería Ghosd de Evan Martin:\n" +"http://neugierig.org/software/ghosd/" #: src/aosd/aosd.h:37 msgid "AOSD (On-Screen Display)" @@ -531,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Rectángulo cóncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ninguno" @@ -549,7 +631,7 @@ #: src/aosd/aosd_trigger.cc:56 msgid "Triggers OSD when the song title changes (for internet streams)." -msgstr "" +msgstr "Lanza OSD cuando el título de pista cambia (para streams de internet)." #: src/aosd/aosd_trigger.cc:61 msgid "Pause On" @@ -720,7 +802,7 @@ #: src/asx3/asx3.cc:35 msgid "ASXv3 Playlists" -msgstr "" +msgstr "Listas de reproducción ASXv3" #: src/asx/asx.cc:33 msgid "ASXv1/ASXv2 Playlists" @@ -730,6 +812,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listas de reproducción Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Profundidad de bit:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Tasa de reducción de la muestra:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Color" @@ -752,7 +850,7 @@ #: src/bs2b/plugin.cc:138 msgid "x1/10 dB" -msgstr "" +msgstr "x1/10 dB" #: src/bs2b/plugin.cc:139 msgid "Cut frequency:" @@ -777,6 +875,15 @@ "\n" "This was a Google Summer of Code 2007 project." msgstr "" +"Copyright (C) 2007-2012 Calin Crisan y otros.\n" +"\n" +"Muchas gracias a los desarrolladores de:\n" +"libcdio \n" +"y libcddb .\n" +"\n" +"Gracias también a Tony Vroon por ser mi mentor y mi guía.\n" +"\n" +"Este fue un proyecto del Google Summer of Code de 2007." #: src/cdaudio/cdaudio-ng.cc:134 msgid "Device" @@ -835,11 +942,11 @@ #: src/cdaudio/cdaudio-ng.cc:254 #, c-format msgid "Track %d is a data track." -msgstr "" +msgstr "Pista %d es una pista de datos." #: src/cdaudio/cdaudio-ng.cc:329 msgid "Error reading audio CD." -msgstr "" +msgstr "Error al leer CD de audio." #: src/cdaudio/cdaudio-ng.cc:398 msgid "Audio CD" @@ -877,7 +984,7 @@ #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." -msgstr "" +msgstr "Fallo al crear la conexión a CDDB." #: src/cdaudio/cdaudio-ng.cc:678 msgid "Failed to query the CDDB server" @@ -891,7 +998,7 @@ #: src/cdaudio/cdaudio-ng.cc:704 #, c-format msgid "Failed to read the CDDB info: %s" -msgstr "" +msgstr "Fallo al leer la info CDDB: %s" #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" @@ -899,11 +1006,11 @@ #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" -msgstr "" +msgstr "R_eproducir CD" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "_Add CD" -msgstr "" +msgstr "_Añadir CD" #: src/compressor/compressor.cc:45 msgid "Compression" @@ -922,6 +1029,8 @@ "Dynamic Range Compression Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" +"Plugin de Compresión de Rango Dinámico para Audacious\n" +"Copyright 2010-2014 John Lindgren" #: src/compressor/compressor.cc:64 msgid "Dynamic Range Compressor" @@ -1091,7 +1200,7 @@ msgstr "Borrar" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1125,7 +1234,7 @@ msgstr "Retardo:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1145,7 +1254,7 @@ msgid "FFmpeg Plugin" msgstr "Plugin FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1249,76 +1358,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1443,7 +1552,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "General" @@ -1452,11 +1561,11 @@ msgid "FLAC Decoder" msgstr "Decodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2094,6 +2203,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canales" +msgstr[2] "%d canales" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2102,8 +2212,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2452,7 +2562,7 @@ msgid "Looking for lyrics ..." msgstr "Buscando letras de la canción...." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Error" @@ -2785,7 +2895,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2865,7 +2975,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3177,6 +3287,7 @@ msgid_plural "%d songs" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3228,6 +3339,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3235,6 +3347,7 @@ msgid_plural "%d results" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3485,7 +3598,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servicios" @@ -3502,7 +3615,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3522,7 +3635,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3615,20 +3728,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Por título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3656,104 +3769,104 @@ msgid "Remove Selected" msgstr "Eliminar los seleccionados" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Buscar y seleccionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertir la selección" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "No seleccionar nada" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Seleccionar todo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Por número de pista" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Por artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Por álbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Ordenar aleatoriamente" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Invertir la lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordenar los seleccionados" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordenar lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Pegar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3762,7 +3875,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de listas de reproducción de Audacious" @@ -3778,167 +3891,219 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Buscar entradas en la lista de reproducción activa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleccione entradas en la lista de reproducción indicando uno o más campos. " +"Los campos utilizan sintaxis de expresiones regulares, sin distinguir " +"mayúsculas de minúsculas. Si no sabe como funcionan las expresiones " +"regulares, tan solo escriba la parte del literal que quiere buscar." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Limpiar la selección previa antes de buscar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Conmutar automáticamente la cola para las entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crear una nueva lista de reproducción con las entradas coincidentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Seleccione la tipografía para la ventana principal:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Seleccione la tipografía de la lista de reproducción:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Usar tipografías de mapa de bits (solo soporta ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Desplazar el título de la canción en ambas direcciones" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Campo" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Apagado" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fuego" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Líneas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Muy lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Medio" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Muy rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Hielo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualización" @@ -3950,59 +4115,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema para Winamp 2.x no archivado" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Buscar entradas en la lista de reproducción activa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleccione entradas en la lista de reproducción indicando uno o más campos. " -"Los campos utilizan sintaxis de expresiones regulares, sin distinguir " -"mayúsculas de minúsculas. Si no sabe como funcionan las expresiones " -"regulares, tan solo escriba la parte del literal que quiere buscar." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Limpiar la selección previa antes de buscar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Conmutar automáticamente la cola para las entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crear una nueva lista de reproducción con las entradas coincidentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Plugin Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4421,14 +4538,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Se han ocultado el resto de mensajes.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Trabajando .." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Información" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Quitar voz" @@ -4535,11 +4665,11 @@ #: src/wavpack/wavpack.cc:217 msgid "lossy (hybrid)" -msgstr "" +msgstr "con pérdida (híbrido)" #: src/wavpack/wavpack.cc:219 msgid "lossy" -msgstr "" +msgstr "con pérdida" #: src/wavpack/wavpack.cc:259 msgid "" @@ -4547,14 +4677,41 @@ "\n" "Some of the plugin code was by Miles Egan." msgstr "" +"Copyright 2006 William Pitcock \n" +"\n" +"Parte del código del complemento es de Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Decodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Coseno" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Agudo" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" -msgstr "" +msgstr "Configuración XSF" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Tiempo de fundido predeterminado:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Modo de interpolación:" #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" diff -Nru audacious-plugins-4.1/po/es_MX.po audacious-plugins-4.2/po/es_MX.po --- audacious-plugins-4.1/po/es_MX.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/es_MX.po 2022-07-10 01:12:34.000000000 +0000 @@ -4,21 +4,23 @@ # # Translators: # Jorge A. García Sosa , 2012-2014 -# Jorge A. García Sosa , 2014-2017,2019-2020 +# Jorge A. García Sosa , 2014-2017,2019-2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Jorge A. García Sosa , " +"2014-2017,2019-2022\n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/audacious/" "audacious/language/es_MX/)\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -29,7 +31,7 @@ msgstr "AdPlug (Reproductor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "secuencializado" @@ -59,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Misceláneo" @@ -471,6 +473,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Tasa de bits:" @@ -546,6 +549,7 @@ msgstr "* no hay letras de canción disponibles en este archivo MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Cerrar" @@ -605,7 +609,7 @@ msgid "Concave Rectangle" msgstr "Rectángulo Cóncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ninguno" @@ -806,6 +810,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Lista de reproducción Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Color" @@ -1196,7 +1216,7 @@ msgstr "Borrar" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1234,7 +1254,7 @@ msgstr "Retraso:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1254,7 +1274,7 @@ msgid "FFmpeg Plugin" msgstr "Plugin FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1377,77 +1397,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1571,7 +1591,7 @@ msgid "Quality (0-1):" msgstr "Calidad (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "General" @@ -1580,11 +1600,11 @@ msgid "FLAC Decoder" msgstr "Decodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sin pérdida" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2028,7 +2048,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Mostrar Barra de Información Portada _Album" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2220,7 +2240,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menú" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2236,6 +2256,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canales" +msgstr[2] "%d canales" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2244,8 +2265,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2569,31 +2590,31 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Artista está recortado al inicio, Título -- al final" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Caracteres recortados en:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" -msgstr "" +msgstr "Caracteres están ORed en RegExp, rodeados de espacios" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Caracteres a separar en:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Además recortar esos en caracteres" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "General" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Separar título en artista y título en caracteres" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2629,7 +2650,7 @@ msgid "Looking for lyrics ..." msgstr "Buscando letras de canción ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Error" @@ -2814,7 +2835,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2956,7 +2977,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Duración de notificación personalizada:" #: src/notify/osd.cc:74 msgid "Show" @@ -2988,7 +3009,7 @@ msgid "Interpolation:" msgstr "Interpolación:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linear" @@ -3073,7 +3094,7 @@ msgid "OpenPSF Configuration" msgstr "Configuración OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorar duración del archivo" @@ -3153,10 +3174,19 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL Spectrum Analyzer para Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren y Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Basado en el plugin XMMS:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson y " +"4Front Technologies\n" +"\n" +"License: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Presiona una combinación de teclas dentro de un campo de texto." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3173,6 +3203,19 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Global Hotkey Plugin\n" +"Controla el reproductor con combinaciones de teclas globales o tlecas " +"multimedia.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contribuyeron además:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3196,11 +3239,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3228,7 +3271,7 @@ #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Usa fuente en negritas para encabezados de columna" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3424,6 +3467,7 @@ msgid_plural "%d songs" msgstr[0] "%d pista" msgstr[1] "%d pistas" +msgstr[2] "%d pistas" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3475,6 +3519,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "%d de %d resultado mostrado" msgstr[1] "%d de %d resultados mostrados" +msgstr[2] "%d de %d resultados mostrados" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3482,6 +3527,7 @@ msgid_plural "%d results" msgstr[0] "%d resultado" msgstr[1] "%d resultados" +msgstr[2] "%d resultados" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3734,7 +3780,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servicios" @@ -3751,7 +3797,7 @@ msgstr "Salir" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Información de Pista ..." @@ -3771,7 +3817,7 @@ msgid "Clear A-B Repeat" msgstr "Limpiar Repetición A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Saltar a la Pista ..." @@ -3864,20 +3910,20 @@ msgstr "Agregar Archivos ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Por Título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Por Nombre de Archivo" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Por Ruta de Archivo" @@ -3905,104 +3951,104 @@ msgid "Remove Selected" msgstr "Remover Seleccionados" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Buscar y Seleccionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertir Selección" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Selecciona ninguno" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Selecciona Todo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Por Número de Pista" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Por Artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Por Álbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Por Artista de Álbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Por Fecha de Lanzamiento" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Por Género" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Por Duración" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Por Título Personalizado" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Por Commentario" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Aleatorizar Lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Invertir Lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordenar Seleccionado" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordenar Lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Abrir Carpeta Contenedora" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Pegar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Copiar al Final" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "A la Fila/Quitar de la Fila" @@ -4011,7 +4057,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de Listas de Reproducción de Audacious" @@ -4027,167 +4073,220 @@ msgid "Add Folder ..." msgstr "Agregar Carpeta ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Buscar entradas en la lista de reproducción activa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Selecciona entradas en la lista de reproducción llenando uno o más campos. " +"Los campos usan la sintaxis de expresiones regulares, mayúsculas o " +"minísculas indiscriminadas. Si no sabes como trabajan las expresiones " +"regulares, simplemente inserta una porción literal de lo que buscas." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Título:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Álbum:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nombre de Archivo:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Limpiar selección previa antes de buscar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Cambiar automáticamente la cola para las entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crear una nueva lista de reproducción con las entradas coincidentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Buscar" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reproductor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Selecciona la fuente de la ventana principal del reproductor:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista de reproducción:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Selecciona la fuenta de la lista de reproducción:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Piel" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" +"Mostrar barra de títulos activa cuando cualquier ventana este al frente" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Fuentes" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Usar fuentes de mapa de bits (únicamente soporta ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Desplazar título de pista" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Desplaza el título de la pista en ambas direcciones" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizador de Espectro" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Osciloscopio" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Espectrograma vocal / medidor VU" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Apagado" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fuego" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Líneas verticales" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Líneas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Muy lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Medio" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Muy rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Puntos" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Línea" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Sólido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Hielo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Colorear:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estilo:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Caída:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Caída de pico:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estilo del Analizador de Espectro:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Color del Espectrograma vocal:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Estilo del medidor VU:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipo" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo de visualización:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostrar picos" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualización" @@ -4199,59 +4298,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Skin de winamp 2.x sin comprimir" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Buscar entradas en la lista de reproducción activa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Buscar" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Selecciona entradas en la lista de reproducción llenando uno o más campos. " -"Los campos usan la sintaxis de expresiones regulares, mayúsculas o " -"minísculas indiscriminadas. Si no sabes como trabajan las expresiones " -"regulares, simplemente inserta una porción literal de lo que buscas." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Título:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Álbum:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nombre de Archivo:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Limpiar selección previa antes de buscar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Cambiar automáticamente la cola para las entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crear una nueva lista de reproducción con las entradas coincidentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Plugin Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4736,14 +4787,27 @@ "por ejemplo, tone://2000;2005 to reproducir un tono de2000 Hz tone y un tono " "de 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Más mensajes han sido ocultados.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Trabajando ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Información" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Removedor de Voz" @@ -4902,14 +4966,38 @@ "\n" "Algo del código del plugin era de Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Decodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Coseno" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Agudo" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuración XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Tiempo de fundido predeterminado:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Modo de interpolación:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Listas de Reprod. XML Compartibles (XSPF)" diff -Nru audacious-plugins-4.1/po/es.po audacious-plugins-4.2/po/es.po --- audacious-plugins-4.1/po/es.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/es.po 2022-07-10 01:12:34.000000000 +0000 @@ -22,7 +22,7 @@ # bb21c722adad611b63dfb48ec99e8350_f97f8ad , 2012 # Marc Sánchez , 2020 # Matias Menich , 2012 -# Toni Estévez , 2019-2020 +# Toni Estévez , 2019-2020,2022 # xukosky , 2011-2012 # xukosky , 2011, 2012 # enjolras , 2012 @@ -30,16 +30,17 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-25 09:33+0000\n" -"Last-Translator: Toni Estévez \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Toni Estévez , 2019-2020,2022\n" "Language-Team: Spanish (http://www.transifex.com/audacious/audacious/" "language/es/)\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -50,7 +51,7 @@ msgstr "AdPlug (reproductor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "secuenciado" @@ -80,7 +81,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Miscelánea" @@ -252,7 +253,7 @@ #: src/alarm/interface.cc:167 msgid "Alarm at (default):" -msgstr "Alarma (per defecto) a las:" +msgstr "Alarma (por defecto) a las:" #: src/alarm/interface.cc:189 msgid "h" @@ -493,6 +494,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Frecuencia de muestreo:" @@ -568,6 +570,7 @@ msgstr "* no hay letras disponibles en este archivo MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Cerrar" @@ -627,7 +630,7 @@ msgid "Concave Rectangle" msgstr "Rectángulo cóncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ninguno" @@ -830,6 +833,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listas de reproducción de Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Profundidad de bits:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Tasa de reducción de la muestra:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Color" @@ -1224,7 +1243,7 @@ msgstr "Eliminar" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1261,7 +1280,7 @@ msgstr "Retraso:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1281,7 +1300,7 @@ msgid "FFmpeg Plugin" msgstr "Complemento FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1405,77 +1424,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kb/s" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kb/s" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kb/s" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kb/s" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kb/s" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kb/s" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kb/s" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kb/s" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kb/s" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kb/s" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kb/s" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kb/s" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kb/s" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kb/s" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kb/s" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kb/s" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1599,7 +1618,7 @@ msgid "Quality (0-1):" msgstr "Calidad (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "General" @@ -1608,11 +1627,11 @@ msgid "FLAC Decoder" msgstr "Descodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sin pérdida" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2264,6 +2283,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canales" +msgstr[2] "%d canales" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2272,8 +2292,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2281,7 +2301,7 @@ #: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 msgid "Playlist mode." -msgstr "Modo de la lista de reproducción." +msgstr "Modo de lista de reproducción." #: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 msgid "Stopping after song." @@ -2664,7 +2684,7 @@ msgid "Looking for lyrics ..." msgstr "Buscando las letras..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Error" @@ -3026,7 +3046,7 @@ msgid "Interpolation:" msgstr "Interpolación:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineal" @@ -3112,7 +3132,7 @@ msgid "OpenPSF Configuration" msgstr "Configuración de OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorar la duración del archivo" @@ -3487,6 +3507,7 @@ msgid_plural "%d songs" msgstr[0] "%d canción" msgstr[1] "%d canciones" +msgstr[2] "%d canciones" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3538,6 +3559,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "%d de %d resultado mostrado" msgstr[1] "%d de %d resultados mostrados" +msgstr[2] "%d de %d resultados mostrados" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3545,6 +3567,7 @@ msgid_plural "%d results" msgstr[0] "%d resultado" msgstr[1] "%d resultados" +msgstr[2] "%d resultados" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3797,7 +3820,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servicios" @@ -3814,7 +3837,7 @@ msgstr "Salir" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Información de la canción..." @@ -3834,7 +3857,7 @@ msgid "Clear A-B Repeat" msgstr "Borrar el bucle" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Saltar a la canción..." @@ -3927,20 +3950,20 @@ msgstr "Añadir archivos..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Por título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Por nombre del archivo" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Por ruta del archivo" @@ -3968,104 +3991,104 @@ msgid "Remove Selected" msgstr "Eliminar entradas seleccionadas" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Buscar y seleccionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertir la selección" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "No seleccionar nada" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Seleccionar todo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Por número de pista" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Por artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Por álbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Por artista del álbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Por fecha de publicación" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Por género" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Por duración" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Por título personalizado" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Por comentario" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Ordenar aleatoriamente" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Invertir la lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordenar entradas seleccionadas" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordenar lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Abrir la carpeta que contiene el archivo" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Pegar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Pegar al final" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Añadir/quitar de la cola" @@ -4074,7 +4097,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de listas de reproducción de Audacious" @@ -4090,167 +4113,219 @@ msgid "Add Folder ..." msgstr "Añadir una carpeta…" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Buscar entradas en la lista de reproducción activa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleccione entradas de la lista de reproducción rellenando uno o más campos. " +"Estos campos aceptan expresiones regulares. Si no sabe cómo funcionan las " +"expresiones regulares, tan solo escriba el texto que busca. No se distinguen " +"mayúsculas de minúsculas." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Título:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Álbum:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nombre del archivo:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Borrar la selección anterior antes de buscar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Reemplazar la cola actual por las entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crear una lista de reproducción nueva con las entradas coincidentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Buscar" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reproductor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Seleccionar la tipografía para la ventana principal:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista de reproducción:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Seleccionar la tipografía de la lista de reproducción:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Tema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Mostrar la barra de título activa al enfocar una ventana" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Tipografías" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Usar tipografías de mapa de bits (solo admite ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Desplazar el título de la canción" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Desplazar el título de la canción en ambas direcciones" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Osciloscopio" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Impresión vocal / vúmetro" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Desactivada" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fuego" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Líneas verticales" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Líneas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Muy lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Medio" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "El más rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Puntos" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Línea" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Sólido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Hielo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Coloreado:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estilo:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Caída:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Caída de los picos:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estilo del osciloscopio:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Coloreado de la impresión vocal:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Estilo del vúmetro:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipo" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo de visualización:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostrar picos" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualización" @@ -4262,59 +4337,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema para Winamp 2.x no archivado" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Buscar entradas en la lista de reproducción activa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Buscar" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleccione entradas de la lista de reproducción rellenando uno o más campos. " -"Estos campos aceptan expresiones regulares. Si no sabe cómo funcionan las " -"expresiones regulares, tan solo escriba el texto que busca. No se distinguen " -"mayúsculas de minúsculas." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Título:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Álbum:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nombre del archivo:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Borrar la selección anterior antes de buscar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Reemplazar la cola actual por las entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crear una lista de reproducción nueva con las entradas coincidentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Complemento Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4800,14 +4827,27 @@ "P. ej., tone://2000;2005 para reproducir un tono de 2000 Hz y otro de 2005 " "Hz." -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Se han ocultado el resto de mensajes.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Trabajando..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Información" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Eliminación de la voz" @@ -4964,16 +5004,40 @@ msgstr "" "Copyright 2006 William Pitcock \n" "\n" -"Parte del código del complemento fue escrito por Miles Egan." +"Parte del código del complemento es de Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Descodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Coseno" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Agudo" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuración XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Tiempo de fundido por defecto:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Modo de interpolación:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Listas de reproducción XML para compartir (XSPF)" diff -Nru audacious-plugins-4.1/po/et.po audacious-plugins-4.2/po/et.po --- audacious-plugins-4.1/po/et.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/et.po 2022-07-10 01:12:34.000000000 +0000 @@ -4,14 +4,14 @@ # # Translators: # Ivar Smolin , 2007 -# Ivar Smolin , 2012,2017-2020 +# Ivar Smolin , 2012,2017-2020,2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Ivar Smolin , 2012,2017-2020,2022\n" "Language-Team: Estonian (http://www.transifex.com/audacious/audacious/" "language/et/)\n" "Language: et\n" @@ -29,7 +29,7 @@ msgstr "" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "" @@ -59,7 +59,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Muu" @@ -404,6 +404,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Sämplimissagedus:" @@ -479,6 +480,7 @@ msgstr "* selles MIDI-failis pole laulusõnu *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Sul_ge" @@ -531,7 +533,7 @@ msgid "Concave Rectangle" msgstr "Nõgus ristkülik" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Puudub" @@ -726,6 +728,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audaciouse esitusnimekirjad (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Värv" @@ -1095,7 +1113,7 @@ msgstr "Kustuta" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Loobu" @@ -1129,7 +1147,7 @@ msgstr "Viivitus:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1149,7 +1167,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg Plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1253,77 +1271,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1447,7 +1465,7 @@ msgid "Quality (0-1):" msgstr "Kvaliteet (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Üldine" @@ -1456,11 +1474,11 @@ msgid "FLAC Decoder" msgstr "FLAC-dekooder" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "kadudeta" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2120,8 +2138,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2474,7 +2492,7 @@ msgid "Looking for lyrics ..." msgstr "" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Viga" @@ -2809,7 +2827,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2894,7 +2912,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Failist pärit pikkust eiratakse" @@ -3013,23 +3031,23 @@ #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "Alati" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "Automaatpeitmine" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "Ei näidata" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "Esitusnimekirjade kaartide näitamine:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Rasvase kirja kasutamine tulpade päises" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3518,7 +3536,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Teenused" @@ -3535,7 +3553,7 @@ msgstr "Välju" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Loo andmed ..." @@ -3555,7 +3573,7 @@ msgid "Clear A-B Repeat" msgstr "Puhasta A-B kordus" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3648,20 +3666,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Pealkirja järgi" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3689,104 +3707,104 @@ msgid "Remove Selected" msgstr "Eemalda valik" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Otsi ja vali" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Vaheta valitud ja valimata" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Tühista valik" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Vali kõik" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Loo numbri järgi" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Esitaja järgi" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Albumi järgi" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Albumi esitaja järgi" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Žanri järgi" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Kestuse järgi" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Sega nimekiri" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Pööra järjestus ümber" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Valiku sortimine" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Nimekirja sortimine" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Ava faili sisaldav kaust" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Lõika" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopeeri" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Aseta" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3795,7 +3813,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d/%d-st)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audaciouse esitusnimekirja redaktor" @@ -3811,167 +3829,218 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Otsimine aktiivsest esitusnimekirjast" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Esitusnimekirjast ühe või enama välja järgi otsimine. Otsinguväljadel " +"kasutatakse tõstutundetut regulaaravaldise süntaksit. Kui sa pole " +"regulaaravaldistega tuttav, siis sisesta lihtsalt otsitav sõnaosa." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Pealkiri:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Esitaja:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Failinimi:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Enne otsimist nullitakse eelmine valik" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Otsingule vastavatest kirjetest luuakse uus esitusnimekiri" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Esitaja:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Esitaja põhiakna kirjatüübi valimine:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Esitusnimekiri:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Esitusnimekirja kirjatüübi valimine:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Rüü" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Kirjatüübid" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Kasutatakse rasterkirja (toetab ainult ASCII kooditabelit)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Loo nime keritakse" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Loo nime keritakse mõlemas suunas" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analüsaator" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Skoop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Väljas" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Tavaline" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Tuli" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Püstjooned" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Jooned" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Tulbad" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Väga aeglane" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Aeglane" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Keskmine" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Kiire" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Väga kiire" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punktid" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Joon" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Ühevärviline" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Jää" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Pehme" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Värvimine:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Laad:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Langemine:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Tippude langemine:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Skoobi laad:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Liik" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualiseerimise liik:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analüsaator" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Tippude näitamine" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualiseerimine" @@ -3983,58 +4052,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Arhiveerimata Winamp 2.x rüü" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Otsimine aktiivsest esitusnimekirjast" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Esitusnimekirjast ühe või enama välja järgi otsimine. Otsinguväljadel " -"kasutatakse tõstutundetut regulaaravaldise süntaksit. Kui sa pole " -"regulaaravaldistega tuttav, siis sisesta lihtsalt otsitav sõnaosa." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Pealkiri:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Esitaja:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Failinimi:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Enne otsimist nullitakse eelmine valik" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Otsingule vastavatest kirjetest luuakse uus esitusnimekiri" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4478,14 +4500,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Ülejäänud sõnumid peidetakse.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Töötamine ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Teave" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Hääle eemaldamine" @@ -4627,14 +4662,38 @@ "\n" "Osa plugina koodi on kirjutanud Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF-dekooder" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF-seadistus" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Jagatavad XML-esitusnimekirjad (XSPF)" diff -Nru audacious-plugins-4.1/po/eu.po audacious-plugins-4.2/po/eu.po --- audacious-plugins-4.1/po/eu.po 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/po/eu.po 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,4609 @@ +# Basque translation for Audacious Plugins +# Copyright (C) Audacious translators +# This file is distributed under the same license as the Audacious Plugins package. +# +# Translators: +# asier fernandez iribar , 2013 +# Iñaki Larrañaga Murgoitio , 2009 +# Muitze Zulaika , 2021 +# Muitze Zulaika , 2021 +# Osoitz , 2012 +# Oihane C, 2021 +msgid "" +msgstr "" +"Project-Id-Version: Audacious Plugins\n" +"Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Oihane C, 2021\n" +"Language-Team: Basque (http://www.transifex.com/audacious/audacious/language/" +"eu/)\n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/aac/aac.cc:19 +msgid "AAC (Raw) Decoder" +msgstr "AAC Deskodetzailea" + +#: src/adplug/adplug-xmms.cc:70 +msgid "AdPlug (AdLib Player)" +msgstr "" + +#: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 +msgid "sequenced" +msgstr "sekuentziatua" + +#: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 +msgid "Output" +msgstr "Irteera" + +#: src/adplug/adplug-xmms.cc:350 +msgid "OPL Emulator:" +msgstr "OPL Emuladorea:" + +#: src/adplug/adplug-xmms.cc:353 +msgid "Sample rate" +msgstr "lagin-tasa" + +#: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 +#: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 +#: src/modplug/plugin_main.cc:77 src/resample/resample.cc:201 +#: src/resample/resample.cc:207 src/resample/resample.cc:211 +#: src/resample/resample.cc:215 src/resample/resample.cc:219 +#: src/resample/resample.cc:223 src/resample/resample.cc:227 +#: src/resample/resample.cc:231 src/resample/resample.cc:235 +#: src/resample/resample.cc:239 src/resample/resample.cc:243 +#: src/sid/xs_config.cc:67 src/soxr/sox-resampler.cc:205 +msgid "Hz" +msgstr "Hz" + +#: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 +#: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 +msgid "Miscellaneous" +msgstr "Hainbat" + +#: src/adplug/adplug-xmms.cc:356 +msgid "Repeat song in endless loop" +msgstr "Abestia amaierarik gabeko begizta batean errepikatzea" + +#: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 +msgid "Alarm" +msgstr "Alarma" + +#: src/alarm/alarm.cc:782 +msgid "Set Alarm ..." +msgstr "Alarma jarri ..." + +#: src/alarm/alarm.cc:810 +msgid "" +"A plugin that can be used to start playing at a certain time.\n" +"\n" +"Originally written by Adam Feakin and Daniel Stodden." +msgstr "" + +#: src/alarm/interface.cc:28 +msgid "" +"Time\n" +" Alarm at:\n" +" The time for the alarm to come on.\n" +"\n" +" Quiet after:\n" +" Stop alarm after this amount of time.\n" +" (if the wakeup dialog is not closed)\n" +"\n" +"\n" +"Days\n" +" Day:\n" +" Select the days for the alarm to activate.\n" +"\n" +" Time:\n" +" Choose the time for the alarm on each day,\n" +" or select the toggle button to use the default\n" +" time.\n" +"\n" +"\n" +"Volume\n" +" Fading:\n" +" Fade the volume up to the chosen volume\n" +" for this amount of time.\n" +"\n" +" Start at:\n" +" Start fading from this volume.\n" +"\n" +" Final:\n" +" The volume to stop fading at. If the fading\n" +" time is 0 then set volume to this and start\n" +" playing.\n" +"\n" +"\n" +"Options:\n" +" Additional Command:\n" +" Run this command at the alarm time.\n" +"\n" +" Playlist:\n" +" Load this playlist. If no playlist\n" +" is given, the current one will be used.\n" +" The URL of an mp3/ogg stream\n" +" can also be entered here.\n" +"\n" +" Reminder:\n" +" Display a reminder when the alarm goes off.\n" +" Type the reminder in the input field and enable\n" +" the checkbox if you want it to be shown." +msgstr "" + +#: src/alarm/interface.cc:78 +msgid "This is your wakeup call." +msgstr "Hau da zure esnatzeko deia:" + +#: src/alarm/interface.cc:96 +msgid "Your reminder for today is..." +msgstr "Zure gaurko gogorarazlea..." + +#: src/alarm/interface.cc:98 src/alarm/interface.cc:372 +msgid "Reminder" +msgstr "Gogorarazlea" + +#: src/alarm/interface.cc:122 +msgid "Monday" +msgstr "Astelehena" + +#: src/alarm/interface.cc:122 +msgid "Tuesday" +msgstr "Asteartea" + +#: src/alarm/interface.cc:122 +msgid "Wednesday" +msgstr "Asteazkena" + +#: src/alarm/interface.cc:123 +msgid "Thursday" +msgstr "Osteguna" + +#: src/alarm/interface.cc:123 +msgid "Friday" +msgstr "Ostirala" + +#: src/alarm/interface.cc:123 +msgid "Saturday" +msgstr "Larunbata" + +#: src/alarm/interface.cc:123 +msgid "Sunday" +msgstr "Igandea" + +#: src/alarm/interface.cc:160 src/alarm/interface.cc:219 +#: src/alarm/interface.cc:234 +msgid "Time" +msgstr "Denbora" + +#: src/alarm/interface.cc:167 +msgid "Alarm at (default):" +msgstr "Alarma noiz (lehenetsia):" + +#: src/alarm/interface.cc:189 +msgid "h" +msgstr "o" + +#: src/alarm/interface.cc:192 +msgid "Quiet after:" +msgstr "Isildu hau eta gero:" + +#: src/alarm/interface.cc:204 +msgid "hours" +msgstr "orduak" + +#: src/alarm/interface.cc:215 +msgid "minutes" +msgstr "minutuak" + +#: src/alarm/interface.cc:224 +msgid "Choose the days for the alarm to come on" +msgstr "Aukeratu alarmak jotzeko egunak" + +#: src/alarm/interface.cc:231 +msgid "Day" +msgstr "Eguna" + +#: src/alarm/interface.cc:248 src/bs2b/plugin.cc:130 +msgid "Default" +msgstr "Lehenetsia" + +#: src/alarm/interface.cc:277 +msgid "Days" +msgstr "Egunak" + +#: src/alarm/interface.cc:286 +msgid "Fading" +msgstr "Progresioa" + +#: src/alarm/interface.cc:294 src/console/plugin.cc:41 +#: src/crossfade/crossfade.cc:52 src/crossfade/crossfade.cc:58 +#: src/lirc/lirc.cc:395 src/notify/notify.cc:113 src/sid/xs_config.cc:85 +#: src/sid/xs_config.cc:94 src/sid/xs_config.cc:103 +#: src/vumeter-qt/vumeter_qt.cc:39 +msgid "seconds" +msgstr "segundo" + +#: src/alarm/interface.cc:301 src/alarm/interface.cc:342 +msgid "Volume" +msgstr "Bolumena" + +#: src/alarm/interface.cc:306 +msgid "Start at" +msgstr "Hasi hemen " + +#: src/alarm/interface.cc:322 +msgid "Final" +msgstr "Bukaeran" + +#: src/alarm/interface.cc:335 +msgid "Current" +msgstr "Oraingoa" + +#: src/alarm/interface.cc:348 +msgid "Additional Command" +msgstr "Komando gehigarria" + +#: src/alarm/interface.cc:354 src/alarm/interface.cc:377 +msgid "enable" +msgstr "gaitu" + +#: src/alarm/interface.cc:361 +msgid "Playlist (optional)" +msgstr "Erreprodukzio-zerrenda (aukerazkoa)" + +#: src/alarm/interface.cc:365 +msgid "Select a playlist" +msgstr "Hautatu erreprodukzio-zerrenda bat" + +#: src/alarm/interface.cc:385 +msgid "Options" +msgstr "Aukerak" + +#: src/alarm/interface.cc:390 +msgid "What do these options mean?" +msgstr "Zer esan nahi dute aukera hauek?" + +#: src/alarm/interface.cc:404 +msgid "Help" +msgstr "Laguntza" + +#: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 +msgid "Album Art" +msgstr "Diskoaren azala" + +#: src/alsa/alsa.h:64 +msgid "ALSA Output" +msgstr "ALSA Irteera" + +#: src/alsa/config.cc:28 +msgid "" +"ALSA Output Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren\n" +"\n" +"My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " +"code served as a reference when the ALSA manual was not enough." +msgstr "" + +#: src/alsa/config.cc:61 +msgid "(no description)" +msgstr "(deskribapenik ez)" + +#: src/alsa/config.cc:166 +msgid "Default PCM device" +msgstr "Lehenetsitako PCM gailua" + +#: src/alsa/config.cc:188 +msgid "Default mixer device" +msgstr "Lehenetsitako nahaslea" + +#: src/alsa/config.cc:296 +msgid "PCM device:" +msgstr "PCM gailua:" + +#: src/alsa/config.cc:299 +msgid "Mixer device:" +msgstr "Nahastailearen gailua:" + +#: src/alsa/config.cc:302 +msgid "Mixer element:" +msgstr "Nahaslea:" + +#: src/amidiplug/amidi-plug.cc:42 +msgid "AMIDI-Plug (MIDI Player)" +msgstr "" + +#: src/amidiplug/amidi-plug.cc:445 +msgid "" +"AMIDI-Plug\n" +"modular MIDI music player\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"written by Giacomo Lozito\n" +"\n" +"\n" +"special thanks to...\n" +"\n" +"Clemens Ladisch and Jaroslav Kysela\n" +"for their cool programs aplaymidi and amixer; those\n" +"were really useful, along with alsa-lib docs, in order\n" +"to learn more about the ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"for the nice midi keyboard logo\n" +"\n" +"Tony Vroon\n" +"for the good help with alpha testing" +msgstr "" + +#: src/amidiplug/i_configure.cc:94 +msgid "Override default gain:" +msgstr "" + +#: src/amidiplug/i_configure.cc:102 +msgid "Override default polyphony:" +msgstr "" + +#: src/amidiplug/i_configure.cc:110 +msgid "Override default reverb:" +msgstr "" + +#: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 +msgid "On" +msgstr "" + +#: src/amidiplug/i_configure.cc:118 +msgid "Override default chorus:" +msgstr "" + +#: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 +msgid "Playback" +msgstr "" + +#: src/amidiplug/i_configure.cc:129 +msgid "Transpose:" +msgstr "Irauli: " + +#: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 +msgid "semitones" +msgstr "tonuerdiak" + +#: src/amidiplug/i_configure.cc:132 +msgid "Drum shift:" +msgstr "" + +#: src/amidiplug/i_configure.cc:134 +msgid "note numbers" +msgstr "nota zenbakiak" + +#: src/amidiplug/i_configure.cc:135 +msgid "Skip leading silence" +msgstr "" + +#: src/amidiplug/i_configure.cc:137 +msgid "Skip trailing silence" +msgstr "" + +#: src/amidiplug/i_configure.cc:141 +msgid "SoundFont" +msgstr "" + +#: src/amidiplug/i_configure.cc:148 +msgid "Synthesizer" +msgstr "Sintetizadorea" + +#: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 +#: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 +msgid "Sample rate:" +msgstr "lagin-tasa:" + +#: src/amidiplug/i_configure-fluidsynth.cc:57 +#: src/amidiplug/i_configure-fluidsynth.cc:536 +msgid "AMIDI-Plug - select SoundFont file" +msgstr "AMIDI-Plug - hautatu SoundFont fitxategia" + +#: src/amidiplug/i_configure-fluidsynth.cc:60 +msgid "_Cancel" +msgstr "_Utzi" + +#: src/amidiplug/i_configure-fluidsynth.cc:61 +msgid "_Open" +msgstr "_Ireki" + +#: src/amidiplug/i_configure-fluidsynth.cc:230 +#: src/amidiplug/i_configure-fluidsynth.cc:476 src/gtkui/columns.cc:46 +msgid "File name" +msgstr "Fitxategi izena" + +#: src/amidiplug/i_configure-fluidsynth.cc:234 +#: src/amidiplug/i_configure-fluidsynth.cc:479 +msgid "Size (bytes)" +msgstr "Tamaina (byte)" + +#: src/amidiplug/i_fileinfo.cc:169 +msgid "Name:" +msgstr "Izena:" + +#: src/amidiplug/i_fileinfo.cc:187 +msgid " MIDI Info " +msgstr " MIDI informazioa " + +#: src/amidiplug/i_fileinfo.cc:201 +msgid "Format:" +msgstr "Formatua:" + +#: src/amidiplug/i_fileinfo.cc:204 +msgid "Length (msec):" +msgstr "Luzera (mseg.):" + +#: src/amidiplug/i_fileinfo.cc:207 +msgid "No. of Tracks:" +msgstr "Pista kopurua:" + +#: src/amidiplug/i_fileinfo.cc:213 +msgid "variable" +msgstr "aldagaia" + +#: src/amidiplug/i_fileinfo.cc:215 +msgid "BPM:" +msgstr "BPM:" + +#: src/amidiplug/i_fileinfo.cc:223 +msgid "BPM (wavg):" +msgstr "BPM (wavg):" + +#: src/amidiplug/i_fileinfo.cc:226 +msgid "Time Div:" +msgstr "Denbora zat:" + +#: src/amidiplug/i_fileinfo.cc:237 +msgid " MIDI Comments and Lyrics " +msgstr " MIDI iruzkinak eta letrak " + +#: src/amidiplug/i_fileinfo.cc:284 +msgid "* no comments available in this MIDI file *" +msgstr "* iruzkinik ez dago erabilgarri MIDI fitxategi honetan *" + +#: src/amidiplug/i_fileinfo.cc:296 +msgid "* no lyrics available in this MIDI file *" +msgstr "* letrarik ez dago erabilgarri MIDI fitxategi honetan *" + +#: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 +msgid "_Close" +msgstr "_Itxi" + +#: src/amidiplug/i_fileinfo.cc:331 +msgid " (invalid UTF-8)" +msgstr " (UTF-8 baliogabea)" + +#: src/ampache/ampache.cc:33 +msgid "Ampache Browser" +msgstr "Ampache nabigatzailea" + +#: src/ampache/ampache.cc:46 +msgid "" +"Ampache Browser for Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský and John Lindgren\n" +"License: GNU GPLv3" +msgstr "" + +#: src/aosd/aosd.cc:31 +msgid "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Written by Giacomo Lozito \n" +"\n" +"Based in part on Evan Martin's Ghosd library:\n" +"http://neugierig.org/software/ghosd/" +msgstr "" + +#: src/aosd/aosd.h:37 +msgid "AOSD (On-Screen Display)" +msgstr "" + +#: src/aosd/aosd_style.cc:54 +msgid "Rectangle" +msgstr "Laukizuzena" + +#: src/aosd/aosd_style.cc:59 +msgid "Rounded Rectangle" +msgstr "Laukizuzen biribildua" + +#: src/aosd/aosd_style.cc:64 +msgid "Concave Rectangle" +msgstr "Laukizuzen ahurra" + +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 +msgid "None" +msgstr "Bat ere ez" + +#: src/aosd/aosd_trigger.cc:49 +msgid "Playback Start" +msgstr "Erreprodukzioa hasi" + +#: src/aosd/aosd_trigger.cc:50 +msgid "Triggers OSD when a playlist entry is played." +msgstr "" +"OSDa abiarazten du erreprodukzio-zerrendako sarrera bat erreproduzitzean." + +#: src/aosd/aosd_trigger.cc:55 +msgid "Title Change" +msgstr "Titulu aldaketa" + +#: src/aosd/aosd_trigger.cc:56 +msgid "Triggers OSD when the song title changes (for internet streams)." +msgstr "" + +#: src/aosd/aosd_trigger.cc:61 +msgid "Pause On" +msgstr "Pausatuta" + +#: src/aosd/aosd_trigger.cc:62 +msgid "Triggers OSD when playback is paused." +msgstr "OSDa abiarazten du erreprodukzioa pausatzean." + +#: src/aosd/aosd_trigger.cc:67 +msgid "Pause Off" +msgstr "Jarraitu" + +#: src/aosd/aosd_trigger.cc:68 +msgid "Triggers OSD when playback is unpaused." +msgstr "OSDa abiarazten du erreprodukzioa jarraitzean." + +#: src/aosd/aosd_ui.cc:162 +msgid "Placement" +msgstr "Kokalekua" + +#: src/aosd/aosd_ui.cc:195 +msgid "Relative X offset:" +msgstr "X desplazamendu erlatiboa:" + +#: src/aosd/aosd_ui.cc:202 +msgid "Relative Y offset:" +msgstr "Y desplazamendu erlatiboa:" + +#: src/aosd/aosd_ui.cc:209 +msgid "Max OSD width:" +msgstr "OSDaren gehi. zabalera:" + +#: src/aosd/aosd_ui.cc:220 +msgid "Multi-Monitor options" +msgstr "Pantaila anitzen aukerak" + +#: src/aosd/aosd_ui.cc:224 +msgid "Display OSD using:" +msgstr "Bistaratu OSDa hau erabiliz:" + +#: src/aosd/aosd_ui.cc:226 +msgid "all monitors" +msgstr "pantaila guztiak" + +#: src/aosd/aosd_ui.cc:229 +#, c-format +msgid "monitor %i" +msgstr "%i. pantaila" + +#: src/aosd/aosd_ui.cc:281 +msgid "Timing (ms)" +msgstr "Tenporizadorea (ms)" + +#: src/aosd/aosd_ui.cc:286 +msgid "Display:" +msgstr "Bistaratu:" + +#: src/aosd/aosd_ui.cc:291 +msgid "Fade in:" +msgstr "Pixkanaka agertu:" + +#: src/aosd/aosd_ui.cc:296 +msgid "Fade out:" +msgstr "Iraungitu:" + +#: src/aosd/aosd_ui.cc:360 +msgid "Fonts" +msgstr "Letra-tipoak" + +#: src/aosd/aosd_ui.cc:367 +#, c-format +msgid "Font %i:" +msgstr "%i letra-tipoa:" + +#: src/aosd/aosd_ui.cc:381 +msgid "Shadow" +msgstr "Itzala" + +#: src/aosd/aosd_ui.cc:485 +msgid "Render Style" +msgstr "Errendatze estiloa" + +#: src/aosd/aosd_ui.cc:501 +msgid "Colors" +msgstr "Koloreak" + +#: src/aosd/aosd_ui.cc:512 +#, c-format +msgid "Color %i:" +msgstr "%i kolorea:" + +#: src/aosd/aosd_ui.cc:599 +msgid "Enable trigger" +msgstr "Gaitu abiarazlea" + +#: src/aosd/aosd_ui.cc:626 +msgid "Event" +msgstr "Gertaera" + +#: src/aosd/aosd_ui.cc:653 +msgid "Composite manager detected" +msgstr "Kudeatzaile konposatua detektatuta" + +#: src/aosd/aosd_ui.cc:660 +msgid "" +"Composite manager not detected;\n" +"unless you know that you have one running, please activate a composite " +"manager otherwise the OSD won't work properly" +msgstr "" +"Konposaketako kudeatzailea ez da detektatu.\n" +"Bat exekutatzen dagoela jakin ezean, aktibatu konposaketako kudeatzalea " +"bestela OSDak ez du ongi funtzionatuko" + +#: src/aosd/aosd_ui.cc:668 +msgid "Composite manager not required for fake transparency" +msgstr "Gardentasun faltsua egiteko ez da konposaketako kudeaketak behar" + +#: src/aosd/aosd_ui.cc:705 +msgid "Transparency" +msgstr "Gardentasuna" + +#: src/aosd/aosd_ui.cc:711 +msgid "Fake transparency" +msgstr "Gardentasun faltsua" + +#: src/aosd/aosd_ui.cc:713 +msgid "Real transparency (requires X Composite Ext.)" +msgstr "Egitako gardentasuna (Xen konposaketa hed. behar da)" + +#: src/aosd/aosd_ui.cc:754 +msgid "Composite extension not loaded" +msgstr "Konposaketako hedapena ez da kargatu" + +#: src/aosd/aosd_ui.cc:771 +#, c-format +msgid "Audacious OSD" +msgstr "Audacious OSDa" + +#: src/aosd/aosd_ui.cc:834 +msgid "Position" +msgstr "Posizioa" + +#: src/aosd/aosd_ui.cc:839 +msgid "Animation" +msgstr "Animazioa" + +#: src/aosd/aosd_ui.cc:844 +msgid "Text" +msgstr "Testua" + +#: src/aosd/aosd_ui.cc:849 +msgid "Decoration" +msgstr "Dekorazioa" + +#: src/aosd/aosd_ui.cc:854 +msgid "Trigger" +msgstr "Abiarazlea" + +#: src/aosd/aosd_ui.cc:859 src/streamtuner/shoutcast-model.cc:202 +msgid "Misc" +msgstr "Hainbat" + +#: src/aosd/aosd_ui.cc:868 +msgid "Test" +msgstr "Proba" + +#: src/asx3/asx3.cc:35 +msgid "ASXv3 Playlists" +msgstr "ASXv3 Erreprodukzio-zerrenda" + +#: src/asx/asx.cc:33 +msgid "ASXv1/ASXv2 Playlists" +msgstr "ASXv1/ASXv2 Erreprodukzio-zerrenda" + +#: src/audpl/audpl.cc:33 +msgid "Audacious Playlists (audpl)" +msgstr "Audacious erreprodukzio-zerrenda (audpl)" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + +#: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 +msgid "Color" +msgstr "Kolore" + +#: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 +msgid "Blur Scope" +msgstr "" + +#: src/bs2b/plugin.cc:38 +msgid "Bauer Stereophonic-to-Binaural (BS2B)" +msgstr "" + +#: src/bs2b/plugin.cc:129 +msgid "Presets:" +msgstr "Aurrezarpenak" + +#: src/bs2b/plugin.cc:136 +msgid "Feed level:" +msgstr "Elikadura-maila:" + +#: src/bs2b/plugin.cc:138 +msgid "x1/10 dB" +msgstr "x1/10 dB" + +#: src/bs2b/plugin.cc:139 +msgid "Cut frequency:" +msgstr "Moztu maiztasuna:" + +#: src/cairo-spectrum/cairo-spectrum.cc:41 src/qt-spectrum/qt-spectrum.cc:107 +msgid "Spectrum Analyzer" +msgstr "Espektro Analizatzailea" + +#: src/cdaudio/cdaudio-ng.cc:71 +msgid "Audio CD Plugin" +msgstr "Audio CD plugina" + +#: src/cdaudio/cdaudio-ng.cc:118 +msgid "" +"Copyright (C) 2007-2012 Calin Crisan and others.\n" +"\n" +"Many thanks to libcdio developers \n" +"and to libcddb developers .\n" +"\n" +"Also thank you to Tony Vroon for mentoring and guiding me.\n" +"\n" +"This was a Google Summer of Code 2007 project." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:134 +msgid "Device" +msgstr "Gailua" + +#: src/cdaudio/cdaudio-ng.cc:135 +msgid "Read speed:" +msgstr "Irakurketa-abiadura:" + +#: src/cdaudio/cdaudio-ng.cc:138 +msgid "Override device:" +msgstr "Gainidatzi gailua:" + +#: src/cdaudio/cdaudio-ng.cc:140 +msgid "Metadata" +msgstr "Metadatuak" + +#: src/cdaudio/cdaudio-ng.cc:141 +msgid "Use CD-Text" +msgstr "Erabili CD-Text" + +#: src/cdaudio/cdaudio-ng.cc:143 +msgid "Use CDDB" +msgstr "Erabili CDDB" + +#: src/cdaudio/cdaudio-ng.cc:145 +msgid "Use HTTP instead of CDDBP" +msgstr "HTTP erabili CDDBP ordez" + +#: src/cdaudio/cdaudio-ng.cc:148 +msgid "Server:" +msgstr "Zerbitzaria:" + +#: src/cdaudio/cdaudio-ng.cc:152 +msgid "Path:" +msgstr "Bidea:" + +#: src/cdaudio/cdaudio-ng.cc:156 +msgid "Port:" +msgstr "Portua:" + +#: src/cdaudio/cdaudio-ng.cc:220 +msgid "Failed to initialize cdio subsystem." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:250 +#, c-format +msgid "Invalid URI %s." +msgstr "URI baliogabea: %s" + +#: src/cdaudio/cdaudio-ng.cc:252 +#, c-format +msgid "Track %d not found." +msgstr "%d pista ez da aurkitu." + +#: src/cdaudio/cdaudio-ng.cc:254 +#, c-format +msgid "Track %d is a data track." +msgstr "%d pista datu-pista bat da." + +#: src/cdaudio/cdaudio-ng.cc:329 +msgid "Error reading audio CD." +msgstr "Errorea audio CDa irakurtzean." + +#: src/cdaudio/cdaudio-ng.cc:398 +msgid "Audio CD" +msgstr "Audio CDa" + +#: src/cdaudio/cdaudio-ng.cc:435 src/cdaudio/cdaudio-ng.cc:444 +#, c-format +msgid "Failed to open CD device %s." +msgstr "Errorea %s CDa irekitzean." + +#: src/cdaudio/cdaudio-ng.cc:447 +msgid "No audio capable CD drive found." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:470 +msgid "Drive is empty." +msgstr "Unitatea hutsik dago" + +#: src/cdaudio/cdaudio-ng.cc:472 +msgid "Unsupported disk type." +msgstr "Onartu gabeko disko mota." + +#: src/cdaudio/cdaudio-ng.cc:496 +msgid "Failed to finish initializing opened CD drive." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:509 +msgid "Failed to retrieve first/last track number." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:530 +#, c-format +msgid "Cannot read start/end LSN for track %d." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:612 +msgid "Failed to create the CDDB connection." +msgstr "CDDB konexioa ezin izan da sortu" + +#: src/cdaudio/cdaudio-ng.cc:678 +msgid "Failed to query the CDDB server" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:680 +#, c-format +msgid "Failed to query the CDDB server: %s" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:704 +#, c-format +msgid "Failed to read the CDDB info: %s" +msgstr "CDDB informazioa ezin izan da irakurri: %s" + +#: src/cd-menu-items/cd-menu-items.cc:33 +msgid "Audio CD Menu Items" +msgstr "" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "Pla_y CD" +msgstr "Jo CDa" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "_Add CD" +msgstr "_Gehitu CDa" + +#: src/compressor/compressor.cc:45 +msgid "Compression" +msgstr "Konpresioa" + +#: src/compressor/compressor.cc:46 +msgid "Center volume:" +msgstr "Bolumen zentrala:" + +#: src/compressor/compressor.cc:49 +msgid "Dynamic range:" +msgstr "Bitarte dinamikoa:" + +#: src/compressor/compressor.cc:57 +msgid "" +"Dynamic Range Compression Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" + +#: src/compressor/compressor.cc:64 +msgid "Dynamic Range Compressor" +msgstr "" + +#: src/console/plugin.cc:15 +msgid "" +"Console music decoder engine based on Game_Music_Emu 0.5.2\n" +"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Shay Green " +msgstr "" + +#: src/console/plugin.cc:30 +msgid "Bass:" +msgstr "Baxua:" + +#: src/console/plugin.cc:33 +msgid "Treble:" +msgstr "Altua:" + +#: src/console/plugin.cc:36 +msgid "Echo:" +msgstr "" + +#: src/console/plugin.cc:39 +msgid "Default song length:" +msgstr "Abestiaren luzera lehenetsia:" + +#: src/console/plugin.cc:42 src/modplug/plugin_main.cc:58 +msgid "Resampling" +msgstr "Birlagintzea" + +#: src/console/plugin.cc:43 +msgid "Enable audio resampling" +msgstr "Gaitu audioa berriro lagintzea" + +#: src/console/plugin.cc:49 +msgid "SPC" +msgstr "SPC" + +#: src/console/plugin.cc:50 +msgid "Ignore length from SPC tags" +msgstr "Ezikusi egin SPCko etiketetako luzerari" + +#: src/console/plugin.cc:52 +msgid "Increase reverb" +msgstr "Handiagotu reverb-a" + +#: src/console/plugin.h:26 +msgid "Game Console Music Decoder" +msgstr "Joko Kontsola Musika Deskodetzailea" + +#: src/coreaudio/coreaudio.cc:53 +msgid "CoreAudio output" +msgstr "" + +#: src/coreaudio/coreaudio.cc:156 +msgid "" +"CoreAudio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"Copyright 2017,18 René J.V. Bertin\n" +" (original code and code adapted from\n" +" Apple examples, (C) Apple 2013)\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/coreaudio/coreaudio.cc:172 +msgid "Use exclusive mode" +msgstr "Erabili modelo esklusiboa" + +#: src/coreaudio/coreaudio.cc:174 +msgid "Use bit perfect audio (adapt device sampling rate)" +msgstr "" + +#: src/crossfade/crossfade.cc:43 +msgid "" +"Crossfade Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" + +#: src/crossfade/crossfade.cc:47 +msgid "Crossfade" +msgstr "" + +#: src/crossfade/crossfade.cc:48 +msgid "On automatic song change" +msgstr "" + +#: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 +msgid "Overlap:" +msgstr "Teilakatzea:" + +#: src/crossfade/crossfade.cc:54 +msgid "On seek or manual song change" +msgstr "" + +#: src/crossfade/crossfade.cc:60 +msgid "Tip" +msgstr "" + +#: src/crossfade/crossfade.cc:61 +msgid "" +"For better crossfading, enable\n" +"the Silence Removal effect." +msgstr "" + +#: src/crossfade/crossfade.cc:71 +msgid "Crossfade" +msgstr "" + +#: src/crystalizer/crystalizer.cc:31 +msgid "Crystalizer" +msgstr "" + +#: src/crystalizer/crystalizer.cc:32 src/stereo_plugin/stereo.cc:45 +msgid "Intensity:" +msgstr "Intentsitatea:" + +#: src/crystalizer/crystalizer.cc:43 +msgid "Crystalizer" +msgstr "" + +#: src/cue/cue.cc:42 +msgid "Cue Sheet Plugin" +msgstr "" + +#: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 +#: src/delete-files/delete-files.cc:230 +msgid "Delete Files" +msgstr "Fitxategiak Ezabatu" + +#: src/delete-files/delete-files.cc:120 +msgid "No files are selected." +msgstr "Ez da fitxategirik hautatu." + +#: src/delete-files/delete-files.cc:125 +#, c-format +msgid "Do you want to move %s to the trash?" +msgstr "%s zakarrontzira eraman nahi duzu?" + +#: src/delete-files/delete-files.cc:126 +#, c-format +msgid "Do you want to permanently delete %s?" +msgstr "%s betiko ezabatu nahi duzu?" + +#: src/delete-files/delete-files.cc:133 +#, c-format +msgid "Do you want to move %d files to the trash?" +msgstr "%d zakarrontzira eraman nahi duzu?" + +#: src/delete-files/delete-files.cc:134 +#, c-format +msgid "Do you want to permanently delete %d files?" +msgstr "%d betiko ezabatu nahi duzu?" + +#: src/delete-files/delete-files.cc:146 +msgid "Move to trash" +msgstr "Zaborretara eraman" + +#: src/delete-files/delete-files.cc:146 +msgid "Delete" +msgstr "Ezabatu" + +#: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 +msgid "Cancel" +msgstr "Utzi" + +#: src/delete-files/delete-files.cc:266 +msgid "Delete Selected Files" +msgstr "Ezabatu hautatutako fitxategiak" + +#: src/delete-files/delete-files.cc:286 +msgid "Delete Method" +msgstr "Ezabatu metodoa" + +#: src/delete-files/delete-files.cc:287 +msgid "Move to trash instead of deleting immediately" +msgstr "Zakarrontzira eraman zuzenean ezabatu beharrean" + +#: src/echo_plugin/echo.cc:9 +msgid "" +"Echo Plugin\n" +"By Johan Levin, 1999\n" +"Surround echo by Carl van Schaik, 1999\n" +"Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" +msgstr "" + +#: src/echo_plugin/echo.cc:21 +msgid "Echo" +msgstr "Ekoa" + +#: src/echo_plugin/echo.cc:22 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 +msgid "Delay:" +msgstr "Atzerapena: " + +#: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 +msgid "ms" +msgstr "ms" + +#: src/echo_plugin/echo.cc:25 +msgid "Feedback:" +msgstr "Berelikatzea:" + +#: src/echo_plugin/echo.cc:28 src/modplug/plugin_main.cc:86 +msgid "Volume:" +msgstr "Bolumena:" + +#: src/echo_plugin/echo.cc:39 +msgid "Echo" +msgstr "" + +#: src/ffaudio/ffaudio-core.cc:49 +msgid "FFmpeg Plugin" +msgstr "FFmpeg plugina" + +#: src/ffaudio/ffaudio-core.cc:635 +msgid "" +"Multi-format audio decoding plugin for Audacious using\n" +"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Matti Hämäläinen " +msgstr "" + +#: src/filewriter/filewriter.cc:48 +msgid "FileWriter Plugin" +msgstr "" + +#: src/filewriter/filewriter.cc:316 +#, c-format +msgid "" +"Error opening %s:\n" +"%s" +msgstr "" +"Errorea %s kargatzean:\n" +"%s" + +#: src/filewriter/filewriter.cc:358 +msgid "" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/filewriter/filewriter.cc:385 +msgid "Output file format:" +msgstr "Irteerako fitxategi-formatua:" + +#: src/filewriter/filewriter.cc:389 +msgid "Save into original directory" +msgstr "Gorde jatorrizko direktorioan" + +#: src/filewriter/filewriter.cc:392 +msgid "Save into custom directory:" +msgstr "Gorde direktorio pertsonalizatuan:" + +#: src/filewriter/filewriter.cc:400 +msgid "Generate file name from:" +msgstr "Sortu fitxategiaren izena hemendik:" + +#: src/filewriter/filewriter.cc:401 +msgid "Original file name" +msgstr "Jatorrizko fitxategi-izena" + +#: src/filewriter/filewriter.cc:404 +msgid "Original file name (no suffix)" +msgstr "Jatorrizko fitxategi-izena (atzizki gabe)" + +#: src/filewriter/filewriter.cc:407 +msgid "Original file tag" +msgstr "Jatorrizko fitxategi-etiketa" + +#: src/filewriter/filewriter.cc:411 +msgid "Prepend track number to file name" +msgstr "" + +#: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 +msgid "Auto" +msgstr "Automatikoa" + +#: src/filewriter/filewriter.cc:418 +msgid "8000 Hz" +msgstr "8000 Hz" + +#: src/filewriter/filewriter.cc:419 +msgid "11025 Hz" +msgstr "11025 Hz" + +#: src/filewriter/filewriter.cc:420 +msgid "12000 Hz" +msgstr "12000 Hz" + +#: src/filewriter/filewriter.cc:421 +msgid "16000 Hz" +msgstr "16000 Hz" + +#: src/filewriter/filewriter.cc:422 +msgid "22050 Hz" +msgstr "22050 Hz" + +#: src/filewriter/filewriter.cc:423 +msgid "24000 Hz" +msgstr "24000 Hz" + +#: src/filewriter/filewriter.cc:424 +msgid "32000 Hz" +msgstr "32000 Hz" + +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 +msgid "44100 Hz" +msgstr "44100 Hz" + +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 +msgid "48000 Hz" +msgstr "48000 Hz" + +#: src/filewriter/filewriter.cc:430 +msgid "8 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:431 +msgid "16 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:432 +msgid "32 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:433 +msgid "40 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:434 +msgid "48 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:435 +msgid "56 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:436 +msgid "64 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:437 +msgid "80 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:438 +msgid "96 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:439 +msgid "112 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:440 +msgid "128 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:441 +msgid "160 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:442 +msgid "192 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:443 +msgid "224 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:444 +msgid "256 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:445 +msgid "320 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:450 +msgid "Joint Stereo" +msgstr "" + +#: src/filewriter/filewriter.cc:451 src/modplug/plugin_main.cc:57 +#: src/mpg123/mpg123.cc:255 +msgid "Stereo" +msgstr "Estereoa" + +#: src/filewriter/filewriter.cc:452 src/modplug/plugin_main.cc:56 +#: src/mpg123/mpg123.cc:256 +msgid "Mono" +msgstr "Monoa" + +#: src/filewriter/filewriter.cc:456 +msgid "VBR" +msgstr "" + +#: src/filewriter/filewriter.cc:457 +msgid "ABR" +msgstr "" + +#: src/filewriter/filewriter.cc:478 +msgid "Algorithm quality:" +msgstr "Algoritmoaren kalitatea:" + +#: src/filewriter/filewriter.cc:484 +msgid "Bitrate:" +msgstr "Bit-tasa:" + +#: src/filewriter/filewriter.cc:491 +msgid "Compression ratio:" +msgstr "Konpresio-tasa:" + +#: src/filewriter/filewriter.cc:498 +msgid "Audio mode:" +msgstr "Audio modua:" + +#: src/filewriter/filewriter.cc:501 +msgid "Enforce strict ISO compliance" +msgstr "Derrigortu ISOa betetzen duela" + +#: src/filewriter/filewriter.cc:503 +msgid "Error protection" +msgstr "Erroreen aurkako babesa" + +#: src/filewriter/filewriter.cc:508 +msgid "Enable VBR/ABR" +msgstr "Gaitu VBR/ABR" + +#: src/filewriter/filewriter.cc:510 +msgid "Type:" +msgstr "Mota:" + +#: src/filewriter/filewriter.cc:514 +msgid "Minimum bitrate:" +msgstr "Gutxieneko bit-tasa:" + +#: src/filewriter/filewriter.cc:518 +msgid "Maximum bitrate:" +msgstr "Gehienezko bit-tasa:" + +#: src/filewriter/filewriter.cc:522 +msgid "Average bitrate:" +msgstr "Batez besteko bit-tasa:" + +#: src/filewriter/filewriter.cc:526 +msgid "VBR quality level:" +msgstr "VBR kalitate-maila:" + +#: src/filewriter/filewriter.cc:530 +msgid "Strictly enforce minimum bitrate" +msgstr "Derrigortu gutxieneko bit-tasa" + +#: src/filewriter/filewriter.cc:533 +msgid "Omit Xing VBR header" +msgstr "" + +#: src/filewriter/filewriter.cc:539 +msgid "Frame Headers" +msgstr "" + +#: src/filewriter/filewriter.cc:540 +msgid "Mark as copyright" +msgstr "Markatu copyright gisa" + +#: src/filewriter/filewriter.cc:542 +msgid "Mark as original" +msgstr "Markatu jatorrizko gisa" + +#: src/filewriter/filewriter.cc:544 +msgid "ID3 Tags" +msgstr "" + +#: src/filewriter/filewriter.cc:545 +msgid "Force addition of version 2 tag" +msgstr "Derrigortu v2 etiketa gehitzea" + +#: src/filewriter/filewriter.cc:547 +msgid "Only add v1 tag" +msgstr "Gehitu v1 etiketa soilik" + +#: src/filewriter/filewriter.cc:549 +msgid "Only add v2 tag" +msgstr "Gehitu v2 etiketa soilik" + +#: src/filewriter/filewriter.cc:554 +msgid "Quality" +msgstr "Kalitatea" + +#: src/filewriter/filewriter.cc:555 +msgid "VBR/ABR" +msgstr "VBR/ABR" + +#: src/filewriter/filewriter.cc:556 +msgid "Tags" +msgstr "Etiketak" + +#: src/filewriter/filewriter.cc:566 +msgid "Quality (0-1):" +msgstr "Kalitatea (0-1):" + +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 +#: src/skins/skins_cfg.cc:285 +msgid "General" +msgstr "Orokorra" + +#: src/flac/flacng.h:36 +msgid "FLAC Decoder" +msgstr "FLAC Deskodetzailea" + +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 +msgid "lossless" +msgstr "" + +#: src/flac/plugin.cc:180 +msgid "" +"Original code by\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" +msgstr "" + +#: src/gio/gio.cc:34 +msgid "" +"GIO Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren" +msgstr "" + +#: src/gio/gio.cc:42 +msgid "GIO Plugin" +msgstr "GIO plugina" + +#: src/gio/gio.cc:152 +msgid "Read-and-append mode not supported" +msgstr "" + +#: src/gio/gio.cc:165 +msgid "Invalid open mode" +msgstr "Irekitzeko modua ez da baliozkoa" + +#: src/glspectrum/gl-spectrum.cc:51 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" + +#: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 +msgid "OpenGL Spectrum Analyzer" +msgstr "OpenGL Espektro Analizatzailea" + +#: src/gtkui/columns.cc:35 +msgid "Entry number" +msgstr "Sarera zenbakia" + +#: src/gtkui/columns.cc:36 src/moonstone/playlist_model.cc:38 +#: src/moonstone/playlist_selection.cc:62 +#: src/playlist-manager/playlist-manager.cc:199 +#: src/playlist-manager-qt/playlist-manager-qt.cc:186 +#: src/qtui/playlist_model.cc:33 src/streamtuner/icecast-model.cc:120 +#: src/streamtuner/ihr-model.cc:159 src/streamtuner/shoutcast-model.cc:122 +msgid "Title" +msgstr "Titulua" + +#: src/gtkui/columns.cc:37 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Artist" +msgstr "Artista" + +#: src/gtkui/columns.cc:38 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Year" +msgstr "Urtea" + +#: src/gtkui/columns.cc:39 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:34 +msgid "Album" +msgstr "Diskoa" + +#: src/gtkui/columns.cc:40 +msgid "Album artist" +msgstr "Albumeko artista" + +#: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 +msgid "Track" +msgstr "Pista" + +#: src/gtkui/columns.cc:42 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 src/streamtuner/icecast-model.cc:123 +#: src/streamtuner/shoutcast-model.cc:125 +#: src/streamtuner/shoutcast-model.cc:236 +msgid "Genre" +msgstr "Generoa" + +#: src/gtkui/columns.cc:43 +msgid "Queue position" +msgstr "Ilara posizioa" + +#: src/gtkui/columns.cc:44 src/moonstone/playlist_model.cc:41 +#: src/qtui/playlist_model.cc:35 +msgid "Length" +msgstr "Iraupena" + +#: src/gtkui/columns.cc:45 +msgid "File path" +msgstr "Fitxategi bidea" + +#: src/gtkui/columns.cc:47 +msgid "Custom title" +msgstr "Izenburu pertsonalizatua" + +#: src/gtkui/columns.cc:48 src/moonstone/playlist_model.cc:42 +#: src/qtui/playlist_model.cc:36 src/streamtuner/icecast-model.cc:129 +#: src/streamtuner/shoutcast-model.cc:134 +msgid "Bitrate" +msgstr "Bit-tasa:" + +#: src/gtkui/columns.cc:49 src/moonstone/playlist_model.cc:43 +#: src/qtui/playlist_model.cc:36 +msgid "Comment" +msgstr "Iruzkina" + +#: src/gtkui/columns.cc:315 +msgid "Available columns" +msgstr "Zutabe erabilgarriak" + +#: src/gtkui/columns.cc:341 +msgid "Displayed columns" +msgstr "Erakutsitako zutabeak" + +#: src/gtkui/layout.cc:73 src/search-tool-qt/search-tool-qt.cc:58 +#: src/search-tool/search-tool.cc:48 +msgid "Search Tool" +msgstr "Tresna bilatu" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Left" +msgstr "" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Right" +msgstr "" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Top" +msgstr "" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Bottom" +msgstr "" + +#: src/gtkui/layout.cc:169 +msgid "Undock" +msgstr "" + +#: src/gtkui/layout.cc:169 src/ladspa/plugin.cc:534 +msgid "Disable" +msgstr "Desgaitu" + +#: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 +#: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 +msgid "_Open Files ..." +msgstr "Ireki fitxategiak" + +#: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 +msgid "Open _URL ..." +msgstr "Ireki BKU ..." + +#: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 +msgid "_Add Files ..." +msgstr "_Gehitu fitxategiak..." + +#: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 +msgid "Add U_RL ..." +msgstr "Gehitu U_RL" + +#: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 +msgid "Search _Library" +msgstr "Bilatu _Liburutegian" + +#: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 +msgid "A_bout ..." +msgstr "" + +#: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 +msgid "_Settings ..." +msgstr "_Ezarpenak ..." + +#: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 +#: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 +msgid "_Quit" +msgstr "I_rten" + +#: src/gtkui/menus.cc:92 src/gtkui/menus.cc:224 +#: src/moonstone/playlist_tabs.cc:306 src/qtui/menus.cc:135 +#: src/qtui/playlist_tabs.cc:328 src/search-tool-qt/search-tool-qt.cc:499 +#: src/search-tool/search-tool.cc:343 src/statusicon-qt/statusicon.cc:106 +#: src/statusicon/statusicon.cc:276 +msgid "_Play" +msgstr "Erreproduzitu" + +#: src/gtkui/menus.cc:93 src/qtui/menus.cc:137 +#: src/statusicon-qt/statusicon.cc:107 src/statusicon/statusicon.cc:277 +msgid "Paus_e" +msgstr "Pausatu" + +#: src/gtkui/menus.cc:94 src/qtui/menus.cc:139 +#: src/statusicon-qt/statusicon.cc:108 src/statusicon/statusicon.cc:278 +msgid "_Stop" +msgstr "Gelditu" + +#: src/gtkui/menus.cc:95 src/qtui/menus.cc:141 +#: src/statusicon-qt/statusicon.cc:109 src/statusicon/statusicon.cc:279 +msgid "Pre_vious" +msgstr "Aurrekoa" + +#: src/gtkui/menus.cc:96 src/qtui/menus.cc:143 +#: src/statusicon-qt/statusicon.cc:110 src/statusicon/statusicon.cc:280 +msgid "_Next" +msgstr "_Hurrengoa" + +#: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 +#: src/skins-qt/menus.cc:105 +msgid "Previous Album" +msgstr "Aurreko diskoa" + +#: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 +#: src/skins-qt/menus.cc:106 +msgid "Next Album" +msgstr "Hurrengo diskoa" + +#: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 +msgid "_Repeat" +msgstr "_Errepikatu" + +#: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 +msgid "S_huffle" +msgstr "" + +#: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 +msgid "Shuffle by Albu_m" +msgstr "" + +#: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 +msgid "N_o Playlist Advance" +msgstr "" + +#: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 +msgid "Stop A_fter This Song" +msgstr "" + +#: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 +#: src/qtui/menus.cc:292 +msgid "Song _Info ..." +msgstr "Kantuaren _Informazioa ..." + +#: src/gtkui/menus.cc:107 +msgid "Jump to _Time ..." +msgstr "Joan _Denborara ..." + +#: src/gtkui/menus.cc:108 +msgid "_Jump to Song ..." +msgstr "_Joan abestira ..." + +#: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 +msgid "Set Repeat Point _A" +msgstr "" + +#: src/gtkui/menus.cc:111 src/qtui/menus.cc:167 +msgid "Set Repeat Point _B" +msgstr "" + +#: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 +msgid "_Clear Repeat Points" +msgstr "" + +#: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 +#: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 +msgid "By _Title" +msgstr "_Izenburuaren arabera" + +#: src/gtkui/menus.cc:117 src/qtui/menus.cc:174 +msgid "By _File Name" +msgstr "_Fitxategi Izenaren arabera" + +#: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 +msgid "By File _Path" +msgstr "Fitxategi _Bidearen arabera" + +#: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 +#: src/qtui/menus.cc:196 +msgid "By Track _Number" +msgstr "Pista zenbakiaren arabera" + +#: src/gtkui/menus.cc:124 src/gtkui/menus.cc:141 src/qtui/menus.cc:181 +#: src/qtui/menus.cc:198 +msgid "By _Artist" +msgstr "_Artistaren arabera" + +#: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 +#: src/qtui/menus.cc:199 +msgid "By Al_bum" +msgstr "" + +#: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 +#: src/qtui/menus.cc:200 +msgid "By Albu_m Artist" +msgstr "" + +#: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 +#: src/qtui/menus.cc:201 +msgid "By Release _Date" +msgstr "" + +#: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 +#: src/qtui/menus.cc:202 +msgid "By _Genre" +msgstr "_Generoaren arabera" + +#: src/gtkui/menus.cc:129 src/gtkui/menus.cc:146 src/qtui/menus.cc:186 +#: src/qtui/menus.cc:203 +msgid "By _Length" +msgstr "_Luzeraren arabera" + +#: src/gtkui/menus.cc:130 src/gtkui/menus.cc:147 src/qtui/menus.cc:187 +#: src/qtui/menus.cc:204 +msgid "By _File Path" +msgstr "_Fitxategi Bidearen arabera" + +#: src/gtkui/menus.cc:131 src/gtkui/menus.cc:148 src/qtui/menus.cc:188 +#: src/qtui/menus.cc:205 +msgid "By _Custom Title" +msgstr "Izenburu _Pertsonalizatuen arabera" + +#: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 +#: src/qtui/menus.cc:206 +msgid "By C_omment" +msgstr "" + +#: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 +#: src/qtui/menus.cc:208 +msgid "R_everse Order" +msgstr "" + +#: src/gtkui/menus.cc:135 src/gtkui/menus.cc:152 src/qtui/menus.cc:193 +#: src/qtui/menus.cc:210 +msgid "_Random Order" +msgstr "_Ausazko ordena" + +#: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 +msgid "_Play/Resume" +msgstr "" + +#: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 +msgid "_Refresh" +msgstr "_Freskatu" + +#: src/gtkui/menus.cc:159 src/qtui/menus.cc:220 +msgid "_Sort" +msgstr "_Ordenatu" + +#: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 +msgid "Sort Se_lected" +msgstr "Ordenatu _Hautatutakoak" + +#: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 +msgid "Remove _Duplicates" +msgstr "Kendu _Bikoiztuak" + +#: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 +msgid "Remove _Unavailable Files" +msgstr "Ezabatu erabilgarri ez dauden fitxategiak" + +#: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 +#: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 +msgid "_New" +msgstr "_Berri" + +#: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 +msgid "Ren_ame ..." +msgstr "Izena _aldatu ..." + +#: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 +#: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 +#: src/qtui/playlist_tabs.cc:333 +msgid "Remo_ve" +msgstr "Ezabatu" + +#: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 +msgid "_Import ..." +msgstr "_Inportatu ..." + +#: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 +msgid "_Export ..." +msgstr "_Esportatu ..." + +#: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 +msgid "Playlist _Manager ..." +msgstr "Erreprodukzio-zerrenda _Mudeatzailea ..." + +#: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 +msgid "_Queue Manager ..." +msgstr "_Ilara Kudeatzailea..." + +#: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 +msgid "Volume _Up" +msgstr "Bolumena _Igo" + +#: src/gtkui/menus.cc:177 src/qtui/menus.cc:243 +msgid "Volume _Down" +msgstr "Bolumena _Jaitsi" + +#: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 +msgid "_Equalizer ..." +msgstr "" + +#: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 +msgid "E_ffects ..." +msgstr "E_fektuak" + +#: src/gtkui/menus.cc:182 +msgid "_Record Stream" +msgstr "" + +#: src/gtkui/menus.cc:183 +msgid "Audio _Settings ..." +msgstr "Audio-ezarpenak ..." + +#: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 +msgid "Show _Menu Bar" +msgstr "" + +#: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 +msgid "Show I_nfo Bar" +msgstr "" + +#: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 +msgid "Show Info Bar _Album Art" +msgstr "" + +#: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 +msgid "Show Info Bar Vis_ualization" +msgstr "" + +#: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 +msgid "Show _Status Bar" +msgstr "" + +#: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 +msgid "Show _Remaining Time" +msgstr "Gelditzen den denbora erakutsi" + +#: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 +#: src/skins-qt/menus.cc:152 +msgid "_Visualizations ..." +msgstr "" + +#: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 +msgid "_File" +msgstr "_Fitxategi" + +#: src/gtkui/menus.cc:200 src/qtui/menus.cc:279 +msgid "_Playback" +msgstr "" + +#: src/gtkui/menus.cc:201 src/qtui/menus.cc:280 +msgid "P_laylist" +msgstr "" + +#: src/gtkui/menus.cc:202 src/gtkui/menus.cc:220 src/qtui/menus.cc:281 +#: src/qtui/menus.cc:310 +msgid "_Services" +msgstr "_Zerbitzuak" + +#: src/gtkui/menus.cc:203 src/qtui/menus.cc:282 +msgid "_Output" +msgstr "_Irteera" + +#: src/gtkui/menus.cc:204 src/qtui/menus.cc:283 +msgid "_View" +msgstr "_Ikuspegi" + +#: src/gtkui/menus.cc:209 src/qtui/menus.cc:294 +msgid "_Queue/Unqueue" +msgstr "_Ilararatu/Ilaratik kendu" + +#: src/gtkui/menus.cc:211 src/qtui/menus.cc:297 +msgid "_Open Containing Folder" +msgstr "Barruko Karpeta _Ireki" + +#: src/gtkui/menus.cc:212 src/qtui/menus.cc:299 +msgid "_Refresh Selected" +msgstr "Hautatutakoa _Egunertau" + +#: src/gtkui/menus.cc:214 src/qtui/menus.cc:302 +msgid "Cu_t" +msgstr "Moztu" + +#: src/gtkui/menus.cc:215 src/qtui/menus.cc:303 +msgid "_Copy" +msgstr "_Kopiatu" + +#: src/gtkui/menus.cc:216 src/qtui/menus.cc:304 +msgid "_Paste" +msgstr "_Itsatsi" + +#: src/gtkui/menus.cc:217 src/qtui/menus.cc:305 +msgid "Paste at _End" +msgstr "_Bukaeran itsatsi" + +#: src/gtkui/menus.cc:218 src/qtui/menus.cc:307 +msgid "Select _All" +msgstr "_Dena hautatu" + +#: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 +#: src/qtui/playlist_tabs.cc:331 +msgid "_Rename ..." +msgstr "_Izena aldatu ..." + +#: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 +msgid "Playlist Tabs" +msgstr "" + +#: src/gtkui/settings.cc:36 +msgid "Always show tabs" +msgstr "" + +#: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 +msgid "Show entry counts" +msgstr "Erakutsi sarrera-zenbaketak" + +#: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 +msgid "Show close buttons" +msgstr "Ixteko botoiak erakutsi." + +#: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 +msgid "Playlist Columns" +msgstr "Zutabeen erreprodukzio-zerrenda" + +#: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 +msgid "Show column headers" +msgstr "Erakutsi zutabe-goiburuak" + +#: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 +msgid "Scroll on song change" +msgstr "" + +#: src/gtkui/ui_gtk.cc:74 +msgid "GTK Interface" +msgstr "GTK Interfazea" + +#: src/gtkui/ui_gtk.cc:210 src/skins/main.cc:227 src/skins-qt/main.cc:225 +#, c-format +msgid "%s - Audacious" +msgstr "%s - Audacious" + +#: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 +#: src/qtui/main_window.cc:384 +msgid "Buffering ..." +msgstr "Bufferreratzen ..." + +#: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 +msgid "Audacious" +msgstr "Audacious" + +#: src/gtkui/ui_gtk.cc:428 src/gtkui/ui_gtk.cc:459 src/gtkui/ui_gtk.cc:817 +#: src/hotkey/gui.cc:71 src/moonstone/main_window.cc:67 +#: src/moonstone/main_window.cc:145 src/moonstone/main_window.cc:146 +#: src/notify/osd.cc:85 src/qthotkey/gui.cc:64 src/qtui/main_window.cc:154 +#: src/qtui/main_window.cc:346 src/qtui/main_window.cc:347 +#: src/skins/menus.cc:109 src/skins-qt/menus.cc:100 +msgid "Play" +msgstr "Erreproduzitu" + +#: src/gtkui/ui_gtk.cc:428 src/moonstone/main_window.cc:151 +#: src/moonstone/main_window.cc:152 src/notify/osd.cc:82 +#: src/qtui/main_window.cc:352 src/qtui/main_window.cc:353 +#: src/skins/menus.cc:110 src/skins-qt/menus.cc:101 +msgid "Pause" +msgstr "Pausatu" + +#: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 +#: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 +msgid "Search Library" +msgstr "Bilatu Liburutegian" + +#: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 +#: src/qtui/main_window.cc:147 +msgid "Open Files" +msgstr "Ireki fitxategiak" + +#: src/gtkui/ui_gtk.cc:811 src/moonstone/main_window.cc:62 +#: src/qtui/main_window.cc:149 +msgid "Add Files" +msgstr "Gehitu fitxategiak" + +#: src/gtkui/ui_gtk.cc:816 src/moonstone/main_window.cc:65 +#: src/qtui/main_window.cc:152 src/skins/menus.cc:112 src/skins-qt/menus.cc:103 +msgid "Previous" +msgstr "Aurrekoa" + +#: src/gtkui/ui_gtk.cc:818 src/hotkey/gui.cc:73 src/moonstone/main_window.cc:69 +#: src/qthotkey/gui.cc:66 src/qtui/main_window.cc:156 src/skins/menus.cc:111 +#: src/skins-qt/menus.cc:102 +msgid "Stop" +msgstr "Gelditu" + +#: src/gtkui/ui_gtk.cc:819 src/moonstone/main_window.cc:76 src/notify/osd.cc:89 +#: src/qtui/main_window.cc:163 src/skins/menus.cc:113 src/skins-qt/menus.cc:104 +msgid "Next" +msgstr "Hurrengoa" + +#: src/gtkui/ui_gtk.cc:821 src/moonstone/main_window.cc:79 +#: src/qtui/main_window.cc:166 src/qtui/menus.cc:252 src/skins/menus.cc:79 +#: src/skins-qt/menus.cc:69 +msgid "Record Stream" +msgstr "" + +#: src/gtkui/ui_gtk.cc:854 src/moonstone/main_window.cc:86 +#: src/qtui/main_window.cc:173 src/skins/menus.cc:103 src/skins-qt/menus.cc:94 +msgid "Repeat" +msgstr "Errepikatu" + +#: src/gtkui/ui_gtk.cc:857 src/moonstone/main_window.cc:89 +#: src/qtui/main_window.cc:176 src/skins/menus.cc:104 src/skins-qt/menus.cc:95 +msgid "Shuffle" +msgstr "Ausazkoa" + +#: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 +msgid "Menu" +msgstr "Menua" + +#: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 +msgid "mono" +msgstr "monoa" + +#: src/gtkui/ui_statusbar.cc:65 src/qtui/status_bar.cc:157 +msgid "stereo" +msgstr "estereoa" + +#: src/gtkui/ui_statusbar.cc:67 src/qtui/status_bar.cc:160 +#, c-format +msgid "%d channel" +msgid_plural "%d channels" +msgstr[0] "kanal %d" +msgstr[1] "%d kanal" + +#: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 +#, c-format +msgid "%d kHz" +msgstr "%d kHz" + +#: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 +#, c-format +msgid "%d kbit/s" +msgstr "" + +#: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 +msgid "Single mode." +msgstr "Single modua." + +#: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 +msgid "Playlist mode." +msgstr "Erreprodukzio-zerrenda modua." + +#: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 +msgid "Stopping after song." +msgstr "Kantuaren ostean geldituko da." + +#: src/hotkey/gui.cc:70 src/qthotkey/gui.cc:63 +msgid "Previous track" +msgstr "Aurreko pista" + +#: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 +msgid "Pause/Resume" +msgstr "Pausatu/jarraitu" + +#: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 +msgid "Next track" +msgstr "Hurrengo pista" + +#: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 +msgid "Step forward" +msgstr "Pauso bat aurrera egin" + +#: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 +msgid "Step backward" +msgstr "Pauso bat atzera egin" + +#: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 +msgid "Mute" +msgstr "Mututu" + +#: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 +msgid "Volume up" +msgstr "Bolumena igo" + +#: src/hotkey/gui.cc:79 src/qthotkey/gui.cc:72 +msgid "Volume down" +msgstr "Bolumena jaitsi" + +#: src/hotkey/gui.cc:80 src/qthotkey/gui.cc:73 +msgid "Jump to file" +msgstr "Joan fitxategira" + +#: src/hotkey/gui.cc:81 src/qthotkey/gui.cc:74 +msgid "Toggle player window(s)" +msgstr "Txandakatu erreproduzitzailearen leihoa(k)" + +#: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 +msgid "Show On-Screen-Display" +msgstr "Erakutsi pantaila gaineko mezuak (OSD)" + +#: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 +msgid "Toggle repeat" +msgstr "Aldatu errepikapena" + +#: src/hotkey/gui.cc:84 src/qthotkey/gui.cc:77 +msgid "Toggle shuffle" +msgstr "Aldatu Ausazkoa" + +#: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 +msgid "Toggle stop after current" +msgstr "" + +#: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 +msgid "Raise player window(s)" +msgstr "" + +#: src/hotkey/gui.cc:97 src/qthotkey/gui.cc:97 +msgid "(none)" +msgstr "(bat ere ez)" + +#: src/hotkey/gui.cc:260 +msgid "" +"It is not recommended to bind the primary mouse buttons without modifiers.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: src/hotkey/gui.cc:263 +msgid "Binding mouse buttons" +msgstr "Saguaren botoiak lotzea" + +#: src/hotkey/gui.cc:426 +msgid "" +"Press a key combination inside a text field.\n" +"You can also bind mouse buttons." +msgstr "" +"Sakatu tekla konbinazioa testu-eremuaren barruan.\n" +"Saguaren botoiak ere lotu ditzakezu." + +#: src/hotkey/gui.cc:432 src/qthotkey/gui.cc:167 +msgid "Hotkeys:" +msgstr "Laster-teklak" + +#: src/hotkey/gui.cc:448 src/qthotkey/gui.cc:169 +msgid "Action:" +msgstr "Ekintza:" + +#: src/hotkey/gui.cc:454 src/qthotkey/gui.cc:170 +msgid "Key Binding:" +msgstr "Tekla-konbinazioa:" + +#: src/hotkey/gui.cc:501 src/qthotkey/gui.cc:172 +msgid "_Add" +msgstr "_Gehitu" + +#: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 +msgid "Global Hotkeys" +msgstr "" + +#: src/hotkey/plugin.cc:76 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" + +#: src/jack/jack-ng.cc:54 +msgid "JACK Output" +msgstr "JACK Irteera" + +#: src/jack/jack-ng.cc:126 +msgid "Client name:" +msgstr "Bezeroaren izena:" + +#: src/jack/jack-ng.cc:128 +msgid "Automatically connect to output ports" +msgstr "Automatikoki konektatu irteerako ataketara" + +#: src/jack/jack-ng.cc:130 +msgid "Filter ports (regex, use any port if blank):" +msgstr "" + +#: src/jack/jack-ng.cc:136 +msgid "Connect to physical ports only" +msgstr "Ataka fisikoetara bakarrik konektatu" + +#: src/jack/jack-ng.cc:139 +msgid "Upmix to" +msgstr "" + +#: src/jack/jack-ng.cc:141 +msgid "ports if input has fewer channels" +msgstr "" + +#: src/jack/jack-ng.cc:143 +msgid "Ignore insufficient number of ports" +msgstr "" + +#: src/jack/jack-ng.cc:181 +msgid "No JACK output ports were found. Please check settings." +msgstr "" + +#: src/jack/jack-ng.cc:195 +#, c-format +msgid "Only %d JACK output ports were found but %d are required." +msgstr "" +"Bakarrik %d JACK irteera-portu aurkitu dira baina %d beharrezkoak dira." + +#: src/jack/jack-ng.cc:210 +#, c-format +msgid "Failed to connect to JACK port %s." +msgstr "%s JACK portura ezin izan da konektatu." + +#: src/jack/jack-ng.cc:230 +msgid "" +"JACK supports only floating-point audio. You must change the output bit " +"depth to floating-point in Audacious settings." +msgstr "" + +#: src/jack/jack-ng.cc:245 +msgid "Failed to connect to the JACK server; is it running?" +msgstr "JACK zerbitzarira ezin izan da konektatu; piztuta dago?" + +#: src/jack/jack-ng.cc:321 +#, c-format +msgid "" +"The JACK server requires a sample rate of %d Hz, but Audacious is playing at " +"%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." +msgstr "" + +#: src/ladspa/plugin.cc:415 +#, c-format +msgid "%s Settings" +msgstr "%s Ezarpenak" + +#: src/ladspa/plugin.cc:481 +msgid "Module paths:" +msgstr "Modulo bideak:" + +#: src/ladspa/plugin.cc:486 +msgid "" +"Separate multiple paths with a colon.\n" +"These paths are searched in addition to LADSPA_PATH.\n" +"After adding new paths, press Enter to scan for new plugins." +msgstr "" +"Banatu bide ezberdinak bi puntu bidez ( : ).\n" +"LADSPA_PATH bidean eta bide hauetan bilatuko da.\n" +"Bide berria gehitu eta gero, sakatu Enter Plugin berriak bilatzeko." + +#: src/ladspa/plugin.cc:502 +msgid "Available plugins:" +msgstr "Plugin eskuragarriak:" + +#: src/ladspa/plugin.cc:515 src/modplug/plugin_main.cc:91 +#: src/modplug/plugin_main.cc:94 src/modplug/plugin_main.cc:97 +#: src/modplug/plugin_main.cc:100 +msgid "Enable" +msgstr "Gaitu" + +#: src/ladspa/plugin.cc:521 +msgid "Enabled plugins:" +msgstr "Gaitutako pluginak:" + +#: src/ladspa/plugin.cc:537 +msgid "Settings" +msgstr "Ezarpenak" + +#: src/ladspa/plugin.cc:554 +msgid "" +"LADSPA Host for Audacious\n" +"Copyright 2011 John Lindgren" +msgstr "" + +#: src/ladspa/plugin.h:78 +msgid "LADSPA Host" +msgstr "LADSPA Ostalaria" + +#: src/lirc/lirc.cc:55 +msgid "LIRC Plugin" +msgstr "LIRC plugina" + +#: src/lirc/lirc.cc:379 +msgid "" +"A simple plugin to control Audacious using the LIRC remote control daemon\n" +"\n" +"Adapted for Audacious by:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Based on the XMMS LIRC plugin by:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"For more information about LIRC, see http://lirc.org." +msgstr "" + +#: src/lirc/lirc.cc:390 +msgid "Connection" +msgstr " Konekxioa " + +#: src/lirc/lirc.cc:391 +msgid "Reconnect to LIRC server" +msgstr "Berkonektatu LIRC zerbitzarira" + +#: src/lirc/lirc.cc:393 +msgid "Wait before reconnecting:" +msgstr "Itxaron berkonektatu aurretik:" + +#: src/lyricwiki-qt/lyricwiki.cc:89 +msgid "Lyrics" +msgstr "Hitzak" + +#: src/lyricwiki-qt/lyricwiki.cc:116 +msgid "Nowhere" +msgstr "Inon ez" + +#: src/lyricwiki-qt/lyricwiki.cc:117 +msgid "lyrics.ovh" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:121 +msgid "Artist is truncated at the start, Title -- at the end" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:122 +msgid "Chars to truncate on:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:126 +msgid "Chars are ORed in RegExp, surrounded by whitespace" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:127 +msgid "Chars to split on:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:128 +msgid "Further truncate those on chars" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:134 +msgid "General" +msgstr " Orokorra " + +#: src/lyricwiki-qt/lyricwiki.cc:135 +msgid "Split title into artist and title on chars" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:138 +msgid "Internet Sources" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:139 +msgid "Fetch lyrics from:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:142 +msgid "Store fetched lyrics in local cache" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:144 +msgid "Local Storage" +msgstr " Biltegi lokala " + +#: src/lyricwiki-qt/lyricwiki.cc:145 +msgid "Load lyric files (.lrc) from local storage" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:356 +#, c-format +msgid "Unable to fetch %s" +msgstr "%s ekartzea ezinezkoa da." + +#: src/lyricwiki-qt/lyricwiki.cc:365 +#, c-format +msgid "Unable to parse %s" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:403 +msgid "Looking for lyrics ..." +msgstr "Hitzak bilatzen..." + +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 +msgid "Error" +msgstr "Errorea" + +#: src/lyricwiki-qt/lyricwiki.cc:433 +msgid "Lyrics could not be found." +msgstr "Ezin izan da letrarik aurkitu." + +#: src/lyricwiki-qt/lyricwiki.cc:501 +msgid "Missing title and/or artist." +msgstr "Titulua edo/eta artista falta da." + +#: src/lyricwiki-qt/lyricwiki.cc:553 +msgid "Save Locally" +msgstr "Lokalean gorde" + +#: src/lyricwiki-qt/lyricwiki.cc:561 +msgid "Refresh" +msgstr "Freskatu" + +#: src/m3u/m3u.cc:32 +msgid "M3U Playlists" +msgstr "M3U Erreprodukzio-zerrendak" + +#: src/metronom/metronom.cc:44 +msgid "Tact Generator" +msgstr "" + +#: src/metronom/metronom.cc:145 +#, c-format +msgid "Tact generator: %d bpm" +msgstr "Ukimen sortzailea: %d bpm" + +#: src/metronom/metronom.cc:147 +#, c-format +msgid "Tact generator: %d bpm %d/%d" +msgstr "Ukimen sortzailea: %d bpm %d/%d" + +#: src/metronom/metronom.cc:235 +msgid "" +"A Tact Generator by Martin Strauss \n" +"\n" +"To use it, add a URL: tact://beats*num/den\n" +"e.g. tact://77 to play 77 beats per minute\n" +"or tact://60*3/4 to play 60 bpm in 3/4 tacts" +msgstr "" + +#: src/mixer/mixer.cc:43 +msgid "Channel Mixer" +msgstr "Kanal-nahasgailua" + +#: src/mixer/mixer.cc:255 +msgid "" +"Channel Mixer Plugin for Audacious\n" +"Copyright 2011-2012 John Lindgren and Michał Lipski" +msgstr "" + +#: src/mixer/mixer.cc:259 +msgid "Channel Mixer" +msgstr "Kanal-nahasgailua" + +#: src/mixer/mixer.cc:260 +msgid "Output channels:" +msgstr "Irteera kanalak:" + +#: src/mms/mms.cc:35 +msgid "MMS Plugin" +msgstr "MMS Plugina" + +#: src/mms/mms.cc:82 +msgid "Error connecting to MMS server" +msgstr "Errorea MMS zerbitzarira konektatzean" + +#: src/modplug/modplugbmp.h:57 +msgid "ModPlug (Module Player)" +msgstr "" + +#: src/modplug/plugin_main.cc:55 +msgid "Channels" +msgstr "Kanalak" + +#: src/modplug/plugin_main.cc:59 +msgid "Nearest (fastest)" +msgstr "Hurbilena (azkarrena)" + +#: src/modplug/plugin_main.cc:60 +msgid "Linear (fast)" +msgstr "" + +#: src/modplug/plugin_main.cc:61 +msgid "Spline (good)" +msgstr "" + +#: src/modplug/plugin_main.cc:62 +msgid "Polyphase (best)" +msgstr "" + +#: src/modplug/plugin_main.cc:63 +msgid "Sample rate" +msgstr "Lagin-tasa" + +#: src/modplug/plugin_main.cc:64 +msgid "22 kHz" +msgstr "22 kHz" + +#: src/modplug/plugin_main.cc:65 +msgid "44 kHz" +msgstr "44 kHz" + +#: src/modplug/plugin_main.cc:66 +msgid "48 kHz" +msgstr "48 kHz" + +#: src/modplug/plugin_main.cc:67 +msgid "96 kHz" +msgstr "96 kHz" + +#: src/modplug/plugin_main.cc:71 src/modplug/plugin_main.cc:76 +#: src/modplug/plugin_main.cc:81 +msgid "Level:" +msgstr "Maila:" + +#: src/modplug/plugin_main.cc:77 +msgid "Cutoff:" +msgstr "" + +#: src/modplug/plugin_main.cc:90 +msgid "Reverb" +msgstr "" + +#: src/modplug/plugin_main.cc:93 +msgid "Bass Boost" +msgstr "" + +#: src/modplug/plugin_main.cc:96 +msgid "Surround" +msgstr "" + +#: src/modplug/plugin_main.cc:99 +msgid "Preamp" +msgstr "" + +#: src/modplug/plugin_main.cc:106 +msgid "Oversample" +msgstr "" + +#: src/modplug/plugin_main.cc:107 +msgid "Noise reduction" +msgstr "Zarata kentzea" + +#: src/modplug/plugin_main.cc:108 +msgid "Play Amiga MODs" +msgstr "" + +#: src/modplug/plugin_main.cc:109 +msgid "Repeat" +msgstr "Errepikatu" + +#: src/modplug/plugin_main.cc:110 +msgid "Repeat count:" +msgstr "" + +#: src/modplug/plugin_main.cc:111 +msgid "To repeat forever, set the repeat count to -1." +msgstr "" + +#: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 +msgid "These settings will take effect when Audacious is restarted." +msgstr "" + +#: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 +#: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 +#: src/skins/menus.cc:107 src/skins-qt/menus.cc:98 +msgid "Stop After This Song" +msgstr "Gelditu abesti hau eta gero" + +#: src/moonstone/moonstone.cc:39 +msgid "Moonstone" +msgstr "" + +#: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 +msgid "Reset to Defaults" +msgstr "Balio lehenetsietara berrasieratu" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 +msgid "Now Playing" +msgstr "Orain erreproduzitzen" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_model.cc:33 +msgid "Entry Number" +msgstr "Sarrera zenbakia" + +#: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 +msgid "Album Artist" +msgstr "Albumeko artista" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "Queue Position" +msgstr "Ilara Posizioa" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "File Path" +msgstr "Fitxategi bidea" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:35 +msgid "File Name" +msgstr "Fitxategi izena" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:36 +msgid "Custom Title" +msgstr "Izenburu Pertsonalizatua" + +#: src/moonstone/playlist_selection.cc:64 +#: src/playlist-manager/playlist-manager.cc:200 +#: src/playlist-manager-qt/playlist-manager-qt.cc:188 +msgid "Entries" +msgstr "Sarrerak" + +#: src/mpg123/mpg123.cc:54 +msgid "MPG123 Plugin" +msgstr "MPG123 plugina" + +#: src/mpg123/mpg123.cc:81 +msgid "Advanced" +msgstr " Aurreratu " + +#: src/mpg123/mpg123.cc:82 +msgid "Use accurate length calculation (slow)" +msgstr "" + +#: src/mpg123/mpg123.cc:256 +msgid "Surround" +msgstr "Surround" + +#: src/mpris2/plugin.cc:38 +msgid "MPRIS 2 Server" +msgstr "" + +#: src/neon/neon.cc:97 +msgid "Neon HTTP/HTTPS Plugin" +msgstr "Neon HTTP/HTTPS plugina" + +#: src/neon/neon.cc:526 +msgid "Error parsing redirect" +msgstr "" + +#: src/neon/neon.cc:540 +msgid "Unknown HTTP error" +msgstr "HTTP errore ezezaguna" + +#: src/neon/neon.cc:590 +msgid "Error parsing URL" +msgstr "" + +#: src/neon/neon.cc:660 +msgid "Too many redirects" +msgstr "" + +#: src/notify/event.cc:97 +msgid "Stopped" +msgstr "Geldituta" + +#: src/notify/event.cc:97 +msgid "Audacious is not playing." +msgstr "Audacious ez da jotzen ari." + +#: src/notify/notify.cc:39 +msgid "Desktop Notifications" +msgstr "" + +#: src/notify/notify.cc:57 +msgid "" +"Desktop Notifications Plugin for Audacious\n" +"Copyright (C) 2010 Maximilian Bogner\n" +"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" +"\n" +"This plugin 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 3 of the License, or (at your option) " +"any later version.\n" +"\n" +"This plugin 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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see ." +msgstr "" + +#: src/notify/notify.cc:104 +msgid "Show playback controls" +msgstr "" + +#: src/notify/notify.cc:106 +msgid "Always show notification" +msgstr "Jakinarazpenak beti erakutsi" + +#: src/notify/notify.cc:108 +msgid "Include album name in notification" +msgstr "" + +#: src/notify/notify.cc:110 +msgid "Custom notification duration:" +msgstr "" + +#: src/notify/osd.cc:74 +msgid "Show" +msgstr "Erakutsi" + +#: src/openmpt/mpt.cc:50 +msgid "OpenMPT (Module Player)" +msgstr "" + +#: src/openmpt/mpt.cc:133 +msgid "" +"Module player based on libopenmpt\n" +"\n" +"Written by: Chris Spiegel " +msgstr "" + +#: src/openmpt/mpt.cc:152 +msgid "Stereo separation:" +msgstr "" + +#: src/openmpt/mpt.cc:154 +msgid "%" +msgstr "%" + +#: src/openmpt/mpt.cc:158 +msgid "Interpolation:" +msgstr "Interpolazioa:" + +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 +msgid "Linear" +msgstr "" + +#: src/openmpt/mptwrap.h:52 +msgid "Cubic" +msgstr "Kubikoa" + +#: src/openmpt/mptwrap.h:53 +msgid "Windowed sinc" +msgstr "" + +#: src/oss4/oss.h:75 +msgid "OSS4 Output" +msgstr "OSS4 Irteera" + +#: src/oss4/oss.h:77 +msgid "OSS3 Output" +msgstr "OSS3 Irteera" + +#: src/oss4/plugin.cc:35 +msgid "Default device" +msgstr "Lehenetsitako gailua" + +#: src/oss4/plugin.cc:78 +msgid "Audio device:" +msgstr "Soinu-gailua:" + +#: src/oss4/plugin.cc:81 +msgid "Use alternate device:" +msgstr "Erabili bestelako gailua:" + +#: src/oss4/plugin.cc:85 +msgid "Save volume between sessions." +msgstr "Sesioen artean bolumena gorde." + +#: src/oss4/plugin.cc:87 +msgid "Enable format conversions made by the OSS software." +msgstr "" + +#: src/oss4/plugin.cc:89 +msgid "Enable exclusive mode to prevent virtual mixing." +msgstr "" + +#: src/oss4/plugin.cc:101 +msgid "" +"OSS4 Output Plugin for Audacious\n" +"Copyright 2010-2012 Michał Lipski\n" +"\n" +"I would like to thank people on #audacious, especially Tony Vroon and John " +"Lindgren and of course the authors of the previous OSS plugin." +msgstr "" + +#: src/playlist-manager/playlist-manager.cc:37 +#: src/playlist-manager-qt/playlist-manager-qt.cc:40 +msgid "Playlist Manager" +msgstr "Erreprodukzio-zerrenda kudeatzailea" + +#: src/playlist-manager/playlist-manager.cc:220 +#: src/playlist-manager-qt/playlist-manager-qt.cc:354 +msgid "_Remove" +msgstr "_Ezabatu" + +#: src/playlist-manager/playlist-manager.cc:221 +#: src/playlist-manager-qt/playlist-manager-qt.cc:349 +msgid "Ren_ame" +msgstr "Izena _aldatu" + +#: src/pls/pls.cc:35 +msgid "PLS Playlists" +msgstr "" + +#: src/psf/plugin.cc:53 +msgid "OpenPSF PSF1/PSF2 Decoder" +msgstr "OpenPSF PSF1/PSF2 Deskodetzailea" + +#: src/psf/plugin.cc:270 +msgid "OpenPSF Configuration" +msgstr "" + +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 +msgid "Ignore length from file" +msgstr "" + +#: src/pulse/pulse_audio.cc:42 +msgid "PulseAudio Output" +msgstr "" + +#: src/pulse/pulse_audio.cc:72 +msgid "Context name:" +msgstr "Testuinguruaren izena:" + +#: src/pulse/pulse_audio.cc:74 +msgid "Stream name:" +msgstr "" + +#: src/pulse/pulse_audio.cc:575 +msgid "" +"Audacious PulseAudio Output Plugin\n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/qtaudio/qtaudio.cc:44 +msgid "QtMultimedia Output" +msgstr "" + +#: src/qtaudio/qtaudio.cc:72 +msgid "" +"QtMultimedia Audio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/qtglspectrum/gl-spectrum.cc:41 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" + +#: src/qthotkey/gui.cc:165 +msgid "Press a key combination inside a text field." +msgstr "Sakatu tekla konbinazioa testu-eremuaren barruan" + +#: src/qthotkey/plugin.cc:103 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" + +#: src/qtui/menus.cc:109 +msgid "_Open Folder ..." +msgstr "Karpeta _Ireki ..." + +#: src/qtui/menus.cc:115 +msgid "_Add Folder ..." +msgstr "Karpeta _Gehitu ..." + +#: src/qtui/menus.cc:128 +msgid "_Log Inspector ..." +msgstr "" + +#: src/qtui/menus.cc:218 +msgid "_Find ..." +msgstr "_Bilatu ..." + +#: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 +msgid "Audio Settings ..." +msgstr "" + +#: src/qtui/playlist_model.cc:186 +msgid "Q#" +msgstr "" + +#: src/qtui/playlist_model.cc:188 +msgid "T#" +msgstr "" + +#: src/qtui/qtui.cc:40 +msgid "Qt Interface" +msgstr "" + +#: src/qtui/search_bar.cc:46 +msgid "Search playlist" +msgstr "Erreprodukzio-zerrenda bilatu" + +#: src/qtui/settings.cc:58 +msgid "Always" +msgstr "Beti" + +#: src/qtui/settings.cc:59 +msgid "Auto-hide" +msgstr "" + +#: src/qtui/settings.cc:60 +msgid "Never" +msgstr "Inoiz ez" + +#: src/qtui/settings.cc:64 +msgid "Show playlist tabs:" +msgstr "" + +#: src/qtui/settings.cc:78 +msgid "Use bold font for column headers" +msgstr "" + +#: src/resample/resample.cc:43 +msgid "Sample Rate Converter" +msgstr "" + +#: src/resample/resample.cc:183 +msgid "" +"Sample Rate Converter Plugin for Audacious\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" + +#: src/resample/resample.cc:187 +msgid "Skip/repeat samples" +msgstr "" + +#: src/resample/resample.cc:188 +msgid "Linear interpolation" +msgstr "Interpolazio lineal" + +#: src/resample/resample.cc:189 +msgid "Fast sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:190 +msgid "Medium sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:191 +msgid "Best sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:195 +msgid "Conversion" +msgstr "" + +#: src/resample/resample.cc:196 +msgid "Method:" +msgstr "Metodoa:" + +#: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 +msgid "Rate:" +msgstr "Tasa:" + +#: src/resample/resample.cc:202 +msgid "Rate Mappings" +msgstr "" + +#: src/resample/resample.cc:203 +msgid "Use rate mappings" +msgstr "" + +#: src/resample/resample.cc:205 +msgid "8 kHz:" +msgstr "8 kHz:" + +#: src/resample/resample.cc:209 +msgid "16 kHz:" +msgstr "16 kHz:" + +#: src/resample/resample.cc:213 +msgid "22.05 kHz:" +msgstr "22.05 kHz:" + +#: src/resample/resample.cc:217 +msgid "32.0 kHz:" +msgstr "32.0 kHz:" + +#: src/resample/resample.cc:221 +msgid "44.1 kHz:" +msgstr "44.1 kHz:" + +#: src/resample/resample.cc:225 +msgid "48 kHz:" +msgstr "48 kHz:" + +#: src/resample/resample.cc:229 +msgid "88.2 kHz:" +msgstr "88.2 kHz:" + +#: src/resample/resample.cc:233 +msgid "96 kHz:" +msgstr "96 kHz:" + +#: src/resample/resample.cc:237 +msgid "176.4 kHz:" +msgstr "176.4 kHz:" + +#: src/resample/resample.cc:241 +msgid "192 kHz:" +msgstr "192 kHz:" + +#: src/scrobbler2/config_window.cc:19 +msgid "Checking Last.fm access ..." +msgstr "" + +#: src/scrobbler2/config_window.cc:27 +msgid "" +"Your scrobbles are being saved on your computer temporarily. They will be " +"submitted as soon as Audacious is allowed access." +msgstr "" + +#: src/scrobbler2/config_window.cc:33 +#, c-format +msgid "Permission granted. Scrobbling for user %s." +msgstr "" + +#: src/scrobbler2/config_window.cc:37 +msgid "" +"Permission denied. Open the following URL in a browser, allow Audacious " +"access to your account, and then click 'Check Permission' again:" +msgstr "" + +#: src/scrobbler2/config_window.cc:47 +msgid "There was a problem contacting Last.fm." +msgstr "" + +#: src/scrobbler2/config_window.cc:86 +msgid "Check Permission" +msgstr "Baimenak kontrolatu" + +#: src/scrobbler2/config_window.cc:87 +msgid "Revoke Permission" +msgstr "" + +#: src/scrobbler2/config_window.cc:91 +msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." +msgstr "" + +#: src/scrobbler2/scrobbler.cc:29 +msgid "Scrobbler 2.0" +msgstr "" + +#: src/scrobbler2/scrobbler.cc:226 +msgid "" +"The Scrobbler plugin could not be started.\n" +"There might be a problem with your installation." +msgstr "" + +#: src/scrobbler2/scrobbler.cc:291 +msgid "" +"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" +"\n" +"Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Thanks to John Lindgren for giving me a hand at the beginning of this " +"project.\n" +"\n" +msgstr "" + +#: src/scrobbler2/scrobbler_communication.cc:663 +msgid "" +"Audacious is now using an improved version of the Last.fm Scrobbler.\n" +"Please check the Preferences for the Scrobbler plugin." +msgstr "" + +#: src/sdlout/sdlout.cc:43 +msgid "SDL Output" +msgstr "" + +#: src/sdlout/sdlout.cc:72 +msgid "" +"SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/search-tool/library.cc:35 src/search-tool/library.cc:46 +#: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 +msgid "Library" +msgstr "Liburutegia" + +#: src/search-tool-qt/search-model.cc:49 src/search-tool/search-tool.cc:291 +#, c-format +msgid "%d song" +msgid_plural "%d songs" +msgstr[0] "%d kantua" +msgstr[1] "%d kantuak" + +#: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 +msgid "of this genre" +msgstr "genero honetan" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "on" +msgstr "" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "by" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 +msgid "Number of results to show:" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 +msgid "Rescan library at startup" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:170 +msgid "Monitor library for changes" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 +msgid "" +"To import your music library into Audacious, choose a folder and then click " +"the \"refresh\" icon." +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 +msgid "Please wait ..." +msgstr "Mesedez itxaron ..." + +#: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 +msgid "Choose Folder" +msgstr "Aukeratu karpeta" + +#: src/search-tool-qt/search-tool-qt.cc:201 +msgid "Search library" +msgstr "Bilatu Liburutegian" + +#: src/search-tool-qt/search-tool-qt.cc:327 src/search-tool/search-tool.cc:155 +#, c-format +msgid "%d of %d result shown" +msgid_plural "%d of %d results shown" +msgstr[0] "" +msgstr[1] "" + +#: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 +#, c-format +msgid "%d result" +msgid_plural "%d results" +msgstr[0] "%d emaitza" +msgstr[1] "%d emaitzak" + +#: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 +msgid "_Create Playlist" +msgstr "_Erreprodukzio-zerrenda sortu" + +#: src/search-tool-qt/search-tool-qt.cc:503 src/search-tool/search-tool.cc:347 +msgid "_Add to Playlist" +msgstr "_Erreprodukzio-zerrendara gehitu" + +#: src/sid/xmms-sid.cc:43 +msgid "SID Player" +msgstr "" + +#: src/sid/xs_config.cc:62 +msgid "Channels:" +msgstr "Kanalak:" + +#: src/sid/xs_config.cc:68 +msgid "Emulation" +msgstr "" + +#: src/sid/xs_config.cc:69 +msgid "Emulate MOS 8580 (default: MOS 6581)" +msgstr "" + +#: src/sid/xs_config.cc:71 +msgid "Do not automatically select chip model" +msgstr "" + +#: src/sid/xs_config.cc:73 +msgid "Emulate filter" +msgstr "" + +#: src/sid/xs_config.cc:75 +msgid "Clock speed:" +msgstr "" + +#: src/sid/xs_config.cc:78 +msgid "Do not automatically select clock speed" +msgstr "" + +#: src/sid/xs_config.cc:80 +msgid "Playback time" +msgstr "" + +#: src/sid/xs_config.cc:81 +msgid "Set maximum playback time:" +msgstr "" + +#: src/sid/xs_config.cc:87 +msgid "Use only when song length is unknown" +msgstr "" + +#: src/sid/xs_config.cc:90 +msgid "Set minimum playback time:" +msgstr "" + +#: src/sid/xs_config.cc:96 +msgid "Subtunes" +msgstr "" + +#: src/sid/xs_config.cc:97 +msgid "Enable subtunes" +msgstr "" + +#: src/sid/xs_config.cc:99 +msgid "Ignore subtunes shorter than:" +msgstr "" + +#: src/sid/xs_config.cc:105 +msgid "Note" +msgstr "" + +#: src/silence-removal/silence-removal.cc:39 +msgid "Silence Removal" +msgstr "Isiluneak kendu" + +#: src/silence-removal/silence-removal.cc:58 +msgid "" +"Silence Removal Plugin for Audacious\n" +"Copyright 2014 John Lindgren" +msgstr "" + +#: src/silence-removal/silence-removal.cc:67 +msgid "Silence Removal" +msgstr "Isiluneak kendu" + +#: src/silence-removal/silence-removal.cc:68 +msgid "Threshold:" +msgstr "Atalasea:" + +#: src/silence-removal/silence-removal.cc:70 +msgid "dB" +msgstr "dB" + +#: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 +msgid "Repeat points cleared." +msgstr "" + +#: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 +msgid "Repeat point A set." +msgstr "" + +#: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 +msgid "Repeat point B set." +msgstr "" + +#: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 +msgid "Preamp" +msgstr "Aurre-anp" + +#: src/skins/equalizer.cc:228 src/skins-qt/equalizer.cc:225 +msgid "31 Hz" +msgstr "31 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "63 Hz" +msgstr "63 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "125 Hz" +msgstr "125 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "250 Hz" +msgstr "250 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "500 Hz" +msgstr "500 Hz" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "1 kHz" +msgstr "1 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "2 kHz" +msgstr "2 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "4 kHz" +msgstr "4 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "8 kHz" +msgstr "8 kHz" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "16 kHz" +msgstr "16 kHz" + +#: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 +msgid "Audacious Equalizer" +msgstr "Audacious-en ekualizadorea" + +#: src/skins/main.cc:452 src/skins-qt/main.cc:436 +msgid "Recording on" +msgstr "Grabazioa piztua" + +#: src/skins/main.cc:454 src/skins-qt/main.cc:438 +msgid "Recording off" +msgstr "Grabazioa itzalia" + +#: src/skins/main.cc:749 src/skins-qt/main.cc:690 +#, c-format +msgid "Seek to %d:%-2.2d / %d:%-2.2d" +msgstr "Bilatu %d:%-2.2d / %d:%-2.2d" + +#: src/skins/main.cc:766 src/skins-qt/main.cc:707 +#, c-format +msgid "Volume: %d%%" +msgstr "Bolumena: %% %d" + +#: src/skins/main.cc:779 src/skins-qt/main.cc:720 +#, c-format +msgid "Balance: %d%% left" +msgstr "Balantzea: %% %d ezkerrean" + +#: src/skins/main.cc:781 src/skins-qt/main.cc:722 +msgid "Balance: center" +msgstr "Balantzea: erdian" + +#: src/skins/main.cc:783 src/skins-qt/main.cc:724 +#, c-format +msgid "Balance: %d%% right" +msgstr "Balantzea: %% %d eskuinean" + +#: src/skins/main.cc:875 src/skins-qt/main.cc:816 +msgid "Options Menu" +msgstr "Aukeren menua" + +#: src/skins/main.cc:879 src/skins-qt/main.cc:820 +msgid "Disable 'Always On Top'" +msgstr "Desgaitu 'Beti gainean'" + +#: src/skins/main.cc:881 src/skins-qt/main.cc:822 +msgid "Enable 'Always On Top'" +msgstr "Gaitu 'Beti gainean'" + +#: src/skins/main.cc:884 src/skins-qt/main.cc:825 +msgid "File Info Box" +msgstr "Fitxategi-informazioaren koadroa" + +#: src/skins/main.cc:887 src/skins/menus.cc:149 src/skins-qt/main.cc:828 +#: src/skins-qt/menus.cc:142 +msgid "Double Size" +msgstr "Tamaina bikoitza" + +#: src/skins/main.cc:890 src/skins-qt/main.cc:831 +msgid "Visualizations" +msgstr "" + +#: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 +msgid "Volume Up" +msgstr "Igo bolumena" + +#: src/skins/menus.cc:75 src/skins-qt/menus.cc:65 +msgid "Volume Down" +msgstr "Jeitsi bolumena" + +#: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 +msgid "Effects ..." +msgstr "Efektuak ..." + +#: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 +msgid "Open Files ..." +msgstr "Ireki fitxategiak ..." + +#: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 +msgid "Open URL ..." +msgstr "Ireki URLa ..." + +#: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 +msgid "Playback" +msgstr "Erreprodukzioa" + +#: src/skins/menus.cc:89 src/skins-qt/menus.cc:80 +msgid "Playlist" +msgstr "Erreprodukzio-zerrenda" + +#: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 +msgid "Output" +msgstr "Irteera" + +#: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 +msgid "View" +msgstr "Ikusi" + +#: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 +#: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 +msgid "Services" +msgstr "Zerbitzuak" + +#: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 +msgid "About ..." +msgstr "" + +#: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 +msgid "Settings ..." +msgstr "Ezarpenak ..." + +#: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 +msgid "Quit" +msgstr "Irten" + +#: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 +#: src/skins-qt/menus.cc:229 +msgid "Song Info ..." +msgstr "Kantuari buruzko informazioa ..." + +#: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 +msgid "Shuffle by Album" +msgstr "" + +#: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 +msgid "No Playlist Advance" +msgstr "Erreprodukzio-zerrenda aurreraturik ez" + +#: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 +msgid "Set A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:118 src/skins-qt/menus.cc:109 +msgid "Clear A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 +msgid "Jump to Song ..." +msgstr "Joan abestira ..." + +#: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 +msgid "Jump to Time ..." +msgstr "Joan denborara ..." + +#: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 +msgid "Play/Resume" +msgstr "" + +#: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 +msgid "New Playlist" +msgstr "Erreprodukzio-zerrenda berria" + +#: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 +msgid "Rename Playlist ..." +msgstr "Erreprodukzio-zerrendaren izena aldatu ..." + +#: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 +msgid "Remove Playlist" +msgstr "Erreprodukzio-zerrenda ezabatu" + +#: src/skins/menus.cc:131 src/skins-qt/menus.cc:124 +msgid "Previous Playlist" +msgstr "Aurreko erreprodukzio-zerrenda" + +#: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 +msgid "Next Playlist" +msgstr "Hurrengo erreprodukzio-zerrenda" + +#: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 +msgid "Import Playlist ..." +msgstr "Inportatu erreprodukzio-zerrenda ..." + +#: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 +msgid "Export Playlist ..." +msgstr "Esportatu erreprodukzio-zerrenda ..." + +#: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 +msgid "Playlist Manager ..." +msgstr "Erreprodukzio-zerrenda kudeatzailea ..." + +#: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 +msgid "Queue Manager ..." +msgstr "Ilara kudeatzailea ..." + +#: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 +msgid "Refresh Playlist" +msgstr "Freskatu erreprodukzio-zerrenda" + +#: src/skins/menus.cc:144 src/skins-qt/menus.cc:137 +msgid "Show Playlist Editor" +msgstr "Erakutsi erreprodukzio-zerrendaren editorea" + +#: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 +msgid "Show Equalizer" +msgstr "Erakutsi ekualizadorea" + +#: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 +msgid "Show Remaining Time" +msgstr "Gelditzen den denbora erakutsi" + +#: src/skins/menus.cc:150 src/skins-qt/menus.cc:143 +msgid "Always on Top" +msgstr "Beti gainean" + +#: src/skins/menus.cc:151 src/skins-qt/menus.cc:145 +msgid "On All Workspaces" +msgstr "" + +#: src/skins/menus.cc:153 src/skins-qt/menus.cc:148 +msgid "Roll Up Player" +msgstr "" + +#: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 +msgid "Roll Up Playlist Editor" +msgstr "" + +#: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 +msgid "Roll Up Equalizer" +msgstr "" + +#: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 +msgid "Add URL ..." +msgstr "Gehitu URLa ..." + +#: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 +msgid "Add Files ..." +msgstr "Gehitu fitxategiak..." + +#: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 +msgid "By Title" +msgstr "Tituluaren arabera" + +#: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 +msgid "By File Name" +msgstr "Fitxategi izenaren arabera" + +#: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 +msgid "By File Path" +msgstr "Fitxategi bidearen arabera" + +#: src/skins/menus.cc:176 src/skins-qt/menus.cc:172 +msgid "Remove All" +msgstr "Kendu guztiak" + +#: src/skins/menus.cc:177 src/skins-qt/menus.cc:173 +msgid "Clear Queue" +msgstr "Garbitu ilara" + +#: src/skins/menus.cc:179 src/skins-qt/menus.cc:175 +msgid "Remove Unavailable Files" +msgstr "Kendu fitxategi erabilkaitzak" + +#: src/skins/menus.cc:180 src/skins-qt/menus.cc:176 +msgid "Remove Duplicates" +msgstr "Kendu bikoiztuak" + +#: src/skins/menus.cc:182 src/skins-qt/menus.cc:178 +msgid "Remove Unselected" +msgstr "Kendu desautatutakoak" + +#: src/skins/menus.cc:183 src/skins-qt/menus.cc:179 +msgid "Remove Selected" +msgstr "Kendu hautatutakoak" + +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 +msgid "Search and Select" +msgstr "Bilatu eta hautatu" + +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 +msgid "Invert Selection" +msgstr "Alderantzikatu hautapena" + +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 +msgid "Select None" +msgstr "Ez hautatu ezer" + +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 +msgid "Select All" +msgstr "Hautatu denak" + +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 +msgid "By Track Number" +msgstr "Pista zenbakiaren arabera" + +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 +msgid "By Artist" +msgstr "Artistaren arabera" + +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 +msgid "By Album" +msgstr "Diskoaren arabera" + +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 +msgid "By Album Artist" +msgstr "Albumeko artistaren arabera" + +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 +msgid "By Release Date" +msgstr "Argitaratza dataren arabera" + +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 +msgid "By Genre" +msgstr "Generoaren arabera" + +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 +msgid "By Length" +msgstr "Luzeraren arabera" + +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 +msgid "By Custom Title" +msgstr "Izenburu pertsonalizatuen arabera" + +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 +msgid "By Comment" +msgstr "Iruzkinen arabera" + +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 +msgid "Randomize List" +msgstr "Nahastu ausaz zerrenda" + +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 +msgid "Reverse List" +msgstr "Alderantzikatu zerrenda" + +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 +msgid "Sort Selected" +msgstr "Ordenatu hautatutakoak" + +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 +msgid "Sort List" +msgstr "Ordenatu zerrenda" + +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 +msgid "Open Containing Folder" +msgstr "Barruko Karpeta Ireki" + +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 +msgid "Cut" +msgstr "Moztu" + +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 +msgid "Copy" +msgstr "Kopiatu" + +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 +msgid "Paste" +msgstr "Itsatsi" + +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 +msgid "Paste at End" +msgstr "Itsasi bukaeran" + +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 +msgid "Queue/Unqueue" +msgstr "" + +#: src/skins/playlist-widget.cc:55 src/skins-qt/playlist-widget.cc:56 +#, c-format +msgid "%s (%d of %d)" +msgstr "%s(%dtik%d)" + +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 +msgid "Audacious Playlist Editor" +msgstr "Audacious erreprodukzio-zerrendaren editorea" + +#: src/skins/plugin.cc:49 src/skins-qt/plugin.cc:64 +msgid "Winamp Classic Interface" +msgstr "Winamp`Interfaze Klasikoa" + +#: src/skins-qt/menus.cc:75 +msgid "Open Folder ..." +msgstr "Ireki Fitxategia ..." + +#: src/skins-qt/menus.cc:159 +msgid "Add Folder ..." +msgstr "Gehitu Fitxtegia ..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Bilatu sarrerak erreprodukzio-zerrenda aktiboan" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Hautatu sarrerak erreprodukzio-zerrendan eremu bat edo gehiago betez. " +"Eremuek adierazpen erregularrak erabiltzen dituzte, maiuskulak eta " +"minuskulak ez bereiztuz. Ez badakizu adierazpen erregularrak nola ibiltzen " +"diren, sartu bilatzea nahi duzunaren zati literal bat." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Izenburua: " + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Diskoa: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Fitxategi izena" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Garbitu aurreko hautapena bilatu aurretik" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Txandakatu automatikoki ilara bat datozen sarrerentzako" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Sortu erreprodukzio-zerrenda berria bat datozen sarrerekin" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Bilatu" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 +msgid "Player:" +msgstr "Erreproduzitzailea:" + +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 +msgid "Select main player window font:" +msgstr "Hautatu erreproduzitzaile nagusiaren leihoko letra-tipoa:" + +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 +msgid "Playlist:" +msgstr "Erreprodukzio-zerrenda:" + +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 +msgid "Select playlist font:" +msgstr "Hautatu erreprodukzio-zerrendaren letra-tipoa:" + +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 +msgid "Skin" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 +msgid "Fonts" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 +msgid "Use bitmap fonts (supports ASCII only)" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 +msgid "Scroll song title" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 +msgid "Scroll song title in both directions" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 +msgid "Analyzer" +msgstr "Analizatzailea" + +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 +msgid "Scope" +msgstr "Esparrua" + +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 +msgid "Voiceprint / VU meter" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 +msgid "Off" +msgstr "Itzalita" + +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 +#: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 +msgid "Normal" +msgstr "Normala" + +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 +#: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 +msgid "Fire" +msgstr "Sua" + +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 +msgid "Vertical lines" +msgstr "Lerro bertikalak" + +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 +msgid "Lines" +msgstr "Marrak" + +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 +msgid "Bars" +msgstr "Barrak" + +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 +msgid "Slowest" +msgstr "Motelena" + +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 +msgid "Slow" +msgstr "Motela" + +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 +#: src/soxr/sox-resampler.cc:180 +msgid "Medium" +msgstr "Tartekoa" + +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 +msgid "Fast" +msgstr "Azkarra" + +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 +msgid "Fastest" +msgstr "Azkarrena" + +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 +msgid "Dots" +msgstr "Puntuak" + +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 +msgid "Line" +msgstr "Lerroak" + +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 +msgid "Solid" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 +msgid "Ice" +msgstr "Izotza" + +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 +msgid "Smooth" +msgstr "Leuna" + +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 +msgid "Coloring:" +msgstr "Margotu:" + +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 +msgid "Style:" +msgstr "Estiloa:" + +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 +msgid "Falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 +msgid "Peak falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 +msgid "Scope Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 +msgid "Voiceprint Coloring:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 +msgid "VU Meter Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 +msgid "Type" +msgstr "Mota" + +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 +msgid "Visualization type:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 +msgid "Analyzer" +msgstr "Analizatzailea" + +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 +msgid "Show peaks" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 +msgid "Visualization" +msgstr "Bisualizazioa" + +#: src/skins-qt/skinselector.cc:98 src/skins/skinselector.cc:111 +msgid "Archived Winamp 2.x skin" +msgstr "Konprimitutako Winamp 2.x azala" + +#: src/skins-qt/skinselector.cc:102 src/skins/skinselector.cc:115 +msgid "Unarchived Winamp 2.x skin" +msgstr "Deskonprimitutako Winamp 2.x azala" + +#: src/sndfile/plugin.cc:38 +msgid "Sndfile Plugin" +msgstr "Sndfile plugina" + +#: src/sndfile/plugin.cc:372 +msgid "" +"Based on the xmms_sndfile plugin:\n" +"Copyright (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Adapted for Audacious by Tony Vroon \n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/sndio/sndio.cc:43 +msgid "Sndio Output" +msgstr "" + +#: src/sndio/sndio.cc:98 +msgid "Device (blank for default):" +msgstr "" + +#: src/sndio/sndio.cc:100 +msgid "Save and restore volume:" +msgstr "" + +#: src/sndio/sndio.cc:181 +#, c-format +msgid "Sndio error: Unsupported audio format (%d)" +msgstr "" + +#: src/sndio/sndio.cc:192 +msgid "Sndio error: sio_open() failed" +msgstr "" + +#: src/sndio/sndio.cc:221 +msgid "Sndio error: sio_setpar() failed" +msgstr "" + +#: src/sndio/sndio.cc:233 +msgid "Sndio error: sio_start() failed" +msgstr "" + +#: src/songchange/song_change.cc:30 +msgid "Song Change" +msgstr "" + +#: src/songchange/song_change.cc:245 +msgid "Commands" +msgstr "" + +#: src/songchange/song_change.cc:247 +msgid "Command to run when starting a new song:" +msgstr "" + +#: src/songchange/song_change.cc:250 +msgid "Command to run at the end of a song:" +msgstr "" + +#: src/songchange/song_change.cc:253 +msgid "Command to run at the end of the playlist:" +msgstr "" + +#: src/songchange/song_change.cc:256 +msgid "Command to run when song title changes (for network streams):" +msgstr "" + +#: src/songchange/song_change.cc:259 +msgid "" +"You can use the following format codes, which will be replaced before " +"running the command (not all are useful for the end-of-playlist command):" +msgstr "" + +#: src/songchange/song_change.cc:262 +msgid "" +"%a: Artist\n" +"%b: Album\n" +"%c: Number of channels\n" +"%f: File name (full path)\n" +"%F: Frequency (Hertz)\n" +"%l: Length (milliseconds)\n" +"%n or %s: Formatted title (see playlist settings)\n" +"%p: Currently playing (1 or 0)\n" +"%r: Rate (bits per second)\n" +"%t: Playlist position\n" +"%T: Title (unformatted)" +msgstr "" + +#: src/songchange/song_change.cc:273 +msgid "" +"Parameters passed to the shell should be enclosed in quotation marks. " +"Unquoted parameters may lead to unexpected results." +msgstr "" + +#: src/song-info-qt/song-info.cc:30 +msgid "Song Info" +msgstr "Kantu informazioa" + +#: src/soxr/sox-resampler.cc:44 +msgid "SoX Resampler" +msgstr "" + +#: src/soxr/sox-resampler.cc:172 +msgid "" +"SoX Resampler Plugin for Audacious\n" +"Copyright 2013 Michał Lipski\n" +"\n" +"Based on Sample Rate Converter Plugin:\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" + +#: src/soxr/sox-resampler.cc:178 +msgid "Quick" +msgstr "" + +#: src/soxr/sox-resampler.cc:179 +msgid "Low" +msgstr "" + +#: src/soxr/sox-resampler.cc:181 +msgid "High" +msgstr "" + +#: src/soxr/sox-resampler.cc:182 +msgid "Very High" +msgstr "" + +#: src/soxr/sox-resampler.cc:183 +msgid "Ultra High" +msgstr "" + +#: src/soxr/sox-resampler.cc:187 +msgid "Minimum" +msgstr "" + +#: src/soxr/sox-resampler.cc:188 +msgid "Intermediate" +msgstr "" + +#: src/soxr/sox-resampler.cc:193 +msgid "Quality:" +msgstr "Kalitatea:" + +#: src/soxr/sox-resampler.cc:196 +msgid "Phase:" +msgstr "" + +#: src/soxr/sox-resampler.cc:200 +msgid "Allow aliasing" +msgstr "" + +#: src/soxr/sox-resampler.cc:202 +msgid "Use steep filter" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:54 +msgid "Speed and Pitch" +msgstr "Abiadura eta Tonoa" + +#: src/speedpitch/speed-pitch.cc:247 +msgid "Speed" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:248 +msgid "Decouple from pitch" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 +msgid "Multiplier:" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:254 +msgid "Pitch" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 +msgid "Status Icon" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:65 +msgid "" +"Status Icon Plugin (partial port for Qt interface)\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"Copyright 2015 Eugene Paskevich \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 +msgid "Mouse Scroll Action" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 +msgid "Change volume" +msgstr "Aldatu bolumena" + +#: src/statusicon-qt/statusicon.cc:90 src/statusicon/statusicon.cc:384 +msgid "Change playing song" +msgstr "Aldatu erreprodukzioaren abestia" + +#: src/statusicon-qt/statusicon.cc:93 src/statusicon/statusicon.cc:387 +msgid "Other Settings" +msgstr "Bestelako Ezarpenak" + +#: src/statusicon-qt/statusicon.cc:94 src/statusicon/statusicon.cc:388 +msgid "Disable the popup window" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:96 src/statusicon/statusicon.cc:390 +msgid "Close to the system tray" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 +msgid "Advance in playlist when scrolling upward" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 +msgid "Se_ttings ..." +msgstr "" + +#: src/statusicon/statusicon.cc:373 +msgid "" +"Status Icon Plugin\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/stereo_plugin/stereo.cc:19 +msgid "Extra Stereo" +msgstr "" + +#: src/stereo_plugin/stereo.cc:36 +msgid "" +"Extra Stereo Plugin\n" +"\n" +"By Johan Levin, 1999" +msgstr "" + +#: src/stereo_plugin/stereo.cc:44 +msgid "Extra Stereo" +msgstr "" + +#: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 +msgid "Type" +msgstr "Mota" + +#: src/streamtuner/icecast-model.cc:132 +msgid "Current Song" +msgstr "Uneko kanta" + +#: src/streamtuner/icecast-model.cc:164 +msgid "Other" +msgstr "" + +#: src/streamtuner/ihr-model.cc:63 +msgid "Market" +msgstr "" + +#: src/streamtuner/ihr-model.cc:156 +msgid "Call Letters" +msgstr "" + +#: src/streamtuner/ihr-model.cc:162 +msgid "Description" +msgstr "Deskribapen" + +#: src/streamtuner/shoutcast-model.cc:128 +msgid "Listeners" +msgstr "Entzuleak" + +#: src/streamtuner/shoutcast-model.cc:188 +msgid "Top 500 Stations" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:189 +msgid "Alternative" +msgstr "Alternatiboa" + +#: src/streamtuner/shoutcast-model.cc:190 +msgid "Blues" +msgstr "Blues-a" + +#: src/streamtuner/shoutcast-model.cc:191 +msgid "Classical" +msgstr "Klasikoa" + +#: src/streamtuner/shoutcast-model.cc:192 +msgid "Country" +msgstr "Country" + +#: src/streamtuner/shoutcast-model.cc:193 +msgid "Decades" +msgstr "Kamarkadak" + +#: src/streamtuner/shoutcast-model.cc:194 +msgid "Easy Listening" +msgstr "Entzuteko erraza" + +#: src/streamtuner/shoutcast-model.cc:195 +msgid "Electronic" +msgstr "Elektroniko" + +#: src/streamtuner/shoutcast-model.cc:196 +msgid "Folk" +msgstr "Folka" + +#: src/streamtuner/shoutcast-model.cc:197 +msgid "Inspirational" +msgstr "Inspirazio lanak" + +#: src/streamtuner/shoutcast-model.cc:198 +msgid "International" +msgstr "Nazioarteko" + +#: src/streamtuner/shoutcast-model.cc:199 +msgid "Jazz" +msgstr "Jazza" + +#: src/streamtuner/shoutcast-model.cc:200 +msgid "Latin" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:201 +msgid "Metal" +msgstr "Metala" + +#: src/streamtuner/shoutcast-model.cc:203 +msgid "New Age" +msgstr "New Age" + +#: src/streamtuner/shoutcast-model.cc:204 +msgid "Pop" +msgstr "Pop-a" + +#: src/streamtuner/shoutcast-model.cc:205 +msgid "Public Radio" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:206 +msgid "R&B and Urban" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:207 +msgid "Rap" +msgstr "Rap-a" + +#: src/streamtuner/shoutcast-model.cc:208 +msgid "Reggae" +msgstr "Reggae" + +#: src/streamtuner/shoutcast-model.cc:209 +msgid "Rock" +msgstr "Rocka" + +#: src/streamtuner/shoutcast-model.cc:210 +msgid "Seasonal and Holiday" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:211 +msgid "Soundtracks" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:212 +msgid "Talk" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:213 +msgid "Themes" +msgstr "Motiboak" + +#: src/streamtuner/streamtuner.cc:59 +msgid "Shoutcast" +msgstr "" + +#: src/streamtuner/streamtuner.cc:60 +msgid "Icecast" +msgstr "" + +#: src/streamtuner/streamtuner.cc:71 +msgid "Stream Tuner" +msgstr "" + +#: src/tonegen/tonegen.cc:45 +msgid "Tone Generator" +msgstr "Tonu-sortzailea" + +#: src/tonegen/tonegen.cc:92 +#, c-format +msgid "%s %.1f Hz" +msgstr "%s %.1f Hz" + +#: src/tonegen/tonegen.cc:92 +msgid "Tone Generator: " +msgstr "Tonu-sortzailea: " + +#: src/tonegen/tonegen.cc:161 +msgid "" +"Sine tone generator by Håvard Kvålen \n" +"Modified by Daniel J. Peng \n" +"\n" +"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" +"e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" +msgstr "" + +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Mezuak ezkutatu dira.)" + +#: src/ui-common/dialogs-qt.cc:52 +msgid "Working ..." +msgstr "Lanean ..." + +#: src/ui-common/dialogs-qt.cc:72 +msgid "Information" +msgstr "Informazio" + +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + +#: src/voice_removal/voice_removal.cc:28 +msgid "Voice Removal" +msgstr "Ahotsa ezabatzea" + +#: src/vorbis/vorbis.cc:429 +msgid "" +"Audacious Ogg Vorbis Decoder\n" +"\n" +"Based on the Xiph.org Foundation's Ogg Vorbis Plugin:\n" +"http://www.xiph.org/\n" +"\n" +"Original code by:\n" +"Tony Arcieri \n" +"\n" +"Contributions from:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " +msgstr "" + +#: src/vorbis/vorbis.h:18 +msgid "Ogg Vorbis Decoder" +msgstr "Ogg Vorbis Deskodetzailea" + +#: src/vtx/info.cc:24 +#, c-format +msgid "Details about %s" +msgstr "" + +#: src/vtx/info.cc:26 +msgid "" +"Title: %t\n" +"Author: %a\n" +"From: %f\n" +"Tracker: %T\n" +"Comment: %C\n" +"Chip type: %c\n" +"Stereo: %s\n" +"Loop: %l\n" +"Chip freq: %F\n" +"Player Freq: %P\n" +"Year: %y" +msgstr "" + +#: src/vtx/vtx.cc:38 +msgid "VTX Decoder" +msgstr "VTX Deskodetzailea" + +#: src/vtx/vtx.cc:178 +msgid "" +"Vortex file format player by Sashnov Alexander \n" +"Based on in_vtx.dll by Roman Sherbakov \n" +"Audacious plugin by Pavel Vymetalek " +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:31 +msgid "" +"VU Meter Plugin for Audacious\n" +"Copyright 2017-2019 Marc Sánchez Fauste" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:35 +msgid "VU Meter Settings" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:37 +msgid "Peak hold time:" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:42 +msgid "Fall-off time:" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:44 +msgid "dB/second" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:46 +msgid "Display legend" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.h:37 +msgid "VU Meter" +msgstr "" + +#: src/waveout/waveout.cc:43 +msgid "Win32 waveOut" +msgstr "" + +#: src/waveout/waveout.cc:69 +msgid "" +"Win32 waveOut Plugin for Audacious\n" +"Copyright 2016 John Lindgren" +msgstr "" + +#: src/wavpack/wavpack.cc:25 +msgid "WavPack Decoder" +msgstr "WavPack Deskodetzailea" + +#: src/wavpack/wavpack.cc:217 +msgid "lossy (hybrid)" +msgstr "" + +#: src/wavpack/wavpack.cc:219 +msgid "lossy" +msgstr "" + +#: src/wavpack/wavpack.cc:259 +msgid "" +"Copyright 2006 William Pitcock \n" +"\n" +"Some of the plugin code was by Miles Egan." +msgstr "" + +#: src/xsf/plugin.cc:74 +msgid "2SF Decoder" +msgstr "2SF Deskodetzailea" + +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 +msgid "XSF Configuration" +msgstr "" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + +#: src/xspf/xspf.cc:95 +msgid "XML Shareable Playlists (XSPF)" +msgstr "" diff -Nru audacious-plugins-4.1/po/fa_IR.po audacious-plugins-4.2/po/fa_IR.po --- audacious-plugins-4.1/po/fa_IR.po 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/po/fa_IR.po 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,4602 @@ +# Persian (Iran) translation for Audacious Plugins +# Copyright (C) Audacious translators +# This file is distributed under the same license as the Audacious Plugins package. +# +# Translators: +# Alireza kia , 2021 +# Saeed Derakhshan , 2013 +# vandu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Audacious Plugins\n" +"Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Alireza kia , 2021\n" +"Language-Team: Persian (Iran) (http://www.transifex.com/audacious/audacious/" +"language/fa_IR/)\n" +"Language: fa_IR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/aac/aac.cc:19 +msgid "AAC (Raw) Decoder" +msgstr "" + +#: src/adplug/adplug-xmms.cc:70 +msgid "AdPlug (AdLib Player)" +msgstr "" + +#: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 +msgid "sequenced" +msgstr "" + +#: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 +msgid "Output" +msgstr "خروجی" + +#: src/adplug/adplug-xmms.cc:350 +msgid "OPL Emulator:" +msgstr "" + +#: src/adplug/adplug-xmms.cc:353 +msgid "Sample rate" +msgstr "نرخ نمونه برداری" + +#: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 +#: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 +#: src/modplug/plugin_main.cc:77 src/resample/resample.cc:201 +#: src/resample/resample.cc:207 src/resample/resample.cc:211 +#: src/resample/resample.cc:215 src/resample/resample.cc:219 +#: src/resample/resample.cc:223 src/resample/resample.cc:227 +#: src/resample/resample.cc:231 src/resample/resample.cc:235 +#: src/resample/resample.cc:239 src/resample/resample.cc:243 +#: src/sid/xs_config.cc:67 src/soxr/sox-resampler.cc:205 +msgid "Hz" +msgstr "هرتز" + +#: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 +#: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 +msgid "Miscellaneous" +msgstr "" + +#: src/adplug/adplug-xmms.cc:356 +msgid "Repeat song in endless loop" +msgstr "" + +#: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 +msgid "Alarm" +msgstr "هشدار" + +#: src/alarm/alarm.cc:782 +msgid "Set Alarm ..." +msgstr "تنظیم هشدار..." + +#: src/alarm/alarm.cc:810 +msgid "" +"A plugin that can be used to start playing at a certain time.\n" +"\n" +"Originally written by Adam Feakin and Daniel Stodden." +msgstr "" + +#: src/alarm/interface.cc:28 +msgid "" +"Time\n" +" Alarm at:\n" +" The time for the alarm to come on.\n" +"\n" +" Quiet after:\n" +" Stop alarm after this amount of time.\n" +" (if the wakeup dialog is not closed)\n" +"\n" +"\n" +"Days\n" +" Day:\n" +" Select the days for the alarm to activate.\n" +"\n" +" Time:\n" +" Choose the time for the alarm on each day,\n" +" or select the toggle button to use the default\n" +" time.\n" +"\n" +"\n" +"Volume\n" +" Fading:\n" +" Fade the volume up to the chosen volume\n" +" for this amount of time.\n" +"\n" +" Start at:\n" +" Start fading from this volume.\n" +"\n" +" Final:\n" +" The volume to stop fading at. If the fading\n" +" time is 0 then set volume to this and start\n" +" playing.\n" +"\n" +"\n" +"Options:\n" +" Additional Command:\n" +" Run this command at the alarm time.\n" +"\n" +" Playlist:\n" +" Load this playlist. If no playlist\n" +" is given, the current one will be used.\n" +" The URL of an mp3/ogg stream\n" +" can also be entered here.\n" +"\n" +" Reminder:\n" +" Display a reminder when the alarm goes off.\n" +" Type the reminder in the input field and enable\n" +" the checkbox if you want it to be shown." +msgstr "" + +#: src/alarm/interface.cc:78 +msgid "This is your wakeup call." +msgstr "این تماس بیدارباش شما است." + +#: src/alarm/interface.cc:96 +msgid "Your reminder for today is..." +msgstr "یادآور امروز شما هست..." + +#: src/alarm/interface.cc:98 src/alarm/interface.cc:372 +msgid "Reminder" +msgstr "یادآوری" + +#: src/alarm/interface.cc:122 +msgid "Monday" +msgstr "دوشنبه" + +#: src/alarm/interface.cc:122 +msgid "Tuesday" +msgstr "سه‌شنبه" + +#: src/alarm/interface.cc:122 +msgid "Wednesday" +msgstr "چهارشنبه" + +#: src/alarm/interface.cc:123 +msgid "Thursday" +msgstr "پنج‌شنبه" + +#: src/alarm/interface.cc:123 +msgid "Friday" +msgstr "جمعه" + +#: src/alarm/interface.cc:123 +msgid "Saturday" +msgstr "شنبه" + +#: src/alarm/interface.cc:123 +msgid "Sunday" +msgstr "یکشنبه" + +#: src/alarm/interface.cc:160 src/alarm/interface.cc:219 +#: src/alarm/interface.cc:234 +msgid "Time" +msgstr "زمان" + +#: src/alarm/interface.cc:167 +msgid "Alarm at (default):" +msgstr "هشدار در (پیش‌فرض):" + +#: src/alarm/interface.cc:189 +msgid "h" +msgstr "س" + +#: src/alarm/interface.cc:192 +msgid "Quiet after:" +msgstr "خاموش شود بعد از:" + +#: src/alarm/interface.cc:204 +msgid "hours" +msgstr "ساعت" + +#: src/alarm/interface.cc:215 +msgid "minutes" +msgstr "دقیقه" + +#: src/alarm/interface.cc:224 +msgid "Choose the days for the alarm to come on" +msgstr "روزهای مورد نظر برای هشدار انتخاب شود" + +#: src/alarm/interface.cc:231 +msgid "Day" +msgstr "روز" + +#: src/alarm/interface.cc:248 src/bs2b/plugin.cc:130 +msgid "Default" +msgstr "پیش‌فرض" + +#: src/alarm/interface.cc:277 +msgid "Days" +msgstr "روزها" + +#: src/alarm/interface.cc:286 +msgid "Fading" +msgstr "محو شدن" + +#: src/alarm/interface.cc:294 src/console/plugin.cc:41 +#: src/crossfade/crossfade.cc:52 src/crossfade/crossfade.cc:58 +#: src/lirc/lirc.cc:395 src/notify/notify.cc:113 src/sid/xs_config.cc:85 +#: src/sid/xs_config.cc:94 src/sid/xs_config.cc:103 +#: src/vumeter-qt/vumeter_qt.cc:39 +msgid "seconds" +msgstr "ثانیه‌ها" + +#: src/alarm/interface.cc:301 src/alarm/interface.cc:342 +msgid "Volume" +msgstr "صدا" + +#: src/alarm/interface.cc:306 +msgid "Start at" +msgstr "شروع از" + +#: src/alarm/interface.cc:322 +msgid "Final" +msgstr "پایان" + +#: src/alarm/interface.cc:335 +msgid "Current" +msgstr "جاری" + +#: src/alarm/interface.cc:348 +msgid "Additional Command" +msgstr "فرمان تکمیلی" + +#: src/alarm/interface.cc:354 src/alarm/interface.cc:377 +msgid "enable" +msgstr "فعال‌سازی" + +#: src/alarm/interface.cc:361 +msgid "Playlist (optional)" +msgstr "لیست پخش (اختیاری)" + +#: src/alarm/interface.cc:365 +msgid "Select a playlist" +msgstr "انتخاب یک لیست پخش" + +#: src/alarm/interface.cc:385 +msgid "Options" +msgstr "گزینه‌ها" + +#: src/alarm/interface.cc:390 +msgid "What do these options mean?" +msgstr "معنای این گزینه‌ها چیست؟" + +#: src/alarm/interface.cc:404 +msgid "Help" +msgstr "راهنمایی" + +#: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 +msgid "Album Art" +msgstr "" + +#: src/alsa/alsa.h:64 +msgid "ALSA Output" +msgstr "خروجی ALSA " + +#: src/alsa/config.cc:28 +msgid "" +"ALSA Output Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren\n" +"\n" +"My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " +"code served as a reference when the ALSA manual was not enough." +msgstr "" + +#: src/alsa/config.cc:61 +msgid "(no description)" +msgstr "(بدون شرح)" + +#: src/alsa/config.cc:166 +msgid "Default PCM device" +msgstr "ابزار PCM پیش‌فرض" + +#: src/alsa/config.cc:188 +msgid "Default mixer device" +msgstr "ابزار میکسر پیش‌فرض" + +#: src/alsa/config.cc:296 +msgid "PCM device:" +msgstr "ابزار PCM:" + +#: src/alsa/config.cc:299 +msgid "Mixer device:" +msgstr "ابزار میکسر:" + +#: src/alsa/config.cc:302 +msgid "Mixer element:" +msgstr "عنصر میکسر:" + +#: src/amidiplug/amidi-plug.cc:42 +msgid "AMIDI-Plug (MIDI Player)" +msgstr "" + +#: src/amidiplug/amidi-plug.cc:445 +msgid "" +"AMIDI-Plug\n" +"modular MIDI music player\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"written by Giacomo Lozito\n" +"\n" +"\n" +"special thanks to...\n" +"\n" +"Clemens Ladisch and Jaroslav Kysela\n" +"for their cool programs aplaymidi and amixer; those\n" +"were really useful, along with alsa-lib docs, in order\n" +"to learn more about the ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"for the nice midi keyboard logo\n" +"\n" +"Tony Vroon\n" +"for the good help with alpha testing" +msgstr "" + +#: src/amidiplug/i_configure.cc:94 +msgid "Override default gain:" +msgstr "" + +#: src/amidiplug/i_configure.cc:102 +msgid "Override default polyphony:" +msgstr "" + +#: src/amidiplug/i_configure.cc:110 +msgid "Override default reverb:" +msgstr "" + +#: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 +msgid "On" +msgstr "" + +#: src/amidiplug/i_configure.cc:118 +msgid "Override default chorus:" +msgstr "" + +#: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 +msgid "Playback" +msgstr "" + +#: src/amidiplug/i_configure.cc:129 +msgid "Transpose:" +msgstr "" + +#: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 +msgid "semitones" +msgstr "" + +#: src/amidiplug/i_configure.cc:132 +msgid "Drum shift:" +msgstr "" + +#: src/amidiplug/i_configure.cc:134 +msgid "note numbers" +msgstr "" + +#: src/amidiplug/i_configure.cc:135 +msgid "Skip leading silence" +msgstr "" + +#: src/amidiplug/i_configure.cc:137 +msgid "Skip trailing silence" +msgstr "" + +#: src/amidiplug/i_configure.cc:141 +msgid "SoundFont" +msgstr "" + +#: src/amidiplug/i_configure.cc:148 +msgid "Synthesizer" +msgstr "" + +#: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 +#: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 +msgid "Sample rate:" +msgstr "نرخ نمونه برداری:" + +#: src/amidiplug/i_configure-fluidsynth.cc:57 +#: src/amidiplug/i_configure-fluidsynth.cc:536 +msgid "AMIDI-Plug - select SoundFont file" +msgstr "AMIDI-Plug - فایل SoundFont انتخاب شود" + +#: src/amidiplug/i_configure-fluidsynth.cc:60 +msgid "_Cancel" +msgstr "_انصراف" + +#: src/amidiplug/i_configure-fluidsynth.cc:61 +msgid "_Open" +msgstr "_باز کردن" + +#: src/amidiplug/i_configure-fluidsynth.cc:230 +#: src/amidiplug/i_configure-fluidsynth.cc:476 src/gtkui/columns.cc:46 +msgid "File name" +msgstr "نام فایل" + +#: src/amidiplug/i_configure-fluidsynth.cc:234 +#: src/amidiplug/i_configure-fluidsynth.cc:479 +msgid "Size (bytes)" +msgstr "اندازه (بایت)" + +#: src/amidiplug/i_fileinfo.cc:169 +msgid "Name:" +msgstr "نام:" + +#: src/amidiplug/i_fileinfo.cc:187 +msgid " MIDI Info " +msgstr " ‏اطلاعات MIDI ‏" + +#: src/amidiplug/i_fileinfo.cc:201 +msgid "Format:" +msgstr "فرمت:" + +#: src/amidiplug/i_fileinfo.cc:204 +msgid "Length (msec):" +msgstr "مدت زمان (میلی‌ثانیه):" + +#: src/amidiplug/i_fileinfo.cc:207 +msgid "No. of Tracks:" +msgstr "تعداد آهنگ ها:" + +#: src/amidiplug/i_fileinfo.cc:213 +msgid "variable" +msgstr "متغیر" + +#: src/amidiplug/i_fileinfo.cc:215 +msgid "BPM:" +msgstr "BPM:" + +#: src/amidiplug/i_fileinfo.cc:223 +msgid "BPM (wavg):" +msgstr "‎BPM (wavg)‎:" + +#: src/amidiplug/i_fileinfo.cc:226 +msgid "Time Div:" +msgstr "قسمت زمان:" + +#: src/amidiplug/i_fileinfo.cc:237 +msgid " MIDI Comments and Lyrics " +msgstr " توضیحات و ترانه‌های MIDI‏ " + +#: src/amidiplug/i_fileinfo.cc:284 +msgid "* no comments available in this MIDI file *" +msgstr "* توضیحاتی در این فایل MIDI وجود ندارد *" + +#: src/amidiplug/i_fileinfo.cc:296 +msgid "* no lyrics available in this MIDI file *" +msgstr "* ترانه‌ای در این فایل MIDI وجود ندارد *" + +#: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 +msgid "_Close" +msgstr "بستن" + +#: src/amidiplug/i_fileinfo.cc:331 +msgid " (invalid UTF-8)" +msgstr "(UTF-8 نامعتبر)" + +#: src/ampache/ampache.cc:33 +msgid "Ampache Browser" +msgstr "" + +#: src/ampache/ampache.cc:46 +msgid "" +"Ampache Browser for Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský and John Lindgren\n" +"License: GNU GPLv3" +msgstr "" + +#: src/aosd/aosd.cc:31 +msgid "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Written by Giacomo Lozito \n" +"\n" +"Based in part on Evan Martin's Ghosd library:\n" +"http://neugierig.org/software/ghosd/" +msgstr "" + +#: src/aosd/aosd.h:37 +msgid "AOSD (On-Screen Display)" +msgstr "" + +#: src/aosd/aosd_style.cc:54 +msgid "Rectangle" +msgstr "مستطیل" + +#: src/aosd/aosd_style.cc:59 +msgid "Rounded Rectangle" +msgstr "مستطیل گوشه‌گرد" + +#: src/aosd/aosd_style.cc:64 +msgid "Concave Rectangle" +msgstr "مستطیل مقعر" + +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 +msgid "None" +msgstr "هیچکدام" + +#: src/aosd/aosd_trigger.cc:49 +msgid "Playback Start" +msgstr "شروع پخش" + +#: src/aosd/aosd_trigger.cc:50 +msgid "Triggers OSD when a playlist entry is played." +msgstr "وقتی یکی از گزینه‌های لیست پخش اجرا شد OSD اجرا شود." + +#: src/aosd/aosd_trigger.cc:55 +msgid "Title Change" +msgstr "تغییر عنوان" + +#: src/aosd/aosd_trigger.cc:56 +msgid "Triggers OSD when the song title changes (for internet streams)." +msgstr "" + +#: src/aosd/aosd_trigger.cc:61 +msgid "Pause On" +msgstr "توقف روشن" + +#: src/aosd/aosd_trigger.cc:62 +msgid "Triggers OSD when playback is paused." +msgstr "وقتی عملیات پخش متوقف شد OSD اجرا شود." + +#: src/aosd/aosd_trigger.cc:67 +msgid "Pause Off" +msgstr "توقف خاموش" + +#: src/aosd/aosd_trigger.cc:68 +msgid "Triggers OSD when playback is unpaused." +msgstr "وقتی از پخش از حالت توقف خارج شد OSD اجرا شود." + +#: src/aosd/aosd_ui.cc:162 +msgid "Placement" +msgstr "محل قرارگیری" + +#: src/aosd/aosd_ui.cc:195 +msgid "Relative X offset:" +msgstr "فاصله نسبی از عرض:" + +#: src/aosd/aosd_ui.cc:202 +msgid "Relative Y offset:" +msgstr "فاصله نسبی از ارتفاع:" + +#: src/aosd/aosd_ui.cc:209 +msgid "Max OSD width:" +msgstr "حداکثر طول OSD:" + +#: src/aosd/aosd_ui.cc:220 +msgid "Multi-Monitor options" +msgstr "گزینه‌های حالت چندنمایشگره" + +#: src/aosd/aosd_ui.cc:224 +msgid "Display OSD using:" +msgstr "نمایش OSD بوسیله:" + +#: src/aosd/aosd_ui.cc:226 +msgid "all monitors" +msgstr "همه نمایشگرها" + +#: src/aosd/aosd_ui.cc:229 +#, c-format +msgid "monitor %i" +msgstr "نمایشگر ‎%i" + +#: src/aosd/aosd_ui.cc:281 +msgid "Timing (ms)" +msgstr "زمان‌بندی (برحسب میلی‌ثانیه)" + +#: src/aosd/aosd_ui.cc:286 +msgid "Display:" +msgstr "نمایش:" + +#: src/aosd/aosd_ui.cc:291 +msgid "Fade in:" +msgstr "نمایش تدریجی:" + +#: src/aosd/aosd_ui.cc:296 +msgid "Fade out:" +msgstr "خروج تدریجی:" + +#: src/aosd/aosd_ui.cc:360 +msgid "Fonts" +msgstr "فونت‌ها" + +#: src/aosd/aosd_ui.cc:367 +#, c-format +msgid "Font %i:" +msgstr "فونت ‎%i:" + +#: src/aosd/aosd_ui.cc:381 +msgid "Shadow" +msgstr "سایه" + +#: src/aosd/aosd_ui.cc:485 +msgid "Render Style" +msgstr "شیوه رندر" + +#: src/aosd/aosd_ui.cc:501 +msgid "Colors" +msgstr "رنگ‌ها" + +#: src/aosd/aosd_ui.cc:512 +#, c-format +msgid "Color %i:" +msgstr "رنگ ‎%i:" + +#: src/aosd/aosd_ui.cc:599 +msgid "Enable trigger" +msgstr "فعال‌سازی اجرا" + +#: src/aosd/aosd_ui.cc:626 +msgid "Event" +msgstr "رخداد" + +#: src/aosd/aosd_ui.cc:653 +msgid "Composite manager detected" +msgstr "مدیرکامپوزیت یافت شد" + +#: src/aosd/aosd_ui.cc:660 +msgid "" +"Composite manager not detected;\n" +"unless you know that you have one running, please activate a composite " +"manager otherwise the OSD won't work properly" +msgstr "" +"مدیر کامپوزیت یافت نشد؛\n" +"اگر می‌دانید در حال اجراست، لطفا یک مدیر کامپوزیت را فعال کنید، در غیراینصورت " +"OSD‌ بدرسی نشان داده نمی‌شود" + +#: src/aosd/aosd_ui.cc:668 +msgid "Composite manager not required for fake transparency" +msgstr "برای شفافیت ساختگی نیازی به مدیر کامپوزیت نیست" + +#: src/aosd/aosd_ui.cc:705 +msgid "Transparency" +msgstr "شفافیت" + +#: src/aosd/aosd_ui.cc:711 +msgid "Fake transparency" +msgstr "شفافیت ساختگی" + +#: src/aosd/aosd_ui.cc:713 +msgid "Real transparency (requires X Composite Ext.)" +msgstr "شفافیت واقعی (به افزونه کامپوزیت X نیاز دارد)" + +#: src/aosd/aosd_ui.cc:754 +msgid "Composite extension not loaded" +msgstr "افزونه کامپوزیت بارگذاری نشده است" + +#: src/aosd/aosd_ui.cc:771 +#, c-format +msgid "Audacious OSD" +msgstr "Audacious OSD" + +#: src/aosd/aosd_ui.cc:834 +msgid "Position" +msgstr "مکان" + +#: src/aosd/aosd_ui.cc:839 +msgid "Animation" +msgstr "پویانمایی" + +#: src/aosd/aosd_ui.cc:844 +msgid "Text" +msgstr "متن" + +#: src/aosd/aosd_ui.cc:849 +msgid "Decoration" +msgstr "تزیینات" + +#: src/aosd/aosd_ui.cc:854 +msgid "Trigger" +msgstr "تریگر" + +#: src/aosd/aosd_ui.cc:859 src/streamtuner/shoutcast-model.cc:202 +msgid "Misc" +msgstr "متفرقه" + +#: src/aosd/aosd_ui.cc:868 +msgid "Test" +msgstr "آزمایش" + +#: src/asx3/asx3.cc:35 +msgid "ASXv3 Playlists" +msgstr "لیست پخش های ASXv3" + +#: src/asx/asx.cc:33 +msgid "ASXv1/ASXv2 Playlists" +msgstr "" + +#: src/audpl/audpl.cc:33 +msgid "Audacious Playlists (audpl)" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + +#: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 +msgid "Color" +msgstr "رنگ" + +#: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 +msgid "Blur Scope" +msgstr "" + +#: src/bs2b/plugin.cc:38 +msgid "Bauer Stereophonic-to-Binaural (BS2B)" +msgstr "" + +#: src/bs2b/plugin.cc:129 +msgid "Presets:" +msgstr "" + +#: src/bs2b/plugin.cc:136 +msgid "Feed level:" +msgstr "" + +#: src/bs2b/plugin.cc:138 +msgid "x1/10 dB" +msgstr "" + +#: src/bs2b/plugin.cc:139 +msgid "Cut frequency:" +msgstr "" + +#: src/cairo-spectrum/cairo-spectrum.cc:41 src/qt-spectrum/qt-spectrum.cc:107 +msgid "Spectrum Analyzer" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:71 +msgid "Audio CD Plugin" +msgstr "پلوگین سی دی صوتی" + +#: src/cdaudio/cdaudio-ng.cc:118 +msgid "" +"Copyright (C) 2007-2012 Calin Crisan and others.\n" +"\n" +"Many thanks to libcdio developers \n" +"and to libcddb developers .\n" +"\n" +"Also thank you to Tony Vroon for mentoring and guiding me.\n" +"\n" +"This was a Google Summer of Code 2007 project." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:134 +msgid "Device" +msgstr "وسیله" + +#: src/cdaudio/cdaudio-ng.cc:135 +msgid "Read speed:" +msgstr "سرعت خوانش:" + +#: src/cdaudio/cdaudio-ng.cc:138 +msgid "Override device:" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:140 +msgid "Metadata" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:141 +msgid "Use CD-Text" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:143 +msgid "Use CDDB" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:145 +msgid "Use HTTP instead of CDDBP" +msgstr "بجای CDDBP از HTTP استفاده کن" + +#: src/cdaudio/cdaudio-ng.cc:148 +msgid "Server:" +msgstr "سرور:" + +#: src/cdaudio/cdaudio-ng.cc:152 +msgid "Path:" +msgstr "مسیر:" + +#: src/cdaudio/cdaudio-ng.cc:156 +msgid "Port:" +msgstr "پورت:" + +#: src/cdaudio/cdaudio-ng.cc:220 +msgid "Failed to initialize cdio subsystem." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:250 +#, c-format +msgid "Invalid URI %s." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:252 +#, c-format +msgid "Track %d not found." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:254 +#, c-format +msgid "Track %d is a data track." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:329 +msgid "Error reading audio CD." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:398 +msgid "Audio CD" +msgstr "سی‌دی صوتی" + +#: src/cdaudio/cdaudio-ng.cc:435 src/cdaudio/cdaudio-ng.cc:444 +#, c-format +msgid "Failed to open CD device %s." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:447 +msgid "No audio capable CD drive found." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:470 +msgid "Drive is empty." +msgstr "درایو خالی است." + +#: src/cdaudio/cdaudio-ng.cc:472 +msgid "Unsupported disk type." +msgstr "نوع دیسک پشتیبانی نمی‌شود." + +#: src/cdaudio/cdaudio-ng.cc:496 +msgid "Failed to finish initializing opened CD drive." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:509 +msgid "Failed to retrieve first/last track number." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:530 +#, c-format +msgid "Cannot read start/end LSN for track %d." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:612 +msgid "Failed to create the CDDB connection." +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:678 +msgid "Failed to query the CDDB server" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:680 +#, c-format +msgid "Failed to query the CDDB server: %s" +msgstr "" + +#: src/cdaudio/cdaudio-ng.cc:704 +#, c-format +msgid "Failed to read the CDDB info: %s" +msgstr "" + +#: src/cd-menu-items/cd-menu-items.cc:33 +msgid "Audio CD Menu Items" +msgstr "" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "Pla_y CD" +msgstr "" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "_Add CD" +msgstr "" + +#: src/compressor/compressor.cc:45 +msgid "Compression" +msgstr "" + +#: src/compressor/compressor.cc:46 +msgid "Center volume:" +msgstr "متمرکز کردن صدا:" + +#: src/compressor/compressor.cc:49 +msgid "Dynamic range:" +msgstr "بازه متغیر:" + +#: src/compressor/compressor.cc:57 +msgid "" +"Dynamic Range Compression Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" + +#: src/compressor/compressor.cc:64 +msgid "Dynamic Range Compressor" +msgstr "" + +#: src/console/plugin.cc:15 +msgid "" +"Console music decoder engine based on Game_Music_Emu 0.5.2\n" +"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Shay Green " +msgstr "" + +#: src/console/plugin.cc:30 +msgid "Bass:" +msgstr "باس:" + +#: src/console/plugin.cc:33 +msgid "Treble:" +msgstr "صدای زیر:" + +#: src/console/plugin.cc:36 +msgid "Echo:" +msgstr "پژواک:" + +#: src/console/plugin.cc:39 +msgid "Default song length:" +msgstr "طول پیش فرض آهنگ:" + +#: src/console/plugin.cc:42 src/modplug/plugin_main.cc:58 +msgid "Resampling" +msgstr "" + +#: src/console/plugin.cc:43 +msgid "Enable audio resampling" +msgstr "نمونه‌گیری مجدد صدا انجام شود" + +#: src/console/plugin.cc:49 +msgid "SPC" +msgstr "" + +#: src/console/plugin.cc:50 +msgid "Ignore length from SPC tags" +msgstr "طول برچسب‌های SPC نادیده گرفته شود" + +#: src/console/plugin.cc:52 +msgid "Increase reverb" +msgstr "افزایش انعکاس" + +#: src/console/plugin.h:26 +msgid "Game Console Music Decoder" +msgstr "دیکدر موسیقی کنسول بازی" + +#: src/coreaudio/coreaudio.cc:53 +msgid "CoreAudio output" +msgstr "" + +#: src/coreaudio/coreaudio.cc:156 +msgid "" +"CoreAudio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"Copyright 2017,18 René J.V. Bertin\n" +" (original code and code adapted from\n" +" Apple examples, (C) Apple 2013)\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/coreaudio/coreaudio.cc:172 +msgid "Use exclusive mode" +msgstr "" + +#: src/coreaudio/coreaudio.cc:174 +msgid "Use bit perfect audio (adapt device sampling rate)" +msgstr "" + +#: src/crossfade/crossfade.cc:43 +msgid "" +"Crossfade Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" + +#: src/crossfade/crossfade.cc:47 +msgid "Crossfade" +msgstr "" + +#: src/crossfade/crossfade.cc:48 +msgid "On automatic song change" +msgstr "" + +#: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 +msgid "Overlap:" +msgstr "" + +#: src/crossfade/crossfade.cc:54 +msgid "On seek or manual song change" +msgstr "" + +#: src/crossfade/crossfade.cc:60 +msgid "Tip" +msgstr "" + +#: src/crossfade/crossfade.cc:61 +msgid "" +"For better crossfading, enable\n" +"the Silence Removal effect." +msgstr "" + +#: src/crossfade/crossfade.cc:71 +msgid "Crossfade" +msgstr "" + +#: src/crystalizer/crystalizer.cc:31 +msgid "Crystalizer" +msgstr "" + +#: src/crystalizer/crystalizer.cc:32 src/stereo_plugin/stereo.cc:45 +msgid "Intensity:" +msgstr "" + +#: src/crystalizer/crystalizer.cc:43 +msgid "Crystalizer" +msgstr "" + +#: src/cue/cue.cc:42 +msgid "Cue Sheet Plugin" +msgstr "" + +#: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 +#: src/delete-files/delete-files.cc:230 +msgid "Delete Files" +msgstr "حذف فایل" + +#: src/delete-files/delete-files.cc:120 +msgid "No files are selected." +msgstr "فایلی انتخاب نشده است." + +#: src/delete-files/delete-files.cc:125 +#, c-format +msgid "Do you want to move %s to the trash?" +msgstr "" + +#: src/delete-files/delete-files.cc:126 +#, c-format +msgid "Do you want to permanently delete %s?" +msgstr "" + +#: src/delete-files/delete-files.cc:133 +#, c-format +msgid "Do you want to move %d files to the trash?" +msgstr "" + +#: src/delete-files/delete-files.cc:134 +#, c-format +msgid "Do you want to permanently delete %d files?" +msgstr "" + +#: src/delete-files/delete-files.cc:146 +msgid "Move to trash" +msgstr "انتقال به سطل زباله" + +#: src/delete-files/delete-files.cc:146 +msgid "Delete" +msgstr "حذف" + +#: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 +msgid "Cancel" +msgstr "انصراف" + +#: src/delete-files/delete-files.cc:266 +msgid "Delete Selected Files" +msgstr "حذف فایل های انتخابی" + +#: src/delete-files/delete-files.cc:286 +msgid "Delete Method" +msgstr "" + +#: src/delete-files/delete-files.cc:287 +msgid "Move to trash instead of deleting immediately" +msgstr "به جای حذف سریع به زباله دانی منتقل شود" + +#: src/echo_plugin/echo.cc:9 +msgid "" +"Echo Plugin\n" +"By Johan Levin, 1999\n" +"Surround echo by Carl van Schaik, 1999\n" +"Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" +msgstr "" + +#: src/echo_plugin/echo.cc:21 +msgid "Echo" +msgstr "" + +#: src/echo_plugin/echo.cc:22 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 +msgid "Delay:" +msgstr "" + +#: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 +msgid "ms" +msgstr "میلی ثانیه" + +#: src/echo_plugin/echo.cc:25 +msgid "Feedback:" +msgstr "بازخورد:" + +#: src/echo_plugin/echo.cc:28 src/modplug/plugin_main.cc:86 +msgid "Volume:" +msgstr "" + +#: src/echo_plugin/echo.cc:39 +msgid "Echo" +msgstr "پژواک" + +#: src/ffaudio/ffaudio-core.cc:49 +msgid "FFmpeg Plugin" +msgstr "پلوگین FFmpeg" + +#: src/ffaudio/ffaudio-core.cc:635 +msgid "" +"Multi-format audio decoding plugin for Audacious using\n" +"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Matti Hämäläinen " +msgstr "" + +#: src/filewriter/filewriter.cc:48 +msgid "FileWriter Plugin" +msgstr "" + +#: src/filewriter/filewriter.cc:316 +#, c-format +msgid "" +"Error opening %s:\n" +"%s" +msgstr "" + +#: src/filewriter/filewriter.cc:358 +msgid "" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/filewriter/filewriter.cc:385 +msgid "Output file format:" +msgstr "فرمت فایل خروجی:" + +#: src/filewriter/filewriter.cc:389 +msgid "Save into original directory" +msgstr "ذخیره در پوشه اصلی" + +#: src/filewriter/filewriter.cc:392 +msgid "Save into custom directory:" +msgstr "" + +#: src/filewriter/filewriter.cc:400 +msgid "Generate file name from:" +msgstr "" + +#: src/filewriter/filewriter.cc:401 +msgid "Original file name" +msgstr "نام اصلی فایل" + +#: src/filewriter/filewriter.cc:404 +msgid "Original file name (no suffix)" +msgstr "نام اصلی فایل (بدون پسوند)" + +#: src/filewriter/filewriter.cc:407 +msgid "Original file tag" +msgstr "" + +#: src/filewriter/filewriter.cc:411 +msgid "Prepend track number to file name" +msgstr "" + +#: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 +msgid "Auto" +msgstr "خودکار" + +#: src/filewriter/filewriter.cc:418 +msgid "8000 Hz" +msgstr "8000 هرتز" + +#: src/filewriter/filewriter.cc:419 +msgid "11025 Hz" +msgstr "11025 هرتز" + +#: src/filewriter/filewriter.cc:420 +msgid "12000 Hz" +msgstr "12000 هرتز" + +#: src/filewriter/filewriter.cc:421 +msgid "16000 Hz" +msgstr "16000 هرتز" + +#: src/filewriter/filewriter.cc:422 +msgid "22050 Hz" +msgstr "22050 هرتز" + +#: src/filewriter/filewriter.cc:423 +msgid "24000 Hz" +msgstr "24000 هرتز" + +#: src/filewriter/filewriter.cc:424 +msgid "32000 Hz" +msgstr "32000 هرتز" + +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 +msgid "44100 Hz" +msgstr "44100 هرتز" + +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 +msgid "48000 Hz" +msgstr "48000 هرتز" + +#: src/filewriter/filewriter.cc:430 +msgid "8 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:431 +msgid "16 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:432 +msgid "32 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:433 +msgid "40 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:434 +msgid "48 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:435 +msgid "56 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:436 +msgid "64 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:437 +msgid "80 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:438 +msgid "96 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:439 +msgid "112 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:440 +msgid "128 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:441 +msgid "160 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:442 +msgid "192 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:443 +msgid "224 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:444 +msgid "256 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:445 +msgid "320 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:450 +msgid "Joint Stereo" +msgstr "یکی کردن دو کانال" + +#: src/filewriter/filewriter.cc:451 src/modplug/plugin_main.cc:57 +#: src/mpg123/mpg123.cc:255 +msgid "Stereo" +msgstr "دوکاناله" + +#: src/filewriter/filewriter.cc:452 src/modplug/plugin_main.cc:56 +#: src/mpg123/mpg123.cc:256 +msgid "Mono" +msgstr "تک‌کاناله" + +#: src/filewriter/filewriter.cc:456 +msgid "VBR" +msgstr "" + +#: src/filewriter/filewriter.cc:457 +msgid "ABR" +msgstr "" + +#: src/filewriter/filewriter.cc:478 +msgid "Algorithm quality:" +msgstr "" + +#: src/filewriter/filewriter.cc:484 +msgid "Bitrate:" +msgstr "نرخ بیت:" + +#: src/filewriter/filewriter.cc:491 +msgid "Compression ratio:" +msgstr "نسبت فشرده‌سازی:" + +#: src/filewriter/filewriter.cc:498 +msgid "Audio mode:" +msgstr "" + +#: src/filewriter/filewriter.cc:501 +msgid "Enforce strict ISO compliance" +msgstr "" + +#: src/filewriter/filewriter.cc:503 +msgid "Error protection" +msgstr "محافظت در برابر خطا" + +#: src/filewriter/filewriter.cc:508 +msgid "Enable VBR/ABR" +msgstr "فعال‌سازی VBR/ABR" + +#: src/filewriter/filewriter.cc:510 +msgid "Type:" +msgstr "نوع:" + +#: src/filewriter/filewriter.cc:514 +msgid "Minimum bitrate:" +msgstr "" + +#: src/filewriter/filewriter.cc:518 +msgid "Maximum bitrate:" +msgstr "" + +#: src/filewriter/filewriter.cc:522 +msgid "Average bitrate:" +msgstr "" + +#: src/filewriter/filewriter.cc:526 +msgid "VBR quality level:" +msgstr "سطح کیفیت VBR:" + +#: src/filewriter/filewriter.cc:530 +msgid "Strictly enforce minimum bitrate" +msgstr "حداقل نرخ بیت بشدت اعمال شود" + +#: src/filewriter/filewriter.cc:533 +msgid "Omit Xing VBR header" +msgstr "" + +#: src/filewriter/filewriter.cc:539 +msgid "Frame Headers" +msgstr "" + +#: src/filewriter/filewriter.cc:540 +msgid "Mark as copyright" +msgstr "فایل کپی‌رایت دارد" + +#: src/filewriter/filewriter.cc:542 +msgid "Mark as original" +msgstr "فایل نسخه اصلی است" + +#: src/filewriter/filewriter.cc:544 +msgid "ID3 Tags" +msgstr "" + +#: src/filewriter/filewriter.cc:545 +msgid "Force addition of version 2 tag" +msgstr "برچسب‌های نسخه 2 حتما اضافه شود" + +#: src/filewriter/filewriter.cc:547 +msgid "Only add v1 tag" +msgstr "فقط برچسب‌های نسخه 1" + +#: src/filewriter/filewriter.cc:549 +msgid "Only add v2 tag" +msgstr "فقط برچسب‌های نسخه 2" + +#: src/filewriter/filewriter.cc:554 +msgid "Quality" +msgstr "کیفیت" + +#: src/filewriter/filewriter.cc:555 +msgid "VBR/ABR" +msgstr "VBR/ABR نرخ بیت متغیر/نرخ بیت میانگین" + +#: src/filewriter/filewriter.cc:556 +msgid "Tags" +msgstr "برچسب‌ها" + +#: src/filewriter/filewriter.cc:566 +msgid "Quality (0-1):" +msgstr "کیفیت (0-1):" + +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 +#: src/skins/skins_cfg.cc:285 +msgid "General" +msgstr "عمومی" + +#: src/flac/flacng.h:36 +msgid "FLAC Decoder" +msgstr "" + +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 +msgid "lossless" +msgstr "" + +#: src/flac/plugin.cc:180 +msgid "" +"Original code by\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" +msgstr "" + +#: src/gio/gio.cc:34 +msgid "" +"GIO Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren" +msgstr "" + +#: src/gio/gio.cc:42 +msgid "GIO Plugin" +msgstr "پلوگین GIO" + +#: src/gio/gio.cc:152 +msgid "Read-and-append mode not supported" +msgstr "" + +#: src/gio/gio.cc:165 +msgid "Invalid open mode" +msgstr "" + +#: src/glspectrum/gl-spectrum.cc:51 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" + +#: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 +msgid "OpenGL Spectrum Analyzer" +msgstr "" + +#: src/gtkui/columns.cc:35 +msgid "Entry number" +msgstr "شماره گزینه" + +#: src/gtkui/columns.cc:36 src/moonstone/playlist_model.cc:38 +#: src/moonstone/playlist_selection.cc:62 +#: src/playlist-manager/playlist-manager.cc:199 +#: src/playlist-manager-qt/playlist-manager-qt.cc:186 +#: src/qtui/playlist_model.cc:33 src/streamtuner/icecast-model.cc:120 +#: src/streamtuner/ihr-model.cc:159 src/streamtuner/shoutcast-model.cc:122 +msgid "Title" +msgstr "عنوان" + +#: src/gtkui/columns.cc:37 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Artist" +msgstr "هنرمند" + +#: src/gtkui/columns.cc:38 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Year" +msgstr "سال انتشار" + +#: src/gtkui/columns.cc:39 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:34 +msgid "Album" +msgstr "آلبوم" + +#: src/gtkui/columns.cc:40 +msgid "Album artist" +msgstr "هنرمند آلبوم" + +#: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 +msgid "Track" +msgstr "آهنگ" + +#: src/gtkui/columns.cc:42 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 src/streamtuner/icecast-model.cc:123 +#: src/streamtuner/shoutcast-model.cc:125 +#: src/streamtuner/shoutcast-model.cc:236 +msgid "Genre" +msgstr "سبک" + +#: src/gtkui/columns.cc:43 +msgid "Queue position" +msgstr "مکان در صف" + +#: src/gtkui/columns.cc:44 src/moonstone/playlist_model.cc:41 +#: src/qtui/playlist_model.cc:35 +msgid "Length" +msgstr "مدت زمان" + +#: src/gtkui/columns.cc:45 +msgid "File path" +msgstr "مسیر فایل" + +#: src/gtkui/columns.cc:47 +msgid "Custom title" +msgstr "عنوان شخصی" + +#: src/gtkui/columns.cc:48 src/moonstone/playlist_model.cc:42 +#: src/qtui/playlist_model.cc:36 src/streamtuner/icecast-model.cc:129 +#: src/streamtuner/shoutcast-model.cc:134 +msgid "Bitrate" +msgstr "نرخ بیت" + +#: src/gtkui/columns.cc:49 src/moonstone/playlist_model.cc:43 +#: src/qtui/playlist_model.cc:36 +msgid "Comment" +msgstr "توضیحات" + +#: src/gtkui/columns.cc:315 +msgid "Available columns" +msgstr "" + +#: src/gtkui/columns.cc:341 +msgid "Displayed columns" +msgstr "" + +#: src/gtkui/layout.cc:73 src/search-tool-qt/search-tool-qt.cc:58 +#: src/search-tool/search-tool.cc:48 +msgid "Search Tool" +msgstr "" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Left" +msgstr "به سمت چپ بچسبان" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Right" +msgstr "به سمت راست بچسبان" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Top" +msgstr "به بالا بچسبان" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Bottom" +msgstr "به پایین بچسبان" + +#: src/gtkui/layout.cc:169 +msgid "Undock" +msgstr "جدا کردن پنجره" + +#: src/gtkui/layout.cc:169 src/ladspa/plugin.cc:534 +msgid "Disable" +msgstr "غیرفعال‌سازی" + +#: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 +#: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 +msgid "_Open Files ..." +msgstr "_بازکردن فایل‌ها ..." + +#: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 +msgid "Open _URL ..." +msgstr "بازکردن _آدرس اینترنتی ..." + +#: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 +msgid "_Add Files ..." +msgstr "" + +#: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 +msgid "Add U_RL ..." +msgstr "اضافه کردن آدرس _اینترنتی ..." + +#: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 +msgid "Search _Library" +msgstr "" + +#: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 +msgid "A_bout ..." +msgstr "د_رباره ..." + +#: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 +msgid "_Settings ..." +msgstr "" + +#: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 +#: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 +msgid "_Quit" +msgstr "_خروج" + +#: src/gtkui/menus.cc:92 src/gtkui/menus.cc:224 +#: src/moonstone/playlist_tabs.cc:306 src/qtui/menus.cc:135 +#: src/qtui/playlist_tabs.cc:328 src/search-tool-qt/search-tool-qt.cc:499 +#: src/search-tool/search-tool.cc:343 src/statusicon-qt/statusicon.cc:106 +#: src/statusicon/statusicon.cc:276 +msgid "_Play" +msgstr "_پخش" + +#: src/gtkui/menus.cc:93 src/qtui/menus.cc:137 +#: src/statusicon-qt/statusicon.cc:107 src/statusicon/statusicon.cc:277 +msgid "Paus_e" +msgstr "تو_قف" + +#: src/gtkui/menus.cc:94 src/qtui/menus.cc:139 +#: src/statusicon-qt/statusicon.cc:108 src/statusicon/statusicon.cc:278 +msgid "_Stop" +msgstr "پا_یان پخش" + +#: src/gtkui/menus.cc:95 src/qtui/menus.cc:141 +#: src/statusicon-qt/statusicon.cc:109 src/statusicon/statusicon.cc:279 +msgid "Pre_vious" +msgstr "_قبلی" + +#: src/gtkui/menus.cc:96 src/qtui/menus.cc:143 +#: src/statusicon-qt/statusicon.cc:110 src/statusicon/statusicon.cc:280 +msgid "_Next" +msgstr "_بعدی" + +#: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 +#: src/skins-qt/menus.cc:105 +msgid "Previous Album" +msgstr "آلبوم قبلی" + +#: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 +#: src/skins-qt/menus.cc:106 +msgid "Next Album" +msgstr "آلبوم بعدی" + +#: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 +msgid "_Repeat" +msgstr "_تکرار" + +#: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 +msgid "S_huffle" +msgstr "_بهم ریخته" + +#: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 +msgid "Shuffle by Albu_m" +msgstr "" + +#: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 +msgid "N_o Playlist Advance" +msgstr "" + +#: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 +msgid "Stop A_fter This Song" +msgstr "" + +#: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 +#: src/qtui/menus.cc:292 +msgid "Song _Info ..." +msgstr "ا_طلاعات آهنگ ..." + +#: src/gtkui/menus.cc:107 +msgid "Jump to _Time ..." +msgstr "پرش به _زمان ..." + +#: src/gtkui/menus.cc:108 +msgid "_Jump to Song ..." +msgstr "پرش به _آهنگ ..." + +#: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 +msgid "Set Repeat Point _A" +msgstr "" + +#: src/gtkui/menus.cc:111 src/qtui/menus.cc:167 +msgid "Set Repeat Point _B" +msgstr "" + +#: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 +msgid "_Clear Repeat Points" +msgstr "" + +#: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 +#: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 +msgid "By _Title" +msgstr "براساس _عنوان" + +#: src/gtkui/menus.cc:117 src/qtui/menus.cc:174 +msgid "By _File Name" +msgstr "" + +#: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 +msgid "By File _Path" +msgstr "" + +#: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 +#: src/qtui/menus.cc:196 +msgid "By Track _Number" +msgstr "براساس _شماره آهنگ" + +#: src/gtkui/menus.cc:124 src/gtkui/menus.cc:141 src/qtui/menus.cc:181 +#: src/qtui/menus.cc:198 +msgid "By _Artist" +msgstr "براساس _هنرمند" + +#: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 +#: src/qtui/menus.cc:199 +msgid "By Al_bum" +msgstr "" + +#: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 +#: src/qtui/menus.cc:200 +msgid "By Albu_m Artist" +msgstr "" + +#: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 +#: src/qtui/menus.cc:201 +msgid "By Release _Date" +msgstr "بر اساس _تاریخ انتشار" + +#: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 +#: src/qtui/menus.cc:202 +msgid "By _Genre" +msgstr "" + +#: src/gtkui/menus.cc:129 src/gtkui/menus.cc:146 src/qtui/menus.cc:186 +#: src/qtui/menus.cc:203 +msgid "By _Length" +msgstr "" + +#: src/gtkui/menus.cc:130 src/gtkui/menus.cc:147 src/qtui/menus.cc:187 +#: src/qtui/menus.cc:204 +msgid "By _File Path" +msgstr "براساس _مسیر فایل" + +#: src/gtkui/menus.cc:131 src/gtkui/menus.cc:148 src/qtui/menus.cc:188 +#: src/qtui/menus.cc:205 +msgid "By _Custom Title" +msgstr "براساس عنوان شخصی" + +#: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 +#: src/qtui/menus.cc:206 +msgid "By C_omment" +msgstr "" + +#: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 +#: src/qtui/menus.cc:208 +msgid "R_everse Order" +msgstr "مرتب سازی معکوس" + +#: src/gtkui/menus.cc:135 src/gtkui/menus.cc:152 src/qtui/menus.cc:193 +#: src/qtui/menus.cc:210 +msgid "_Random Order" +msgstr "بهم ریختن مرتب‌سازی" + +#: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 +msgid "_Play/Resume" +msgstr "" + +#: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 +msgid "_Refresh" +msgstr "تازه‌سازی لیست" + +#: src/gtkui/menus.cc:159 src/qtui/menus.cc:220 +msgid "_Sort" +msgstr "مرتب کردن" + +#: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 +msgid "Sort Se_lected" +msgstr "" + +#: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 +msgid "Remove _Duplicates" +msgstr "" + +#: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 +msgid "Remove _Unavailable Files" +msgstr "" + +#: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 +#: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 +msgid "_New" +msgstr "جدید" + +#: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 +msgid "Ren_ame ..." +msgstr "تغییرنام..." + +#: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 +#: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 +#: src/qtui/playlist_tabs.cc:333 +msgid "Remo_ve" +msgstr "حذف" + +#: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 +msgid "_Import ..." +msgstr "وارد کردن ..." + +#: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 +msgid "_Export ..." +msgstr "خروجی گرفتن ..." + +#: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 +msgid "Playlist _Manager ..." +msgstr "" + +#: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 +msgid "_Queue Manager ..." +msgstr "مدیر صف ..." + +#: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 +msgid "Volume _Up" +msgstr "افزایش صدا" + +#: src/gtkui/menus.cc:177 src/qtui/menus.cc:243 +msgid "Volume _Down" +msgstr "کاهش صدا" + +#: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 +msgid "_Equalizer ..." +msgstr "اکولایزر..." + +#: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 +msgid "E_ffects ..." +msgstr "" + +#: src/gtkui/menus.cc:182 +msgid "_Record Stream" +msgstr "" + +#: src/gtkui/menus.cc:183 +msgid "Audio _Settings ..." +msgstr "تنظیمات صدا..." + +#: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 +msgid "Show _Menu Bar" +msgstr "نمایش نوار منو" + +#: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 +msgid "Show I_nfo Bar" +msgstr "نمایش نوار اطلاعات" + +#: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 +msgid "Show Info Bar _Album Art" +msgstr "" + +#: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 +msgid "Show Info Bar Vis_ualization" +msgstr "" + +#: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 +msgid "Show _Status Bar" +msgstr "نمایش نوار وضعیت" + +#: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 +msgid "Show _Remaining Time" +msgstr "" + +#: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 +#: src/skins-qt/menus.cc:152 +msgid "_Visualizations ..." +msgstr "" + +#: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 +msgid "_File" +msgstr "فایل" + +#: src/gtkui/menus.cc:200 src/qtui/menus.cc:279 +msgid "_Playback" +msgstr "پخش" + +#: src/gtkui/menus.cc:201 src/qtui/menus.cc:280 +msgid "P_laylist" +msgstr "لیست پخش" + +#: src/gtkui/menus.cc:202 src/gtkui/menus.cc:220 src/qtui/menus.cc:281 +#: src/qtui/menus.cc:310 +msgid "_Services" +msgstr "سرویس‌ها" + +#: src/gtkui/menus.cc:203 src/qtui/menus.cc:282 +msgid "_Output" +msgstr "خروجی" + +#: src/gtkui/menus.cc:204 src/qtui/menus.cc:283 +msgid "_View" +msgstr "نما" + +#: src/gtkui/menus.cc:209 src/qtui/menus.cc:294 +msgid "_Queue/Unqueue" +msgstr "وارد کردن به/خارج کردن از صف" + +#: src/gtkui/menus.cc:211 src/qtui/menus.cc:297 +msgid "_Open Containing Folder" +msgstr "" + +#: src/gtkui/menus.cc:212 src/qtui/menus.cc:299 +msgid "_Refresh Selected" +msgstr "" + +#: src/gtkui/menus.cc:214 src/qtui/menus.cc:302 +msgid "Cu_t" +msgstr "برش" + +#: src/gtkui/menus.cc:215 src/qtui/menus.cc:303 +msgid "_Copy" +msgstr "کپی" + +#: src/gtkui/menus.cc:216 src/qtui/menus.cc:304 +msgid "_Paste" +msgstr "چسباندن" + +#: src/gtkui/menus.cc:217 src/qtui/menus.cc:305 +msgid "Paste at _End" +msgstr "" + +#: src/gtkui/menus.cc:218 src/qtui/menus.cc:307 +msgid "Select _All" +msgstr "انتخاب همه" + +#: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 +#: src/qtui/playlist_tabs.cc:331 +msgid "_Rename ..." +msgstr "" + +#: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 +msgid "Playlist Tabs" +msgstr "" + +#: src/gtkui/settings.cc:36 +msgid "Always show tabs" +msgstr "" + +#: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 +msgid "Show entry counts" +msgstr "" + +#: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 +msgid "Show close buttons" +msgstr "" + +#: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 +msgid "Playlist Columns" +msgstr "" + +#: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 +msgid "Show column headers" +msgstr "" + +#: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 +msgid "Scroll on song change" +msgstr "" + +#: src/gtkui/ui_gtk.cc:74 +msgid "GTK Interface" +msgstr "رابط GTK" + +#: src/gtkui/ui_gtk.cc:210 src/skins/main.cc:227 src/skins-qt/main.cc:225 +#, c-format +msgid "%s - Audacious" +msgstr "‎%s - Aduacious" + +#: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 +#: src/qtui/main_window.cc:384 +msgid "Buffering ..." +msgstr "" + +#: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 +msgid "Audacious" +msgstr "Audacious" + +#: src/gtkui/ui_gtk.cc:428 src/gtkui/ui_gtk.cc:459 src/gtkui/ui_gtk.cc:817 +#: src/hotkey/gui.cc:71 src/moonstone/main_window.cc:67 +#: src/moonstone/main_window.cc:145 src/moonstone/main_window.cc:146 +#: src/notify/osd.cc:85 src/qthotkey/gui.cc:64 src/qtui/main_window.cc:154 +#: src/qtui/main_window.cc:346 src/qtui/main_window.cc:347 +#: src/skins/menus.cc:109 src/skins-qt/menus.cc:100 +msgid "Play" +msgstr "پخش" + +#: src/gtkui/ui_gtk.cc:428 src/moonstone/main_window.cc:151 +#: src/moonstone/main_window.cc:152 src/notify/osd.cc:82 +#: src/qtui/main_window.cc:352 src/qtui/main_window.cc:353 +#: src/skins/menus.cc:110 src/skins-qt/menus.cc:101 +msgid "Pause" +msgstr "متوقف" + +#: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 +#: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 +msgid "Search Library" +msgstr "" + +#: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 +#: src/qtui/main_window.cc:147 +msgid "Open Files" +msgstr "باز کردن فایل‌ها" + +#: src/gtkui/ui_gtk.cc:811 src/moonstone/main_window.cc:62 +#: src/qtui/main_window.cc:149 +msgid "Add Files" +msgstr "اضافه کردن فایل‌ها" + +#: src/gtkui/ui_gtk.cc:816 src/moonstone/main_window.cc:65 +#: src/qtui/main_window.cc:152 src/skins/menus.cc:112 src/skins-qt/menus.cc:103 +msgid "Previous" +msgstr "قبلی" + +#: src/gtkui/ui_gtk.cc:818 src/hotkey/gui.cc:73 src/moonstone/main_window.cc:69 +#: src/qthotkey/gui.cc:66 src/qtui/main_window.cc:156 src/skins/menus.cc:111 +#: src/skins-qt/menus.cc:102 +msgid "Stop" +msgstr "اتمام پخش" + +#: src/gtkui/ui_gtk.cc:819 src/moonstone/main_window.cc:76 src/notify/osd.cc:89 +#: src/qtui/main_window.cc:163 src/skins/menus.cc:113 src/skins-qt/menus.cc:104 +msgid "Next" +msgstr "بعدی" + +#: src/gtkui/ui_gtk.cc:821 src/moonstone/main_window.cc:79 +#: src/qtui/main_window.cc:166 src/qtui/menus.cc:252 src/skins/menus.cc:79 +#: src/skins-qt/menus.cc:69 +msgid "Record Stream" +msgstr "" + +#: src/gtkui/ui_gtk.cc:854 src/moonstone/main_window.cc:86 +#: src/qtui/main_window.cc:173 src/skins/menus.cc:103 src/skins-qt/menus.cc:94 +msgid "Repeat" +msgstr "تکرار" + +#: src/gtkui/ui_gtk.cc:857 src/moonstone/main_window.cc:89 +#: src/qtui/main_window.cc:176 src/skins/menus.cc:104 src/skins-qt/menus.cc:95 +msgid "Shuffle" +msgstr "بهم‌ریختن" + +#: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 +msgid "Menu" +msgstr "منو" + +#: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 +msgid "mono" +msgstr "تک‌کاناله" + +#: src/gtkui/ui_statusbar.cc:65 src/qtui/status_bar.cc:157 +msgid "stereo" +msgstr "دوکاناله" + +#: src/gtkui/ui_statusbar.cc:67 src/qtui/status_bar.cc:160 +#, c-format +msgid "%d channel" +msgid_plural "%d channels" +msgstr[0] "‎%d کانال" +msgstr[1] "‎%d کانال" + +#: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 +#, c-format +msgid "%d kHz" +msgstr "%dکیلوهرتز" + +#: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 +#, c-format +msgid "%d kbit/s" +msgstr "" + +#: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 +msgid "Single mode." +msgstr "حالت تک‌فایل." + +#: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 +msgid "Playlist mode." +msgstr "حالت لیست پخش." + +#: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 +msgid "Stopping after song." +msgstr "توقف بعد از آهنگ." + +#: src/hotkey/gui.cc:70 src/qthotkey/gui.cc:63 +msgid "Previous track" +msgstr "آهنگ قبلی" + +#: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 +msgid "Pause/Resume" +msgstr "توقف/ادامه" + +#: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 +msgid "Next track" +msgstr "آهنگ بعدی" + +#: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 +msgid "Step forward" +msgstr "" + +#: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 +msgid "Step backward" +msgstr "" + +#: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 +msgid "Mute" +msgstr "قطع کردن صدا" + +#: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 +msgid "Volume up" +msgstr "" + +#: src/hotkey/gui.cc:79 src/qthotkey/gui.cc:72 +msgid "Volume down" +msgstr "" + +#: src/hotkey/gui.cc:80 src/qthotkey/gui.cc:73 +msgid "Jump to file" +msgstr "پرش به فایل" + +#: src/hotkey/gui.cc:81 src/qthotkey/gui.cc:74 +msgid "Toggle player window(s)" +msgstr "" + +#: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 +msgid "Show On-Screen-Display" +msgstr "نمایش اطلاعات بر روی صفحه" + +#: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 +msgid "Toggle repeat" +msgstr "" + +#: src/hotkey/gui.cc:84 src/qthotkey/gui.cc:77 +msgid "Toggle shuffle" +msgstr "" + +#: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 +msgid "Toggle stop after current" +msgstr "" + +#: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 +msgid "Raise player window(s)" +msgstr "" + +#: src/hotkey/gui.cc:97 src/qthotkey/gui.cc:97 +msgid "(none)" +msgstr "(هیچکدام)" + +#: src/hotkey/gui.cc:260 +msgid "" +"It is not recommended to bind the primary mouse buttons without modifiers.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: src/hotkey/gui.cc:263 +msgid "Binding mouse buttons" +msgstr "تعریف گزینه برای کلیدهای ماوس" + +#: src/hotkey/gui.cc:426 +msgid "" +"Press a key combination inside a text field.\n" +"You can also bind mouse buttons." +msgstr "" +"ترکیب مورد نظر را در جعبه متن از طریق فشردن کلیدها ایجاد کنید.\n" +"می‌توان از کلیدهای ماوس هم استفاده کنید." + +#: src/hotkey/gui.cc:432 src/qthotkey/gui.cc:167 +msgid "Hotkeys:" +msgstr "کلیدهای میانبر:" + +#: src/hotkey/gui.cc:448 src/qthotkey/gui.cc:169 +msgid "Action:" +msgstr "عمل:" + +#: src/hotkey/gui.cc:454 src/qthotkey/gui.cc:170 +msgid "Key Binding:" +msgstr "کلیدهای تعریف‌شده:" + +#: src/hotkey/gui.cc:501 src/qthotkey/gui.cc:172 +msgid "_Add" +msgstr "_اضافه کردن" + +#: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 +msgid "Global Hotkeys" +msgstr "" + +#: src/hotkey/plugin.cc:76 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" + +#: src/jack/jack-ng.cc:54 +msgid "JACK Output" +msgstr "" + +#: src/jack/jack-ng.cc:126 +msgid "Client name:" +msgstr "" + +#: src/jack/jack-ng.cc:128 +msgid "Automatically connect to output ports" +msgstr "" + +#: src/jack/jack-ng.cc:130 +msgid "Filter ports (regex, use any port if blank):" +msgstr "" + +#: src/jack/jack-ng.cc:136 +msgid "Connect to physical ports only" +msgstr "" + +#: src/jack/jack-ng.cc:139 +msgid "Upmix to" +msgstr "" + +#: src/jack/jack-ng.cc:141 +msgid "ports if input has fewer channels" +msgstr "" + +#: src/jack/jack-ng.cc:143 +msgid "Ignore insufficient number of ports" +msgstr "" + +#: src/jack/jack-ng.cc:181 +msgid "No JACK output ports were found. Please check settings." +msgstr "" + +#: src/jack/jack-ng.cc:195 +#, c-format +msgid "Only %d JACK output ports were found but %d are required." +msgstr "" + +#: src/jack/jack-ng.cc:210 +#, c-format +msgid "Failed to connect to JACK port %s." +msgstr "" + +#: src/jack/jack-ng.cc:230 +msgid "" +"JACK supports only floating-point audio. You must change the output bit " +"depth to floating-point in Audacious settings." +msgstr "" + +#: src/jack/jack-ng.cc:245 +msgid "Failed to connect to the JACK server; is it running?" +msgstr "" + +#: src/jack/jack-ng.cc:321 +#, c-format +msgid "" +"The JACK server requires a sample rate of %d Hz, but Audacious is playing at " +"%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." +msgstr "" + +#: src/ladspa/plugin.cc:415 +#, c-format +msgid "%s Settings" +msgstr "تنظیمات ‎%s" + +#: src/ladspa/plugin.cc:481 +msgid "Module paths:" +msgstr "مسیرهای ماژول:" + +#: src/ladspa/plugin.cc:486 +msgid "" +"Separate multiple paths with a colon.\n" +"These paths are searched in addition to LADSPA_PATH.\n" +"After adding new paths, press Enter to scan for new plugins." +msgstr "" +"مسیرهای چندگانه را با استفاده از علامت دونقطه جدا کنید.\n" +"این مسیرها علاوه بر مسیر LADSPA_PATH جستجو می‌شوند.\n" +"بعد از وارد کردن هر مسیر کلید اینتر را فشار دهید تا افزونه‌های جدید جستجو " +"شوند." + +#: src/ladspa/plugin.cc:502 +msgid "Available plugins:" +msgstr "افزونه‌های موجود:" + +#: src/ladspa/plugin.cc:515 src/modplug/plugin_main.cc:91 +#: src/modplug/plugin_main.cc:94 src/modplug/plugin_main.cc:97 +#: src/modplug/plugin_main.cc:100 +msgid "Enable" +msgstr "فعال کردن" + +#: src/ladspa/plugin.cc:521 +msgid "Enabled plugins:" +msgstr "افزونه‌های فعال:" + +#: src/ladspa/plugin.cc:537 +msgid "Settings" +msgstr "تنظیمات" + +#: src/ladspa/plugin.cc:554 +msgid "" +"LADSPA Host for Audacious\n" +"Copyright 2011 John Lindgren" +msgstr "" + +#: src/ladspa/plugin.h:78 +msgid "LADSPA Host" +msgstr "" + +#: src/lirc/lirc.cc:55 +msgid "LIRC Plugin" +msgstr "" + +#: src/lirc/lirc.cc:379 +msgid "" +"A simple plugin to control Audacious using the LIRC remote control daemon\n" +"\n" +"Adapted for Audacious by:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Based on the XMMS LIRC plugin by:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"For more information about LIRC, see http://lirc.org." +msgstr "" + +#: src/lirc/lirc.cc:390 +msgid "Connection" +msgstr "" + +#: src/lirc/lirc.cc:391 +msgid "Reconnect to LIRC server" +msgstr "" + +#: src/lirc/lirc.cc:393 +msgid "Wait before reconnecting:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:89 +msgid "Lyrics" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:116 +msgid "Nowhere" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:117 +msgid "lyrics.ovh" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:121 +msgid "Artist is truncated at the start, Title -- at the end" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:122 +msgid "Chars to truncate on:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:126 +msgid "Chars are ORed in RegExp, surrounded by whitespace" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:127 +msgid "Chars to split on:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:128 +msgid "Further truncate those on chars" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:134 +msgid "General" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:135 +msgid "Split title into artist and title on chars" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:138 +msgid "Internet Sources" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:139 +msgid "Fetch lyrics from:" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:142 +msgid "Store fetched lyrics in local cache" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:144 +msgid "Local Storage" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:145 +msgid "Load lyric files (.lrc) from local storage" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:356 +#, c-format +msgid "Unable to fetch %s" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:365 +#, c-format +msgid "Unable to parse %s" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:403 +msgid "Looking for lyrics ..." +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 +msgid "Error" +msgstr "خطا" + +#: src/lyricwiki-qt/lyricwiki.cc:433 +msgid "Lyrics could not be found." +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:501 +msgid "Missing title and/or artist." +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:553 +msgid "Save Locally" +msgstr "" + +#: src/lyricwiki-qt/lyricwiki.cc:561 +msgid "Refresh" +msgstr "تازه سازی" + +#: src/m3u/m3u.cc:32 +msgid "M3U Playlists" +msgstr "لیست پخش M3U" + +#: src/metronom/metronom.cc:44 +msgid "Tact Generator" +msgstr "" + +#: src/metronom/metronom.cc:145 +#, c-format +msgid "Tact generator: %d bpm" +msgstr "مولد تکت: ‎%d بیت در دقیقه" + +#: src/metronom/metronom.cc:147 +#, c-format +msgid "Tact generator: %d bpm %d/%d" +msgstr "مولد تکت: ‎%d بیت در دقیقه ‎%d/%d" + +#: src/metronom/metronom.cc:235 +msgid "" +"A Tact Generator by Martin Strauss \n" +"\n" +"To use it, add a URL: tact://beats*num/den\n" +"e.g. tact://77 to play 77 beats per minute\n" +"or tact://60*3/4 to play 60 bpm in 3/4 tacts" +msgstr "" + +#: src/mixer/mixer.cc:43 +msgid "Channel Mixer" +msgstr "" + +#: src/mixer/mixer.cc:255 +msgid "" +"Channel Mixer Plugin for Audacious\n" +"Copyright 2011-2012 John Lindgren and Michał Lipski" +msgstr "" + +#: src/mixer/mixer.cc:259 +msgid "Channel Mixer" +msgstr "" + +#: src/mixer/mixer.cc:260 +msgid "Output channels:" +msgstr "کانال‌های خروجی:" + +#: src/mms/mms.cc:35 +msgid "MMS Plugin" +msgstr "" + +#: src/mms/mms.cc:82 +msgid "Error connecting to MMS server" +msgstr "" + +#: src/modplug/modplugbmp.h:57 +msgid "ModPlug (Module Player)" +msgstr "" + +#: src/modplug/plugin_main.cc:55 +msgid "Channels" +msgstr "کانال" + +#: src/modplug/plugin_main.cc:59 +msgid "Nearest (fastest)" +msgstr "" + +#: src/modplug/plugin_main.cc:60 +msgid "Linear (fast)" +msgstr "" + +#: src/modplug/plugin_main.cc:61 +msgid "Spline (good)" +msgstr "" + +#: src/modplug/plugin_main.cc:62 +msgid "Polyphase (best)" +msgstr "" + +#: src/modplug/plugin_main.cc:63 +msgid "Sample rate" +msgstr "نرخ نمونه برداری" + +#: src/modplug/plugin_main.cc:64 +msgid "22 kHz" +msgstr "22 کیلوهرتز" + +#: src/modplug/plugin_main.cc:65 +msgid "44 kHz" +msgstr "44 کیلوهرتز" + +#: src/modplug/plugin_main.cc:66 +msgid "48 kHz" +msgstr "48 کیلوهرتز" + +#: src/modplug/plugin_main.cc:67 +msgid "96 kHz" +msgstr "96 کیلوهرتز" + +#: src/modplug/plugin_main.cc:71 src/modplug/plugin_main.cc:76 +#: src/modplug/plugin_main.cc:81 +msgid "Level:" +msgstr "" + +#: src/modplug/plugin_main.cc:77 +msgid "Cutoff:" +msgstr "" + +#: src/modplug/plugin_main.cc:90 +msgid "Reverb" +msgstr "" + +#: src/modplug/plugin_main.cc:93 +msgid "Bass Boost" +msgstr "" + +#: src/modplug/plugin_main.cc:96 +msgid "Surround" +msgstr "" + +#: src/modplug/plugin_main.cc:99 +msgid "Preamp" +msgstr "" + +#: src/modplug/plugin_main.cc:106 +msgid "Oversample" +msgstr "" + +#: src/modplug/plugin_main.cc:107 +msgid "Noise reduction" +msgstr "" + +#: src/modplug/plugin_main.cc:108 +msgid "Play Amiga MODs" +msgstr "" + +#: src/modplug/plugin_main.cc:109 +msgid "Repeat" +msgstr "تکرار" + +#: src/modplug/plugin_main.cc:110 +msgid "Repeat count:" +msgstr "" + +#: src/modplug/plugin_main.cc:111 +msgid "To repeat forever, set the repeat count to -1." +msgstr "" + +#: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 +msgid "These settings will take effect when Audacious is restarted." +msgstr "" + +#: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 +#: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 +#: src/skins/menus.cc:107 src/skins-qt/menus.cc:98 +msgid "Stop After This Song" +msgstr "" + +#: src/moonstone/moonstone.cc:39 +msgid "Moonstone" +msgstr "" + +#: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 +msgid "Reset to Defaults" +msgstr "بازنشانی به حالت پیش فرض " + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 +msgid "Now Playing" +msgstr "در حال پخش" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_model.cc:33 +msgid "Entry Number" +msgstr "" + +#: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 +msgid "Album Artist" +msgstr "هنرمند آلبوم" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "Queue Position" +msgstr "" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "File Path" +msgstr "مسیر فایل" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:35 +msgid "File Name" +msgstr "نام فایل" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:36 +msgid "Custom Title" +msgstr "" + +#: src/moonstone/playlist_selection.cc:64 +#: src/playlist-manager/playlist-manager.cc:200 +#: src/playlist-manager-qt/playlist-manager-qt.cc:188 +msgid "Entries" +msgstr "داده‌ها" + +#: src/mpg123/mpg123.cc:54 +msgid "MPG123 Plugin" +msgstr "" + +#: src/mpg123/mpg123.cc:81 +msgid "Advanced" +msgstr "پیشرفته" + +#: src/mpg123/mpg123.cc:82 +msgid "Use accurate length calculation (slow)" +msgstr "" + +#: src/mpg123/mpg123.cc:256 +msgid "Surround" +msgstr "فراگیر" + +#: src/mpris2/plugin.cc:38 +msgid "MPRIS 2 Server" +msgstr "" + +#: src/neon/neon.cc:97 +msgid "Neon HTTP/HTTPS Plugin" +msgstr "" + +#: src/neon/neon.cc:526 +msgid "Error parsing redirect" +msgstr "" + +#: src/neon/neon.cc:540 +msgid "Unknown HTTP error" +msgstr "" + +#: src/neon/neon.cc:590 +msgid "Error parsing URL" +msgstr "" + +#: src/neon/neon.cc:660 +msgid "Too many redirects" +msgstr "" + +#: src/notify/event.cc:97 +msgid "Stopped" +msgstr "متوقف شده" + +#: src/notify/event.cc:97 +msgid "Audacious is not playing." +msgstr "Audacious در حال پخش نیست." + +#: src/notify/notify.cc:39 +msgid "Desktop Notifications" +msgstr "اعلان های دسکتاپ" + +#: src/notify/notify.cc:57 +msgid "" +"Desktop Notifications Plugin for Audacious\n" +"Copyright (C) 2010 Maximilian Bogner\n" +"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" +"\n" +"This plugin 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 3 of the License, or (at your option) " +"any later version.\n" +"\n" +"This plugin 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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see ." +msgstr "" + +#: src/notify/notify.cc:104 +msgid "Show playback controls" +msgstr "" + +#: src/notify/notify.cc:106 +msgid "Always show notification" +msgstr "" + +#: src/notify/notify.cc:108 +msgid "Include album name in notification" +msgstr "" + +#: src/notify/notify.cc:110 +msgid "Custom notification duration:" +msgstr "" + +#: src/notify/osd.cc:74 +msgid "Show" +msgstr "نمایش" + +#: src/openmpt/mpt.cc:50 +msgid "OpenMPT (Module Player)" +msgstr "" + +#: src/openmpt/mpt.cc:133 +msgid "" +"Module player based on libopenmpt\n" +"\n" +"Written by: Chris Spiegel " +msgstr "" + +#: src/openmpt/mpt.cc:152 +msgid "Stereo separation:" +msgstr "" + +#: src/openmpt/mpt.cc:154 +msgid "%" +msgstr "%" + +#: src/openmpt/mpt.cc:158 +msgid "Interpolation:" +msgstr "" + +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 +msgid "Linear" +msgstr "" + +#: src/openmpt/mptwrap.h:52 +msgid "Cubic" +msgstr "" + +#: src/openmpt/mptwrap.h:53 +msgid "Windowed sinc" +msgstr "" + +#: src/oss4/oss.h:75 +msgid "OSS4 Output" +msgstr "خروجی OSS4" + +#: src/oss4/oss.h:77 +msgid "OSS3 Output" +msgstr "خروجی OSS3" + +#: src/oss4/plugin.cc:35 +msgid "Default device" +msgstr "ابزار پیش فرض" + +#: src/oss4/plugin.cc:78 +msgid "Audio device:" +msgstr "ابزار صوتی:" + +#: src/oss4/plugin.cc:81 +msgid "Use alternate device:" +msgstr "از ابزار جایگزین استفاده کن:" + +#: src/oss4/plugin.cc:85 +msgid "Save volume between sessions." +msgstr "" + +#: src/oss4/plugin.cc:87 +msgid "Enable format conversions made by the OSS software." +msgstr "تغییر فرمت بوسیله نرم‌افزار نرم‌افزار OSS فعال شود." + +#: src/oss4/plugin.cc:89 +msgid "Enable exclusive mode to prevent virtual mixing." +msgstr "" + +#: src/oss4/plugin.cc:101 +msgid "" +"OSS4 Output Plugin for Audacious\n" +"Copyright 2010-2012 Michał Lipski\n" +"\n" +"I would like to thank people on #audacious, especially Tony Vroon and John " +"Lindgren and of course the authors of the previous OSS plugin." +msgstr "" + +#: src/playlist-manager/playlist-manager.cc:37 +#: src/playlist-manager-qt/playlist-manager-qt.cc:40 +msgid "Playlist Manager" +msgstr "مدیریت لیست پخش" + +#: src/playlist-manager/playlist-manager.cc:220 +#: src/playlist-manager-qt/playlist-manager-qt.cc:354 +msgid "_Remove" +msgstr "_حذف" + +#: src/playlist-manager/playlist-manager.cc:221 +#: src/playlist-manager-qt/playlist-manager-qt.cc:349 +msgid "Ren_ame" +msgstr "تغییر_نام" + +#: src/pls/pls.cc:35 +msgid "PLS Playlists" +msgstr "لیست پخش های PLS " + +#: src/psf/plugin.cc:53 +msgid "OpenPSF PSF1/PSF2 Decoder" +msgstr "" + +#: src/psf/plugin.cc:270 +msgid "OpenPSF Configuration" +msgstr "" + +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 +msgid "Ignore length from file" +msgstr "" + +#: src/pulse/pulse_audio.cc:42 +msgid "PulseAudio Output" +msgstr "" + +#: src/pulse/pulse_audio.cc:72 +msgid "Context name:" +msgstr "" + +#: src/pulse/pulse_audio.cc:74 +msgid "Stream name:" +msgstr "نام استریم:" + +#: src/pulse/pulse_audio.cc:575 +msgid "" +"Audacious PulseAudio Output Plugin\n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/qtaudio/qtaudio.cc:44 +msgid "QtMultimedia Output" +msgstr "" + +#: src/qtaudio/qtaudio.cc:72 +msgid "" +"QtMultimedia Audio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/qtglspectrum/gl-spectrum.cc:41 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" + +#: src/qthotkey/gui.cc:165 +msgid "Press a key combination inside a text field." +msgstr "" + +#: src/qthotkey/plugin.cc:103 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" + +#: src/qtui/menus.cc:109 +msgid "_Open Folder ..." +msgstr "" + +#: src/qtui/menus.cc:115 +msgid "_Add Folder ..." +msgstr "" + +#: src/qtui/menus.cc:128 +msgid "_Log Inspector ..." +msgstr "" + +#: src/qtui/menus.cc:218 +msgid "_Find ..." +msgstr "" + +#: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 +msgid "Audio Settings ..." +msgstr "تنظیمات صدا..." + +#: src/qtui/playlist_model.cc:186 +msgid "Q#" +msgstr "" + +#: src/qtui/playlist_model.cc:188 +msgid "T#" +msgstr "" + +#: src/qtui/qtui.cc:40 +msgid "Qt Interface" +msgstr "" + +#: src/qtui/search_bar.cc:46 +msgid "Search playlist" +msgstr "" + +#: src/qtui/settings.cc:58 +msgid "Always" +msgstr "همیشه" + +#: src/qtui/settings.cc:59 +msgid "Auto-hide" +msgstr "پنهان سازی خودکار" + +#: src/qtui/settings.cc:60 +msgid "Never" +msgstr "هرگز" + +#: src/qtui/settings.cc:64 +msgid "Show playlist tabs:" +msgstr "نمایش تب های لیست پخش:" + +#: src/qtui/settings.cc:78 +msgid "Use bold font for column headers" +msgstr "" + +#: src/resample/resample.cc:43 +msgid "Sample Rate Converter" +msgstr "" + +#: src/resample/resample.cc:183 +msgid "" +"Sample Rate Converter Plugin for Audacious\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" + +#: src/resample/resample.cc:187 +msgid "Skip/repeat samples" +msgstr "" + +#: src/resample/resample.cc:188 +msgid "Linear interpolation" +msgstr "" + +#: src/resample/resample.cc:189 +msgid "Fast sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:190 +msgid "Medium sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:191 +msgid "Best sinc interpolation" +msgstr "" + +#: src/resample/resample.cc:195 +msgid "Conversion" +msgstr "" + +#: src/resample/resample.cc:196 +msgid "Method:" +msgstr "شیوه:" + +#: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 +msgid "Rate:" +msgstr "نرخ:" + +#: src/resample/resample.cc:202 +msgid "Rate Mappings" +msgstr "" + +#: src/resample/resample.cc:203 +msgid "Use rate mappings" +msgstr "" + +#: src/resample/resample.cc:205 +msgid "8 kHz:" +msgstr "8 کیلوهرتز:" + +#: src/resample/resample.cc:209 +msgid "16 kHz:" +msgstr "16 کیلوهرتز:" + +#: src/resample/resample.cc:213 +msgid "22.05 kHz:" +msgstr "22.05 کیلوهرتز:" + +#: src/resample/resample.cc:217 +msgid "32.0 kHz:" +msgstr "32.0 کیلوهرتز:" + +#: src/resample/resample.cc:221 +msgid "44.1 kHz:" +msgstr "44.1 کیلوهرتز:" + +#: src/resample/resample.cc:225 +msgid "48 kHz:" +msgstr "48 کیلوهرتز:" + +#: src/resample/resample.cc:229 +msgid "88.2 kHz:" +msgstr "88.2 کیلوهرتز:" + +#: src/resample/resample.cc:233 +msgid "96 kHz:" +msgstr "96 کیلوهرتز:" + +#: src/resample/resample.cc:237 +msgid "176.4 kHz:" +msgstr "176.4 کیلوهرتز:" + +#: src/resample/resample.cc:241 +msgid "192 kHz:" +msgstr "192 کیلوهرتز:" + +#: src/scrobbler2/config_window.cc:19 +msgid "Checking Last.fm access ..." +msgstr "" + +#: src/scrobbler2/config_window.cc:27 +msgid "" +"Your scrobbles are being saved on your computer temporarily. They will be " +"submitted as soon as Audacious is allowed access." +msgstr "" + +#: src/scrobbler2/config_window.cc:33 +#, c-format +msgid "Permission granted. Scrobbling for user %s." +msgstr "" + +#: src/scrobbler2/config_window.cc:37 +msgid "" +"Permission denied. Open the following URL in a browser, allow Audacious " +"access to your account, and then click 'Check Permission' again:" +msgstr "" + +#: src/scrobbler2/config_window.cc:47 +msgid "There was a problem contacting Last.fm." +msgstr "" + +#: src/scrobbler2/config_window.cc:86 +msgid "Check Permission" +msgstr "" + +#: src/scrobbler2/config_window.cc:87 +msgid "Revoke Permission" +msgstr "" + +#: src/scrobbler2/config_window.cc:91 +msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." +msgstr "" + +#: src/scrobbler2/scrobbler.cc:29 +msgid "Scrobbler 2.0" +msgstr "" + +#: src/scrobbler2/scrobbler.cc:226 +msgid "" +"The Scrobbler plugin could not be started.\n" +"There might be a problem with your installation." +msgstr "" + +#: src/scrobbler2/scrobbler.cc:291 +msgid "" +"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" +"\n" +"Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Thanks to John Lindgren for giving me a hand at the beginning of this " +"project.\n" +"\n" +msgstr "" + +#: src/scrobbler2/scrobbler_communication.cc:663 +msgid "" +"Audacious is now using an improved version of the Last.fm Scrobbler.\n" +"Please check the Preferences for the Scrobbler plugin." +msgstr "" + +#: src/sdlout/sdlout.cc:43 +msgid "SDL Output" +msgstr "" + +#: src/sdlout/sdlout.cc:72 +msgid "" +"SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" + +#: src/search-tool/library.cc:35 src/search-tool/library.cc:46 +#: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 +msgid "Library" +msgstr "کتابخانه" + +#: src/search-tool-qt/search-model.cc:49 src/search-tool/search-tool.cc:291 +#, c-format +msgid "%d song" +msgid_plural "%d songs" +msgstr[0] "" +msgstr[1] "" + +#: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 +msgid "of this genre" +msgstr "" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "on" +msgstr "" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "by" +msgstr "بر اساس" + +#: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 +msgid "Number of results to show:" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 +msgid "Rescan library at startup" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:170 +msgid "Monitor library for changes" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 +msgid "" +"To import your music library into Audacious, choose a folder and then click " +"the \"refresh\" icon." +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 +msgid "Please wait ..." +msgstr "لطفا صبر کنید..." + +#: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 +msgid "Choose Folder" +msgstr "انتخاب پوشه" + +#: src/search-tool-qt/search-tool-qt.cc:201 +msgid "Search library" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:327 src/search-tool/search-tool.cc:155 +#, c-format +msgid "%d of %d result shown" +msgid_plural "%d of %d results shown" +msgstr[0] "" +msgstr[1] "" + +#: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 +#, c-format +msgid "%d result" +msgid_plural "%d results" +msgstr[0] "" +msgstr[1] "" + +#: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 +msgid "_Create Playlist" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:503 src/search-tool/search-tool.cc:347 +msgid "_Add to Playlist" +msgstr "" + +#: src/sid/xmms-sid.cc:43 +msgid "SID Player" +msgstr "" + +#: src/sid/xs_config.cc:62 +msgid "Channels:" +msgstr "کانال ها:" + +#: src/sid/xs_config.cc:68 +msgid "Emulation" +msgstr "" + +#: src/sid/xs_config.cc:69 +msgid "Emulate MOS 8580 (default: MOS 6581)" +msgstr "" + +#: src/sid/xs_config.cc:71 +msgid "Do not automatically select chip model" +msgstr "" + +#: src/sid/xs_config.cc:73 +msgid "Emulate filter" +msgstr "" + +#: src/sid/xs_config.cc:75 +msgid "Clock speed:" +msgstr "" + +#: src/sid/xs_config.cc:78 +msgid "Do not automatically select clock speed" +msgstr "" + +#: src/sid/xs_config.cc:80 +msgid "Playback time" +msgstr "" + +#: src/sid/xs_config.cc:81 +msgid "Set maximum playback time:" +msgstr "" + +#: src/sid/xs_config.cc:87 +msgid "Use only when song length is unknown" +msgstr "" + +#: src/sid/xs_config.cc:90 +msgid "Set minimum playback time:" +msgstr "" + +#: src/sid/xs_config.cc:96 +msgid "Subtunes" +msgstr "" + +#: src/sid/xs_config.cc:97 +msgid "Enable subtunes" +msgstr "" + +#: src/sid/xs_config.cc:99 +msgid "Ignore subtunes shorter than:" +msgstr "" + +#: src/sid/xs_config.cc:105 +msgid "Note" +msgstr "" + +#: src/silence-removal/silence-removal.cc:39 +msgid "Silence Removal" +msgstr "" + +#: src/silence-removal/silence-removal.cc:58 +msgid "" +"Silence Removal Plugin for Audacious\n" +"Copyright 2014 John Lindgren" +msgstr "" + +#: src/silence-removal/silence-removal.cc:67 +msgid "Silence Removal" +msgstr "" + +#: src/silence-removal/silence-removal.cc:68 +msgid "Threshold:" +msgstr "" + +#: src/silence-removal/silence-removal.cc:70 +msgid "dB" +msgstr "دسیبل" + +#: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 +msgid "Repeat points cleared." +msgstr "" + +#: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 +msgid "Repeat point A set." +msgstr "" + +#: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 +msgid "Repeat point B set." +msgstr "" + +#: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 +msgid "Preamp" +msgstr "پیش‌تقویت‌کننده" + +#: src/skins/equalizer.cc:228 src/skins-qt/equalizer.cc:225 +msgid "31 Hz" +msgstr "31 هرتز" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "63 Hz" +msgstr "63 هرتز" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "125 Hz" +msgstr "125 هرتز" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "250 Hz" +msgstr "250 هرتز" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "500 Hz" +msgstr "500 هرتز" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "1 kHz" +msgstr "1 کیلوهرتز" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "2 kHz" +msgstr "2 کیلوهرتز" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "4 kHz" +msgstr "4 کیلوهرتز" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "8 kHz" +msgstr "8 کیلوهرتز" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "16 kHz" +msgstr "16 کیلوهرتز" + +#: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 +msgid "Audacious Equalizer" +msgstr "اکولایزر Audacious" + +#: src/skins/main.cc:452 src/skins-qt/main.cc:436 +msgid "Recording on" +msgstr "" + +#: src/skins/main.cc:454 src/skins-qt/main.cc:438 +msgid "Recording off" +msgstr "" + +#: src/skins/main.cc:749 src/skins-qt/main.cc:690 +#, c-format +msgid "Seek to %d:%-2.2d / %d:%-2.2d" +msgstr "پیمایش به ‎%d:%-2.2d / %d:%-2.2d" + +#: src/skins/main.cc:766 src/skins-qt/main.cc:707 +#, c-format +msgid "Volume: %d%%" +msgstr "صدا: ‎%d%%‎" + +#: src/skins/main.cc:779 src/skins-qt/main.cc:720 +#, c-format +msgid "Balance: %d%% left" +msgstr "بالانس: ‎%d%%‎ چپ" + +#: src/skins/main.cc:781 src/skins-qt/main.cc:722 +msgid "Balance: center" +msgstr "بالانس: مرکز" + +#: src/skins/main.cc:783 src/skins-qt/main.cc:724 +#, c-format +msgid "Balance: %d%% right" +msgstr "بالانس: ‎%d%%‎ راست" + +#: src/skins/main.cc:875 src/skins-qt/main.cc:816 +msgid "Options Menu" +msgstr "منوی گزینه‌ها" + +#: src/skins/main.cc:879 src/skins-qt/main.cc:820 +msgid "Disable 'Always On Top'" +msgstr "غیرفعال کردن 'همیشه در بالا'" + +#: src/skins/main.cc:881 src/skins-qt/main.cc:822 +msgid "Enable 'Always On Top'" +msgstr "فعال کردن 'همیشه در بالا'" + +#: src/skins/main.cc:884 src/skins-qt/main.cc:825 +msgid "File Info Box" +msgstr "جعبه اطلاعات فایل" + +#: src/skins/main.cc:887 src/skins/menus.cc:149 src/skins-qt/main.cc:828 +#: src/skins-qt/menus.cc:142 +msgid "Double Size" +msgstr "" + +#: src/skins/main.cc:890 src/skins-qt/main.cc:831 +msgid "Visualizations" +msgstr "" + +#: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 +msgid "Volume Up" +msgstr "" + +#: src/skins/menus.cc:75 src/skins-qt/menus.cc:65 +msgid "Volume Down" +msgstr "" + +#: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 +msgid "Effects ..." +msgstr "" + +#: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 +msgid "Open Files ..." +msgstr "" + +#: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 +msgid "Open URL ..." +msgstr "" + +#: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 +msgid "Playback" +msgstr "پخش" + +#: src/skins/menus.cc:89 src/skins-qt/menus.cc:80 +msgid "Playlist" +msgstr "لیست پخش" + +#: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 +msgid "Output" +msgstr "خروجی" + +#: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 +msgid "View" +msgstr "نما" + +#: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 +#: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 +msgid "Services" +msgstr "خدمات" + +#: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 +msgid "About ..." +msgstr "درباره..." + +#: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 +msgid "Settings ..." +msgstr "تنظیمات..." + +#: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 +msgid "Quit" +msgstr "خروج" + +#: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 +#: src/skins-qt/menus.cc:229 +msgid "Song Info ..." +msgstr "" + +#: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 +msgid "Shuffle by Album" +msgstr "" + +#: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 +msgid "No Playlist Advance" +msgstr "لیست پخش به جلو نرود" + +#: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 +msgid "Set A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:118 src/skins-qt/menus.cc:109 +msgid "Clear A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 +msgid "Jump to Song ..." +msgstr "" + +#: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 +msgid "Jump to Time ..." +msgstr "پرش به زمان..." + +#: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 +msgid "Play/Resume" +msgstr "پخش/ادامه" + +#: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 +msgid "New Playlist" +msgstr "لیست پخش جدید" + +#: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 +msgid "Rename Playlist ..." +msgstr "تغییرنام لیست پخش..." + +#: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 +msgid "Remove Playlist" +msgstr "حذف لیست پخش" + +#: src/skins/menus.cc:131 src/skins-qt/menus.cc:124 +msgid "Previous Playlist" +msgstr "لیست پخش قبلی" + +#: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 +msgid "Next Playlist" +msgstr "لیست پخش بعدی" + +#: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 +msgid "Import Playlist ..." +msgstr "" + +#: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 +msgid "Export Playlist ..." +msgstr "" + +#: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 +msgid "Playlist Manager ..." +msgstr "" + +#: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 +msgid "Queue Manager ..." +msgstr "" + +#: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 +msgid "Refresh Playlist" +msgstr "" + +#: src/skins/menus.cc:144 src/skins-qt/menus.cc:137 +msgid "Show Playlist Editor" +msgstr "نمایش ویرایشگر لیست پخش" + +#: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 +msgid "Show Equalizer" +msgstr "نمایش اکولایزر" + +#: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 +msgid "Show Remaining Time" +msgstr "نمایش زمان باقی مانده" + +#: src/skins/menus.cc:150 src/skins-qt/menus.cc:143 +msgid "Always on Top" +msgstr "همیشه در بالا" + +#: src/skins/menus.cc:151 src/skins-qt/menus.cc:145 +msgid "On All Workspaces" +msgstr "" + +#: src/skins/menus.cc:153 src/skins-qt/menus.cc:148 +msgid "Roll Up Player" +msgstr "" + +#: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 +msgid "Roll Up Playlist Editor" +msgstr "" + +#: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 +msgid "Roll Up Equalizer" +msgstr "" + +#: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 +msgid "Add URL ..." +msgstr "افزودن آدرس اینترنتی..." + +#: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 +msgid "Add Files ..." +msgstr "افزودن فایل ها..." + +#: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 +msgid "By Title" +msgstr "براساس عنوان" + +#: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 +msgid "By File Name" +msgstr "بر اساس نام فایل" + +#: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 +msgid "By File Path" +msgstr "بر اساس مسیر فایل" + +#: src/skins/menus.cc:176 src/skins-qt/menus.cc:172 +msgid "Remove All" +msgstr "حذف همه" + +#: src/skins/menus.cc:177 src/skins-qt/menus.cc:173 +msgid "Clear Queue" +msgstr "پاکسازی صف" + +#: src/skins/menus.cc:179 src/skins-qt/menus.cc:175 +msgid "Remove Unavailable Files" +msgstr "پاک کردن فایل‌های خارج از دسترس" + +#: src/skins/menus.cc:180 src/skins-qt/menus.cc:176 +msgid "Remove Duplicates" +msgstr "پاک کردن فایل‌های تکراری" + +#: src/skins/menus.cc:182 src/skins-qt/menus.cc:178 +msgid "Remove Unselected" +msgstr "حذف انتخاب‌نشده‌ها" + +#: src/skins/menus.cc:183 src/skins-qt/menus.cc:179 +msgid "Remove Selected" +msgstr "حذف انتخاب‌شده‌ها" + +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 +msgid "Search and Select" +msgstr "جستجو و انتخاب" + +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 +msgid "Invert Selection" +msgstr "برعکس کردن انتخاب‌ها" + +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 +msgid "Select None" +msgstr "انتخاب هیچ‌کدام" + +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 +msgid "Select All" +msgstr "انتخاب همه" + +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 +msgid "By Track Number" +msgstr "براساس شماره آهنگ" + +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 +msgid "By Artist" +msgstr "براساس هنرمند" + +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 +msgid "By Album" +msgstr "براساس آلبوم" + +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 +msgid "By Album Artist" +msgstr "بر اساس هنرمند آلبوم" + +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 +msgid "By Release Date" +msgstr "بر اساس تاریخ انتشار" + +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 +msgid "By Genre" +msgstr "بر اساس سبک" + +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 +msgid "By Length" +msgstr "بر اساس مدت زمان" + +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 +msgid "By Custom Title" +msgstr "" + +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 +msgid "By Comment" +msgstr "" + +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 +msgid "Randomize List" +msgstr "بهم‌ریختن لیست" + +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 +msgid "Reverse List" +msgstr "برعکس کردن ترتیب لیست" + +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 +msgid "Sort Selected" +msgstr "مرتب‌سازی انتخاب‌شده‌ها" + +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 +msgid "Sort List" +msgstr "مرتب‌سازی لیست" + +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 +msgid "Open Containing Folder" +msgstr "" + +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 +msgid "Cut" +msgstr "برش" + +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 +msgid "Copy" +msgstr "کپی" + +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 +msgid "Paste" +msgstr "چسباندن" + +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 +msgid "Paste at End" +msgstr "" + +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 +msgid "Queue/Unqueue" +msgstr "" + +#: src/skins/playlist-widget.cc:55 src/skins-qt/playlist-widget.cc:56 +#, c-format +msgid "%s (%d of %d)" +msgstr "‎%s (%d of %d)‎" + +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 +msgid "Audacious Playlist Editor" +msgstr "ویرایشگر لیست پخش Audacious" + +#: src/skins/plugin.cc:49 src/skins-qt/plugin.cc:64 +msgid "Winamp Classic Interface" +msgstr "" + +#: src/skins-qt/menus.cc:75 +msgid "Open Folder ..." +msgstr "بازنمایی پوشه..." + +#: src/skins-qt/menus.cc:159 +msgid "Add Folder ..." +msgstr "افزودن پوشه..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "گزینه‌های موجود در لیست پخش فعال را جستجو کن" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"انتخاب گزینه‌های لیست پخش بر اساس یک یا چن فیلد. فیلدها از قاعده عبارات منظم " +"پشتیبانی کرده، به بزرگی و کوچکی حروف حساس هستند. اگر نمی‌دانید عبارات منظم چه " +"هستند، بخشی از عبارت موردنظر خود را وارد کنید." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "عنوان:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "آلبوم:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "هنرمند:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "نام فایل:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "قبل از جستجو انتخاب قبلی را پاک کن" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "گزینه‌های یافت شده را در صف نشان بده" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "لیست پخش براساس گزینه‌های یافت شده ایجاد کن" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "جستجو" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 +msgid "Player:" +msgstr "پخش کننده:" + +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 +msgid "Select main player window font:" +msgstr "فونت اصلی پنجره پخش‌کننده را انتخاب کنید:" + +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 +msgid "Playlist:" +msgstr "لیست پخش:" + +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 +msgid "Select playlist font:" +msgstr "فونت لیست پخش را انتخاب کنید:" + +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 +msgid "Skin" +msgstr "پوسته" + +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 +msgid "Fonts" +msgstr "فونت" + +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 +msgid "Use bitmap fonts (supports ASCII only)" +msgstr "انتخاب فونت‌های نقشه‌بیتی (فقط از اسکی پشتیبانی می‌شود)" + +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 +msgid "Scroll song title" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 +msgid "Scroll song title in both directions" +msgstr "عنوان آهنگ در هر دو جهت حرکت کند" + +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 +msgid "Analyzer" +msgstr "تحلیل‌کننده" + +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 +msgid "Scope" +msgstr "محدوده" + +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 +msgid "Voiceprint / VU meter" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 +msgid "Off" +msgstr "خاموش" + +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 +#: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 +msgid "Normal" +msgstr "نرمال" + +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 +#: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 +msgid "Fire" +msgstr "آتش" + +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 +msgid "Vertical lines" +msgstr "خطوط عمودی" + +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 +msgid "Lines" +msgstr "خط ها" + +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 +msgid "Bars" +msgstr "میله‌ها" + +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 +msgid "Slowest" +msgstr "کندترین" + +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 +msgid "Slow" +msgstr "کند" + +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 +#: src/soxr/sox-resampler.cc:180 +msgid "Medium" +msgstr "متوسط" + +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 +msgid "Fast" +msgstr "تند" + +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 +msgid "Fastest" +msgstr "تندترین" + +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 +msgid "Dots" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 +msgid "Line" +msgstr "نقطه ای" + +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 +msgid "Solid" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 +msgid "Ice" +msgstr "یخ" + +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 +msgid "Smooth" +msgstr "نرم" + +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 +msgid "Coloring:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 +msgid "Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 +msgid "Falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 +msgid "Peak falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 +msgid "Scope Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 +msgid "Voiceprint Coloring:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 +msgid "VU Meter Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 +msgid "Type" +msgstr "نوع" + +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 +msgid "Visualization type:" +msgstr "نوع جلوه های تصویری:" + +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 +msgid "Analyzer" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 +msgid "Show peaks" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 +msgid "Visualization" +msgstr "جلوه‌های تصویری" + +#: src/skins-qt/skinselector.cc:98 src/skins/skinselector.cc:111 +msgid "Archived Winamp 2.x skin" +msgstr "پوسته فشرده Winamp 2.x" + +#: src/skins-qt/skinselector.cc:102 src/skins/skinselector.cc:115 +msgid "Unarchived Winamp 2.x skin" +msgstr "پوسته غیرفشرده Winamp 2.x" + +#: src/sndfile/plugin.cc:38 +msgid "Sndfile Plugin" +msgstr "" + +#: src/sndfile/plugin.cc:372 +msgid "" +"Based on the xmms_sndfile plugin:\n" +"Copyright (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Adapted for Audacious by Tony Vroon \n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/sndio/sndio.cc:43 +msgid "Sndio Output" +msgstr "" + +#: src/sndio/sndio.cc:98 +msgid "Device (blank for default):" +msgstr "" + +#: src/sndio/sndio.cc:100 +msgid "Save and restore volume:" +msgstr "" + +#: src/sndio/sndio.cc:181 +#, c-format +msgid "Sndio error: Unsupported audio format (%d)" +msgstr "" + +#: src/sndio/sndio.cc:192 +msgid "Sndio error: sio_open() failed" +msgstr "" + +#: src/sndio/sndio.cc:221 +msgid "Sndio error: sio_setpar() failed" +msgstr "" + +#: src/sndio/sndio.cc:233 +msgid "Sndio error: sio_start() failed" +msgstr "" + +#: src/songchange/song_change.cc:30 +msgid "Song Change" +msgstr "" + +#: src/songchange/song_change.cc:245 +msgid "Commands" +msgstr "" + +#: src/songchange/song_change.cc:247 +msgid "Command to run when starting a new song:" +msgstr "" + +#: src/songchange/song_change.cc:250 +msgid "Command to run at the end of a song:" +msgstr "" + +#: src/songchange/song_change.cc:253 +msgid "Command to run at the end of the playlist:" +msgstr "" + +#: src/songchange/song_change.cc:256 +msgid "Command to run when song title changes (for network streams):" +msgstr "" + +#: src/songchange/song_change.cc:259 +msgid "" +"You can use the following format codes, which will be replaced before " +"running the command (not all are useful for the end-of-playlist command):" +msgstr "" + +#: src/songchange/song_change.cc:262 +msgid "" +"%a: Artist\n" +"%b: Album\n" +"%c: Number of channels\n" +"%f: File name (full path)\n" +"%F: Frequency (Hertz)\n" +"%l: Length (milliseconds)\n" +"%n or %s: Formatted title (see playlist settings)\n" +"%p: Currently playing (1 or 0)\n" +"%r: Rate (bits per second)\n" +"%t: Playlist position\n" +"%T: Title (unformatted)" +msgstr "" + +#: src/songchange/song_change.cc:273 +msgid "" +"Parameters passed to the shell should be enclosed in quotation marks. " +"Unquoted parameters may lead to unexpected results." +msgstr "" + +#: src/song-info-qt/song-info.cc:30 +msgid "Song Info" +msgstr "اطلاعات آهنگ" + +#: src/soxr/sox-resampler.cc:44 +msgid "SoX Resampler" +msgstr "" + +#: src/soxr/sox-resampler.cc:172 +msgid "" +"SoX Resampler Plugin for Audacious\n" +"Copyright 2013 Michał Lipski\n" +"\n" +"Based on Sample Rate Converter Plugin:\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" + +#: src/soxr/sox-resampler.cc:178 +msgid "Quick" +msgstr "سریع" + +#: src/soxr/sox-resampler.cc:179 +msgid "Low" +msgstr "پایین" + +#: src/soxr/sox-resampler.cc:181 +msgid "High" +msgstr "بالا" + +#: src/soxr/sox-resampler.cc:182 +msgid "Very High" +msgstr "خیلی بالا" + +#: src/soxr/sox-resampler.cc:183 +msgid "Ultra High" +msgstr "" + +#: src/soxr/sox-resampler.cc:187 +msgid "Minimum" +msgstr "کمینه" + +#: src/soxr/sox-resampler.cc:188 +msgid "Intermediate" +msgstr "" + +#: src/soxr/sox-resampler.cc:193 +msgid "Quality:" +msgstr "کیفیت:" + +#: src/soxr/sox-resampler.cc:196 +msgid "Phase:" +msgstr "" + +#: src/soxr/sox-resampler.cc:200 +msgid "Allow aliasing" +msgstr "" + +#: src/soxr/sox-resampler.cc:202 +msgid "Use steep filter" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:54 +msgid "Speed and Pitch" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:247 +msgid "Speed" +msgstr "سرعت" + +#: src/speedpitch/speed-pitch.cc:248 +msgid "Decouple from pitch" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 +msgid "Multiplier:" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:254 +msgid "Pitch" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 +msgid "Status Icon" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:65 +msgid "" +"Status Icon Plugin (partial port for Qt interface)\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"Copyright 2015 Eugene Paskevich \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 +msgid "Mouse Scroll Action" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 +msgid "Change volume" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:90 src/statusicon/statusicon.cc:384 +msgid "Change playing song" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:93 src/statusicon/statusicon.cc:387 +msgid "Other Settings" +msgstr "تنظیمات دیگر" + +#: src/statusicon-qt/statusicon.cc:94 src/statusicon/statusicon.cc:388 +msgid "Disable the popup window" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:96 src/statusicon/statusicon.cc:390 +msgid "Close to the system tray" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 +msgid "Advance in playlist when scrolling upward" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 +msgid "Se_ttings ..." +msgstr "" + +#: src/statusicon/statusicon.cc:373 +msgid "" +"Status Icon Plugin\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/stereo_plugin/stereo.cc:19 +msgid "Extra Stereo" +msgstr "" + +#: src/stereo_plugin/stereo.cc:36 +msgid "" +"Extra Stereo Plugin\n" +"\n" +"By Johan Levin, 1999" +msgstr "" + +#: src/stereo_plugin/stereo.cc:44 +msgid "Extra Stereo" +msgstr "" + +#: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 +msgid "Type" +msgstr "نوع" + +#: src/streamtuner/icecast-model.cc:132 +msgid "Current Song" +msgstr "ترانه کنونی" + +#: src/streamtuner/icecast-model.cc:164 +msgid "Other" +msgstr "دیگر" + +#: src/streamtuner/ihr-model.cc:63 +msgid "Market" +msgstr "" + +#: src/streamtuner/ihr-model.cc:156 +msgid "Call Letters" +msgstr "" + +#: src/streamtuner/ihr-model.cc:162 +msgid "Description" +msgstr "شرح" + +#: src/streamtuner/shoutcast-model.cc:128 +msgid "Listeners" +msgstr "شنونده ها" + +#: src/streamtuner/shoutcast-model.cc:188 +msgid "Top 500 Stations" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:189 +msgid "Alternative" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:190 +msgid "Blues" +msgstr "بلوز" + +#: src/streamtuner/shoutcast-model.cc:191 +msgid "Classical" +msgstr "کلاسیک" + +#: src/streamtuner/shoutcast-model.cc:192 +msgid "Country" +msgstr "کانتری" + +#: src/streamtuner/shoutcast-model.cc:193 +msgid "Decades" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:194 +msgid "Easy Listening" +msgstr "موسیقی آرام" + +#: src/streamtuner/shoutcast-model.cc:195 +msgid "Electronic" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:196 +msgid "Folk" +msgstr "فولک" + +#: src/streamtuner/shoutcast-model.cc:197 +msgid "Inspirational" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:198 +msgid "International" +msgstr "بین المللی" + +#: src/streamtuner/shoutcast-model.cc:199 +msgid "Jazz" +msgstr "جاز" + +#: src/streamtuner/shoutcast-model.cc:200 +msgid "Latin" +msgstr "لاتین" + +#: src/streamtuner/shoutcast-model.cc:201 +msgid "Metal" +msgstr "متال" + +#: src/streamtuner/shoutcast-model.cc:203 +msgid "New Age" +msgstr "عصر جدید" + +#: src/streamtuner/shoutcast-model.cc:204 +msgid "Pop" +msgstr "پاپ" + +#: src/streamtuner/shoutcast-model.cc:205 +msgid "Public Radio" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:206 +msgid "R&B and Urban" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:207 +msgid "Rap" +msgstr "رپ" + +#: src/streamtuner/shoutcast-model.cc:208 +msgid "Reggae" +msgstr "رگه" + +#: src/streamtuner/shoutcast-model.cc:209 +msgid "Rock" +msgstr "راک" + +#: src/streamtuner/shoutcast-model.cc:210 +msgid "Seasonal and Holiday" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:211 +msgid "Soundtracks" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:212 +msgid "Talk" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:213 +msgid "Themes" +msgstr "" + +#: src/streamtuner/streamtuner.cc:59 +msgid "Shoutcast" +msgstr "" + +#: src/streamtuner/streamtuner.cc:60 +msgid "Icecast" +msgstr "" + +#: src/streamtuner/streamtuner.cc:71 +msgid "Stream Tuner" +msgstr "" + +#: src/tonegen/tonegen.cc:45 +msgid "Tone Generator" +msgstr "" + +#: src/tonegen/tonegen.cc:92 +#, c-format +msgid "%s %.1f Hz" +msgstr "" + +#: src/tonegen/tonegen.cc:92 +msgid "Tone Generator: " +msgstr "" + +#: src/tonegen/tonegen.cc:161 +msgid "" +"Sine tone generator by Håvard Kvålen \n" +"Modified by Daniel J. Peng \n" +"\n" +"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" +"e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" +msgstr "" + +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(پیام‌های بیشتر مخفی شده‌اند.)" + +#: src/ui-common/dialogs-qt.cc:52 +msgid "Working ..." +msgstr "در حال کار..." + +#: src/ui-common/dialogs-qt.cc:72 +msgid "Information" +msgstr "اطلاعات" + +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + +#: src/voice_removal/voice_removal.cc:28 +msgid "Voice Removal" +msgstr "" + +#: src/vorbis/vorbis.cc:429 +msgid "" +"Audacious Ogg Vorbis Decoder\n" +"\n" +"Based on the Xiph.org Foundation's Ogg Vorbis Plugin:\n" +"http://www.xiph.org/\n" +"\n" +"Original code by:\n" +"Tony Arcieri \n" +"\n" +"Contributions from:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " +msgstr "" + +#: src/vorbis/vorbis.h:18 +msgid "Ogg Vorbis Decoder" +msgstr "" + +#: src/vtx/info.cc:24 +#, c-format +msgid "Details about %s" +msgstr "" + +#: src/vtx/info.cc:26 +msgid "" +"Title: %t\n" +"Author: %a\n" +"From: %f\n" +"Tracker: %T\n" +"Comment: %C\n" +"Chip type: %c\n" +"Stereo: %s\n" +"Loop: %l\n" +"Chip freq: %F\n" +"Player Freq: %P\n" +"Year: %y" +msgstr "" + +#: src/vtx/vtx.cc:38 +msgid "VTX Decoder" +msgstr "" + +#: src/vtx/vtx.cc:178 +msgid "" +"Vortex file format player by Sashnov Alexander \n" +"Based on in_vtx.dll by Roman Sherbakov \n" +"Audacious plugin by Pavel Vymetalek " +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:31 +msgid "" +"VU Meter Plugin for Audacious\n" +"Copyright 2017-2019 Marc Sánchez Fauste" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:35 +msgid "VU Meter Settings" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:37 +msgid "Peak hold time:" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:42 +msgid "Fall-off time:" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:44 +msgid "dB/second" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:46 +msgid "Display legend" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.h:37 +msgid "VU Meter" +msgstr "" + +#: src/waveout/waveout.cc:43 +msgid "Win32 waveOut" +msgstr "" + +#: src/waveout/waveout.cc:69 +msgid "" +"Win32 waveOut Plugin for Audacious\n" +"Copyright 2016 John Lindgren" +msgstr "" + +#: src/wavpack/wavpack.cc:25 +msgid "WavPack Decoder" +msgstr "" + +#: src/wavpack/wavpack.cc:217 +msgid "lossy (hybrid)" +msgstr "" + +#: src/wavpack/wavpack.cc:219 +msgid "lossy" +msgstr "" + +#: src/wavpack/wavpack.cc:259 +msgid "" +"Copyright 2006 William Pitcock \n" +"\n" +"Some of the plugin code was by Miles Egan." +msgstr "" + +#: src/xsf/plugin.cc:74 +msgid "2SF Decoder" +msgstr "" + +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 +msgid "XSF Configuration" +msgstr "" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + +#: src/xspf/xspf.cc:95 +msgid "XML Shareable Playlists (XSPF)" +msgstr "" diff -Nru audacious-plugins-4.1/po/fi.po audacious-plugins-4.2/po/fi.po --- audacious-plugins-4.1/po/fi.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/fi.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,17 +3,17 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# Jiri Grönroos , 2014-2016,2018,2020 +# Jiri Grönroos , 2014-2016,2018,2020,2022 # J. S. Tuomisto , 2013 # J. S. Tuomisto , 2013 -# Kimmo Kujansuu , 2020 +# Kimmo Kujansuu , 2020,2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-22 17:15+0000\n" -"Last-Translator: Jiri Grönroos \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Kimmo Kujansuu , 2020,2022\n" "Language-Team: Finnish (http://www.transifex.com/audacious/audacious/" "language/fi/)\n" "Language: fi\n" @@ -31,7 +31,7 @@ msgstr "AdPlug (AdLib-soitin)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sarjoitettu" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Sekalaiset" @@ -324,7 +324,7 @@ #: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 msgid "Album Art" -msgstr "Albumin kansikuvitus" +msgstr "Levyn kansikuva" #: src/alsa/alsa.h:64 msgid "ALSA Output" @@ -338,11 +338,11 @@ "My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " "code served as a reference when the ALSA manual was not enough." msgstr "" -"ALSA-lähdön liitännäinen Audacioukselle.\n" +"ALSA Output Plugin for Audacious\n" "Copyright 2009-2012 John Lindgren\n" "\n" -"Kiitokseni William Pitcock:lle (ALSA Output Plugin NG:n kehittäjä), jonka " -"koodi toimi referenssinä silloin, kun ALSA:n manuaali ei riittänyt." +"Kiitokseni William Pitcock \"ALSA Output Plugin NG\"-kehittäjälle, jonka " +"koodi toimi referenssinä silloin kun ALSA-manuaali ei riittänyt." #: src/alsa/config.cc:61 msgid "(no description)" @@ -370,7 +370,7 @@ #: src/amidiplug/amidi-plug.cc:42 msgid "AMIDI-Plug (MIDI Player)" -msgstr "AMIDI-liitännäinen (MIDI-soitin)" +msgstr "AMIDI-Plug (MIDI Player)" #: src/amidiplug/amidi-plug.cc:445 msgid "" @@ -472,13 +472,14 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Näytteenottotaajuus:" #: src/amidiplug/i_configure-fluidsynth.cc:57 #: src/amidiplug/i_configure-fluidsynth.cc:536 msgid "AMIDI-Plug - select SoundFont file" -msgstr "AMIDI-liitännäinen - valitse SoundFont-tiedosto" +msgstr "AMIDI-Plug - valitse SoundFont-tiedosto" #: src/amidiplug/i_configure-fluidsynth.cc:60 msgid "_Cancel" @@ -547,6 +548,7 @@ msgstr "* MIDI-tiedostossa ei ollut lyriikoita *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Sulje" @@ -606,7 +608,7 @@ msgid "Concave Rectangle" msgstr "Kovera suorakulmio" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ei mitään" @@ -794,15 +796,31 @@ #: src/asx3/asx3.cc:35 msgid "ASXv3 Playlists" -msgstr "ASXv3-soittolistat" +msgstr "ASXv3-soittolista" #: src/asx/asx.cc:33 msgid "ASXv1/ASXv2 Playlists" -msgstr "ASXv1/ASXv2 -soittolistat" +msgstr "ASXv1/ASXv2-soittolista" #: src/audpl/audpl.cc:33 msgid "Audacious Playlists (audpl)" -msgstr "Audacious -soittolistat (audpl)" +msgstr "Audacious soittolista (audpl)" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Bittisyvyys:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Alataajuus:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" @@ -810,7 +828,7 @@ #: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 msgid "Blur Scope" -msgstr "Blur Scope" +msgstr "Sumenna alue" #: src/bs2b/plugin.cc:38 msgid "Bauer Stereophonic-to-Binaural (BS2B)" @@ -834,11 +852,11 @@ #: src/cairo-spectrum/cairo-spectrum.cc:41 src/qt-spectrum/qt-spectrum.cc:107 msgid "Spectrum Analyzer" -msgstr "Spektrianalysaattori" +msgstr "Spektri analysaattori" #: src/cdaudio/cdaudio-ng.cc:71 msgid "Audio CD Plugin" -msgstr "Ääni CD -liitännäinen" +msgstr "Audio CD Plugin" #: src/cdaudio/cdaudio-ng.cc:118 msgid "" @@ -1004,7 +1022,7 @@ "Dynamic Range Compression Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" -"Dynaamisen alueen kompressori -liitännäinen Audacioukselle\n" +"Dynamic Range Compression Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" #: src/compressor/compressor.cc:64 @@ -1104,12 +1122,12 @@ "Crossfade Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" -"Ristiinhäivytys-liitännäinen Audacioukselle\n" +"Crossfade Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" #: src/crossfade/crossfade.cc:47 msgid "Crossfade" -msgstr "Ristiinhäivytys" +msgstr "Ristihäivytys" #: src/crossfade/crossfade.cc:48 msgid "On automatic song change" @@ -1137,7 +1155,7 @@ #: src/crossfade/crossfade.cc:71 msgid "Crossfade" -msgstr "Ristiinhäivytys" +msgstr "Ristihäivytys" #: src/crystalizer/crystalizer.cc:31 msgid "Crystalizer" @@ -1153,7 +1171,7 @@ #: src/cue/cue.cc:42 msgid "Cue Sheet Plugin" -msgstr "Cue Sheet -liitännäinen" +msgstr "Cue Sheet Plugin" #: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 #: src/delete-files/delete-files.cc:230 @@ -1193,7 +1211,7 @@ msgstr "Poista" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Peruuta" @@ -1231,7 +1249,7 @@ msgstr "Viive:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1249,9 +1267,9 @@ #: src/ffaudio/ffaudio-core.cc:49 msgid "FFmpeg Plugin" -msgstr "FFmpeg-liitännäinen" +msgstr "FFmpeg Plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1260,16 +1278,16 @@ "William Pitcock \n" "Matti Hämäläinen " msgstr "" -"Monen ääniformaatin dekoodaus -liitännäinen Audacioukselle käyttäen FFmpeg " -"multimedia frameworkia (http://www.ffmpeg.org/).\n" +"Multi-format audio decoding plugin for Audacious using\n" +"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" "\n" -"Audacious liitännäisen kehittivät:\n" +"Audacious lisäosan kehittivät:\n" "William Pitcock \n" "Matti Hämäläinen " #: src/filewriter/filewriter.cc:48 msgid "FileWriter Plugin" -msgstr "FileWriter-liitännäinen" +msgstr "FileWriter Plugin" #: src/filewriter/filewriter.cc:316 #, c-format @@ -1375,77 +1393,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1569,7 +1587,7 @@ msgid "Quality (0-1):" msgstr "Laatu (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Yleiset" @@ -1578,11 +1596,11 @@ msgid "FLAC Decoder" msgstr "FLAC-dekooderi" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "häviötön" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1599,12 +1617,12 @@ "GIO Plugin for Audacious\n" "Copyright 2009-2012 John Lindgren" msgstr "" -"GIO-liitännäinen Audacioukselle\n" +"GIO Plugin for Audacious\n" "Copyright 2009-2012 John Lindgren" #: src/gio/gio.cc:42 msgid "GIO Plugin" -msgstr "GIO-liitännäinen" +msgstr "GIO Plugin" #: src/gio/gio.cc:152 msgid "Read-and-append mode not supported" @@ -1636,7 +1654,7 @@ #: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 msgid "OpenGL Spectrum Analyzer" -msgstr "OpenGL Spektrianalysaattori" +msgstr "Spektri analysaattori OpenGL" #: src/gtkui/columns.cc:35 msgid "Entry number" @@ -1664,11 +1682,11 @@ #: src/gtkui/columns.cc:39 src/moonstone/playlist_model.cc:39 #: src/qtui/playlist_model.cc:34 msgid "Album" -msgstr "Albumi" +msgstr "Levy" #: src/gtkui/columns.cc:40 msgid "Album artist" -msgstr "Albumin esittäjä" +msgstr "Levyn esittäjä" #: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 #: src/qtui/playlist_model.cc:34 @@ -1721,7 +1739,7 @@ #: src/gtkui/layout.cc:73 src/search-tool-qt/search-tool-qt.cc:58 #: src/search-tool/search-tool.cc:48 msgid "Search Tool" -msgstr "Etsintätyökalu" +msgstr "Haku" #: src/gtkui/layout.cc:168 msgid "Dock at Left" @@ -1812,12 +1830,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "Edellinen albumi" +msgstr "Edellinen levy" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "Seuraava albumi" +msgstr "Seuraava levy" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -2026,7 +2044,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "Näytä tietopalkki _Album Art" +msgstr "Näytä tietopalkki _Levyn kansi" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2242,8 +2260,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2361,7 +2379,7 @@ #: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 msgid "Global Hotkeys" -msgstr "Globaalit pikanäppäimet" +msgstr "Yleiset pikanäppäimet" #: src/hotkey/plugin.cc:76 msgid "" @@ -2471,10 +2489,9 @@ "These paths are searched in addition to LADSPA_PATH.\n" "After adding new paths, press Enter to scan for new plugins." msgstr "" -"Erota polut kaksoispisteellä.\n" -"Näistä poluista etsitään liitännäisiä, LADSPA_PATH:n lisäksi.\n" -"Uuden polun lisäämisen jälkeen paina entteriä hakeaksesi uusia liitännäisiä." -"" +"Erota useita polkuja kaksoispisteellä.\n" +"Näistä poluista etsitään lisäosia, LADSPA-polun lisäksi.\n" +"Uuden polun lisäämisen jälkeen paina enter ja etsi uusia lisäosia." #: src/ladspa/plugin.cc:502 msgid "Available plugins:" @@ -2499,16 +2516,16 @@ "LADSPA Host for Audacious\n" "Copyright 2011 John Lindgren" msgstr "" -"LADSPA-isäntä Audacioukselle\n" +"LADSPA Host for Audacious\n" "Copyright 2011 John Lindgren" #: src/ladspa/plugin.h:78 msgid "LADSPA Host" -msgstr "LADSPA-isäntä" +msgstr "Kone LADSPA" #: src/lirc/lirc.cc:55 msgid "LIRC Plugin" -msgstr "LIRC-liitännäinen" +msgstr "LIRC Plugin" #: src/lirc/lirc.cc:379 msgid "" @@ -2525,18 +2542,18 @@ "\n" "For more information about LIRC, see http://lirc.org." msgstr "" -"Yksinkertainen liitännäinen Audaciouksen ohjaamiseen LIRC:n avulla.\n" +"Lisäosa Audaciouksen ohjaamiseen LIRC:n avulla.\n" "\n" "Muuntanut Audacioukselle:\n" "Tony Vroon \n" "Joonas Harjumäki \n" "\n" -"Perustuu XMMS LIRC -liitännäiseen, jonka kehittivät:\n" +"Perustuu XMMS LIRC Plugin, jonka kehittivät:\n" "Carl van Schaik \n" "Christoph Bartelmus \n" "Andrew O. Shadoura \n" "\n" -"Lisää tieto LIRC:stä http://lirc.org." +"Lisätietoja LIRC:stä http://lirc.org." #: src/lirc/lirc.cc:390 msgid "Connection" @@ -2624,7 +2641,7 @@ msgid "Looking for lyrics ..." msgstr "Etsitään lyriikoita..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Virhe" @@ -2646,7 +2663,7 @@ #: src/m3u/m3u.cc:32 msgid "M3U Playlists" -msgstr "M3U-soittolistat" +msgstr "M3U-soittolista" #: src/metronom/metronom.cc:44 msgid "Tact Generator" @@ -2685,8 +2702,8 @@ "Channel Mixer Plugin for Audacious\n" "Copyright 2011-2012 John Lindgren and Michał Lipski" msgstr "" -"Kanavamikseri-liitännäinen Audacioukselle\n" -"Copyright 2011-2012 John Lindgren ja Michał Lipski" +"Channel Mixer Plugin for Audacious\n" +"Copyright 2011-2012 John Lindgren and Michał Lipski" #: src/mixer/mixer.cc:259 msgid "Channel Mixer" @@ -2698,7 +2715,7 @@ #: src/mms/mms.cc:35 msgid "MMS Plugin" -msgstr "MMS-liitännäinen" +msgstr "MMS Plugin" #: src/mms/mms.cc:82 msgid "Error connecting to MMS server" @@ -2805,7 +2822,7 @@ #: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 #: src/skins/menus.cc:107 src/skins-qt/menus.cc:98 msgid "Stop After This Song" -msgstr "Lopeta tämän kappaleen jälkeen" +msgstr "Lopeta kappaleen jälkeen" #: src/moonstone/moonstone.cc:39 msgid "Moonstone" @@ -2825,7 +2842,7 @@ #: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 msgid "Album Artist" -msgstr "Albumi / esittäjä" +msgstr "Levyn esittäjä" #: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 msgid "Queue Position" @@ -2851,7 +2868,7 @@ #: src/mpg123/mpg123.cc:54 msgid "MPG123 Plugin" -msgstr "MPG123-liitännäinen" +msgstr "MPG123 Plugin" #: src/mpg123/mpg123.cc:81 msgid "Advanced" @@ -2871,7 +2888,7 @@ #: src/neon/neon.cc:97 msgid "Neon HTTP/HTTPS Plugin" -msgstr "Neon HTTP/HTTPS -liitännäinen" +msgstr "Neon HTTP/HTTPS Plugin" #: src/neon/neon.cc:526 msgid "Error parsing redirect" @@ -2920,22 +2937,22 @@ "You should have received a copy of the GNU General Public License along with " "this program. If not, see ." msgstr "" -"Työpöytäilmoitukset -liitännäinen Audacioukselle\n" +"Desktop Notifications Plugin for Audacious\n" "Copyright (C) 2010 Maximilian Bogner\n" -"Copyright (C) 2011-2013 John Lindgren sekä Jean-Alexandre Anglès d'Auriac\n" -"\n" -"This plugin 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 3 of the License, or (at your option) " -"any later version.\n" +"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" "\n" -"This plugin 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.\n" +"Tämä lisäosa on ilmainen ohjelma: voit jakaa sen uudelleen ja/tai muokata " +"sitä Free Software Foundation julkaiseman GNU General Public License -" +"ehtojen mukaisesti, joko lisenssin version 3 tai (valinnan mukaan) minkä " +"tahansa myöhemmän version.\n" +"\n" +"Tämä lisäosa jaetaan siinä toivossa, että siitä on hyötyä, mutta ILMAN " +"MITÄÄN TAKUUTA; ilman edes oletettua takuuta MYYNTIKELPOISUUDESTA tai " +"SOVELTUVUUDESTA TIETTYYN TARKOITUKSEEN. Katso lisätietoja GNU General Public " +"License.\n" "\n" -"You should have received a copy of the GNU General Public License along with " -"this program. If not, see ." +"Sinun olisi pitänyt saada kopio lisenssistä GNU General Public License tämän " +"ohjelman mukana. Jos ei, katso ." #: src/notify/notify.cc:104 msgid "Show playback controls" @@ -2947,7 +2964,7 @@ #: src/notify/notify.cc:108 msgid "Include album name in notification" -msgstr "Sisällytä albumin nimi ilmoitukseen" +msgstr "Levyn nimi lisätään ilmoitukseen" #: src/notify/notify.cc:110 msgid "Custom notification duration:" @@ -2983,7 +3000,7 @@ msgid "Interpolation:" msgstr "Interpolointi:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineaarinen" @@ -3035,11 +3052,11 @@ "I would like to thank people on #audacious, especially Tony Vroon and John " "Lindgren and of course the authors of the previous OSS plugin." msgstr "" -"OSS4-lähdön liitännäinen Audacioukselle\n" +"OSS4 Output Plugin for Audacious\n" "Copyright 2010-2012 Michał Lipski\n" "\n" "Haluaisin kiittää ihmisiä kanavalla #audacious, erityisesti Tony Vroonia " -"sekä John Lindgreniä. Kiitokset myös edellisen OSS-liitännäisen kehittäjille." +"sekä John Lindgreniä. Kiitokset myös edellisen OSS-lisäosan kehittäjille." #: src/playlist-manager/playlist-manager.cc:37 #: src/playlist-manager-qt/playlist-manager-qt.cc:40 @@ -3058,7 +3075,7 @@ #: src/pls/pls.cc:35 msgid "PLS Playlists" -msgstr "PLS-soittolistat" +msgstr "PLS-soittolista" #: src/psf/plugin.cc:53 msgid "OpenPSF PSF1/PSF2 Decoder" @@ -3068,7 +3085,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF-asetukset" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Älä huomioi tiedoston ilmoittamaa kestoa" @@ -3249,14 +3266,14 @@ #: src/resample/resample.cc:43 msgid "Sample Rate Converter" -msgstr "Uudelleenäytteistäjä" +msgstr "Sample Rate -muunnin" #: src/resample/resample.cc:183 msgid "" "Sample Rate Converter Plugin for Audacious\n" "Copyright 2010-2012 John Lindgren" msgstr "" -"Uudelleenäytteistys-liitännäinen Audacioukselle\n" +"Sample Rate Converter Plugin for Audacious\n" "Copyright 2010-2012 John Lindgren" #: src/resample/resample.cc:187 @@ -3403,7 +3420,7 @@ "project.\n" "\n" msgstr "" -"Audacious Scrobbler 2.0 -liitännäinen, luonut Pitxyoki,\n" +"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" "\n" "Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" "\n" @@ -3416,7 +3433,7 @@ "Please check the Preferences for the Scrobbler plugin." msgstr "" "Audacious käyttää parannettua versiota Last.fm Scrobblerista.\n" -"Scrobbler -liitännäinen löytyy asetuksista." +"Scrobbler Plugin löytyy asetuksista." #: src/sdlout/sdlout.cc:43 msgid "SDL Output" @@ -3427,7 +3444,7 @@ "SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" -"SDL-lähdön liitännäinen Audacioukselle\n" +"SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" #: src/search-tool/library.cc:35 src/search-tool/library.cc:46 @@ -3751,7 +3768,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Palvelut" @@ -3768,13 +3785,13 @@ msgstr "Lopeta" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Kappaleen tiedot..." #: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 msgid "Shuffle by Album" -msgstr "Sekoita albumin mukaan" +msgstr "Sekoita levyn mukaan" #: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 msgid "No Playlist Advance" @@ -3788,7 +3805,7 @@ msgid "Clear A-B Repeat" msgstr "Pyyhi A-B-kertaus" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Siirry kappaleeseen..." @@ -3881,20 +3898,20 @@ msgstr "Lisää tiedostoja..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Nimen mukaan" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Tiedostonimen mukaan" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Tiedostopolun mukaan" @@ -3922,104 +3939,104 @@ msgid "Remove Selected" msgstr "Poista valitut" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Etsi ja valitse" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Käänteinen valinta" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Ei mitään" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Valitse kaikki" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Raidan mukaan" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Esittäjän mukaan" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" -msgstr "Albumin mukaan" +msgstr "Levyn mukaan" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" -msgstr "Albumin esittäjäjän mukaan" +msgstr "Levyn esittäjäjän mukaan" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Julkaisupäivän mukaan" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Tyylilajin mukaan" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Keston mukaan" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Mukautetun nimen mukaan" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Kommentin mukaan" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Sekoita lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Käännä lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Järjestä valitut" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Lajittele lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Avaa sisältävä kansio" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Leikkaa" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopioi" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Liitä" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Liitä loppuun" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Jonoon/Jonosta" @@ -4028,7 +4045,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d / %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audaciouksen soittolistan muokkain" @@ -4044,167 +4061,219 @@ msgid "Add Folder ..." msgstr "Lisää kansio..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Etsi kappaleita aktiivisesta soittolistasta" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Etsi kappaleita soittolistalta täyttämällä yhden tai useamman kentistä. " +"Kentät käyttävät säännöllisten lausekkeiden syntaksia, kirjainkoolla ei ole " +"merkitystä. Jos et tiedä kuinka säännöllisiä lausekkeita käytetään, kirjoita " +"kenttään suoraan se mitä haluat etsiä." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Nimi:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Levy:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Esittäjä:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Tiedostonimi:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Tyhjennä aiempi valinta ennen hakemista" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Lisää tai poista automaattisesti täsmäävät kappaleet jonosta" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Luo uusi soittolista täsmäävistä kappaleista" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Etsi" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Soitin:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Valitse pääikkunan kirjasin:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Soittolista:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Valitse soittolistan kirjasin:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Ulkoasu" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Näytä aktiivinen otsikkopalkki, kun jokin ikkuna on kohdistettu" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Fontit" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Käytä bittikartta-kirjasimia (vain ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" -msgstr "Vieritä kappaleen nimeä" +msgstr "Vieritä nimeä" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" -msgstr "Vieritä kappaleen nimeä kumpaankin suuntaan" +msgstr "Vieritä nimeä kumpaankin suuntaan" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyzer" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" -msgstr "Scope" +msgstr "Soveltamisala" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Äänipainemittari / VU-mittari" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Pois" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normaali" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Tuli" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Pystysuorat viivat" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Viivat" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Palkit" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Hitain" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Hidas" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Keskinkertainen" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Nopea" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Nopein" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Pisteet" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Viiva" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Kiinteä" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Jää" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Tasainen" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Väritys:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Tyyli:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Pudotus:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Huippujen pudotus:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Soveltamisala:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Äänijäljen väritys:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU-mittarin tyyli:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tyyppi" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualisoinnin tyyppi:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analysaattori" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Näytä piikit" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisaatio" @@ -4216,59 +4285,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Pakkaamaton Winamp 2.x skini" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Etsi kappaleita aktiivisesta soittolistasta" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Etsi" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Etsi kappaleita soittolistalta täyttämällä yhden tai useamman kentistä. " -"Kentät käyttävät säännöllisten lausekkeiden syntaksia, kirjainkoolla ei ole " -"merkitystä. Jos et tiedä kuinka säännöllisiä lausekkeita käytetään, kirjoita " -"kenttään suoraan se mitä haluat etsiä." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Nimi:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Albumi:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Esittäjä:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Tiedostonimi:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Tyhjennä aiempi valinta ennen hakemista" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Lisää tai poista automaattisesti täsmäävät kappaleet jonosta" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Luo uusi soittolista täsmäävistä kappaleista" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" -msgstr "Sndfile-liitännäinen" +msgstr "Sndfile Plugin" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4339,7 +4360,7 @@ #: src/songchange/song_change.cc:30 msgid "Song Change" -msgstr "Kappaleen vaihtuminen" +msgstr "Kappaleen vaihto" #: src/songchange/song_change.cc:245 msgid "Commands" @@ -4347,11 +4368,11 @@ #: src/songchange/song_change.cc:247 msgid "Command to run when starting a new song:" -msgstr "Kappaleen alussa suoritettava komento:" +msgstr "Komento, kun uusi kappale alkaa:" #: src/songchange/song_change.cc:250 msgid "Command to run at the end of a song:" -msgstr "Kappaleen päättyessä suoritettava komento:" +msgstr "Komento, kun kappale loppuu:" #: src/songchange/song_change.cc:253 msgid "Command to run at the end of the playlist:" @@ -4359,9 +4380,7 @@ #: src/songchange/song_change.cc:256 msgid "Command to run when song title changes (for network streams):" -msgstr "" -"Suoritettava komento, kun kappaleen nimi muuttuu (verkon suoratoistoja " -"varten):" +msgstr "Komento suoritetaan, kun kappaleen nimi vaihtuu (toisto verkkosta):" #: src/songchange/song_change.cc:259 msgid "" @@ -4385,16 +4404,16 @@ "%t: Playlist position\n" "%T: Title (unformatted)" msgstr "" -"%a: Artisti\n" -"%b: Albumi\n" +"%a: Esittäjä\n" +"%b: Levy\n" "%c: Kanavien määrä\n" "%f: Tiedoston nimi (täydellinen polku)\n" "%F: Taajuus (Hz)\n" "%l: Pituus (millisekunneissa)\n" "%n tai %s: Alustettu otsikko (katso soittolistan asetukset)\n" -"%p: Tällä hetkellä soi (1 or 0)\n" +"%p: Tällä hetkellä soi (1 tai 0)\n" "%r: Taajuus (bittiä per sekunti)\n" -"%t: Soittolistan paikka\n" +"%t: Soittolistan sijainti\n" "%T: Nimi (nimeämätön)" #: src/songchange/song_change.cc:273 @@ -4407,7 +4426,7 @@ #: src/song-info-qt/song-info.cc:30 msgid "Song Info" -msgstr "Kappaleen tiedot" +msgstr "Kappaletieto" #: src/soxr/sox-resampler.cc:44 msgid "SoX Resampler" @@ -4421,10 +4440,10 @@ "Based on Sample Rate Converter Plugin:\n" "Copyright 2010-2012 John Lindgren" msgstr "" -"SoX Resampler -liitännäinen Audacioukselle\n" +"SoX Resampler Plugin for Audacious\n" "Copyright 2013 Michał Lipski\n" "\n" -"Perustuu Sample Rate Converter -liitännäiseen:\n" +"Based on Sample Rate Converter Plugin:\n" "Copyright 2010-2012 John Lindgren" #: src/soxr/sox-resampler.cc:178 @@ -4557,12 +4576,13 @@ "This plugin provides a status icon, placed in\n" "the system tray area of the window manager." msgstr "" -"Tilaikoni-liitännäinen\n" +"Status Icon Plugin\n" "\n" "Copyright 2005-2007 Giacomo Lozito \n" "Copyright 2010 Michał Lipski \n" "\n" -"Tämä liitännäinen tarjoaa järjestelmäpalkkiin sijoitettavan ikonin." +"Tämä liitännäinen tarjoaa järjestelmäpalkkiin\n" +"sijoitettavan ikonin." #: src/stereo_plugin/stereo.cc:19 msgid "Extra Stereo" @@ -4574,7 +4594,7 @@ "\n" "By Johan Levin, 1999" msgstr "" -"Extra Stereo -liitännäinen\n" +"Extra Stereo Plugin\n" "\n" "By Johan Levin, 1999" @@ -4749,14 +4769,27 @@ "Käyttääksesi, lisää URL: tone://frequency1;frequency2;frequency3;...\n" "esim. tone://2000;2005 toistaaksesi 2000 Hz:n ja 2005 Hz:n soinnun" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Seuraavat viestit ovat piilotettu.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Työskennellään..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Tiedot" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s ei vaikuta olevan kelvollinen kansio" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Äänen poisto" @@ -4914,14 +4947,38 @@ "\n" "Osan liitännäisen koodista kirjoittanut Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF-dekooderi" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Kosini" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Tarkka" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF-asetukset" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Häivytysaika oletus:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolointi moodi:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" -msgstr "XML jaettavat soittolistat (XSPF)" +msgstr "XML jaettava soittolista (XSPF)" diff -Nru audacious-plugins-4.1/po/fr.po audacious-plugins-4.2/po/fr.po --- audacious-plugins-4.1/po/fr.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/fr.po 2022-07-10 01:12:34.000000000 +0000 @@ -4,28 +4,30 @@ # # Translators: # AO , 2012-2013 -# AO , 2019-2020 +# AO , 2019-2022 # AO , 2017-2018 # AO , 2016 # Oxayotl , 2013-2014,2020 # Oxayotl , 2011-2012 # Jean-Alexandre Anglès d'Auriac , 2011 # AO , 2015 +# Wallon Wallon, 2022 # AO , 2013-2015 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-31 01:48+0000\n" -"Last-Translator: AO \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: AO , 2019-2022\n" "Language-Team: French (http://www.transifex.com/audacious/audacious/language/" "fr/)\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % " +"1000000 == 0 ? 1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -36,7 +38,7 @@ msgstr "AdPlug (Lecteur AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "séquencé" @@ -66,7 +68,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Divers" @@ -318,7 +320,7 @@ #: src/alarm/interface.cc:390 msgid "What do these options mean?" -msgstr "Que signifient ces options ?" +msgstr "Que signifient ces options ?" #: src/alarm/interface.cc:404 msgid "Help" @@ -475,6 +477,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Fréquence d’échantillonnage :" @@ -550,6 +553,7 @@ msgstr "* aucune parole proposée dans ce fichier MIDI" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Fermer" @@ -609,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Rectangle concave" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Aucun" @@ -812,6 +816,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listes de lecture au format Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Profondeur du flux :" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Ratio de sous-échantillonnage :" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Couleur" @@ -1182,22 +1202,22 @@ #: src/delete-files/delete-files.cc:125 #, c-format msgid "Do you want to move %s to the trash?" -msgstr "Souhaitez-vous déplacer %s vers la corbeille ?" +msgstr "Souhaitez-vous déplacer %s vers la corbeille ?" #: src/delete-files/delete-files.cc:126 #, c-format msgid "Do you want to permanently delete %s?" -msgstr "Souhaitez-vous supprimer %s définitivement ?" +msgstr "Souhaitez-vous supprimer %s définitivement ?" #: src/delete-files/delete-files.cc:133 #, c-format msgid "Do you want to move %d files to the trash?" -msgstr "Souhaitez-vous déplacer %d fichiers vers la corbeille ?" +msgstr "Souhaitez-vous déplacer %d fichiers vers la corbeille ?" #: src/delete-files/delete-files.cc:134 #, c-format msgid "Do you want to permanently delete %d files?" -msgstr "Souhaitez-vous supprimer %d fichiers définitivement ?" +msgstr "Souhaitez-vous supprimer %d fichiers définitivement ?" #: src/delete-files/delete-files.cc:146 msgid "Move to trash" @@ -1208,7 +1228,7 @@ msgstr "Supprimer" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Annuler" @@ -1247,7 +1267,7 @@ msgstr "Retard :" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1267,7 +1287,7 @@ msgid "FFmpeg Plugin" msgstr "Greffon FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1390,77 +1410,77 @@ msgid "32000 Hz" msgstr "32 000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44 100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48 000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1584,7 +1604,7 @@ msgid "Quality (0-1):" msgstr "Qualité (0 à 1) :" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Général" @@ -1593,11 +1613,11 @@ msgid "FLAC Decoder" msgstr "Décodeur FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "Sans perte" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2249,6 +2269,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canaux" +msgstr[2] "%d canaux" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2257,8 +2278,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2345,7 +2366,7 @@ "Il n’est pas recommandé d’associer les boutons principaux de la souris sans " "modificateur.\n" "\n" -"Souhaitez-vous poursuivre ?" +"Souhaitez-vous poursuivre ?" #: src/hotkey/gui.cc:263 msgid "Binding mouse buttons" @@ -2469,7 +2490,7 @@ #: src/jack/jack-ng.cc:245 msgid "Failed to connect to the JACK server; is it running?" -msgstr "Échec de connexion au serveur JACK ; est-il en cours d’exécution ?" +msgstr "Échec de connexion au serveur JACK ; est-il en cours d’exécution ?" #: src/jack/jack-ng.cc:321 #, c-format @@ -2652,7 +2673,7 @@ msgid "Looking for lyrics ..." msgstr "Recherche de paroles…" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Erreur" @@ -3012,7 +3033,7 @@ msgid "Interpolation:" msgstr "Interpolation :" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linéaire" @@ -3098,7 +3119,7 @@ msgid "OpenPSF Configuration" msgstr "Configuration d’OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorer la durée donnée par le fichier" @@ -3245,7 +3266,7 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "Nf" +msgstr "No file" #: src/qtui/playlist_model.cc:188 msgid "T#" @@ -3478,6 +3499,7 @@ msgid_plural "%d songs" msgstr[0] "%d pièce" msgstr[1] "%d pièces" +msgstr[2] "%d pièces" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3529,6 +3551,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "%d résultat affiché sur %d" msgstr[1] "%d résultats affichés sur %d" +msgstr[2] "%d résultats affichés sur %d" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3536,6 +3559,7 @@ msgid_plural "%d results" msgstr[0] "%d résultat" msgstr[1] "%d résultats" +msgstr[2] "%d résultats" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3788,7 +3812,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Services" @@ -3805,7 +3829,7 @@ msgstr "Quitter" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Renseignements sur la pièce…" @@ -3825,7 +3849,7 @@ msgid "Clear A-B Repeat" msgstr "Supprimer la répétition A à B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Sauter vers une plage…" @@ -3918,20 +3942,20 @@ msgstr "Ajouter des fichiers…" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Par titre" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Par nom de fichier" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Par chemin de fichier" @@ -3959,104 +3983,104 @@ msgid "Remove Selected" msgstr "Supprimer la sélection" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Chercher et sélectionner" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverser la sélection" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Ne rien sélectionner" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Tout sélectionner" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Par numéro de plage" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Par artiste" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Par album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Par artiste de l’album" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Par date de parution" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Par Genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Par durée" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Par titre personnalisé" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Par commentaire" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Mélange aléatoire de la liste" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Inverser la liste" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Trier la sélection" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Trier la liste" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Ouvrir le dossier conteneur" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Couper" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copier" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Coller" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Copier à la fin" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Ajouter/retirer de la file d’attente" @@ -4065,7 +4089,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d sur %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Éditeur de liste de lecture d’Audacious" @@ -4081,167 +4105,222 @@ msgid "Add Folder ..." msgstr "Ajouter un dossier…" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Chercher des entrées dans la liste de lecture active" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Choisir des entrées de la liste de lecture en remplissant un oou plusieurs " +"champs. \n" +"La syntaxe utilisée est celle des expressions rationnelles et est sensible à " +"la casse. \n" +"Si vous ne savez pas comment fonctionnent les expressions rationnelles, vous " +"pouvez simplement indiquer une expression littérale de ce que vous cherchez." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titre :" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album :" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artiste :" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nom de fichier :" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Effacer la sélection précédente avant d’effectuer la recherche" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Mettre automatiquement dans la file d’attente les entrées trouvées" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Créer une nouvelle liste de lecture à partir des entrées trouvées" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Chercher" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Lecteur :" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Choisir la police de la fenêtre principale du lecteur :" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Liste de lecture :" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Choisir la police de la liste de lecture :" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Habillage" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" +"Afficher la barre de titre active quand une fenêtre est en premier plan" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Polices" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Utiliser des polices bitmap (seul ASCII est pris en charge)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Faire défiler le titre de la pièce" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Faire défiler le titre de la pièce dans les deux sens" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyseur" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Oscilloscope" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Spectrogramme/vumètre" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Désactiver" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Feu" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Lignes verticales" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Lignes" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barres" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "La plus lente" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lente" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Moyenne" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rapide" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "La plus rapide" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Points" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Lignes" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Plein" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Glace" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Lissé" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Coloration :" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Style :" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Retombée :" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Retombée des crêtes :" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Style oscilloscope :" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Coloration du spectrogramme :" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Style vumètre :" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Type" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Type de visualisation :" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analyseur" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Afficher les crêtes" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisation" @@ -4253,61 +4332,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Habillage Winamp 2.x non archivé" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Chercher des entrées dans la liste de lecture active" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Chercher" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Choisir des entrées de la liste de lecture en remplissant un oou plusieurs " -"champs. \n" -"La syntaxe utilisée est celle des expressions rationnelles et est sensible à " -"la casse. \n" -"Si vous ne savez pas comment fonctionnent les expressions rationnelles, vous " -"pouvez simplement indiquer une expression littérale de ce que vous cherchez." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titre :" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album :" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artiste :" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nom de fichier :" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Effacer la sélection précédente avant d’effectuer la recherche" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Mettre automatiquement dans la file d’attente les entrées trouvées" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Créer une nouvelle liste de lecture à partir des entrées trouvées" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Greffon Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4787,19 +4816,32 @@ "Générateur de signal sinusoïdal par Håvard Kvålen \n" "Modifié par Daniel J. Peng \n" "\n" -"Pour l’utiliser, ajouter une URL : signal://fréquence1;fréquence2;fréquence3;" -"…\n" +"Pour l’utiliser, ajouter une URL : signal://fréquence1;fréquence2;" +"fréquence3;…\n" "Par exemple. tone://2000;2005 pour jouer une note à 2 000 Hz en même temps " "qu’une note à 2 005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Les messages à venir ont été cachés.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Traitement en cours…" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Renseignements" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s ne semble pas être un dossier valide." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Suppression des voix" @@ -4957,14 +4999,38 @@ "\n" "Une partie du code du greffon a été développé par Miles Egan" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Décodeur 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32 728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65 456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Nette" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuration de XFS" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Durée de fondu par défaut :" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Mode interpolation :" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Listes de lecture XSPF" diff -Nru audacious-plugins-4.1/po/gl.po audacious-plugins-4.2/po/gl.po --- audacious-plugins-4.1/po/gl.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/gl.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,7 +3,9 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: +# antiparvos, 2022 # antiparvos, 2014-2018,2020 +# David Rebolo Magariños , 2021 # Miguel Anxo Bouzada , 2012 # Miguel Anxo Bouzada , 2013 # Miguel Anxo Bouzada , 2012 @@ -12,9 +14,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: antiparvos, 2022\n" "Language-Team: Galician (http://www.transifex.com/audacious/audacious/" "language/gl/)\n" "Language: gl\n" @@ -32,7 +34,7 @@ msgstr "AdPlug (reprodutor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "secuenciado" @@ -62,7 +64,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Varios" @@ -474,6 +476,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Taxa da mostraxe:" @@ -549,6 +552,7 @@ msgstr "* non hai letras dispoñíbeis neste ficheiro MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Pechar" @@ -608,7 +612,7 @@ msgid "Concave Rectangle" msgstr "Rectángulo cóncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ningún" @@ -812,6 +816,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listas de reprodución do Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Profundidade de bit:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Cor" @@ -1202,7 +1222,7 @@ msgstr "Eliminar" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1241,7 +1261,7 @@ msgstr "Atraso:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1261,7 +1281,7 @@ msgid "FFmpeg Plugin" msgstr "Engadido FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1385,77 +1405,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1579,7 +1599,7 @@ msgid "Quality (0-1):" msgstr "Calidade (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Xeral" @@ -1588,11 +1608,11 @@ msgid "FLAC Decoder" msgstr "Descodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sen perdas" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2036,7 +2056,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Mostrar barra de información _Arte do álbum" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2228,7 +2248,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menú" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2252,8 +2272,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2422,7 +2442,7 @@ #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Mesturar para" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" @@ -2576,31 +2596,33 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "O artista está truncado ao principio, o título -- á fin" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Caracteres para truncar:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +"Os caracteres son ORed en RegExp, rodeados de espazos en branco" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Caracteres para dividir:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Trunque aínda máis os dos caracteres" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Xeral" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Divide o título en artista e o título en caracteres" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2636,7 +2658,7 @@ msgid "Looking for lyrics ..." msgstr "Buscando letras ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Erro" @@ -2821,7 +2843,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Pedra da lúa" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2963,7 +2985,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Personalizar a duración da notificación:" #: src/notify/osd.cc:74 msgid "Show" @@ -2995,17 +3017,17 @@ msgid "Interpolation:" msgstr "Interpolación" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineal" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "Cúbico" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "Sincronización de xanelas" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -3080,7 +3102,7 @@ msgid "OpenPSF Configuration" msgstr "Axustes do OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorar a duración do ficheiro" @@ -3161,10 +3183,19 @@ "\n" "License: GPLv2+" msgstr "" +"Analizador de espectro OpenGL para Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren e Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Baseado no complemento XMMS:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson e " +"4Front Technologies\n" +"\n" +"Licenza: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Prema unha combinación de teclas dentro dun campo de texto." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3181,6 +3212,19 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Complemento global de teclas rápidas\n" +"Controla o reprodutor con combinacións de teclas globais ou teclas " +"multimedia.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Os colaboradores inclúen:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonathan A. Davis ,\n" +"Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3204,11 +3248,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3236,7 +3280,7 @@ #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Use o tipo de letra en grosa para os encabezados das columnas" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3742,7 +3786,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servizos" @@ -3759,7 +3803,7 @@ msgstr "Saír" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Información da canción ..." @@ -3779,7 +3823,7 @@ msgid "Clear A-B Repeat" msgstr "Limpar a repetición A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Saltar á canción ..." @@ -3872,20 +3916,20 @@ msgstr "Engadir ficheiros ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Polo título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Polo nome de ficheiro" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Pola ruta do ficheiro" @@ -3913,104 +3957,104 @@ msgid "Remove Selected" msgstr "Retirar os seleccionados" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Buscar e seleccionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverter a selección" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Non seleccionar nada" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Seleccionar todo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Polo número de pista" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Polo interprete" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Polo álbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Polo interprete do álbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Pola data de publicación" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Por xénero" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Por duración" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Por título personalizado" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Por comentario" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Lista ao chou" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Lista inversa" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordenar os seleccionados" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordenar a lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Abrir o cartafol contedor" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Pegar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Pegar ao final" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Poñer na cola/Quitar da cola" @@ -4019,7 +4063,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de listas de reprodución do Audacious" @@ -4035,167 +4079,219 @@ msgid "Add Folder ..." msgstr "_Engadir un cartafol ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Buscar entradas na lista de reprodución activa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleccione entradas na lista de reprodución indicando un ou máis campos. Os " +"campos empregan sintaxe de expresións regulares, sen distinguir maiúsculas " +"de minúsculas. Se non sabe como funcionan as expresións regulares, escriba " +"só a parte del literal que quere buscar." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Título: " + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Álbum: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Interprete: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nome de ficheiro:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Limpar a selección previa antes de buscar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Cambiar automaticamente a cola para as entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crear unha nova lista de reprodución coas entradas coincidentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Busca" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reprodutor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Seleccione o tipo de letra da xanela principal do reprodutor:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista de reprodución:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Seleccione o tipo de letra da lista de reprodución:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Tema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Mostrar a barra de título activa ao enfocar unha xanela" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Tipos de letra" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Empregar tipos de letra de mapa de bits (só admiten ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Desprazar o título da canción" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Desprazar o título da canción en ambas direccións" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Campo" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Impresión vocal / Vúmetro" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Apagado" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Lume" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Liñas verticais" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Liñas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Máis lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Medio" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Máis rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Puntos" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Liña" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Sólido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Xeo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Colorear:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estilo:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Caída:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Caída dos picos:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estilo de campo:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Coloreado da impresión vocal" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Estilo do vúmetro:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipo" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo de visualización:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Amosar os picos" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualización" @@ -4207,59 +4303,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema para Winamp 2.x sen arquivar" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Buscar entradas na lista de reprodución activa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Busca" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleccione entradas na lista de reprodución indicando un ou máis campos. Os " -"campos empregan sintaxe de expresións regulares, sen distinguir maiúsculas " -"de minúsculas. Se non sabe como funcionan as expresións regulares, escriba " -"só a parte del literal que quere buscar." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Título: " - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Álbum: " - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Interprete: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nome de ficheiro:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Limpar a selección previa antes de buscar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Cambiar automaticamente a cola para as entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crear unha nova lista de reprodución coas entradas coincidentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Engadido Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4743,14 +4791,27 @@ "frecuencia3;...\n" "p.ex. tone://2000;2005 para reproducir un ton de 2000 Hz e un ton de 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(O resto de mensaxes foron agochados.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Traballando..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Información" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s non parece un cartafol correcto." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Supresión de voz" @@ -4909,14 +4970,38 @@ "\n" "Unah parte do código do engadido foi feita por Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Descodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Coseno " + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuración XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Tempo predet. do escaecemento:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Modo interpolación:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Lista de reprodución XML compartíbel (XSPF)" diff -Nru audacious-plugins-4.1/po/hu.po audacious-plugins-4.2/po/hu.po --- audacious-plugins-4.1/po/hu.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/hu.po 2022-07-10 01:12:34.000000000 +0000 @@ -6,19 +6,21 @@ # Agócs Dániel , 2015 # Balázs Glatz , 2015 # Balázs Meskó , 2018 +# Balázs Meskó , 2022 # blackc0de , 2018 # Ferenc Szabo , 2015 # Gábor Sávolyi, 2016 # Gergely Békési , 2014 +# Nyul Csoki , 2021 # Péter Polonkai , 2010 # Péter Polonkai , 2011-2012,2014-2016 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Balázs Meskó , 2022\n" "Language-Team: Hungarian (http://www.transifex.com/audacious/audacious/" "language/hu/)\n" "Language: hu\n" @@ -36,7 +38,7 @@ msgstr "AdPlug (AdLib lejátszó)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "soros" @@ -46,7 +48,7 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "OPL emulátor:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" @@ -66,7 +68,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Egyéb" @@ -476,6 +478,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Mintavételi frekvencia:" @@ -551,6 +554,7 @@ msgstr "* nem található dalszöveg ehhez a MIDI fájlhoz *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Bezár" @@ -609,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Konkáv téglalap" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Nincs" @@ -807,6 +811,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious lejátszólisták (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Szín" @@ -1200,7 +1220,7 @@ msgstr "Törlés" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Mégsem" @@ -1242,7 +1262,7 @@ msgstr "Késleltetés:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1262,7 +1282,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg bővítméyn" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1385,77 +1405,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1579,7 +1599,7 @@ msgid "Quality (0-1):" msgstr "Minőség (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Általános" @@ -1588,11 +1608,11 @@ msgid "FLAC Decoder" msgstr "FLAC dekódoló" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "veszteségmentes" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1822,12 +1842,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "Előző Album" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "Következő Album" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -2036,7 +2056,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Információs sáv mutatása _Album borító" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2228,7 +2248,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menü" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2252,8 +2272,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2281,11 +2301,11 @@ #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "Előrelépés" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "Visszalépés" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2387,6 +2407,18 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Általános Gyorsbillentyűk Bővítmény\n" +"A lejátszó irányítása általános billentyűkombinációkkal vagy multimédia " +"billentyűkkel.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Hozzájárult többek között:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2394,7 +2426,7 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "Kliens neve:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" @@ -2402,27 +2434,27 @@ #: src/jack/jack-ng.cc:130 msgid "Filter ports (regex, use any port if blank):" -msgstr "" +msgstr "Portok szűrése (regex, bármelyik port használata, ha üres):" #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "Csatlakozás csak fizikai portokhoz" #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Felkeverés ide" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "" +msgstr "port(ok), ha a bemenetnek kevesebb csatornája van" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "Nem elégséges számú port figyelmen kívül hagyása" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." -msgstr "" +msgstr "Nem találtam JACK kimeneti portot. Kérem ellenőrizze a beállításokat." #: src/jack/jack-ng.cc:195 #, c-format @@ -2551,63 +2583,65 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "Dalszöveg" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "" +msgstr "Sehol" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lyrics.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Előadó mező csonka az elején, Cím -- a végén" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Csonkolandó karakterek:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +"Karakterek ORed színnel a kifejezésben, előtte és utána szóköz" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Elválasztandó karakterek:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "További csonkolás azokon a karaktereken" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Általános" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Cím szétválasztása szerző és címmé a karaktereknél" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" -msgstr "" +msgstr "Internet Forrás" #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "" +msgstr "Dalszöveg letöltése innen:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" -msgstr "" +msgstr "Letöltött dalszövegeket mentse helyi tárban" #: src/lyricwiki-qt/lyricwiki.cc:144 msgid "Local Storage" -msgstr "" +msgstr "Helyi Tároló" #: src/lyricwiki-qt/lyricwiki.cc:145 msgid "Load lyric files (.lrc) from local storage" -msgstr "" +msgstr "Dalszöveg fájlok (.lrc) betöltése helyi tárból" #: src/lyricwiki-qt/lyricwiki.cc:356 #, c-format @@ -2623,25 +2657,25 @@ msgid "Looking for lyrics ..." msgstr "Zeneszöveg keresése ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Hiba" #: src/lyricwiki-qt/lyricwiki.cc:433 msgid "Lyrics could not be found." -msgstr "" +msgstr "Dalszöveg nem található." #: src/lyricwiki-qt/lyricwiki.cc:501 msgid "Missing title and/or artist." -msgstr "" +msgstr "Hiányzó cím és/vagy előadó." #: src/lyricwiki-qt/lyricwiki.cc:553 msgid "Save Locally" -msgstr "" +msgstr "Mentés Helyben" #: src/lyricwiki-qt/lyricwiki.cc:561 msgid "Refresh" -msgstr "" +msgstr "Frissítés" #: src/m3u/m3u.cc:32 msgid "M3U Playlists" @@ -2812,7 +2846,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2962,7 +2996,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Egyéni értesítés időtartam:" #: src/notify/osd.cc:74 msgid "Show" @@ -2970,7 +3004,7 @@ #: src/openmpt/mpt.cc:50 msgid "OpenMPT (Module Player)" -msgstr "" +msgstr "OpenMPT (Modul Lejátszó)" #: src/openmpt/mpt.cc:133 msgid "" @@ -2978,10 +3012,13 @@ "\n" "Written by: Chris Spiegel " msgstr "" +"libopenmpt alapuló Modul Lejátszó\n" +"\n" +"Írta: Chris Spiegel " #: src/openmpt/mpt.cc:152 msgid "Stereo separation:" -msgstr "" +msgstr "Sztereó szétválasztás:" #: src/openmpt/mpt.cc:154 msgid "%" @@ -2989,19 +3026,19 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "" +msgstr "Interpoláció:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineáris" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "Harmadfokú" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "Ablak-sinc-szűrő" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -3074,9 +3111,9 @@ #: src/psf/plugin.cc:270 msgid "OpenPSF Configuration" -msgstr "" +msgstr "OpenPSF Beállítások" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Tárolt hossz mellőzése" @@ -3086,11 +3123,11 @@ #: src/pulse/pulse_audio.cc:72 msgid "Context name:" -msgstr "" +msgstr "Környezet neve:" #: src/pulse/pulse_audio.cc:74 msgid "Stream name:" -msgstr "" +msgstr "Folyam neve:" #: src/pulse/pulse_audio.cc:575 msgid "" @@ -3160,10 +3197,19 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL Színképelemző Audacioushoz\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Az XMMS bővítményen alapul:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"Licensz: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Nyomjon egy billentyűkombinációt a szövegdobozban." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3180,6 +3226,19 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Általános Gyorsbillentyűk Bővítmény\n" +"A lejátszó irányítása általános billentyűkombinációkkal vagy multimédia " +"billentyűkkel.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Hozzájárult többek között:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3203,11 +3262,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "S#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "Sz#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3219,23 +3278,23 @@ #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "Mindig" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "Automatikus elrejtés" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "Soha" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "Lejátszólista fülek megjelenítése:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Vastag betűk használata oszlop fejlécekhez" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3455,7 +3514,7 @@ #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "" +msgstr "Gyűjtemény változásainak figyelése" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" @@ -3742,7 +3801,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Szolgáltatások" @@ -3759,7 +3818,7 @@ msgstr "Kilépés" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Dal információ ..." @@ -3779,7 +3838,7 @@ msgid "Clear A-B Repeat" msgstr "A-B ismétlés törlése" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Ugrás a dalra ..." @@ -3872,20 +3931,20 @@ msgstr "Fájlok hozzáadása ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Cím szerint" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Fájlnév szerint" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Fájl útvonal szerint" @@ -3913,104 +3972,104 @@ msgid "Remove Selected" msgstr "Kijelölt törlése" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Keresés és választ" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Kijelölés megfordítása" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Nincs kijelölés" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Mindet kijelöl" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "A dal sorszáma szerint" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Előadó szerint" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Album szerint" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Album előadó szerint" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Kiadás dátuma szerint" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Műfaj szerint" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Hossz szerint" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Egyéb cím szerint" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Megjegyzés szerint" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Véletlenszerű lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Fordított lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Kijelöltek rendezése" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Lista rendezése" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Tartalmazó mappa megnyitása" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Kivágás" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Másolás" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Beillesztés" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Beillesztés a végére" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Várólistára/Várólistáról ki" @@ -4019,7 +4078,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d / %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious lejátszólista szerkesztő" @@ -4035,167 +4094,219 @@ msgid "Add Folder ..." msgstr "Mappa hozzáadása..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Elemek keresése az aktív lejátszólistában" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Válasszon ki bejegyzéseket egy vagy több mező kijelölésével. A mezők " +"általános kifejezéseket használnak, a kis-nagybetűkre viszont nem érzékeny. " +"Ha nem tudod, hogyan működnek a reguláris kifejezések, egyszerűen írj be egy " +"részletet arról amit keresel." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Cím:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Előadó:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Fájlnév:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Az előző kiválasztások törlése keresés előtt" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Automatikusan várólistára kerülnek a talált elemek" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Hozzon létre új lejátszólistát az egyező elemekből" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Keresés" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Lejátszó:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Főablak betűtípus kiválasztás:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lejátszólista:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Válassza ki a lejátszólista betűkészletét:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Felület" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Betűtípusok" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Bitmap fontok használata (csak ASCII támogatása)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Szám címének görgetése" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "A dal címe mindkét irányba mozog" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizátor" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Szkóp" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Spektrogram / Kivezérlésmérő" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Kikapcsolva" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Szokásos" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Tűz" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Függőleges vonalak" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Vonalak" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Csíkok" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Lassabb" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lassú" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Közepes" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Gyors" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Leggyorsabb" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Pontok" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Vonal" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Tömör" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Jég" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Sima" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Színezés:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stílus:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Esés:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Csúcs esése:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Szkóp stílusa:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Spektrogram" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Kivezérlésmérő stílusa:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Típus" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Megjelenítés típusa:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizátor" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Csúcsok mutatása" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Megjelenítés" @@ -4207,59 +4318,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Nem régi Winamp 2.x bőr" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Elemek keresése az aktív lejátszólistában" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Keresés" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Válasszon ki bejegyzéseket egy vagy több mező kijelölésével. A mezők " -"általános kifejezéseket használnak, a kis-nagybetűkre viszont nem érzékeny. " -"Ha nem tudod, hogyan működnek a reguláris kifejezések, egyszerűen írj be egy " -"részletet arról amit keresel." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Cím:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Előadó:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Fájlnév:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Az előző kiválasztások törlése keresés előtt" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Automatikusan várólistára kerülnek a talált elemek" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Hozzon létre új lejátszólistát az egyező elemekből" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile bővítmény" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4581,39 +4644,39 @@ #: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 msgid "Type" -msgstr "" +msgstr "Típus" #: src/streamtuner/icecast-model.cc:132 msgid "Current Song" -msgstr "" +msgstr "Jelenlegi Dal" #: src/streamtuner/icecast-model.cc:164 msgid "Other" -msgstr "" +msgstr "Más" #: src/streamtuner/ihr-model.cc:63 msgid "Market" -msgstr "" +msgstr "Forgalmazó" #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "" +msgstr "Hívóbetűk" #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "Leírás" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" -msgstr "" +msgstr "Hallgatók" #: src/streamtuner/shoutcast-model.cc:188 msgid "Top 500 Stations" -msgstr "" +msgstr "Az Első 500 Állomás" #: src/streamtuner/shoutcast-model.cc:189 msgid "Alternative" -msgstr "" +msgstr "Alternatív" #: src/streamtuner/shoutcast-model.cc:190 msgid "Blues" @@ -4629,7 +4692,7 @@ #: src/streamtuner/shoutcast-model.cc:193 msgid "Decades" -msgstr "" +msgstr "Évtizedek" #: src/streamtuner/shoutcast-model.cc:194 msgid "Easy Listening" @@ -4637,7 +4700,7 @@ #: src/streamtuner/shoutcast-model.cc:195 msgid "Electronic" -msgstr "" +msgstr "Elektronikus" #: src/streamtuner/shoutcast-model.cc:196 msgid "Folk" @@ -4645,11 +4708,11 @@ #: src/streamtuner/shoutcast-model.cc:197 msgid "Inspirational" -msgstr "" +msgstr "Inspiráló" #: src/streamtuner/shoutcast-model.cc:198 msgid "International" -msgstr "" +msgstr "Nemzetközi" #: src/streamtuner/shoutcast-model.cc:199 msgid "Jazz" @@ -4657,7 +4720,7 @@ #: src/streamtuner/shoutcast-model.cc:200 msgid "Latin" -msgstr "" +msgstr "Latin" #: src/streamtuner/shoutcast-model.cc:201 msgid "Metal" @@ -4673,11 +4736,11 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "" +msgstr "Közrádiók" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B és Urban" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4693,31 +4756,31 @@ #: src/streamtuner/shoutcast-model.cc:210 msgid "Seasonal and Holiday" -msgstr "" +msgstr "Szezonális és Ünnepi" #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "Filmzenék" #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "Beszéd" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" -msgstr "" +msgstr "Főcímdalok" #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "Shoutcast" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "Icecast" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" -msgstr "" +msgstr "Folyamállító (Stream Tuner)" #: src/tonegen/tonegen.cc:45 msgid "Tone Generator" @@ -4749,14 +4812,27 @@ "\n" "pl.: tone://2000;2005 -> 2000 Hz-es és 2005 Hz-es hangot modulál" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(További üzenetek el vannak rejtve.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Dolgozom…" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Információ" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Ének eltávolítás" @@ -4853,30 +4929,32 @@ "VU Meter Plugin for Audacious\n" "Copyright 2017-2019 Marc Sánchez Fauste" msgstr "" +"Jelerősség mérő bővítmény Audacioushoz\n" +"Copyright 2017-2019 Marc Sánchez Fauste" #: src/vumeter-qt/vumeter_qt.cc:35 msgid "VU Meter Settings" -msgstr "" +msgstr "Jelerősség mérő beállításai" #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" -msgstr "" +msgstr "Csúcs tartás ideje:" #: src/vumeter-qt/vumeter_qt.cc:42 msgid "Fall-off time:" -msgstr "" +msgstr "Esés ideje:" #: src/vumeter-qt/vumeter_qt.cc:44 msgid "dB/second" -msgstr "" +msgstr "dB/másodperc" #: src/vumeter-qt/vumeter_qt.cc:46 msgid "Display legend" -msgstr "" +msgstr "Jelmagyarázat megjelenítése" #: src/vumeter-qt/vumeter_qt.h:37 msgid "VU Meter" -msgstr "" +msgstr "Jelerősség Mérő" #: src/waveout/waveout.cc:43 msgid "Win32 waveOut" @@ -4912,14 +4990,38 @@ "\n" "A kód egy részét Miles Egan írta." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF dekódoló" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF Konfiguráció" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Shareable Playlists File (XSPF)" diff -Nru audacious-plugins-4.1/po/id_ID.po audacious-plugins-4.2/po/id_ID.po --- audacious-plugins-4.1/po/id_ID.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/id_ID.po 2022-07-10 01:12:34.000000000 +0000 @@ -15,10 +15,12 @@ # , 2012 # Liffindra Angga Zaaldian , 2015 # martadinata666 , 2012 +# Matt Johnson, 2021 # se7entime , 2012-2013 # , 2012 # Rahman Yusri Aftian , 2012-2014 # Rizki Aulia Rachman , 2013 +# solo battle , 2021 # xunilresu , 2012 # , 2012 # , 2012 @@ -26,9 +28,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Matt Johnson, 2021\n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/audacious/" "audacious/language/id_ID/)\n" "Language: id_ID\n" @@ -46,21 +48,21 @@ msgstr "AdPlug (Pemutar AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "telah diurutkan" #: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 msgid "Output" -msgstr "" +msgstr "Keluaran" #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "Emulator OPL:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "" +msgstr "Tingkat sampel" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -76,13 +78,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Miscellaneous" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "" +msgstr "Ulangi lagu terus menerus" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -152,6 +154,53 @@ " Type the reminder in the input field and enable\n" " the checkbox if you want it to be shown." msgstr "" +"Waktu\n" +" Alarm di:\n" +" Waktu saat alarm berbunyi.\n" +"\n" +" Diam setelah:\n" +" Hentikan alarm setelah waktu tersebut.\n" +" (jika dialog bangun tidak ditutup)\n" +"\n" +"\n" +"Hari\n" +" Hari:\n" +" Pilih hari untuk mengaktifkan alarm.\n" +"\n" +" Waktu:\n" +" Pilih waktu untuk alarm di setiap hari,\n" +" atau pilih tombol sakelar untuk menggunakan bawaan\n" +" waktu.\n" +"\n" +"\n" +"Volume\n" +" Pudar:\n" +" Pudarkan volume ke volume yang dipilih\n" +" untuk jumlah waktu ini.\n" +"\n" +" Dimulai dari:\n" +" Mulai pudarkan dari volume ini.\n" +"\n" +" Terakhir:\n" +" Volume untuk berhenti pudar. Jika waktu\n" +" pudar adalah 0 lalu atur volume ke ini dan mulai\n" +" bermain.\n" +"\n" +"\n" +"Pilihan:\n" +" Perintah Tambahan:\n" +" Jalankan perintah ini pada waktu alarm.\n" +"\n" +" Daftar putar:\n" +" Muat daftar putar ini. Jika tidak ada daftar putar\n" +" yang ditentukan, yang saat ini akan digunakan.\n" +" URL aliran mp3/ogg\n" +" juga bisa dimasukkan di sini.\n" +"\n" +" Pengingat:\n" +" Menampilkan pengingat saat alarm berbunyi.\n" +" Ketik pengingat di bidang input dan aktifkan\n" +" kotak centang jika Anda ingin itu ditampilkan." #: src/alarm/interface.cc:78 msgid "This is your wakeup call." @@ -204,7 +253,7 @@ #: src/alarm/interface.cc:189 msgid "h" -msgstr "j" +msgstr "h" #: src/alarm/interface.cc:192 msgid "Quiet after:" @@ -256,7 +305,7 @@ #: src/alarm/interface.cc:322 msgid "Final" -msgstr "Paripurna" +msgstr "Akhir" #: src/alarm/interface.cc:335 msgid "Current" @@ -296,7 +345,7 @@ #: src/alsa/alsa.h:64 msgid "ALSA Output" -msgstr "Keluaran ALSA" +msgstr "Output ALSA" #: src/alsa/config.cc:28 msgid "" @@ -363,6 +412,25 @@ "Tony Vroon\n" "for the good help with alpha testing" msgstr "" +"AMIDI-Plug\n" +"pemutar musik MIDI modular\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +" ditulis oleh Giacomo Lozito\n" +"\n" +"\n" +"terima kasih khusus kepada...\n" +"\n" +"Clemens Ladisch dan Jaroslav Kysela\n" +"untuk program keren mereka aplaymidi dan amixer; itu\n" +"benar-benar berguna, bersama dengan dokumen alsa-lib, secara berurutan\n" +"untuk mempelajari lebih lanjut tentang ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"untuk logo keyboard midi yang bagus\n" +"\n" +"Tony Vroon\n" +"untuk bantuan yang baik dengan pengujian alfa " #: src/amidiplug/i_configure.cc:94 msgid "Override default gain:" @@ -390,7 +458,7 @@ #: src/amidiplug/i_configure.cc:129 msgid "Transpose:" -msgstr "Tukar tempat:" +msgstr "Meukar tempat:" #: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 msgid "semitones" @@ -402,7 +470,7 @@ #: src/amidiplug/i_configure.cc:134 msgid "note numbers" -msgstr "angka not" +msgstr "nomer catatan" #: src/amidiplug/i_configure.cc:135 msgid "Skip leading silence" @@ -422,6 +490,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Kadar contoh:" @@ -454,7 +523,7 @@ #: src/amidiplug/i_fileinfo.cc:187 msgid " MIDI Info " -msgstr " MIDI Info " +msgstr " Info MIDI " #: src/amidiplug/i_fileinfo.cc:201 msgid "Format:" @@ -462,7 +531,7 @@ #: src/amidiplug/i_fileinfo.cc:204 msgid "Length (msec):" -msgstr "Panjang(milidetik)" +msgstr "Panjang (milidetik)" #: src/amidiplug/i_fileinfo.cc:207 msgid "No. of Tracks:" @@ -497,6 +566,7 @@ msgstr "* tidak ada lirik yang tersedia di berkas MIDI ini *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Keluar" @@ -506,7 +576,7 @@ #: src/ampache/ampache.cc:33 msgid "Ampache Browser" -msgstr "" +msgstr "Browser Ampache " #: src/ampache/ampache.cc:46 msgid "" @@ -516,6 +586,11 @@ "Copyright (C) Róbert Čerňanský and John Lindgren\n" "License: GNU GPLv3" msgstr "" +"Ampache Browser untuk Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Hak Cipta : Róbert Čerňanský dan John Lindgren\n" +"Lisensi: GNU GPLv3" #: src/aosd/aosd.cc:31 msgid "" @@ -527,6 +602,13 @@ "Based in part on Evan Martin's Ghosd library:\n" "http://neugierig.org/software/ghosd/" msgstr "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Ditulis oleh Giacomo Lozito \n" +"\n" +"Sebagian didasarkan pada perpustakaan Ghosd Evan Martin:\n" +"http://neugierig.org/software/ghosd/" #: src/aosd/aosd.h:37 msgid "AOSD (On-Screen Display)" @@ -544,7 +626,7 @@ msgid "Concave Rectangle" msgstr "Persegi Bersudut Cekung" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Tidak ada" @@ -562,11 +644,11 @@ #: src/aosd/aosd_trigger.cc:56 msgid "Triggers OSD when the song title changes (for internet streams)." -msgstr "" +msgstr "Pemicu OSD ketika perubahan judul lagu (untuk stream internet)." #: src/aosd/aosd_trigger.cc:61 msgid "Pause On" -msgstr "Jedah hidup" +msgstr "Jedah" #: src/aosd/aosd_trigger.cc:62 msgid "Triggers OSD when playback is paused." @@ -742,6 +824,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Daftar Putar Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Warna" @@ -874,7 +972,7 @@ #: src/cdaudio/cdaudio-ng.cc:447 msgid "No audio capable CD drive found." -msgstr "" +msgstr "Tidak ditemukan drive CD berkemampuan audio." #: src/cdaudio/cdaudio-ng.cc:470 msgid "Drive is empty." @@ -886,46 +984,46 @@ #: src/cdaudio/cdaudio-ng.cc:496 msgid "Failed to finish initializing opened CD drive." -msgstr "" +msgstr "Gagal menyelesaikan inisialisasi drive CD yang dibuka." #: src/cdaudio/cdaudio-ng.cc:509 msgid "Failed to retrieve first/last track number." -msgstr "" +msgstr "Gagal mengambil nomor trek pertama / terakhir. " #: src/cdaudio/cdaudio-ng.cc:530 #, c-format msgid "Cannot read start/end LSN for track %d." -msgstr "" +msgstr "Tidak dapat membaca LSN awal / akhir untuk trek 1%d." #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." -msgstr "" +msgstr "Gagal membuat koneksi CDDB." #: src/cdaudio/cdaudio-ng.cc:678 msgid "Failed to query the CDDB server" -msgstr "" +msgstr "Gagal membuat kueri ke server CDDB" #: src/cdaudio/cdaudio-ng.cc:680 #, c-format msgid "Failed to query the CDDB server: %s" -msgstr "" +msgstr "Gagal untuk query server CDDB:%s" #: src/cdaudio/cdaudio-ng.cc:704 #, c-format msgid "Failed to read the CDDB info: %s" -msgstr "" +msgstr "Gagal membaca info CDDB: %s" #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" -msgstr "" +msgstr "Item Menu CD Audio " #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" -msgstr "" +msgstr "Putar CD " #: src/cd-menu-items/cd-menu-items.cc:45 msgid "_Add CD" -msgstr "" +msgstr "_Tambahkan CD" #: src/compressor/compressor.cc:45 msgid "Compression" @@ -949,7 +1047,7 @@ #: src/compressor/compressor.cc:64 msgid "Dynamic Range Compressor" -msgstr "" +msgstr "Dynamic Range Compressor" #: src/console/plugin.cc:15 msgid "" @@ -960,6 +1058,12 @@ "William Pitcock \n" "Shay Green " msgstr "" +"Mesin dekoder musik konsol berdasarkan Game_Music_Emu 0.5.2\n" +"Format didukung: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Pengaya Audacious oleh:\n" +"William Pitcock \n" +"Shay Green " #: src/console/plugin.cc:30 msgid "Bass:" @@ -979,7 +1083,7 @@ #: src/console/plugin.cc:42 src/modplug/plugin_main.cc:58 msgid "Resampling" -msgstr "" +msgstr "Resampling" #: src/console/plugin.cc:43 msgid "Enable audio resampling" @@ -1003,7 +1107,7 @@ #: src/coreaudio/coreaudio.cc:53 msgid "CoreAudio output" -msgstr "" +msgstr "Keluaran CoreAudio" #: src/coreaudio/coreaudio.cc:156 msgid "" @@ -1016,6 +1120,14 @@ "Based on SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" +"CoreAudio Output Plugin untuk Audacious\n" +"Hak Cipta 2014 William Pitcock\n" +"Hak Cipta 2017,18 René J.V. Bertin\n" +"(Kode asli dan kode yang diadaptasi dari\n" +"Apple examples, (C) Apple 2013)\n" +"\n" +"Berdasarkan Plugin Output SDL untuk Audacious\n" +"Hak Cipta 2010 John Lindgren" #: src/coreaudio/coreaudio.cc:172 msgid "Use exclusive mode" @@ -1024,6 +1136,8 @@ #: src/coreaudio/coreaudio.cc:174 msgid "Use bit perfect audio (adapt device sampling rate)" msgstr "" +"Gunakan audio yang sedikit sempurna (sesuaikan laju pengambilan sampel " +"perangkat)" #: src/crossfade/crossfade.cc:43 msgid "" @@ -1039,15 +1153,15 @@ #: src/crossfade/crossfade.cc:48 msgid "On automatic song change" -msgstr "" +msgstr "Perubahan lagu otomatis" #: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 msgid "Overlap:" -msgstr "" +msgstr "Overlap:" #: src/crossfade/crossfade.cc:54 msgid "On seek or manual song change" -msgstr "" +msgstr "Saat mencari atau mengubah lagu manual" #: src/crossfade/crossfade.cc:60 msgid "Tip" @@ -1058,26 +1172,28 @@ "For better crossfading, enable\n" "the Silence Removal effect." msgstr "" +"Untuk crossfading yang lebih baik, aktifkan \n" +"efek Penghapusan Diam. " #: src/crossfade/crossfade.cc:71 msgid "Crossfade" -msgstr "" +msgstr "Crossfade" #: src/crystalizer/crystalizer.cc:31 msgid "Crystalizer" -msgstr "" +msgstr "Crystalizer" #: src/crystalizer/crystalizer.cc:32 src/stereo_plugin/stereo.cc:45 msgid "Intensity:" -msgstr "" +msgstr "Intensitas:" #: src/crystalizer/crystalizer.cc:43 msgid "Crystalizer" -msgstr "" +msgstr "Crystalizer" #: src/cue/cue.cc:42 msgid "Cue Sheet Plugin" -msgstr "" +msgstr "Cue Sheet Plugin" #: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 #: src/delete-files/delete-files.cc:230 @@ -1117,7 +1233,7 @@ msgstr "Hapus" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Batal" @@ -1131,7 +1247,7 @@ #: src/delete-files/delete-files.cc:287 msgid "Move to trash instead of deleting immediately" -msgstr "" +msgstr "Pindahkan ke sampah alih-alih segera menghapus" #: src/echo_plugin/echo.cc:9 msgid "" @@ -1140,6 +1256,10 @@ "Surround echo by Carl van Schaik, 1999\n" "Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" msgstr "" +"Echo Plugin\n" +"Oleh Johan Levin, 1999\n" +"Surround echo oleh Carl van Schaik, 1999\n" +"Diperbarui untuk Audacious oleh William Pitcock and John Lindgren, 2010-2014" #: src/echo_plugin/echo.cc:21 msgid "Echo" @@ -1151,7 +1271,7 @@ msgstr "Penundaan" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1171,7 +1291,7 @@ msgid "FFmpeg Plugin" msgstr "Pengaya FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1180,6 +1300,12 @@ "William Pitcock \n" "Matti Hämäläinen " msgstr "" +"Pengaya decoding audio multi-format untuk Audacious menggunakan\n" +"kerangka kerja multimedia FFmpeg (http://www.ffmpeg.org/)\n" +"\n" +"Pengaya Audacious oleh:\n" +"William Pitcock \n" +"Matti Hämäläinen " #: src/filewriter/filewriter.cc:48 msgid "FileWriter Plugin" @@ -1210,6 +1336,19 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikan ulang " +"dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU yang " +"diterbitkan oleh Free Software Foundation; baik versi 2 dari Lisensi, atau " +"(sesuai pilihan Anda) versi yang lebih baru.\n" +"\n" +"Program ini disebarluaskan dengan harapan dapat bermanfaat, namun TANPA " +"JAMINAN APAPUN; bahkan tanpa jaminan tersirat tentang KELAYAKAN " +"DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik " +"Umum GNU untuk info lebih lanjut.\n" +"\n" +"Anda seharusnya telah menerima salinan GNU General Public License bersama " +"dengan program ini; jika tidak, kirim surat ke Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." #: src/filewriter/filewriter.cc:385 msgid "Output file format:" @@ -1221,11 +1360,11 @@ #: src/filewriter/filewriter.cc:392 msgid "Save into custom directory:" -msgstr "" +msgstr "Simpan ke direktori kustom: " #: src/filewriter/filewriter.cc:400 msgid "Generate file name from:" -msgstr "" +msgstr "Buat nama file dari:" #: src/filewriter/filewriter.cc:401 msgid "Original file name" @@ -1241,7 +1380,7 @@ #: src/filewriter/filewriter.cc:411 msgid "Prepend track number to file name" -msgstr "" +msgstr "Tambahkan nomor trek ke nama file" #: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 msgid "Auto" @@ -1275,76 +1414,76 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1363,15 +1502,15 @@ #: src/filewriter/filewriter.cc:456 msgid "VBR" -msgstr "" +msgstr "VBR" #: src/filewriter/filewriter.cc:457 msgid "ABR" -msgstr "" +msgstr "ABR" #: src/filewriter/filewriter.cc:478 msgid "Algorithm quality:" -msgstr "" +msgstr "Kualitas algoritma: " #: src/filewriter/filewriter.cc:484 msgid "Bitrate:" @@ -1387,7 +1526,7 @@ #: src/filewriter/filewriter.cc:501 msgid "Enforce strict ISO compliance" -msgstr "" +msgstr "Terapkan penyesuaian ISO yang ketat " #: src/filewriter/filewriter.cc:503 msgid "Error protection" @@ -1423,11 +1562,11 @@ #: src/filewriter/filewriter.cc:533 msgid "Omit Xing VBR header" -msgstr "" +msgstr "Abaikan header Xing VBR" #: src/filewriter/filewriter.cc:539 msgid "Frame Headers" -msgstr "" +msgstr "Frame Header" #: src/filewriter/filewriter.cc:540 msgid "Mark as copyright" @@ -1439,7 +1578,7 @@ #: src/filewriter/filewriter.cc:544 msgid "ID3 Tags" -msgstr "" +msgstr "Tag ID3" #: src/filewriter/filewriter.cc:545 msgid "Force addition of version 2 tag" @@ -1467,9 +1606,9 @@ #: src/filewriter/filewriter.cc:566 msgid "Quality (0-1):" -msgstr "" +msgstr "Kualitas (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Umum" @@ -1478,23 +1617,29 @@ msgid "FLAC Decoder" msgstr "Dekoder FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" -msgstr "" +msgstr "lossless" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" "\n" "http://www.skytale.net/projects/bmp-flac2/" msgstr "" +"Kode asli oleh\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" #: src/gio/gio.cc:34 msgid "" "GIO Plugin for Audacious\n" "Copyright 2009-2012 John Lindgren" msgstr "" +"GIO Plugin untuk Audacious\n" +"Hak Cipta 2009-2012 John Lindgren" #: src/gio/gio.cc:42 msgid "GIO Plugin" @@ -1502,11 +1647,11 @@ #: src/gio/gio.cc:152 msgid "Read-and-append mode not supported" -msgstr "" +msgstr "Mode baca-dan-tambahkan tidak didukung" #: src/gio/gio.cc:165 msgid "Invalid open mode" -msgstr "" +msgstr "Mode terbuka tidak valid " #: src/glspectrum/gl-spectrum.cc:51 msgid "" @@ -1519,10 +1664,18 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL Spectrum Analyzer untuk Audacious \n" +"Hak Cipta 2013 Christophe Budé, John Lindgren, dan Carlo Bramini\n" +"\n" +"Berdasarkan plugin XMMS:\n" +"Hak Cipta 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, dan " +"4Front Teknologi\n" +"\n" +"Lisensi: GPLv2+" #: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 msgid "OpenGL Spectrum Analyzer" -msgstr "" +msgstr "OpenGL Spectrum Analyzer" #: src/gtkui/columns.cc:35 msgid "Entry number" @@ -1554,7 +1707,7 @@ #: src/gtkui/columns.cc:40 msgid "Album artist" -msgstr "" +msgstr "Artis Album" #: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 #: src/qtui/playlist_model.cc:34 @@ -1698,12 +1851,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "Album Sebelumnya" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "Album Berikutnya " #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -1740,15 +1893,15 @@ #: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 msgid "Set Repeat Point _A" -msgstr "" +msgstr "Set Ulangi Titik _A" #: src/gtkui/menus.cc:111 src/qtui/menus.cc:167 msgid "Set Repeat Point _B" -msgstr "" +msgstr "Set Ulangi Titik _B" #: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 msgid "_Clear Repeat Points" -msgstr "" +msgstr "_Hapus Poin Pengulangan" #: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 #: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 @@ -1761,7 +1914,7 @@ #: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 msgid "By File _Path" -msgstr "" +msgstr "Menurut Jalur File" #: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 #: src/qtui/menus.cc:196 @@ -1776,12 +1929,12 @@ #: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 #: src/qtui/menus.cc:199 msgid "By Al_bum" -msgstr "" +msgstr "Menurut Album" #: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 #: src/qtui/menus.cc:200 msgid "By Albu_m Artist" -msgstr "" +msgstr "Oleh Artis Album" #: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 #: src/qtui/menus.cc:201 @@ -1791,12 +1944,12 @@ #: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 #: src/qtui/menus.cc:202 msgid "By _Genre" -msgstr "" +msgstr "Menurut_Genre" #: src/gtkui/menus.cc:129 src/gtkui/menus.cc:146 src/qtui/menus.cc:186 #: src/qtui/menus.cc:203 msgid "By _Length" -msgstr "" +msgstr "Menurut _ Panjang " #: src/gtkui/menus.cc:130 src/gtkui/menus.cc:147 src/qtui/menus.cc:187 #: src/qtui/menus.cc:204 @@ -1811,7 +1964,7 @@ #: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 #: src/qtui/menus.cc:206 msgid "By C_omment" -msgstr "" +msgstr "Menurut Komen" #: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 #: src/qtui/menus.cc:208 @@ -1825,7 +1978,7 @@ #: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 msgid "_Play/Resume" -msgstr "" +msgstr "Mainkan/Teruskan" #: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 msgid "_Refresh" @@ -1837,15 +1990,15 @@ #: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 msgid "Sort Se_lected" -msgstr "" +msgstr "Sortir yang Dipilih " #: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 msgid "Remove _Duplicates" -msgstr "" +msgstr "Hapus_Duplikat " #: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 msgid "Remove _Unavailable Files" -msgstr "" +msgstr "Hapus File _Tidak Tersedia" #: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 #: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 @@ -1854,7 +2007,7 @@ #: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 msgid "Ren_ame ..." -msgstr "" +msgstr "Ganti nama ..." #: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 #: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 @@ -1872,7 +2025,7 @@ #: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 msgid "Playlist _Manager ..." -msgstr "" +msgstr "Daftar Putar ... " #: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 msgid "_Queue Manager ..." @@ -1888,19 +2041,19 @@ #: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 msgid "_Equalizer ..." -msgstr "" +msgstr "_Ekualiser ... " #: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 msgid "E_ffects ..." -msgstr "" +msgstr "Efek ... " #: src/gtkui/menus.cc:182 msgid "_Record Stream" -msgstr "" +msgstr "Rekam Stream " #: src/gtkui/menus.cc:183 msgid "Audio _Settings ..." -msgstr "" +msgstr "Pengaturan Audio ..." #: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 msgid "Show _Menu Bar" @@ -1912,11 +2065,11 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Tampilkan Bilah Keterangan _Sampul Album" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" -msgstr "" +msgstr "Tampilkan Bilah Info Vis_ualisasi" #: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 msgid "Show _Status Bar" @@ -1924,7 +2077,7 @@ #: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 msgid "Show _Remaining Time" -msgstr "" +msgstr "Tampilkan _Waktu Tersisa" #: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 #: src/skins-qt/menus.cc:152 @@ -1962,11 +2115,11 @@ #: src/gtkui/menus.cc:211 src/qtui/menus.cc:297 msgid "_Open Containing Folder" -msgstr "" +msgstr "_Buka Isi Folder" #: src/gtkui/menus.cc:212 src/qtui/menus.cc:299 msgid "_Refresh Selected" -msgstr "" +msgstr "_Segarkan Terpilih" #: src/gtkui/menus.cc:214 src/qtui/menus.cc:302 msgid "Cu_t" @@ -1982,7 +2135,7 @@ #: src/gtkui/menus.cc:217 src/qtui/menus.cc:305 msgid "Paste at _End" -msgstr "" +msgstr "Tempelkan di _Akhir" #: src/gtkui/menus.cc:218 src/qtui/menus.cc:307 msgid "Select _All" @@ -1995,31 +2148,31 @@ #: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 msgid "Playlist Tabs" -msgstr "" +msgstr "Tabs Daftar Putar" #: src/gtkui/settings.cc:36 msgid "Always show tabs" -msgstr "" +msgstr "Selalu tampilkan tabs" #: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 msgid "Show entry counts" -msgstr "" +msgstr "Tampilkan jumlah masukan" #: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 msgid "Show close buttons" -msgstr "" +msgstr "Tampilkan tombol keluar" #: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 msgid "Playlist Columns" -msgstr "" +msgstr "Kolom Daftar Putar" #: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 msgid "Show column headers" -msgstr "" +msgstr "Tampilkan judul kolom" #: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 msgid "Scroll on song change" -msgstr "" +msgstr "Gulir saat perubahan lagu" #: src/gtkui/ui_gtk.cc:74 msgid "GTK Interface" @@ -2033,7 +2186,7 @@ #: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 #: src/qtui/main_window.cc:384 msgid "Buffering ..." -msgstr "" +msgstr "Memuat ..." #: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 msgid "Audacious" @@ -2058,7 +2211,7 @@ #: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 #: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 msgid "Search Library" -msgstr "" +msgstr "Cari Pustaka" #: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 #: src/qtui/main_window.cc:147 @@ -2090,7 +2243,7 @@ #: src/qtui/main_window.cc:166 src/qtui/menus.cc:252 src/skins/menus.cc:79 #: src/skins-qt/menus.cc:69 msgid "Record Stream" -msgstr "" +msgstr "Rekam Stream" #: src/gtkui/ui_gtk.cc:854 src/moonstone/main_window.cc:86 #: src/qtui/main_window.cc:173 src/skins/menus.cc:103 src/skins-qt/menus.cc:94 @@ -2104,7 +2257,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menu" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2123,12 +2276,12 @@ #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format msgid "%d kHz" -msgstr "" +msgstr "%d kHz" #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2144,7 +2297,7 @@ #: src/hotkey/gui.cc:70 src/qthotkey/gui.cc:63 msgid "Previous track" -msgstr "" +msgstr "Trek sebelumnya" #: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 msgid "Pause/Resume" @@ -2152,15 +2305,15 @@ #: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 msgid "Next track" -msgstr "" +msgstr "Trek selanjutnya" #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "Melangkah maju" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "Melangkah mundur" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2168,11 +2321,11 @@ #: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 msgid "Volume up" -msgstr "" +msgstr "Volume naik" #: src/hotkey/gui.cc:79 src/qthotkey/gui.cc:72 msgid "Volume down" -msgstr "" +msgstr "Volume turun" #: src/hotkey/gui.cc:80 src/qthotkey/gui.cc:73 msgid "Jump to file" @@ -2180,7 +2333,7 @@ #: src/hotkey/gui.cc:81 src/qthotkey/gui.cc:74 msgid "Toggle player window(s)" -msgstr "" +msgstr "Beralih jendela pemutar" #: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 msgid "Show On-Screen-Display" @@ -2188,19 +2341,19 @@ #: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 msgid "Toggle repeat" -msgstr "" +msgstr "Beralih ulangi" #: src/hotkey/gui.cc:84 src/qthotkey/gui.cc:77 msgid "Toggle shuffle" -msgstr "" +msgstr "Beralih acak" #: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 msgid "Toggle stop after current" -msgstr "" +msgstr "Beralih berhenti setelah ini" #: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 msgid "Raise player window(s)" -msgstr "" +msgstr "Naikkan jendela pemutar" #: src/hotkey/gui.cc:97 src/qthotkey/gui.cc:97 msgid "(none)" @@ -2212,6 +2365,9 @@ "\n" "Do you want to continue?" msgstr "" +"Tidak direkomendasikan untuk mengikat mouse utama tanpa modifikasi.\n" +"\n" +"Apakah anda ingin meneruskan?" #: src/hotkey/gui.cc:263 msgid "Binding mouse buttons" @@ -2243,7 +2399,7 @@ #: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 msgid "Global Hotkeys" -msgstr "" +msgstr "Hotkey Global" #: src/hotkey/plugin.cc:76 msgid "" @@ -2259,6 +2415,17 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Pengaya Hotkey Global\n" +"Kontrol pemutar dengan kombinasi tombol global atau tombol multimedia.\n" +"\n" +"Hak Cipta (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Kontributor termasuk:\n" +"Hak Cipta (C) 2006-2007 Vladimir Paskov \n" +"Hak Cipta (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2266,55 +2433,57 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "Nama klien:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" -msgstr "" +msgstr "Sambungkan port keluaran secara otomatis" #: src/jack/jack-ng.cc:130 msgid "Filter ports (regex, use any port if blank):" -msgstr "" +msgstr "Port filter (regex, gunakan port apapun bila kosong)" #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "Hanya sambungkan ke port fisik" #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Upmix ke" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "" +msgstr "port apabila masukan memiliki saluran lebih sedikit" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "Abaikan jumlah port yang tidak mencukupi" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." -msgstr "" +msgstr "Keluaran port JACK tidak ditemukan. Mohon cek pengaturan." #: src/jack/jack-ng.cc:195 #, c-format msgid "Only %d JACK output ports were found but %d are required." -msgstr "" +msgstr "Hanya %d keluaran JACK ditemukan tapi %d dibutuhkan." #: src/jack/jack-ng.cc:210 #, c-format msgid "Failed to connect to JACK port %s." -msgstr "" +msgstr "Gagal menyambung ke port JACK %s." #: src/jack/jack-ng.cc:230 msgid "" "JACK supports only floating-point audio. You must change the output bit " "depth to floating-point in Audacious settings." msgstr "" +"JACK hanya mendukung suara titik-mengambang. Anda harus mengubah kedalaman " +"bit keluaran menjadi titik-mengambang di pengaturan Audacious." #: src/jack/jack-ng.cc:245 msgid "Failed to connect to the JACK server; is it running?" -msgstr "" +msgstr "Gagal menyambung ke server JACK; apakah berjalan?" #: src/jack/jack-ng.cc:321 #, c-format @@ -2322,6 +2491,9 @@ "The JACK server requires a sample rate of %d Hz, but Audacious is playing at " "%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." msgstr "" +"Server JACK memerlukan tingkat sampel %d Hz, tapi Audacious memainkan pada " +"%d Hz. Mohon gunakan efek konversi tingkat sampel untuk memperbaiki " +"ketidakcocokan." #: src/ladspa/plugin.cc:415 #, c-format @@ -2366,10 +2538,12 @@ "LADSPA Host for Audacious\n" "Copyright 2011 John Lindgren" msgstr "" +"Host LADSPA untuk Audacious\n" +"Hak Cipta 2011 John Lindgren" #: src/ladspa/plugin.h:78 msgid "LADSPA Host" -msgstr "" +msgstr "Host LADSPA" #: src/lirc/lirc.cc:55 msgid "LIRC Plugin" @@ -2390,6 +2564,19 @@ "\n" "For more information about LIRC, see http://lirc.org." msgstr "" +"Pengaya sederhana untuk mengontrol audacious menggunakan daemon pengendali " +"jarak jauh LIRC\n" +"\n" +"Disesuaikan untuk Audacious oleh:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Berdasarkan pengaya XMMS LIRC oleh:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"Untuk informasi lanjut tentang LIRC, lihat http://lirc.org." #: src/lirc/lirc.cc:390 msgid "Connection" @@ -2405,97 +2592,99 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "Lirik" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "" +msgstr "Tidak kemana - mana" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lirik.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Artis terpotong di awal, Judul -- di akhir" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Karakter yang akan dipotong:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +"Karakternya adalah ORed di RegExp, dikelilingi oleh spasi putih" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Karakter yang akan dipisah:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Potong lebih lanjut yang ada di karakter" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Umum" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Pisahkan judul menjadi artis dan judul pada karakter" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" -msgstr "" +msgstr "Sumber Internet" #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "" +msgstr "Ambil lirik dari:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" -msgstr "" +msgstr "Simpan lirik yang diambil dari cache lokal" #: src/lyricwiki-qt/lyricwiki.cc:144 msgid "Local Storage" -msgstr "" +msgstr "Penyimpanan lokal" #: src/lyricwiki-qt/lyricwiki.cc:145 msgid "Load lyric files (.lrc) from local storage" -msgstr "" +msgstr "Muat file lirik (.lrc) dari penyimpanan lokal" #: src/lyricwiki-qt/lyricwiki.cc:356 #, c-format msgid "Unable to fetch %s" -msgstr "" +msgstr "Tidak dapat mengambil %s" #: src/lyricwiki-qt/lyricwiki.cc:365 #, c-format msgid "Unable to parse %s" -msgstr "" +msgstr "Tidak dapat menguraikan %s" #: src/lyricwiki-qt/lyricwiki.cc:403 msgid "Looking for lyrics ..." msgstr "Mencari lirik ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Kesalahan" #: src/lyricwiki-qt/lyricwiki.cc:433 msgid "Lyrics could not be found." -msgstr "" +msgstr "Lirik tidak dapat ditemukan." #: src/lyricwiki-qt/lyricwiki.cc:501 msgid "Missing title and/or artist." -msgstr "" +msgstr "Judul dan/atau artis tidak ada." #: src/lyricwiki-qt/lyricwiki.cc:553 msgid "Save Locally" -msgstr "" +msgstr "Simpan Secara Lokal." #: src/lyricwiki-qt/lyricwiki.cc:561 msgid "Refresh" -msgstr "" +msgstr "Segarkan" #: src/m3u/m3u.cc:32 msgid "M3U Playlists" @@ -2503,7 +2692,7 @@ #: src/metronom/metronom.cc:44 msgid "Tact Generator" -msgstr "" +msgstr "Generator Tact" #: src/metronom/metronom.cc:145 #, c-format @@ -2523,20 +2712,27 @@ "e.g. tact://77 to play 77 beats per minute\n" "or tact://60*3/4 to play 60 bpm in 3/4 tacts" msgstr "" +"Generator Tact oleh Martin Strauss \n" +"\n" +"Untuk menggunakan, tambah URL: tact://beats*num/den\n" +"e.g. tact://77 untuk memainkan 77 ketukan per menit\n" +"or tact://60*3/4 untuk memainkan 60 ketukan di 3/4 tacts" #: src/mixer/mixer.cc:43 msgid "Channel Mixer" -msgstr "" +msgstr "Pencampur Saluran" #: src/mixer/mixer.cc:255 msgid "" "Channel Mixer Plugin for Audacious\n" "Copyright 2011-2012 John Lindgren and Michał Lipski" msgstr "" +"Pengaya Pencampur Saluran untuk Audacious\n" +"Hak Cipta 2011-2012 John Lindgren dan Michał Lipski" #: src/mixer/mixer.cc:259 msgid "Channel Mixer" -msgstr "" +msgstr "Pencampur Saluran" #: src/mixer/mixer.cc:260 msgid "Output channels:" @@ -2548,11 +2744,11 @@ #: src/mms/mms.cc:82 msgid "Error connecting to MMS server" -msgstr "" +msgstr "Kesalahan saat menyambung ke server MMS" #: src/modplug/modplugbmp.h:57 msgid "ModPlug (Module Player)" -msgstr "" +msgstr "ModPlug (Pemutar Modul)" #: src/modplug/plugin_main.cc:55 msgid "Channels" @@ -2560,92 +2756,92 @@ #: src/modplug/plugin_main.cc:59 msgid "Nearest (fastest)" -msgstr "" +msgstr "Terdekat (tercepat)" #: src/modplug/plugin_main.cc:60 msgid "Linear (fast)" -msgstr "" +msgstr "Linier (cepat)" #: src/modplug/plugin_main.cc:61 msgid "Spline (good)" -msgstr "" +msgstr "Splin (baik)" #: src/modplug/plugin_main.cc:62 msgid "Polyphase (best)" -msgstr "" +msgstr "Polifase (terbaik)" #: src/modplug/plugin_main.cc:63 msgid "Sample rate" -msgstr "" +msgstr "Tingkat sampel" #: src/modplug/plugin_main.cc:64 msgid "22 kHz" -msgstr "" +msgstr "22 kHz" #: src/modplug/plugin_main.cc:65 msgid "44 kHz" -msgstr "" +msgstr "44 kHz" #: src/modplug/plugin_main.cc:66 msgid "48 kHz" -msgstr "" +msgstr "48 kHz" #: src/modplug/plugin_main.cc:67 msgid "96 kHz" -msgstr "" +msgstr "96 kHz" #: src/modplug/plugin_main.cc:71 src/modplug/plugin_main.cc:76 #: src/modplug/plugin_main.cc:81 msgid "Level:" -msgstr "" +msgstr "Tingkat:" #: src/modplug/plugin_main.cc:77 msgid "Cutoff:" -msgstr "" +msgstr "Memotong:" #: src/modplug/plugin_main.cc:90 msgid "Reverb" -msgstr "" +msgstr "Berkumandang" #: src/modplug/plugin_main.cc:93 msgid "Bass Boost" -msgstr "" +msgstr "Peningkatan Bass" #: src/modplug/plugin_main.cc:96 msgid "Surround" -msgstr "" +msgstr "Mengelilingi" #: src/modplug/plugin_main.cc:99 msgid "Preamp" -msgstr "" +msgstr "Preamp" #: src/modplug/plugin_main.cc:106 msgid "Oversample" -msgstr "" +msgstr "Sampel berlebih" #: src/modplug/plugin_main.cc:107 msgid "Noise reduction" -msgstr "" +msgstr "Pengurangan kebisingan" #: src/modplug/plugin_main.cc:108 msgid "Play Amiga MODs" -msgstr "" +msgstr "Mainkan MODs Amiga" #: src/modplug/plugin_main.cc:109 msgid "Repeat" -msgstr "" +msgstr "Ulang" #: src/modplug/plugin_main.cc:110 msgid "Repeat count:" -msgstr "" +msgstr "Jumlah pengulangan:" #: src/modplug/plugin_main.cc:111 msgid "To repeat forever, set the repeat count to -1." -msgstr "" +msgstr "Untuk mengulang selamanya, setel hitungan pengulangan ke -1." #: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 msgid "These settings will take effect when Audacious is restarted." -msgstr "" +msgstr "Pengaturan ini akan berlaku saat Audacious dimulai ulang." #: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 #: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 @@ -2655,11 +2851,11 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" -msgstr "" +msgstr "Setel ulang ke Bawaan" #: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 msgid "Now Playing" @@ -2667,7 +2863,7 @@ #: src/moonstone/playlist_model.cc:38 src/qtui/playlist_model.cc:33 msgid "Entry Number" -msgstr "" +msgstr "Nomor Masuk" #: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 msgid "Album Artist" @@ -2675,19 +2871,19 @@ #: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 msgid "Queue Position" -msgstr "" +msgstr "Posisi Antrian" #: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 msgid "File Path" -msgstr "" +msgstr "Lokasi File" #: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:35 msgid "File Name" -msgstr "" +msgstr "Nama File" #: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:36 msgid "Custom Title" -msgstr "" +msgstr "Title Pilihan" #: src/moonstone/playlist_selection.cc:64 #: src/playlist-manager/playlist-manager.cc:200 @@ -2705,7 +2901,7 @@ #: src/mpg123/mpg123.cc:82 msgid "Use accurate length calculation (slow)" -msgstr "" +msgstr "Gunakan perhitungan panjang yang akurat (lambat)" #: src/mpg123/mpg123.cc:256 msgid "Surround" @@ -2721,19 +2917,19 @@ #: src/neon/neon.cc:526 msgid "Error parsing redirect" -msgstr "" +msgstr "Kesalahan penguraian pengalihan" #: src/neon/neon.cc:540 msgid "Unknown HTTP error" -msgstr "" +msgstr "Kesalahan HTTP tidak diketahui" #: src/neon/neon.cc:590 msgid "Error parsing URL" -msgstr "" +msgstr "Kesalahan saat menguraikan URL" #: src/neon/neon.cc:660 msgid "Too many redirects" -msgstr "" +msgstr "Terlalu banyak pengalihan" #: src/notify/event.cc:97 msgid "Stopped" @@ -2766,30 +2962,46 @@ "You should have received a copy of the GNU General Public License along with " "this program. If not, see ." msgstr "" +"Pengaya Pemberitahuan Desktop Untuk Audacious\n" +"Hak Cipta (C) 2010 Maximilian Bogner\n" +"Hak Cipta (C) 2011-2013 John Lindgren dan Jean-Alexandre Anglès d'Auriac\n" +"\n" +"Plugin ini adalah perangkat lunak gratis: Anda dapat mendistribusikannya " +"kembali dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU " +"yang diterbitkan oleh Free Software Foundation, baik versi 3 dari Lisensi, " +"atau (sesuai pilihan Anda) versi yang lebih baru.\n" +"\n" +"Plugin ini disebarluaskan dengan harapan dapat bermanfaat, tapi TANPA " +"JAMINAN APAPUN; bahkan tanpa jaminan tersirat tentang KELAYAKAN " +"DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik " +"Umum GNU untuk keterangan lebih lanjut.\n" +"\n" +"Anda seharusnya telah menerima salinan Lisensi Publik Umum GNU bersama " +"dengan program ini. Jika tidak, lihat . " #: src/notify/notify.cc:104 msgid "Show playback controls" -msgstr "" +msgstr "Tampilkan kontrol pemutaran" #: src/notify/notify.cc:106 msgid "Always show notification" -msgstr "" +msgstr "Selalu tampilkan notifikasi" #: src/notify/notify.cc:108 msgid "Include album name in notification" -msgstr "" +msgstr "Sertakan nama album di notifikasi" #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Durasi pemberitahuan khusus:" #: src/notify/osd.cc:74 msgid "Show" -msgstr "" +msgstr "Tunjukkan" #: src/openmpt/mpt.cc:50 msgid "OpenMPT (Module Player)" -msgstr "" +msgstr "OpenMPT (Pemutar Modul)" #: src/openmpt/mpt.cc:133 msgid "" @@ -2797,10 +3009,13 @@ "\n" "Written by: Chris Spiegel " msgstr "" +"Pemutar modul berdasarkan libopenmpt\n" +"\n" +"Ditulis oleh: Chris Spiegel " #: src/openmpt/mpt.cc:152 msgid "Stereo separation:" -msgstr "" +msgstr "Pemisahan stereo:" #: src/openmpt/mpt.cc:154 msgid "%" @@ -2808,19 +3023,19 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "" +msgstr "Interpolasi:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" -msgstr "" +msgstr "Linier" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "Kubik" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "Berjendela sinc" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -2828,11 +3043,11 @@ #: src/oss4/oss.h:77 msgid "OSS3 Output" -msgstr "" +msgstr "Keluaran OSS3" #: src/oss4/plugin.cc:35 msgid "Default device" -msgstr "" +msgstr "Perangkat bawaan" #: src/oss4/plugin.cc:78 msgid "Audio device:" @@ -2844,7 +3059,7 @@ #: src/oss4/plugin.cc:85 msgid "Save volume between sessions." -msgstr "" +msgstr "Simpan volume antar sesi." #: src/oss4/plugin.cc:87 msgid "Enable format conversions made by the OSS software." @@ -2852,7 +3067,7 @@ #: src/oss4/plugin.cc:89 msgid "Enable exclusive mode to prevent virtual mixing." -msgstr "" +msgstr "Aktifkan mode eksklusif untuk mencegah pencampuran virtual." #: src/oss4/plugin.cc:101 msgid "" @@ -2862,6 +3077,12 @@ "I would like to thank people on #audacious, especially Tony Vroon and John " "Lindgren and of course the authors of the previous OSS plugin." msgstr "" +"Pengaya Keluaran OSS4 untuk Audacious\n" +"Hak Cipta 2010-2012 Michał Lipski\n" +"\n" +"Saya ingin mengucapkan terima kasih kepada orang-orang di #audacious, " +"terutama Tony Vroon dan John Lindgren dan tentu saja penulis plugin OSS " +"sebelumnya." #: src/playlist-manager/playlist-manager.cc:37 #: src/playlist-manager-qt/playlist-manager-qt.cc:40 @@ -2880,31 +3101,31 @@ #: src/pls/pls.cc:35 msgid "PLS Playlists" -msgstr "" +msgstr "Daftar Putar PLS" #: src/psf/plugin.cc:53 msgid "OpenPSF PSF1/PSF2 Decoder" -msgstr "" +msgstr "OpenPSF PSF1/PSF2 Decoder" #: src/psf/plugin.cc:270 msgid "OpenPSF Configuration" -msgstr "" +msgstr "Konfigurasi OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Abaikan panjang dari berkas" #: src/pulse/pulse_audio.cc:42 msgid "PulseAudio Output" -msgstr "" +msgstr "Keluaran PulseAudio" #: src/pulse/pulse_audio.cc:72 msgid "Context name:" -msgstr "" +msgstr "Nama konteks:" #: src/pulse/pulse_audio.cc:74 msgid "Stream name:" -msgstr "" +msgstr "Nama aliran:" #: src/pulse/pulse_audio.cc:575 msgid "" @@ -2924,10 +3145,25 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"Pengaya Audacious Keluaran PulseAudio\n" +"\n" +"Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikan ulang " +"dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU yang " +"diterbitkan oleh Free Software Foundation; baik versi 2 dari Lisensi, atau " +"(sesuai pilihan Anda) versi yang lebih baru.\n" +"\n" +"Program ini disebarluaskan dengan harapan dapat bermanfaat, namun TANPA " +"JAMINAN APAPUN; bahkan tanpa jaminan tersirat tentang KELAYAKAN " +"DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik " +"Umum GNU untuk info lebih lanjut.\n" +"\n" +"Anda seharusnya telah menerima salinan GNU General Public License bersama " +"dengan program ini; jika tidak, kirim surat ke Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." #: src/qtaudio/qtaudio.cc:44 msgid "QtMultimedia Output" -msgstr "" +msgstr "Keluaran QtMultimedia" #: src/qtaudio/qtaudio.cc:72 msgid "" @@ -2937,6 +3173,11 @@ "Based on SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" +"Pengaya Keluaran QtMultimedia Audio untuk Audacious\n" +"Hak Cipta 2014 William Pitcock\n" +"\n" +"Berdasarkan Pengaya Keluaran SDL untuk Audacious\n" +"Hak Cipta 2010 John Lindgren" #: src/qtglspectrum/gl-spectrum.cc:41 msgid "" @@ -2950,10 +3191,19 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL Spectrum Analyzer untuk Audacious\n" +"Hak Cipta 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Hak Cipta 2014, 2020 Ariadne Conill\n" +"\n" +"Berdasarkan Pengaya XMMS:\n" +"Hak Cipta 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"Lisensi: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Tekan kombinasi tombol di dalam bidang teks." #: src/qthotkey/plugin.cc:103 msgid "" @@ -2970,96 +3220,110 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Pengaya Hotkey Global\n" +"Kontrol pemutar dengan kombinasi tombol global atau tombol multimedia.\n" +"\n" +"Hak Cipta (C) 2020 i.Dark_Templar \n" +"Hak Cipta (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Kontributor termasuk:\n" +"Hak Cipta (C) 2006-2007 Vladimir Paskov \n" +"Hak Cipta (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." -msgstr "" +msgstr "_Buka Folder ..." #: src/qtui/menus.cc:115 msgid "_Add Folder ..." -msgstr "" +msgstr "_Tambah Folder ..." #: src/qtui/menus.cc:128 msgid "_Log Inspector ..." -msgstr "" +msgstr "_Pemantau log ..." #: src/qtui/menus.cc:218 msgid "_Find ..." -msgstr "" +msgstr "_Cari ..." #: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 msgid "Audio Settings ..." -msgstr "" +msgstr "Pengaturan Audio ..." #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" -msgstr "" +msgstr "Tampilan Qt" #: src/qtui/search_bar.cc:46 msgid "Search playlist" -msgstr "" +msgstr "Cari daftar lagu" #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "Selalu" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "Sembunyikan otomatis" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "Tidak pernah" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "Tampilkan tab daftar lagu:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Gunakan font tebal untuk judul kolom" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" -msgstr "" +msgstr "Konverter Tingkat Sampel" #: src/resample/resample.cc:183 msgid "" "Sample Rate Converter Plugin for Audacious\n" "Copyright 2010-2012 John Lindgren" msgstr "" +"Pengaya Konverter Tingkat Sampel untuk Audacious\n" +"Hak Cipta 2010-2012 John Lindgren" #: src/resample/resample.cc:187 msgid "Skip/repeat samples" -msgstr "" +msgstr "Lewati/ulangi sampel" #: src/resample/resample.cc:188 msgid "Linear interpolation" -msgstr "" +msgstr "Interpolasi linier" #: src/resample/resample.cc:189 msgid "Fast sinc interpolation" -msgstr "" +msgstr "Interpolasi sinc cepat" #: src/resample/resample.cc:190 msgid "Medium sinc interpolation" -msgstr "" +msgstr "Interpolasi sinkronisasi menengah" #: src/resample/resample.cc:191 msgid "Best sinc interpolation" -msgstr "" +msgstr "Interpolasi sinkronisasi terbaik" #: src/resample/resample.cc:195 msgid "Conversion" -msgstr "" +msgstr "Konversi" #: src/resample/resample.cc:196 msgid "Method:" @@ -3067,15 +3331,15 @@ #: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 msgid "Rate:" -msgstr "" +msgstr "Kecepatan:" #: src/resample/resample.cc:202 msgid "Rate Mappings" -msgstr "" +msgstr "Pemetaan Kecepatan" #: src/resample/resample.cc:203 msgid "Use rate mappings" -msgstr "" +msgstr "Gunakan pemetaan kecepatan" #: src/resample/resample.cc:205 msgid "8 kHz:" @@ -3119,40 +3383,46 @@ #: src/scrobbler2/config_window.cc:19 msgid "Checking Last.fm access ..." -msgstr "" +msgstr "Memeriksa akses Last.fm ..." #: src/scrobbler2/config_window.cc:27 msgid "" "Your scrobbles are being saved on your computer temporarily. They will be " "submitted as soon as Audacious is allowed access." msgstr "" +"Scrobble Anda sedang disimpan di komputer Anda untuk sementara. Mereka akan " +"dikirimkan setelah Audacious diizinkan akses." #: src/scrobbler2/config_window.cc:33 #, c-format msgid "Permission granted. Scrobbling for user %s." -msgstr "" +msgstr "Izin diberikan. Scrobbling untuk pengguna %s." #: src/scrobbler2/config_window.cc:37 msgid "" "Permission denied. Open the following URL in a browser, allow Audacious " "access to your account, and then click 'Check Permission' again:" msgstr "" +"Izin ditolak. Buka URL berikut di peramban, izinkan Audacious untuk " +"mengakses akun Anda, lalu klik 'Periksa Izin' lagi:" #: src/scrobbler2/config_window.cc:47 msgid "There was a problem contacting Last.fm." -msgstr "" +msgstr "Terjadi masalah saat menghubungi Last.fm." #: src/scrobbler2/config_window.cc:86 msgid "Check Permission" -msgstr "" +msgstr "Cek Izin" #: src/scrobbler2/config_window.cc:87 msgid "Revoke Permission" -msgstr "" +msgstr "Cabut Izin" #: src/scrobbler2/config_window.cc:91 msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." msgstr "" +"Anda harus mengizinkan Audacious untuk mengscrobble trek ke akun Last.fm " +"Anda." #: src/scrobbler2/scrobbler.cc:29 msgid "Scrobbler 2.0" @@ -3163,6 +3433,8 @@ "The Scrobbler plugin could not be started.\n" "There might be a problem with your installation." msgstr "" +"Pengaya Scrobbler tidak dapat dimulai.\n" +"Mungkin ada masalah dengan instalasi Anda." #: src/scrobbler2/scrobbler.cc:291 msgid "" @@ -3174,22 +3446,34 @@ "project.\n" "\n" msgstr "" +"Pengaya Scrobbler Audacious 2.0 oleh Pitxyoki,\n" +"\n" +"Hak Cipta © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Terima kasih kepada John Lindgren karena telah membantu saya di awal proyek " +"ini.\n" +"\n" #: src/scrobbler2/scrobbler_communication.cc:663 msgid "" "Audacious is now using an improved version of the Last.fm Scrobbler.\n" "Please check the Preferences for the Scrobbler plugin." msgstr "" +"Audacious sekarang sedang menggunakan versi yang disempurnakan dari Last.fm " +"Scrobbler.\n" +"Mohon periksa Setelan untuk pengaya Scrobbler. " #: src/sdlout/sdlout.cc:43 msgid "SDL Output" -msgstr "" +msgstr "Keluaran SDL" #: src/sdlout/sdlout.cc:72 msgid "" "SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" +"Pengaya Keluaran SDL untuk Audacious\n" +"Hak Cipta 2010 John Lindgren" #: src/search-tool/library.cc:35 src/search-tool/library.cc:46 #: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 @@ -3200,37 +3484,39 @@ #, c-format msgid "%d song" msgid_plural "%d songs" -msgstr[0] "" +msgstr[0] "%d lagu" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" -msgstr "" +msgstr "dari aliran ini" #: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 msgid "on" -msgstr "" +msgstr "di" #: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 msgid "by" -msgstr "" +msgstr "oleh" #: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 msgid "Number of results to show:" -msgstr "" +msgstr "Jumlah hasil untuk ditampilkan:" #: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 msgid "Rescan library at startup" -msgstr "" +msgstr "Pindai ulang pustaka saat aplikasi dimulai" #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "" +msgstr "Pantau pustaka untuk perubahan" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" "To import your music library into Audacious, choose a folder and then click " "the \"refresh\" icon." msgstr "" +"Untuk mengimpor pusaka musik Anda ke Audacious, pilih folder, lalu klik ikon " +"\"segarkan\"." #: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 msgid "Please wait ..." @@ -3248,13 +3534,13 @@ #, c-format msgid "%d of %d result shown" msgid_plural "%d of %d results shown" -msgstr[0] "" +msgstr[0] "%d dari %d hasil ditampilkan" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format msgid "%d result" msgid_plural "%d results" -msgstr[0] "" +msgstr[0] "%d hasil" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3266,85 +3552,87 @@ #: src/sid/xmms-sid.cc:43 msgid "SID Player" -msgstr "" +msgstr "Pemutar SID" #: src/sid/xs_config.cc:62 msgid "Channels:" -msgstr "" +msgstr "Saluran:" #: src/sid/xs_config.cc:68 msgid "Emulation" -msgstr "" +msgstr "Emulasi" #: src/sid/xs_config.cc:69 msgid "Emulate MOS 8580 (default: MOS 6581)" -msgstr "" +msgstr "Emulasi MOS 8580 (bawaan: MOS 6581)" #: src/sid/xs_config.cc:71 msgid "Do not automatically select chip model" -msgstr "" +msgstr "Jangan pilih model chip secara otomatis" #: src/sid/xs_config.cc:73 msgid "Emulate filter" -msgstr "" +msgstr "Emulasi filter" #: src/sid/xs_config.cc:75 msgid "Clock speed:" -msgstr "" +msgstr "Kecepatan jam:" #: src/sid/xs_config.cc:78 msgid "Do not automatically select clock speed" -msgstr "" +msgstr "Jangan pilih kecepatan jam secara otomatis" #: src/sid/xs_config.cc:80 msgid "Playback time" -msgstr "" +msgstr "Waktu Pemutaran" #: src/sid/xs_config.cc:81 msgid "Set maximum playback time:" -msgstr "" +msgstr "Setel waktu pemutaran maksimum:" #: src/sid/xs_config.cc:87 msgid "Use only when song length is unknown" -msgstr "" +msgstr "Gunakan hanya ketika panjang lagu tidak diketahui" #: src/sid/xs_config.cc:90 msgid "Set minimum playback time:" -msgstr "" +msgstr "Setel waktu pemutaran minimum:" #: src/sid/xs_config.cc:96 msgid "Subtunes" -msgstr "" +msgstr "Subtunes" #: src/sid/xs_config.cc:97 msgid "Enable subtunes" -msgstr "" +msgstr "Aktifkan subtunes" #: src/sid/xs_config.cc:99 msgid "Ignore subtunes shorter than:" -msgstr "" +msgstr "Abaikan subtunes yang lebih pendek dari:" #: src/sid/xs_config.cc:105 msgid "Note" -msgstr "" +msgstr "Catatan" #: src/silence-removal/silence-removal.cc:39 msgid "Silence Removal" -msgstr "" +msgstr "Penghapusan Keheningan" #: src/silence-removal/silence-removal.cc:58 msgid "" "Silence Removal Plugin for Audacious\n" "Copyright 2014 John Lindgren" msgstr "" +"Pengaya Penghapusan Keheningan untuk Audacious\n" +"Hak Cipta 2014 John Lindgren" #: src/silence-removal/silence-removal.cc:67 msgid "Silence Removal" -msgstr "" +msgstr "Penghapusan Keheningan" #: src/silence-removal/silence-removal.cc:68 msgid "Threshold:" -msgstr "" +msgstr "Ambang:" #: src/silence-removal/silence-removal.cc:70 msgid "dB" @@ -3352,15 +3640,15 @@ #: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 msgid "Repeat points cleared." -msgstr "" +msgstr "Titik ulangi dihapus." #: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 msgid "Repeat point A set." -msgstr "" +msgstr "Ulangi titik A set." #: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 msgid "Repeat point B set." -msgstr "" +msgstr "Ulangi titik B set." #: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 msgid "Preamp" @@ -3412,11 +3700,11 @@ #: src/skins/main.cc:452 src/skins-qt/main.cc:436 msgid "Recording on" -msgstr "" +msgstr "Rekaman aktif" #: src/skins/main.cc:454 src/skins-qt/main.cc:438 msgid "Recording off" -msgstr "" +msgstr "Rekaman mati" #: src/skins/main.cc:749 src/skins-qt/main.cc:690 #, c-format @@ -3461,11 +3749,11 @@ #: src/skins/main.cc:887 src/skins/menus.cc:149 src/skins-qt/main.cc:828 #: src/skins-qt/menus.cc:142 msgid "Double Size" -msgstr "" +msgstr "Ukuran ganda" #: src/skins/main.cc:890 src/skins-qt/main.cc:831 msgid "Visualizations" -msgstr "" +msgstr "Visualisasi" #: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 msgid "Volume Up" @@ -3477,7 +3765,7 @@ #: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 msgid "Effects ..." -msgstr "" +msgstr "Efek ..." #: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 msgid "Open Files ..." @@ -3497,7 +3785,7 @@ #: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 msgid "Output" -msgstr "" +msgstr "Keluaran" #: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 msgid "View" @@ -3505,7 +3793,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servis" @@ -3522,13 +3810,13 @@ msgstr "Keluar" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Info Lagu" #: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 msgid "Shuffle by Album" -msgstr "" +msgstr "Acak sebagai Album" #: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 msgid "No Playlist Advance" @@ -3536,13 +3824,13 @@ #: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 msgid "Set A-B Repeat" -msgstr "" +msgstr "Atur Ulangan A-B" #: src/skins/menus.cc:118 src/skins-qt/menus.cc:109 msgid "Clear A-B Repeat" -msgstr "" +msgstr "Hapus Ulangan A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Lompat ke Lagu ..." @@ -3552,7 +3840,7 @@ #: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 msgid "Play/Resume" -msgstr "" +msgstr "Mainkan/Lanjutkan" #: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 msgid "New Playlist" @@ -3588,7 +3876,7 @@ #: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 msgid "Queue Manager ..." -msgstr "" +msgstr "Manajer antrian ..." #: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 msgid "Refresh Playlist" @@ -3604,7 +3892,7 @@ #: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 msgid "Show Remaining Time" -msgstr "" +msgstr "Tampilkan Waktu Tersisa" #: src/skins/menus.cc:150 src/skins-qt/menus.cc:143 msgid "Always on Top" @@ -3612,19 +3900,19 @@ #: src/skins/menus.cc:151 src/skins-qt/menus.cc:145 msgid "On All Workspaces" -msgstr "" +msgstr "Di Semua Ruang Kerja" #: src/skins/menus.cc:153 src/skins-qt/menus.cc:148 msgid "Roll Up Player" -msgstr "" +msgstr "Gulung Player keatas" #: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 msgid "Roll Up Playlist Editor" -msgstr "" +msgstr "Gulung Editor Daftar Putar keatas" #: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 msgid "Roll Up Equalizer" -msgstr "" +msgstr "Gulung Equalizer keatas" #: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 msgid "Add URL ..." @@ -3635,20 +3923,20 @@ msgstr "Tambah Berkas ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Dari Judul" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" -msgstr "" +msgstr "Menurut Nama File" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Oleh Path Berkas" @@ -3676,113 +3964,113 @@ msgid "Remove Selected" msgstr "Hapus Yang Dipilih" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Cari dan Pilih" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Balik Pilihan" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Jangan Pilih Apapun" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Pilih Semua" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Oleh Nomor Trek" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Dari Artis" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Dari Album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" -msgstr "" +msgstr "Menurut Artis album" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Oleh Tanggal Rilis" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" -msgstr "" +msgstr "Menurut Genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" -msgstr "" +msgstr "Menurut Panjang" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" -msgstr "" +msgstr "Menurut Judul Pilihan" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" -msgstr "" +msgstr "Menurut Komen" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Acak Daftar" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Balikkan Daftar" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Urutkan yang Terpilih" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Urutkan Daftar" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" -msgstr "" +msgstr "Buka Isi Folder" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Potong" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Salin" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Tempel" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" -msgstr "" +msgstr "Tempelkan di Akhir" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" -msgstr "" +msgstr "Antre/Tidak Antre" #: src/skins/playlist-widget.cc:55 src/skins-qt/playlist-widget.cc:56 #, c-format msgid "%s (%d of %d)" msgstr "%s (%d of %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious Daftar Putar Editor" @@ -3792,173 +4080,225 @@ #: src/skins-qt/menus.cc:75 msgid "Open Folder ..." -msgstr "" +msgstr "Buka Folder ..." #: src/skins-qt/menus.cc:159 msgid "Add Folder ..." +msgstr "Tambah Folder ..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Cari catatan di daftar putar aktif" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." msgstr "" +"Pilih entri dalam daftar putar dengan mengisi satu atau lebih bidang. Fields " +"menggunakan ekspresi reguler sintaks, case-insensitive. Jika Anda tidak tahu " +"bagaimana ekspresi reguler bekerja, cukup memasukkan sebagian literal dari " +"apa yang Anda cari." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Judul:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artis: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nama File:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Hapus pilihan sebelumnya sebelum mencari" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Beralih antrean secara otomatis untuk entri yang cocok" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Buat daftar putar baru dengan mencocokan entri" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Cari" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" -msgstr "" +msgstr "Pemain:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Pilih font jendela player utama:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" -msgstr "" +msgstr "Daftar Putar:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Pilih huruf daftar putar" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Kulit" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Fonts" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Gunakan huruf bitmap (hanya dukungan ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" -msgstr "" +msgstr "Gulir judul lagu" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Gulir judul lagu dalam kedua arah" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyzer" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Cakupan" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" -msgstr "" +msgstr "Cetak suara / VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Mati" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Api" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" -msgstr "" +msgstr "Garis Vertikal" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Garis" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Batang" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Paling Lambat" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lambat" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Sedang" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Cepat" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Paling Cepat" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" -msgstr "" +msgstr "Titik" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Garis" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" -msgstr "" +msgstr "Keras" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Es" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Halus" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" -msgstr "" +msgstr "Mewarnai:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Gaya" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" -msgstr "" +msgstr "Jatuh:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" -msgstr "" +msgstr "Puncak Jatuh:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" -msgstr "" +msgstr "Gaya Lingkup:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" -msgstr "" +msgstr "Pewarnaan Cetak Suara:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" -msgstr "" +msgstr "Gaya VU Meter:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipe" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" -msgstr "" +msgstr "Tipe Visualisasi:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" -msgstr "" +msgstr "Penganalisis" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" -msgstr "" +msgstr "Tampilkan Puncak:" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisasi" @@ -3970,59 +4310,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Jangan Arsipkan Kulit Winam 2.x " -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Cari catatan di daftar putar aktif" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Cari" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Pilih entri dalam daftar putar dengan mengisi satu atau lebih bidang. Fields " -"menggunakan ekspresi reguler sintaks, case-insensitive. Jika Anda tidak tahu " -"bagaimana ekspresi reguler bekerja, cukup memasukkan sebagian literal dari " -"apa yang Anda cari." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Buat daftar putar baru dengan mencocokan entri" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" -msgstr "" +msgstr "Pengaya Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4043,35 +4335,53 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"Berdasarkan pengaya xmms_sndfile:\n" +"Hak Cipta (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Diadaptasi untuk Audacious oleh Tony Vroon \n" +"\n" +"Program ini adalah perangkat lunak gratis; Anda dapat mendistribusikan ulang " +"dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU yang " +"diterbitkan oleh Free Software Foundation; baik versi 2 dari Lisensi, atau " +"(sesuai pilihan Anda) versi yang lebih baru.\n" +"\n" +"Program ini disebarluaskan dengan harapan dapat bermanfaat, namun TANPA " +"JAMINAN APAPUN; bahkan tanpa jaminan tersirat tentang KELAYAKAN " +"DIPERDAGANGKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik " +"Umum GNU untuk info lebih lanjut.\n" +"\n" +"Anda seharusnya telah menerima salinan GNU General Public License bersama " +"dengan program ini; jika tidak, kirim surat ke Free Software Foundation, " +"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." #: src/sndio/sndio.cc:43 msgid "Sndio Output" -msgstr "" +msgstr "Keluaran Sndio" #: src/sndio/sndio.cc:98 msgid "Device (blank for default):" -msgstr "" +msgstr "Alat (kosongkan untuk bawaan)" #: src/sndio/sndio.cc:100 msgid "Save and restore volume:" -msgstr "" +msgstr "Simpan dan pulihkan volume:" #: src/sndio/sndio.cc:181 #, c-format msgid "Sndio error: Unsupported audio format (%d)" -msgstr "" +msgstr "Kesalahan Sndio: Format audio tidak didukung (%d)" #: src/sndio/sndio.cc:192 msgid "Sndio error: sio_open() failed" -msgstr "" +msgstr "Kesalahan Sndio: sio_open() gagal" #: src/sndio/sndio.cc:221 msgid "Sndio error: sio_setpar() failed" -msgstr "" +msgstr "Kesalahan Sndio: sio_setpar() gagal" #: src/sndio/sndio.cc:233 msgid "Sndio error: sio_start() failed" -msgstr "" +msgstr "Kesalahan Sndio: sio_start() gagal" #: src/songchange/song_change.cc:30 msgid "Song Change" @@ -4079,29 +4389,32 @@ #: src/songchange/song_change.cc:245 msgid "Commands" -msgstr "" +msgstr "Perintah" #: src/songchange/song_change.cc:247 msgid "Command to run when starting a new song:" -msgstr "" +msgstr "Perintah untuk dijalankan saat memulai lagu baru:" #: src/songchange/song_change.cc:250 msgid "Command to run at the end of a song:" -msgstr "" +msgstr "Perintah untuk dijalankan di akhir lagu:" #: src/songchange/song_change.cc:253 msgid "Command to run at the end of the playlist:" -msgstr "" +msgstr "Perintah untuk dijalankan di akhir daftar putar:" #: src/songchange/song_change.cc:256 msgid "Command to run when song title changes (for network streams):" msgstr "" +"Perintah untuk dijalankan saat judul lagu berubah (untuk aliran jaringan):" #: src/songchange/song_change.cc:259 msgid "" "You can use the following format codes, which will be replaced before " "running the command (not all are useful for the end-of-playlist command):" msgstr "" +"Anda dapat menggunakan kode format berikut, yang akan diganti sebelum " +"menjalankan perintah (tidak semua berguna untuk perintah akhir daftar putar):" #: src/songchange/song_change.cc:262 msgid "" @@ -4117,12 +4430,25 @@ "%t: Playlist position\n" "%T: Title (unformatted)" msgstr "" +"%a: Artia\n" +"%b: Album\n" +"%c: Jumlah saluran\n" +"%f: Nama File (lokasi penuh)\n" +"%F: Frekuensi (Hertz)\n" +"%l: Panjang (millisekon)\n" +"%n atau %s: Judul berformat (lihat setelan daftar putar)\n" +"%p: Sedang diputar (1 atau 0)\n" +"%r: Kecepatan (bit per sekon)\n" +"%t: Posisi daftar putar\n" +"%T: Judul (tidak berformat)" #: src/songchange/song_change.cc:273 msgid "" "Parameters passed to the shell should be enclosed in quotation marks. " "Unquoted parameters may lead to unexpected results." msgstr "" +"Parameter yang diteruskan ke shell harus diapit dengan tanda kutip. " +"Parameter yang tidak dikutip dapat menyebabkan hasil yang tidak terduga." #: src/song-info-qt/song-info.cc:30 msgid "Song Info" @@ -4130,7 +4456,7 @@ #: src/soxr/sox-resampler.cc:44 msgid "SoX Resampler" -msgstr "" +msgstr "SoX Resampler" #: src/soxr/sox-resampler.cc:172 msgid "" @@ -4140,6 +4466,11 @@ "Based on Sample Rate Converter Plugin:\n" "Copyright 2010-2012 John Lindgren" msgstr "" +"Pengaya SoX Resampler untuk Audacious\n" +"Hak Cipta 2013 Michał Lipski\n" +"\n" +"Berdasarkan Pengaya Pengkonversi Tingkat Sampel:\n" +"Hak Cipta 2010-2012 John Lindgren" #: src/soxr/sox-resampler.cc:178 msgid "Quick" @@ -4159,15 +4490,15 @@ #: src/soxr/sox-resampler.cc:183 msgid "Ultra High" -msgstr "" +msgstr "Sangat tinggi" #: src/soxr/sox-resampler.cc:187 msgid "Minimum" -msgstr "" +msgstr "Minimum" #: src/soxr/sox-resampler.cc:188 msgid "Intermediate" -msgstr "" +msgstr "Menengah" #: src/soxr/sox-resampler.cc:193 msgid "Quality:" @@ -4175,15 +4506,15 @@ #: src/soxr/sox-resampler.cc:196 msgid "Phase:" -msgstr "" +msgstr "Fase:" #: src/soxr/sox-resampler.cc:200 msgid "Allow aliasing" -msgstr "" +msgstr "Izinkan alias" #: src/soxr/sox-resampler.cc:202 msgid "Use steep filter" -msgstr "" +msgstr "Gunakan filter curam" #: src/speedpitch/speed-pitch.cc:54 msgid "Speed and Pitch" @@ -4191,19 +4522,19 @@ #: src/speedpitch/speed-pitch.cc:247 msgid "Speed" -msgstr "" +msgstr "Kecepatan" #: src/speedpitch/speed-pitch.cc:248 msgid "Decouple from pitch" -msgstr "" +msgstr "Pisahkan dari nada" #: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 msgid "Multiplier:" -msgstr "" +msgstr "Pengali:" #: src/speedpitch/speed-pitch.cc:254 msgid "Pitch" -msgstr "" +msgstr "Nada" #: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 msgid "Status Icon" @@ -4220,10 +4551,18 @@ "This plugin provides a status icon, placed in\n" "the system tray area of the window manager." msgstr "" +"Pengaya Ikon Status (port parsial untuk antarmuka Qt)\n" +"\n" +"Hak Cipta 2005-2007 Giacomo Lozito \n" +"Hak Cipta 2010 Michał Lipski \n" +"Hak Cipta 2015 Eugene Paskevich \n" +"\n" +"Pengaya ini menyediakan ikon status, ditempatkan di\n" +"area baki jendela sistem manajer." #: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 msgid "Mouse Scroll Action" -msgstr "" +msgstr "Aksi Gulir Mouse" #: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 msgid "Change volume" @@ -4239,15 +4578,15 @@ #: src/statusicon-qt/statusicon.cc:94 src/statusicon/statusicon.cc:388 msgid "Disable the popup window" -msgstr "" +msgstr "Matikan jendela popup" #: src/statusicon-qt/statusicon.cc:96 src/statusicon/statusicon.cc:390 msgid "Close to the system tray" -msgstr "" +msgstr "Tutup ke baki sistem" #: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 msgid "Advance in playlist when scrolling upward" -msgstr "" +msgstr "Maju dalam daftar putar saat menggulir ke atas" #: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 msgid "Se_ttings ..." @@ -4263,6 +4602,13 @@ "This plugin provides a status icon, placed in\n" "the system tray area of the window manager." msgstr "" +"Pengaya Ikon Status\n" +"\n" +"Hak Cipta 2005-2007 Giacomo Lozito \n" +"Hak Cipta 2010 Michał Lipski \n" +"\n" +"Pengaya ini menyediakan ikon status, ditempatkan di\n" +"area baki jendela sistem manajer." #: src/stereo_plugin/stereo.cc:19 msgid "Extra Stereo" @@ -4274,6 +4620,9 @@ "\n" "By Johan Levin, 1999" msgstr "" +"Pengaya Stereo Ekstra\n" +"\n" +"Oleh Johan Levin, 1999" #: src/stereo_plugin/stereo.cc:44 msgid "Extra Stereo" @@ -4281,39 +4630,39 @@ #: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 msgid "Type" -msgstr "" +msgstr "Tipe" #: src/streamtuner/icecast-model.cc:132 msgid "Current Song" -msgstr "" +msgstr "Lagu saat ini" #: src/streamtuner/icecast-model.cc:164 msgid "Other" -msgstr "" +msgstr "Lainnya" #: src/streamtuner/ihr-model.cc:63 msgid "Market" -msgstr "" +msgstr "Pasar" #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "" +msgstr "Huruf Panggil" #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "Deskripsi" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" -msgstr "" +msgstr "Pendengar" #: src/streamtuner/shoutcast-model.cc:188 msgid "Top 500 Stations" -msgstr "" +msgstr "500 Stasiun Teratas" #: src/streamtuner/shoutcast-model.cc:189 msgid "Alternative" -msgstr "" +msgstr "Alternatif" #: src/streamtuner/shoutcast-model.cc:190 msgid "Blues" @@ -4329,7 +4678,7 @@ #: src/streamtuner/shoutcast-model.cc:193 msgid "Decades" -msgstr "" +msgstr "Dekade" #: src/streamtuner/shoutcast-model.cc:194 msgid "Easy Listening" @@ -4337,7 +4686,7 @@ #: src/streamtuner/shoutcast-model.cc:195 msgid "Electronic" -msgstr "" +msgstr "Elektronik" #: src/streamtuner/shoutcast-model.cc:196 msgid "Folk" @@ -4345,11 +4694,11 @@ #: src/streamtuner/shoutcast-model.cc:197 msgid "Inspirational" -msgstr "" +msgstr "Inspirasional" #: src/streamtuner/shoutcast-model.cc:198 msgid "International" -msgstr "" +msgstr "Internasional" #: src/streamtuner/shoutcast-model.cc:199 msgid "Jazz" @@ -4357,7 +4706,7 @@ #: src/streamtuner/shoutcast-model.cc:200 msgid "Latin" -msgstr "" +msgstr "Latin" #: src/streamtuner/shoutcast-model.cc:201 msgid "Metal" @@ -4373,11 +4722,11 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "" +msgstr "Radio Publik" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B dan Perkotaan" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4393,35 +4742,35 @@ #: src/streamtuner/shoutcast-model.cc:210 msgid "Seasonal and Holiday" -msgstr "" +msgstr "Musiman dan Hari Libur" #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "Soundtrack" #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "Bicara" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" -msgstr "" +msgstr "Tema" #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "Shoutcast" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "Icecast" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" -msgstr "" +msgstr "Penyetel Aliran" #: src/tonegen/tonegen.cc:45 msgid "Tone Generator" -msgstr "" +msgstr "Penghasil Nada" #: src/tonegen/tonegen.cc:92 #, c-format @@ -4430,7 +4779,7 @@ #: src/tonegen/tonegen.cc:92 msgid "Tone Generator: " -msgstr "" +msgstr "Penghasil Nada:" #: src/tonegen/tonegen.cc:161 msgid "" @@ -4440,18 +4789,37 @@ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" +"Generator nada sinus oleh Håvard Kvålen \n" +"Dimodifikasi oleh Daniel J. Peng \n" +"\n" +"Untuk menggunakannya, tambahkan URL: tone://frequency1;frequency2;" +"frequency3;...\n" +"e.g. tone://2000;2005 untuk memainkan nada 2000 Hz dan nada 2005 Hz" + +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Pesan lebih lanjut telah disembunyikan.)" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Sedang bekerja ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informasi" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" -msgstr "" +msgstr "Penghapusan Suara" #: src/vorbis/vorbis.cc:429 msgid "" @@ -4473,6 +4841,23 @@ "Gian-Carlo Pascutto \n" "Eugene Zagidullin " msgstr "" +"Dekoder Ogg Vorbis Audacious\n" +"\n" +"Berdasarkan Pengaya Ogg Vorbis dari Xiph.org Foundation:\n" +"http://www.xiph.org/\n" +"\n" +"Kode asli oleh:\n" +"Tony Arcieri \n" +"\n" +"Kontribusi dari:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " #: src/vorbis/vorbis.h:18 msgid "Ogg Vorbis Decoder" @@ -4481,7 +4866,7 @@ #: src/vtx/info.cc:24 #, c-format msgid "Details about %s" -msgstr "" +msgstr "Detail tentang %s" #: src/vtx/info.cc:26 msgid "" @@ -4497,6 +4882,17 @@ "Player Freq: %P\n" "Year: %y" msgstr "" +"Judul: %t\n" +"Pembuat: %a\n" +"Dari: %f\n" +"Pelacak: %T\n" +"Komen: %C\n" +"Tipe chip: %c\n" +"Stereo: %s\n" +"Lingkaran: %l\n" +"Frekuensi chip: %F\n" +"Frekuensi Pemutar: %P\n" +"Tahun: %y" #: src/vtx/vtx.cc:38 msgid "VTX Decoder" @@ -4508,46 +4904,53 @@ "Based on in_vtx.dll by Roman Sherbakov \n" "Audacious plugin by Pavel Vymetalek " msgstr "" +"Pemutar format file Vortex oleh Sashnov Alexander \n" +"Berdasarkan dari in_vtx.dll oleh Roman Sherbakov \n" +"Pengaya Audacious oleh Pavel Vymetalek " #: src/vumeter-qt/vumeter_qt.cc:31 msgid "" "VU Meter Plugin for Audacious\n" "Copyright 2017-2019 Marc Sánchez Fauste" msgstr "" +"Pengaya VU Meter untuk Audacious\n" +"Hak Cipta 2017-2019 Marc Sánchez Fauste" #: src/vumeter-qt/vumeter_qt.cc:35 msgid "VU Meter Settings" -msgstr "" +msgstr "Pengaturan VU Meter" #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" -msgstr "" +msgstr "Waktu tunggu puncak:" #: src/vumeter-qt/vumeter_qt.cc:42 msgid "Fall-off time:" -msgstr "" +msgstr "Waktu jatuh:" #: src/vumeter-qt/vumeter_qt.cc:44 msgid "dB/second" -msgstr "" +msgstr "dB/detik" #: src/vumeter-qt/vumeter_qt.cc:46 msgid "Display legend" -msgstr "" +msgstr "Legenda tampilan" #: src/vumeter-qt/vumeter_qt.h:37 msgid "VU Meter" -msgstr "" +msgstr "VU Meter" #: src/waveout/waveout.cc:43 msgid "Win32 waveOut" -msgstr "" +msgstr "Win32 waveOut" #: src/waveout/waveout.cc:69 msgid "" "Win32 waveOut Plugin for Audacious\n" "Copyright 2016 John Lindgren" msgstr "" +"Plugin Win32 waveOut untuk Audacious \n" +"Hak Cipta 2016 John Lindgren " #: src/wavpack/wavpack.cc:25 msgid "WavPack Decoder" @@ -4571,14 +4974,38 @@ "\n" "Beberapa kode pengaya ditulis oleh Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Dekoder 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Pengaturan XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Shareable Playlists (XSPF)" diff -Nru audacious-plugins-4.1/po/it.po audacious-plugins-4.2/po/it.po --- audacious-plugins-4.1/po/it.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/it.po 2022-07-10 01:12:34.000000000 +0000 @@ -7,7 +7,7 @@ # David Rossi , 2012 # Federico , 2013-2014 # minderz , 2014 -# eagleman , 2020 +# eagleman , 2020-2021 # Jacopo Lorenzetti , 2011-2012 # Jacopo Lorenzetti , 2012-2013 # Marco Mangiacavalli, 2013 @@ -18,16 +18,17 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-29 09:53+0000\n" -"Last-Translator: Daniele Porumboiu \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: eagleman , 2020-2021\n" "Language-Team: Italian (http://www.transifex.com/audacious/audacious/" "language/it/)\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -38,7 +39,7 @@ msgstr "AdPlug (Riproduttore AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sequenziato" @@ -52,7 +53,7 @@ #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "" +msgstr "Frequenza di campionamento:" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -68,13 +69,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Varie" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "" +msgstr "Ripeti canzone all'infinito" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -479,6 +480,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Frequenza di campionamento:" @@ -489,7 +491,7 @@ #: src/amidiplug/i_configure-fluidsynth.cc:60 msgid "_Cancel" -msgstr "_Cancella" +msgstr "_Annulla" #: src/amidiplug/i_configure-fluidsynth.cc:61 msgid "_Open" @@ -554,6 +556,7 @@ msgstr "* nessun testo disponibile in questo file MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Chiudi" @@ -563,7 +566,7 @@ #: src/ampache/ampache.cc:33 msgid "Ampache Browser" -msgstr "" +msgstr "Ampache Browser" #: src/ampache/ampache.cc:46 msgid "" @@ -573,6 +576,11 @@ "Copyright (C) Róbert Čerňanský and John Lindgren\n" "License: GNU GPLv3" msgstr "" +"Ampache Browser for Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský and John Lindgren\n" +"License: GNU GPLv3" #: src/aosd/aosd.cc:31 msgid "" @@ -608,7 +616,7 @@ msgid "Concave Rectangle" msgstr "Rettangolo concavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Nessuno" @@ -797,7 +805,7 @@ #: src/asx3/asx3.cc:35 msgid "ASXv3 Playlists" -msgstr "Playlists " +msgstr "Liste di riproduzione ASXv3" #: src/asx/asx.cc:33 msgid "ASXv1/ASXv2 Playlists" @@ -807,6 +815,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Lista di riproduzione Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Colore" @@ -963,7 +987,7 @@ #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." -msgstr "" +msgstr "Errore nella creazione della connessione al CDDB." #: src/cdaudio/cdaudio-ng.cc:678 msgid "Failed to query the CDDB server" @@ -977,7 +1001,7 @@ #: src/cdaudio/cdaudio-ng.cc:704 #, c-format msgid "Failed to read the CDDB info: %s" -msgstr "" +msgstr "Errore nella lettura delle informazioni del CDDB: %s" #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" @@ -985,11 +1009,11 @@ #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" -msgstr "" +msgstr "Ripro_duci CD" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "_Add CD" -msgstr "" +msgstr "_Aggiungi CD" #: src/compressor/compressor.cc:45 msgid "Compression" @@ -1086,6 +1110,14 @@ "Based on SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" +"CoreAudio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"Copyright 2017,18 René J.V. Bertin\n" +"(original code and code adapted from\n" +"Apple examples, (C) Apple 2013)\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" #: src/coreaudio/coreaudio.cc:172 msgid "Use exclusive mode" @@ -1094,6 +1126,7 @@ #: src/coreaudio/coreaudio.cc:174 msgid "Use bit perfect audio (adapt device sampling rate)" msgstr "" +"Usa il perfetto bit audio (adatta il tasso di campionamento della periferica)" #: src/crossfade/crossfade.cc:43 msgid "" @@ -1173,12 +1206,12 @@ #: src/delete-files/delete-files.cc:133 #, c-format msgid "Do you want to move %d files to the trash?" -msgstr "" +msgstr "Vuoi spostare %d file nel cestino?" #: src/delete-files/delete-files.cc:134 #, c-format msgid "Do you want to permanently delete %d files?" -msgstr "" +msgstr "Vuoi eliminare definitivamente%d file?" #: src/delete-files/delete-files.cc:146 msgid "Move to trash" @@ -1189,7 +1222,7 @@ msgstr "Elimina" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Annulla" @@ -1227,7 +1260,7 @@ msgstr "Ritardo: " #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1247,7 +1280,7 @@ msgid "FFmpeg Plugin" msgstr "Plugin FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1292,6 +1325,22 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"Questo programma è un software gratuito; puoi ridistribuirlo e/o " +"modificarlo\n" +"sotto i termini della licenza GNU General Public License come pubblicato " +"dalla\n" +"Free Software Foundation; sia la versione 2 della Licenza, sia\n" +"(a propria scelta) qualsiasi altra versione.\n" +"\n" +"Questo programma è distribuito nella speranza che sarà utile,\n" +"ma SENZA ALCUNA GARANZIA; anche senza l'implicita garanzia di\n" +"COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la\n" +"GNU General Public License per maggiori dettagli.\n" +"\n" +"Dovresti aver ricevuto una copia della licenza GNU General Public License\n" +"insieme al programma; se così non fosse, scrivi alla Free Software\n" +"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n" +"USA." #: src/filewriter/filewriter.cc:385 msgid "Output file format:" @@ -1303,7 +1352,7 @@ #: src/filewriter/filewriter.cc:392 msgid "Save into custom directory:" -msgstr "" +msgstr "Salva nella directory personalizzata:" #: src/filewriter/filewriter.cc:400 msgid "Generate file name from:" @@ -1331,15 +1380,15 @@ #: src/filewriter/filewriter.cc:418 msgid "8000 Hz" -msgstr "" +msgstr "8000 Hz" #: src/filewriter/filewriter.cc:419 msgid "11025 Hz" -msgstr "" +msgstr "11025 Hz" #: src/filewriter/filewriter.cc:420 msgid "12000 Hz" -msgstr "" +msgstr "12000 Hz" #: src/filewriter/filewriter.cc:421 msgid "16000 Hz" @@ -1357,76 +1406,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1465,7 +1514,7 @@ #: src/filewriter/filewriter.cc:498 msgid "Audio mode:" -msgstr "" +msgstr "Modalità audio:" #: src/filewriter/filewriter.cc:501 msgid "Enforce strict ISO compliance" @@ -1551,7 +1600,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Generale" @@ -1560,11 +1609,11 @@ msgid "FLAC Decoder" msgstr "Decodificatore FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "senza perdita" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2216,6 +2265,7 @@ msgid_plural "%d channels" msgstr[0] "%d canale" msgstr[1] "%d canali" +msgstr[2] "%d canali" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2224,8 +2274,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2596,7 +2646,7 @@ msgid "Looking for lyrics ..." msgstr "Ricerca testi ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Errore" @@ -2953,7 +3003,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -3038,7 +3088,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignora la lunghezza dal file" @@ -3369,6 +3419,7 @@ msgid_plural "%d songs" msgstr[0] "%d canzone" msgstr[1] "%d canzoni" +msgstr[2] "%d canzoni" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3420,6 +3471,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3427,6 +3479,7 @@ msgid_plural "%d results" msgstr[0] "%d risultato" msgstr[1] "%d risultati" +msgstr[2] "%d risultati" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3679,7 +3732,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servizi" @@ -3696,7 +3749,7 @@ msgstr "Esci" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informazioni sul brano" @@ -3716,7 +3769,7 @@ msgid "Clear A-B Repeat" msgstr "Elimina ripetizione A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Vai a brano ..." @@ -3809,20 +3862,20 @@ msgstr "Aggiungi files ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Per titolo" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Per nome File" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Per percorso file" @@ -3850,104 +3903,104 @@ msgid "Remove Selected" msgstr "Rimuovi selezionati" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Cerca e seleziona" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverti selezione" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Deseleziona tutti" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Seleziona tutti" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Per numero di traccia" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Per artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Per album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Per album artista" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Per data di pubblicazione" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Per Genere" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Per Durata" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Per titolo personalizzato" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Riordina casualmente la lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Inverti lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Ordina selezionati" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordina lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Taglia" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copia" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Incolla" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Incolla alla fine" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Metti in/togli da coda" @@ -3956,7 +4009,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d di %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor della playlist di Audacious" @@ -3972,167 +4025,219 @@ msgid "Add Folder ..." msgstr "Aggiungi cartella..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Cerca elementi nella playlist attiva" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleziona gli elementi nella playlist compilando uno o più campi. I campi " +"utilizzano la sintassi delle espressioni regolari, senza distinzione tra " +"maiuscole e minuscole. Se non sai come funzionano le espressioni regolari, " +"inserisci semplicemente una porzione letterale di quello che stai cercando." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titolo:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nome del file:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Cancella la selezione precedente prima di effettuare la ricerca" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Inserisci automaticamente in coda gli elementi trovati" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Crea una nuova playlist con gli elementi trovati" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Cerca" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Lettore:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Seleziona il carattere della finestra principale del lettore:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Playlist:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Seleziona il carattere della playlist:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Pelle" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Caratteri" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Usa caratteri bitmap (supporta solo ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Fai sfilare il titolo del brano" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Scorri titolo brano in entrambe le direzioni" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizzatore" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Oscilloscopio" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Impronta vocale/VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Spento" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normale" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fuoco" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Linee verticali" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linee" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barre" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Molto lenta" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lenta" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Media" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Veloce" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Molto veloce" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Puntini" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linea" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Solido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ghiaccio" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Morbida" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Colori:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stile:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Decadimento:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Decadimento dei picchi:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Stile di oscilloscopio:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Colori dell'impronta vocale:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Stile del VU meter:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Scrivi" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo di visualizzazione:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizzatore" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostra picchi" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualizzazione" @@ -4144,59 +4249,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Skin Winamp 2.x non archiviata" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Cerca elementi nella playlist attiva" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Cerca" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleziona gli elementi nella playlist compilando uno o più campi. I campi " -"utilizzano la sintassi delle espressioni regolari, senza distinzione tra " -"maiuscole e minuscole. Se non sai come funzionano le espressioni regolari, " -"inserisci semplicemente una porzione letterale di quello che stai cercando." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titolo:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nome del file:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Cancella la selezione precedente prima di effettuare la ricerca" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Inserisci automaticamente in coda gli elementi trovati" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Crea una nuova playlist con gli elementi trovati" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Plugin Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4673,14 +4730,27 @@ "ad esempio tone://2000;2005 per avviare un tono di 2000 Hz e un tono di 2005 " "Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Ulteriori messaggi sono stati nascosti.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "In elaborazione ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informazioni" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Rimozione voce" @@ -4835,14 +4905,38 @@ "\n" "Una parte del codice del plugin era di Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Decodificatore 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configurazione XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Liste di riproduzione condivisibili XML (XSPF)" diff -Nru audacious-plugins-4.1/po/ja.po audacious-plugins-4.2/po/ja.po --- audacious-plugins-4.1/po/ja.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ja.po 2022-07-10 01:12:34.000000000 +0000 @@ -7,10 +7,10 @@ # natird zoto , 2012 # ABE Tsunehiko, 2013 # ABE Tsunehiko, 2012 -# Mika Kobayashi, 2014-2015 +# fbc955180bc2b956cb4ef52d00eb80a0_91487f8, 2014-2015 # NipponGo, 2020 -# TAKAHASHI Shuuji , 2012-2014 -# TAKAHASHI Shuuji , 2015 +# Shuuji TAKAHASHI , 2012-2014 +# Shuuji TAKAHASHI , 2015 # Warui-chan <>, 2012 # ABE Tsunehiko, 2012 # ABE Tsunehiko, 2013 @@ -18,9 +18,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: NipponGo, 2020\n" "Language-Team: Japanese (http://www.transifex.com/audacious/audacious/" "language/ja/)\n" "Language: ja\n" @@ -38,7 +38,7 @@ msgstr "AdPlug (AdLib プレイヤー)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "シーケンス" @@ -68,7 +68,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "その他" @@ -479,6 +479,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "サンプリングレート:" @@ -554,6 +555,7 @@ msgstr "* MIDI ファイル中に有効な歌詞がありません *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "プレイリストを閉じる(_C)" @@ -613,7 +615,7 @@ msgid "Concave Rectangle" msgstr "凹矩形" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "なし" @@ -811,6 +813,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious プレイリスト (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "" @@ -1203,7 +1221,7 @@ msgstr "削除" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "キャンセル" @@ -1241,7 +1259,7 @@ msgstr "遅延:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1261,7 +1279,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg プラグイン" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1384,77 +1402,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr " 8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1578,7 +1596,7 @@ msgid "Quality (0-1):" msgstr "品質 (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "一般" @@ -1587,11 +1605,11 @@ msgid "FLAC Decoder" msgstr "FLAC デコーダー" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "可逆" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2250,8 +2268,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2622,7 +2640,7 @@ msgid "Looking for lyrics ..." msgstr "歌詞を検索しています ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "エラー" @@ -2986,7 +3004,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "線形" @@ -3072,7 +3090,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "ファイルに記録されている再生時間を無視" @@ -3726,7 +3744,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "サービス" @@ -3743,7 +3761,7 @@ msgstr "終了" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "曲の情報" @@ -3763,7 +3781,7 @@ msgid "Clear A-B Repeat" msgstr "A-B リピートをクリア" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "指定した曲にジャンプ" @@ -3856,20 +3874,20 @@ msgstr "ファイルを追加" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "タイトル" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "ファイル名" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "ファイルパス" @@ -3897,104 +3915,104 @@ msgid "Remove Selected" msgstr "選択したエントリの削除" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "検索と選択" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "選択範囲の反転" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "未選択にする" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "全て選択" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "トラック番号" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "アーティスト" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "アルバム" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "アルバムアーティスト" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "リリース日" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "ジャンル" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "長さ" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "カスタムタイトル" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "コメント" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "プレイリストをランダムにする" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "プレイリストを逆順にする" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "選択範囲をソート" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "プレイリストをソート" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "この項目を含むフォルダーを開く" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "切り取り" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "コピー" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "貼り付け" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "末尾に貼り付け" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "キュー/アンキュー" @@ -4003,7 +4021,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d / %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious プレイリストエディター" @@ -4019,167 +4037,218 @@ msgid "Add Folder ..." msgstr "フォルダーを追加" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "有効になっているプレイリストのエントリを検索" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"1 つ以上の項目を入力すると、プレイリストのエントリーが選択できます。項目には" +"正規表現が使え、大文字と小文字を区別しません。正規表現の動作がわからない場合" +"は、検索したい文字をそのまま入力してください。" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "タイトル: " + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "アルバム: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "アーティスト: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "ファイル名:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "検索前に前回の選択をクリアする" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "マッチした項目のキューを自動的にトグルする" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "マッチした項目で新しいプレイリストを作成する" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "検索" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "プレイヤー:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "メインウィンドウで使用するフォントの選択" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "プレイリスト:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "プレイリストで使用するフォントの選択" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "スキン" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "フォント" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "ビットマップフォントを使用する (ASCII のみ対応)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "曲のタイトルをスクロール" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "曲のタイトルを両方向にスクロールする" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "アナライザー" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "スコープ" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "声紋 / VU メーター" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "オフ" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "標準" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "ファイア" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "垂直線" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "ライン" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "バー" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "最も遅い" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "遅い" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "中" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "早い" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "最も早い" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "点" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "線" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "ソリッド" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "アイス" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "スムーズ" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "色付け:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "スタイル:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "降下速度:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "ピークの降下速度:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "スコープのスタイル:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "声紋の色付け:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU メーターのスタイル:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "タイプ" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "視覚化タイプ:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "アナライザー" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "ピークを表示" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "視覚化" @@ -4191,58 +4260,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Unarchived Winamp 2.x スキン" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "有効になっているプレイリストのエントリを検索" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "検索" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"1 つ以上の項目を入力すると、プレイリストのエントリーが選択できます。項目には" -"正規表現が使え、大文字と小文字を区別しません。正規表現の動作がわからない場合" -"は、検索したい文字をそのまま入力してください。" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "タイトル: " - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "アルバム: " - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "アーティスト: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "ファイル名:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "検索前に前回の選択をクリアする" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "マッチした項目のキューを自動的にトグルする" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "マッチした項目で新しいプレイリストを作成する" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile プラグイン" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4578,7 +4600,7 @@ #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "説明" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" @@ -4728,14 +4750,27 @@ "例:\n" "tone://2000;2005 (2000Hz と 2005Hz のトーンを再生する)" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(追加のメッセージが隠れているかもしれません。)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "処理中 ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "情報" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "ボーカルの除去" @@ -4892,14 +4927,38 @@ "\n" "プラグインのコードの一部は Miles Egan によるものです。" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF デコーダー" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF の設定" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "共有可能な XML プレイリスト (XSPF)" diff -Nru audacious-plugins-4.1/po/ko.po audacious-plugins-4.2/po/ko.po --- audacious-plugins-4.1/po/ko.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ko.po 2022-07-10 01:12:34.000000000 +0000 @@ -4,9 +4,13 @@ # # Translators: # ChoSeongWoo , 2008 +# Junghee Lee , 2021 # Seong-ho Cho , 2013 # Seong-ho Cho , 2012-2013 # Jaegeum Choe , 2001 +# Junghee Lee , 2022 +# Junghee Lee , 2022 +# Junghee Lee , 2021 # Kim ju-gwang , 2015 # kim suhyun , 2019 # Man-Yong Lee , 2000 @@ -18,9 +22,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Junghee Lee , 2022\n" "Language-Team: Korean (http://www.transifex.com/audacious/audacious/language/" "ko/)\n" "Language: ko\n" @@ -38,7 +42,7 @@ msgstr "AdPlug (AdLib 재생기)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "순차" @@ -48,11 +52,11 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "OPL 에뮬레이터:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "" +msgstr "샘플 레이트" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -68,13 +72,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "기타" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "" +msgstr "무한 루프에서 노래 반복" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -90,7 +94,7 @@ "\n" "Originally written by Adam Feakin and Daniel Stodden." msgstr "" -"임의의 시간에 재생을 시작할 때 사용하는 플러그인입니다.\n" +"특정 시간에 재생을 시작할 때 사용하는 플러그인입니다.\n" "\n" "초기에 Adam Feakin과 Daniel Stodden이 작성했습니다." @@ -144,6 +148,54 @@ " Type the reminder in the input field and enable\n" " the checkbox if you want it to be shown." msgstr "" +"시간\n" +" 알람 시간:\n" +"\n" +" 알람이 울릴 시간입니다.\n" +"\n" +" 알람 중지 시간:\n" +"\n" +" 이 시간 이후에 알람을 중지합니다.\n" +" (기상 대화상자가 닫히지 않은 경우)\n" +"\n" +"\n" +"날짜\n" +" 요일:\n" +" 알람을 활성화할 요일을 선택합니다.\n" +"\n" +" 시간:\n" +" 각 날짜의 알람 시간을 선택하거나 전환 단추를\n" +" 선택하점진적 음량 변화여 기본 시간을 사용합니다.\n" +"\n" +"\n" +"음량\n" +" 페이딩:\n" +" 정해진 시간 동안 정한 음량만큼 음량을 서서히\n" +" 크게 합니다\n" +"\n" +" 시작:\n" +" 이 음량부터 서서히 크게 합니다.\n" +"\n" +" 마지막:\n" +" 음량이 서서히 커지는 것을 멈출 음량값입니다.\n" +" 페이딩 시간이 0이면 음량을 이것으로 설정하고\n" +" 재생을 시작합니다.\n" +"\n" +"\n" +" 옵션:\n" +" 추가 명령:\n" +" 알람 시간에 이 명령을 실행합니다.\n" +"약속 알리미를​\n" +" 재생목록:\n" +" 이 재생목록을 불러옵니다. 재생목록이 제공되지\n" +" 않으면 현재 재생목록이 사용됩니다.\n" +" mp3/ogg 스트림의 URL도 여기에 입력할 수\n" +" 있습니다.\n" +"\n" +" 약속 알리미:\n" +" 알람이 울리면 약속 알리미를 표시합니다.\n" +" 입력 필드에 약속 알리미를 입력하고 표시하려면\n" +" 확인란을 활성화합니다." #: src/alarm/interface.cc:78 msgid "This is your wakeup call." @@ -264,11 +316,11 @@ #: src/alarm/interface.cc:361 msgid "Playlist (optional)" -msgstr "재생 목록(선택)" +msgstr "재생목록(선택)" #: src/alarm/interface.cc:365 msgid "Select a playlist" -msgstr "재생 목록 선택하기" +msgstr "재생목록 선택하기" #: src/alarm/interface.cc:385 msgid "Options" @@ -298,11 +350,11 @@ "My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " "code served as a reference when the ALSA manual was not enough." msgstr "" -"오데이셔스용 ALSA 출력 플러그인\n" -"Copyright 2009-2012 John Lindgren\n" +"Audacious용 ALSA 출력 플러그인\n" +"저작권 2009-2012 John Lindgren\n" "\n" -"ALSA 메뉴얼이 충분히 도움이 되지 않았을 때, 코드 참고서가 되어준 ALSA 출력 플" -"러그인 NG의 저작자인 William Pitcock에게 감사드립니다." +"ALSA 매뉴얼이 충분하지 않을 때 코드가 참조 역할을 한 ALSA Output Plugin NG의 " +"작성자인 William Pitcock에게 감사드립니다." #: src/alsa/config.cc:61 msgid "(no description)" @@ -354,6 +406,25 @@ "Tony Vroon\n" "for the good help with alpha testing" msgstr "" +"AMIDI-Plug\n" +"모듈형 MIDI 음악 플레이어\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"글: Giacomo Lozito\n" +"\n" +"\n" +"특별히 감사한 분들...\n" +"\n" +"Clemens Ladisch와 Jaroslav Kysela\n" +"그들의 멋진 프로그램 aplaymidi와 amixer;\n" +"ALSA API에 대해 자세히 알아보기 위해 alsa-lib\n" +"문서들과 함께 정말 유용했습니다.\n" +"\n" +"Alfredo Spadafina\n" +"멋진 미디 키보드 로고\n" +"\n" +"Tony Vroon\n" +"알파 테스트에 대한 충분한 도움" #: src/amidiplug/i_configure.cc:94 msgid "Override default gain:" @@ -413,8 +484,9 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" -msgstr "샘플 주파수:" +msgstr "샘플 레이트:" #: src/amidiplug/i_configure-fluidsynth.cc:57 #: src/amidiplug/i_configure-fluidsynth.cc:536 @@ -477,7 +549,7 @@ #: src/amidiplug/i_fileinfo.cc:237 msgid " MIDI Comments and Lyrics " -msgstr " 미디 주석과 가사 " +msgstr " 미디 주석 및 가사 " #: src/amidiplug/i_fileinfo.cc:284 msgid "* no comments available in this MIDI file *" @@ -488,6 +560,7 @@ msgstr "* 이 미디 파일에는 가사가 없습니다 *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "닫기(_C)" @@ -497,7 +570,7 @@ #: src/ampache/ampache.cc:33 msgid "Ampache Browser" -msgstr "" +msgstr "Ampache 브라우저" #: src/ampache/ampache.cc:46 msgid "" @@ -507,6 +580,11 @@ "Copyright (C) Róbert Čerňanský and John Lindgren\n" "License: GNU GPLv3" msgstr "" +"Audacious용 Ampache 브라우저\n" +"http://ampache-browser.org/\n" +"\n" +"저작권 (C) Róbert Čerňanský 및 John Lindgren\n" +"라이선스: GNU GPLv3" #: src/aosd/aosd.cc:31 msgid "" @@ -518,7 +596,7 @@ "Based in part on Evan Martin's Ghosd library:\n" "http://neugierig.org/software/ghosd/" msgstr "" -"오데이셔스 OSD\n" +"Audacious OSD\n" "http://www.develia.org/projects.php?p=audacious#aosd\n" "\n" "Giacomo Lozito 가 작성\n" @@ -528,7 +606,7 @@ #: src/aosd/aosd.h:37 msgid "AOSD (On-Screen Display)" -msgstr "AOSD (화면에 표시)" +msgstr "AOSD (화면 디스플레이)" #: src/aosd/aosd_style.cc:54 msgid "Rectangle" @@ -536,13 +614,13 @@ #: src/aosd/aosd_style.cc:59 msgid "Rounded Rectangle" -msgstr "모서리가 둥근 사각형" +msgstr "둥근 사각형" #: src/aosd/aosd_style.cc:64 msgid "Concave Rectangle" msgstr "오목한 사각형" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "없음" @@ -552,31 +630,31 @@ #: src/aosd/aosd_trigger.cc:50 msgid "Triggers OSD when a playlist entry is played." -msgstr "재생 목록의 항목을 재생할 때 OSD를 시작합니다." +msgstr "재생목록의 항목을 재생할 때 OSD를 시작합니다." #: src/aosd/aosd_trigger.cc:55 msgid "Title Change" -msgstr "제목 바꾸기" +msgstr "제목 변경" #: src/aosd/aosd_trigger.cc:56 msgid "Triggers OSD when the song title changes (for internet streams)." -msgstr "" +msgstr "노래 제목이 변경되면 OSD를 트리거합니다(인터넷 스트림의 경우)." #: src/aosd/aosd_trigger.cc:61 msgid "Pause On" -msgstr "일시 정지 활성화" +msgstr "일시 중지 켜기" #: src/aosd/aosd_trigger.cc:62 msgid "Triggers OSD when playback is paused." -msgstr "재생을 멈추었을 때 OSD를 시작합니다." +msgstr "재생이 일시 중지되면 OSD를 트리거합니다." #: src/aosd/aosd_trigger.cc:67 msgid "Pause Off" -msgstr "일시 정지 활성화" +msgstr "일시 중지 끄기" #: src/aosd/aosd_trigger.cc:68 msgid "Triggers OSD when playback is unpaused." -msgstr "멈춰진 재생 상태에서 복귀할 때 OSD를 시작합니다." +msgstr "재생 일시 중지가 해제되면 OSD를 트리거합니다." #: src/aosd/aosd_ui.cc:162 msgid "Placement" @@ -592,7 +670,7 @@ #: src/aosd/aosd_ui.cc:209 msgid "Max OSD width:" -msgstr "최대 OSD 폭:" +msgstr "최대 OSD 너비:" #: src/aosd/aosd_ui.cc:220 msgid "Multi-Monitor options" @@ -600,7 +678,7 @@ #: src/aosd/aosd_ui.cc:224 msgid "Display OSD using:" -msgstr "OSD 사용중 표시:" +msgstr "OSD 사용중 보이기:" #: src/aosd/aosd_ui.cc:226 msgid "all monitors" @@ -698,7 +776,7 @@ #: src/aosd/aosd_ui.cc:771 #, c-format msgid "Audacious OSD" -msgstr "오데이셔스 OSD" +msgstr "Audacious OSD" #: src/aosd/aosd_ui.cc:834 msgid "Position" @@ -730,15 +808,31 @@ #: src/asx3/asx3.cc:35 msgid "ASXv3 Playlists" -msgstr "ASXv3 재생 목록" +msgstr "ASXv3 재생목록" #: src/asx/asx.cc:33 msgid "ASXv1/ASXv2 Playlists" -msgstr "ASXv1/ASXv2 재생 목록" +msgstr "ASXv1/ASXv2 재생목록" #: src/audpl/audpl.cc:33 msgid "Audacious Playlists (audpl)" -msgstr "오데이셔스 재생 목록(audpl)" +msgstr "Audacious 재생목록(audpl)" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "비트크러셔" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "비트 깊이:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "다운샘플 비율:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "비트크러셔" #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" @@ -787,14 +881,14 @@ "\n" "This was a Google Summer of Code 2007 project." msgstr "" -"Copyright (C) 2007-2012 Calin Crisan and others.\n" +"저작권 (C) 2007-2012 Calin Crisan 및 다른 분들.\n" "\n" -"libcdio 개발자 과\n" +"libcdio 개발자 와\n" "libcddb 개발자 여러분께 감사드립니다.\n" "\n" -"또한 저를 지도해준 Tony Vroon 에게 감사드립니다.\n" +"또한 저를 멘토링하고 안내해 주신 Tony Vroon에게도 감사드립니다.\n" "\n" -"이 프로젝트는 GSoC 2007에서 만들었습니다." +"이것은 Google Summer of Code 2007 프로젝트였습니다." #: src/cdaudio/cdaudio-ng.cc:134 msgid "Device" @@ -895,7 +989,7 @@ #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." -msgstr "" +msgstr "CDDB 연결을 만들지 못했습니다." #: src/cdaudio/cdaudio-ng.cc:678 msgid "Failed to query the CDDB server" @@ -909,7 +1003,7 @@ #: src/cdaudio/cdaudio-ng.cc:704 #, c-format msgid "Failed to read the CDDB info: %s" -msgstr "" +msgstr "CDDB 정보를 읽지 못했습니다: %s" #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" @@ -917,11 +1011,11 @@ #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" -msgstr "" +msgstr "CD 재생(_Y)" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "_Add CD" -msgstr "" +msgstr "CD 추가하기(_A)" #: src/compressor/compressor.cc:45 msgid "Compression" @@ -940,8 +1034,8 @@ "Dynamic Range Compression Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" -"오데이셔스용 다이나믹레인지 플러그인\n" -"Copyright 2010-2014 John Lindgren" +"Audacious용 다이나믹레인지 플러그인\n" +"저작권 2010-2014 John Lindgren" #: src/compressor/compressor.cc:64 msgid "Dynamic Range Compressor" @@ -959,7 +1053,7 @@ " Game_Music_Emu 0.5.2 기반 콘솔 음악 디코더 플러그인\n" "지원 형식: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" "\n" -"오데이셔스 플러그인 작성:\n" +"Audacious 플러그인 작성:\n" "William Pitcock \n" "Shay Green " @@ -1018,6 +1112,14 @@ "Based on SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" +"Audacious용 CoreAudio 출력 플러그인\n" +"저작권 2014 William Pitcock\n" +"저작권 2017,18 René J.V. Bertin\n" +" (Apple 예제에서 수정한 원본 코드 및 코드, \n" +" (C) Apple 2013)\n" +"\n" +"Audacious용 SDL 출력 플러그인 기반\n" +"저작권 2010 John Lindgren" #: src/coreaudio/coreaudio.cc:172 msgid "Use exclusive mode" @@ -1025,15 +1127,15 @@ #: src/coreaudio/coreaudio.cc:174 msgid "Use bit perfect audio (adapt device sampling rate)" -msgstr "" +msgstr "비트 퍼펙트 오디오 사용(장치 샘플링 속도 조정)" #: src/crossfade/crossfade.cc:43 msgid "" "Crossfade Plugin for Audacious\n" "Copyright 2010-2014 John Lindgren" msgstr "" -"오데이셔스용 크로스페이드\n" -"Copyright 2010-2014 John Lindgren" +"Audacious용 크로스페이드 플러그인\n" +"저작권 2010-2014 John Lindgren" #: src/crossfade/crossfade.cc:47 msgid "Crossfade" @@ -1041,7 +1143,7 @@ #: src/crossfade/crossfade.cc:48 msgid "On automatic song change" -msgstr "자동 노래변경 사용하기" +msgstr "자동 곡 변경 시" #: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 msgid "Overlap:" @@ -1049,7 +1151,7 @@ #: src/crossfade/crossfade.cc:54 msgid "On seek or manual song change" -msgstr "검색 혹은 노래변경" +msgstr "탐색 또는 수동 노래 변경 시" #: src/crossfade/crossfade.cc:60 msgid "Tip" @@ -1086,48 +1188,48 @@ #: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 #: src/delete-files/delete-files.cc:230 msgid "Delete Files" -msgstr "파일 삭제" +msgstr "파일 삭제하기" #: src/delete-files/delete-files.cc:120 msgid "No files are selected." -msgstr "" +msgstr "파일이 선택되지 않았습니다." #: src/delete-files/delete-files.cc:125 #, c-format msgid "Do you want to move %s to the trash?" -msgstr "" +msgstr "%s을(를) 휴지통으로 이동하시겠습니까?" #: src/delete-files/delete-files.cc:126 #, c-format msgid "Do you want to permanently delete %s?" -msgstr "" +msgstr "%s을(를) 완전히 삭제하시겠습니까?" #: src/delete-files/delete-files.cc:133 #, c-format msgid "Do you want to move %d files to the trash?" -msgstr "" +msgstr "%d 파일을 휴지통으로 이동하시겠습니까?" #: src/delete-files/delete-files.cc:134 #, c-format msgid "Do you want to permanently delete %d files?" -msgstr "" +msgstr "%d 파일을 완전히 삭제하시겠습니까?" #: src/delete-files/delete-files.cc:146 msgid "Move to trash" -msgstr "" +msgstr "휴지통으로 이동" #: src/delete-files/delete-files.cc:146 msgid "Delete" -msgstr "삭제" +msgstr "삭제하기" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "취소" #: src/delete-files/delete-files.cc:266 msgid "Delete Selected Files" -msgstr "선택한 파일 삭제" +msgstr "선택한 파일 삭제하기" #: src/delete-files/delete-files.cc:286 msgid "Delete Method" @@ -1147,7 +1249,7 @@ "에코 플러그인 \n" "By Johan Levin, 1999\n" "서라운드 에코 by Carl van Schaik, 1999\n" -"오데이셔스용 업데이트 by William Pitcock and John Lindgren, 2010-2014" +"Audacious용 업데이트 by William Pitcock and John Lindgren, 2010-2014" #: src/echo_plugin/echo.cc:21 msgid "Echo" @@ -1159,7 +1261,7 @@ msgstr "지연:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1179,7 +1281,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg 플러그인" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1189,7 +1291,7 @@ "Matti Hämäläinen " msgstr "" "FFmpeg 멀티미디어 프레임워크를 사용한\n" -"오데이셔스용 다중 형식 오디오 디코딩 플러그인\n" +"Audacious용 다중 형식 오디오 디코딩 플러그인\n" "\n" "오다셔서 플러그인 작성:\n" "William Pitcock \n" @@ -1224,6 +1326,17 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"이 프로그램은 자유 소프트웨어입니다. 자유 소프트웨어 재단에서 발행한 GNU 일" +"반 일반 공중 라이선스의 조건에 따라 이를 재배포 및/또는 수정할 수 있습니다; " +"라이선스 버전 2 또는 (귀하의 선택에 따라) 이후 버전.\n" +"\n" +"이 프로그램은 유용하기를 바라며 배포되지만 어떠한 보증도 없으며 상품성 또는 " +"특정 목적에 대한 적합성에 대한 암묵적인 보증도 없습니다. 자세한 내용은 GNU 일" +"반 공중 라이선스를 참조하십시오.\n" +"\n" +"이 프로그램과 함께 GNU 일반 공중 라이선스를 받았어야 합니다. 그렇지 않은 경" +"우 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, " +"MA 02110-1301, USA에 문의하십시오." #: src/filewriter/filewriter.cc:385 msgid "Output file format:" @@ -1239,7 +1352,7 @@ #: src/filewriter/filewriter.cc:400 msgid "Generate file name from:" -msgstr "" +msgstr "다음에서 파일 이름 생성:" #: src/filewriter/filewriter.cc:401 msgid "Original file name" @@ -1255,7 +1368,7 @@ #: src/filewriter/filewriter.cc:411 msgid "Prepend track number to file name" -msgstr "" +msgstr "파일 이름 앞에 트랙 번호 추가" #: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 msgid "Auto" @@ -1289,77 +1402,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1381,7 +1494,7 @@ #: src/filewriter/filewriter.cc:457 msgid "ABR" -msgstr "" +msgstr "ABR" #: src/filewriter/filewriter.cc:478 msgid "Algorithm quality:" @@ -1389,7 +1502,7 @@ #: src/filewriter/filewriter.cc:484 msgid "Bitrate:" -msgstr "비트 전송율:" +msgstr "비트 전송속도:" #: src/filewriter/filewriter.cc:491 msgid "Compression ratio:" @@ -1417,15 +1530,15 @@ #: src/filewriter/filewriter.cc:514 msgid "Minimum bitrate:" -msgstr "최소 비트 전송율:" +msgstr "최소 비트 전송속도:" #: src/filewriter/filewriter.cc:518 msgid "Maximum bitrate:" -msgstr "최대 비트 전송율:" +msgstr "최대 비트 전송속도:" #: src/filewriter/filewriter.cc:522 msgid "Average bitrate:" -msgstr "평균 비트 전송율:" +msgstr "평균 비트 전송속도:" #: src/filewriter/filewriter.cc:526 msgid "VBR quality level:" @@ -1433,19 +1546,19 @@ #: src/filewriter/filewriter.cc:530 msgid "Strictly enforce minimum bitrate" -msgstr "최소 비트전송율을 철저하게 강제" +msgstr "최소 비트 전송속도를 엄격히 적용" #: src/filewriter/filewriter.cc:533 msgid "Omit Xing VBR header" -msgstr "" +msgstr "Xing VBR 헤더 생략" #: src/filewriter/filewriter.cc:539 msgid "Frame Headers" -msgstr "" +msgstr "프레임 헤더" #: src/filewriter/filewriter.cc:540 msgid "Mark as copyright" -msgstr "Copyright로 표시" +msgstr "저작권으로 표시" #: src/filewriter/filewriter.cc:542 msgid "Mark as original" @@ -1453,7 +1566,7 @@ #: src/filewriter/filewriter.cc:544 msgid "ID3 Tags" -msgstr "" +msgstr "ID3 태그" #: src/filewriter/filewriter.cc:545 msgid "Force addition of version 2 tag" @@ -1461,11 +1574,11 @@ #: src/filewriter/filewriter.cc:547 msgid "Only add v1 tag" -msgstr "v1 태그만 추가" +msgstr "v1 태그만 추가하기" #: src/filewriter/filewriter.cc:549 msgid "Only add v2 tag" -msgstr "v2 태그만 추가" +msgstr "v2 태그만 추가하기" #: src/filewriter/filewriter.cc:554 msgid "Quality" @@ -1481,9 +1594,9 @@ #: src/filewriter/filewriter.cc:566 msgid "Quality (0-1):" -msgstr "" +msgstr "음질 (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "일반" @@ -1492,11 +1605,11 @@ msgid "FLAC Decoder" msgstr "FLAC 디코더" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "무손실" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1513,8 +1626,8 @@ "GIO Plugin for Audacious\n" "Copyright 2009-2012 John Lindgren" msgstr "" -"오데이셔스용 GIO 플러그인\n" -"Copyright 2009-2012 John Lindgren" +"Audacious용 GIO 플러그인\n" +"저작권 2009-2012 John Lindgren" #: src/gio/gio.cc:42 msgid "GIO Plugin" @@ -1539,11 +1652,11 @@ "\n" "License: GPLv2+" msgstr "" -"오데이셔스용 OpenGL 스펙트럼 분석 프로그램\n" -"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Audacious용 OpenGL 스펙트럼 분석 프로그램\n" +"저작권 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" "\n" "XMMS 플러그인 기반:\n" -"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"저작권 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " "4Front Technologies\n" "\n" "라이선스: GPLv2+" @@ -1568,7 +1681,7 @@ #: src/gtkui/columns.cc:37 src/moonstone/playlist_model.cc:39 #: src/qtui/playlist_model.cc:33 msgid "Artist" -msgstr "음악가" +msgstr "아티스트" #: src/gtkui/columns.cc:38 src/moonstone/playlist_model.cc:39 #: src/qtui/playlist_model.cc:33 @@ -1582,7 +1695,7 @@ #: src/gtkui/columns.cc:40 msgid "Album artist" -msgstr "앨범 음악가" +msgstr "앨범 아티스트" #: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 #: src/qtui/playlist_model.cc:34 @@ -1617,7 +1730,7 @@ #: src/qtui/playlist_model.cc:36 src/streamtuner/icecast-model.cc:129 #: src/streamtuner/shoutcast-model.cc:134 msgid "Bitrate" -msgstr "비트 전송율" +msgstr "비트 전송속도" #: src/gtkui/columns.cc:49 src/moonstone/playlist_model.cc:43 #: src/qtui/playlist_model.cc:36 @@ -1672,11 +1785,11 @@ #: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 msgid "_Add Files ..." -msgstr "파일 추가(_A) ..." +msgstr "파일 추가하기(_A) ..." #: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 msgid "Add U_RL ..." -msgstr "URL 추가(_R) ..." +msgstr "URL 추가하기(_R) ..." #: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 msgid "Search _Library" @@ -1726,12 +1839,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "이전 앨범" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "다음 앨범" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -1739,15 +1852,15 @@ #: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 msgid "S_huffle" -msgstr "뒤섞기(_H)" +msgstr "순서섞기(_H)" #: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 msgid "Shuffle by Albu_m" -msgstr "앨범 단위로 임의 재생(_M)" +msgstr "앨범별로 순서섞기(_M)" #: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 msgid "N_o Playlist Advance" -msgstr "재생 목록 미리 알리지 않음(_O)" +msgstr "재생목록 진행 없음(_O)" #: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 msgid "Stop A_fter This Song" @@ -1789,7 +1902,7 @@ #: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 msgid "By File _Path" -msgstr "파일 경로 순(_P)" +msgstr "파일 경로순(_P)" #: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 #: src/qtui/menus.cc:196 @@ -1799,22 +1912,22 @@ #: src/gtkui/menus.cc:124 src/gtkui/menus.cc:141 src/qtui/menus.cc:181 #: src/qtui/menus.cc:198 msgid "By _Artist" -msgstr "음악가 이름순(_A)" +msgstr "아티스트순(_A)" #: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 #: src/qtui/menus.cc:199 msgid "By Al_bum" -msgstr "앨범 이름순(_B)" +msgstr "앨범순(_B)" #: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 #: src/qtui/menus.cc:200 msgid "By Albu_m Artist" -msgstr "앨범 작곡가순(_M)" +msgstr "앨범 아티스트순(_M)" #: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 #: src/qtui/menus.cc:201 msgid "By Release _Date" -msgstr "출시 일자순(_D)" +msgstr "출시일순(_D)" #: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 #: src/qtui/menus.cc:202 @@ -1839,7 +1952,7 @@ #: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 #: src/qtui/menus.cc:206 msgid "By C_omment" -msgstr "설명순(_O)" +msgstr "주석순(_O)" #: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 #: src/qtui/menus.cc:208 @@ -1900,7 +2013,7 @@ #: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 msgid "Playlist _Manager ..." -msgstr "재생 목록 관리자(_M) ..." +msgstr "재생목록 관리자(_M) ..." #: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 msgid "_Queue Manager ..." @@ -1940,7 +2053,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "정보 표시줄 앨범 표지 표시(_A)" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -1969,7 +2082,7 @@ #: src/gtkui/menus.cc:201 src/qtui/menus.cc:280 msgid "P_laylist" -msgstr "재생 목록(_L)" +msgstr "재생목록(_L)" #: src/gtkui/menus.cc:202 src/gtkui/menus.cc:220 src/qtui/menus.cc:281 #: src/qtui/menus.cc:310 @@ -2023,7 +2136,7 @@ #: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 msgid "Playlist Tabs" -msgstr "재생 목록 탭" +msgstr "재생목록 탭" #: src/gtkui/settings.cc:36 msgid "Always show tabs" @@ -2039,7 +2152,7 @@ #: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 msgid "Playlist Columns" -msgstr "재생 목록 내용" +msgstr "재생목록 내용" #: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 msgid "Show column headers" @@ -2047,7 +2160,7 @@ #: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 msgid "Scroll on song change" -msgstr "곡 바뀔 때 스크롤" +msgstr "곡 변경 시 스크롤" #: src/gtkui/ui_gtk.cc:74 msgid "GTK Interface" @@ -2056,7 +2169,7 @@ #: src/gtkui/ui_gtk.cc:210 src/skins/main.cc:227 src/skins-qt/main.cc:225 #, c-format msgid "%s - Audacious" -msgstr "%s - 오데이셔스" +msgstr "%s - Audacious" #: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 #: src/qtui/main_window.cc:384 @@ -2065,7 +2178,7 @@ #: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 msgid "Audacious" -msgstr "오데이셔스" +msgstr "Audacious" #: src/gtkui/ui_gtk.cc:428 src/gtkui/ui_gtk.cc:459 src/gtkui/ui_gtk.cc:817 #: src/hotkey/gui.cc:71 src/moonstone/main_window.cc:67 @@ -2081,7 +2194,7 @@ #: src/qtui/main_window.cc:352 src/qtui/main_window.cc:353 #: src/skins/menus.cc:110 src/skins-qt/menus.cc:101 msgid "Pause" -msgstr "일시 정지" +msgstr "일시 중지" #: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 #: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 @@ -2096,7 +2209,7 @@ #: src/gtkui/ui_gtk.cc:811 src/moonstone/main_window.cc:62 #: src/qtui/main_window.cc:149 msgid "Add Files" -msgstr "파일 추가" +msgstr "파일 추가하기" #: src/gtkui/ui_gtk.cc:816 src/moonstone/main_window.cc:65 #: src/qtui/main_window.cc:152 src/skins/menus.cc:112 src/skins-qt/menus.cc:103 @@ -2132,7 +2245,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "메뉴" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2155,8 +2268,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2164,7 +2277,7 @@ #: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 msgid "Playlist mode." -msgstr "재생 목록 모드입니다." +msgstr "재생목록 모드입니다." #: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 msgid "Stopping after song." @@ -2176,7 +2289,7 @@ #: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 msgid "Pause/Resume" -msgstr "일시 정지/재개" +msgstr "일시 중지/재개" #: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 msgid "Next track" @@ -2184,11 +2297,11 @@ #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "빨리감기" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "되감기" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2212,7 +2325,7 @@ #: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 msgid "Show On-Screen-Display" -msgstr "화면에 표시 보이기" +msgstr "화면 디스플레이에 보이기" #: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 msgid "Toggle repeat" @@ -2240,6 +2353,9 @@ "\n" "Do you want to continue?" msgstr "" +"수정자 없이 기본 마우스 단추를 바인드하지 않는 것이 좋습니다.\n" +"\n" +"계속하시겠습니까?" #: src/hotkey/gui.cc:263 msgid "Binding mouse buttons" @@ -2267,7 +2383,7 @@ #: src/hotkey/gui.cc:501 src/qthotkey/gui.cc:172 msgid "_Add" -msgstr "추가(_A)" +msgstr "추가하기(_A)" #: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 msgid "Global Hotkeys" @@ -2287,6 +2403,17 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"전역 단축키 플러그인\n" +"전역 키 조합 또는 멀티미디어 키로 플레이어를 제어합니다.\n" +"\n" +"저작권 (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"기여자는 다음과 같습니다:\n" +"저작권 (C) 2006-2007 Vladimir Paskov \n" +"저작권 (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2294,7 +2421,7 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "클라이언트 이름:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" @@ -2302,32 +2429,32 @@ #: src/jack/jack-ng.cc:130 msgid "Filter ports (regex, use any port if blank):" -msgstr "" +msgstr "필터 포트(정규식, 비어 있는 경우 아무 포트나 사용):" #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "물리적 포트에만 연결" #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "업믹스 사용" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "" +msgstr "입력에 더 적은 수의 채널이 있는 경우 왼쪽으로 향함" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "포트 수 부족 무시" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." -msgstr "" +msgstr "JACK 출력 포트를 찾을 수 없습니다. 설정을 확인하십시오." #: src/jack/jack-ng.cc:195 #, c-format msgid "Only %d JACK output ports were found but %d are required." -msgstr "" +msgstr "%d JACK 출력 포트만 발견되었지만 %d가 필요합니다." #: src/jack/jack-ng.cc:210 #, c-format @@ -2344,7 +2471,7 @@ #: src/jack/jack-ng.cc:245 msgid "Failed to connect to the JACK server; is it running?" -msgstr "" +msgstr "JACK 서버에 연결하지 못했습니다. 실행 중입니까?" #: src/jack/jack-ng.cc:321 #, c-format @@ -2352,6 +2479,8 @@ "The JACK server requires a sample rate of %d Hz, but Audacious is playing at " "%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." msgstr "" +"JACK 서버에는 %dHz의 샘플 레이트가 필요하지만 Audacious는 %dHz에서 재생됩니" +"다. 불일치를 수정하려면 샘플 레이트 변환기 효과를 사용하십시오." #: src/ladspa/plugin.cc:415 #, c-format @@ -2395,8 +2524,8 @@ "LADSPA Host for Audacious\n" "Copyright 2011 John Lindgren" msgstr "" -"오데이셔스용 LADSPA 호스트\n" -"Copyright 2011 John Lindgren" +"Audacious용 LADSPA 호스트\n" +"저작권 2011 John Lindgren" #: src/ladspa/plugin.h:78 msgid "LADSPA Host" @@ -2421,17 +2550,18 @@ "\n" "For more information about LIRC, see http://lirc.org." msgstr "" -"LIRC 원격 제어 데몬을 사용하여 오데이셔스를 제어하기 위한 간단한 플러그인\n" +"LIRC 원격 제어 데몬을 사용하여 Audacious를 제어하는 간단한 플러그인\n" "\n" -"오데이셔스에 적용함:Tony Vroon \n" +"Audacious에 맞게 조정됨:\n" +"Tony Vroon \n" "Joonas Harjumäki \n" "\n" -"XMMS LIRC 플러그인 기반 작성:\n" +"XMMS LIRC 플러그인에 따라 작성:\n" "Carl van Schaik \n" "Christoph Bartelmus \n" "Andrew O. Shadoura \n" "\n" -"LIRC에 대한 자세한 내용은, http://lirc.org를 보십시오." +"LIRC에 대한 자세한 내용은, http://lirc.org 를 참조하십시오." #: src/lirc/lirc.cc:390 msgid "Connection" @@ -2447,63 +2577,65 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "가사" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "" +msgstr "아무데도" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lyrics.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" msgstr "" +"아티스트는 시작 부분에서 잘리고 제목은 -- 끝 부분에서 잘립니다." #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "잘라낼 문자:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" -msgstr "" +msgstr "문자는 공백으로 둘러싸인 정규 표현식에서 OR 처리됩니다" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "분할할 문자:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "문자에서 해당 문자를 추가로 잘라냅니다" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "일반" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "제목을 아티스트와 문자 제목으로 분할" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" -msgstr "" +msgstr "인터넷 소스" #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "" +msgstr "다음에서 가사 가져오기:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" -msgstr "" +msgstr "가져온 가사를 로컬 캐시에 저장" #: src/lyricwiki-qt/lyricwiki.cc:144 msgid "Local Storage" -msgstr "" +msgstr "로컬 저장소" #: src/lyricwiki-qt/lyricwiki.cc:145 msgid "Load lyric files (.lrc) from local storage" -msgstr "" +msgstr "로컬 저장소에서 가사 파일(.lrc) 불러오기" #: src/lyricwiki-qt/lyricwiki.cc:356 #, c-format @@ -2519,29 +2651,29 @@ msgid "Looking for lyrics ..." msgstr "가사 검색중..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "오류" #: src/lyricwiki-qt/lyricwiki.cc:433 msgid "Lyrics could not be found." -msgstr "" +msgstr "가사를 찾을 수 없습니다." #: src/lyricwiki-qt/lyricwiki.cc:501 msgid "Missing title and/or artist." -msgstr "" +msgstr "제목 및/또는 아티스트가 누락되었습니다." #: src/lyricwiki-qt/lyricwiki.cc:553 msgid "Save Locally" -msgstr "" +msgstr "로컬에 저장" #: src/lyricwiki-qt/lyricwiki.cc:561 msgid "Refresh" -msgstr "" +msgstr "새로 고침" #: src/m3u/m3u.cc:32 msgid "M3U Playlists" -msgstr "M3U 재생 목록" +msgstr "M3U 재생목록" #: src/metronom/metronom.cc:44 msgid "Tact Generator" @@ -2580,8 +2712,8 @@ "Channel Mixer Plugin for Audacious\n" "Copyright 2011-2012 John Lindgren and Michał Lipski" msgstr "" -"오데이셔스용 채널 음량 조절기 플러그인\n" -"Copyright 2011-2012 John Lindgren and Michał Lipski" +"Audacious용 채널 음량 조절기 플러그인\n" +"저작권 2011-2012 John Lindgren and Michał Lipski" #: src/mixer/mixer.cc:259 msgid "Channel Mixer" @@ -2625,7 +2757,7 @@ #: src/modplug/plugin_main.cc:63 msgid "Sample rate" -msgstr "샘플링 주파수" +msgstr "샘플 레이트:" #: src/modplug/plugin_main.cc:64 msgid "22 kHz" @@ -2694,7 +2826,7 @@ #: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 msgid "These settings will take effect when Audacious is restarted." -msgstr "이 설정은 오데이셔스가 다시 시작할때 적용됩니다." +msgstr "이 설정은 Audacious가 다시 시작할때 적용됩니다." #: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 #: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 @@ -2704,7 +2836,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "월장석" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2720,7 +2852,7 @@ #: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 msgid "Album Artist" -msgstr "앨범 음악가" +msgstr "앨범 아티스트" #: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 msgid "Queue Position" @@ -2754,7 +2886,7 @@ #: src/mpg123/mpg123.cc:82 msgid "Use accurate length calculation (slow)" -msgstr "" +msgstr "정확한 길이 계산 사용(느림)" #: src/mpg123/mpg123.cc:256 msgid "Surround" @@ -2790,7 +2922,7 @@ #: src/notify/event.cc:97 msgid "Audacious is not playing." -msgstr "오데이셔스가 재생중이 아닙니다." +msgstr "Audacious가 재생중이 아닙니다." #: src/notify/notify.cc:39 msgid "Desktop Notifications" @@ -2816,19 +2948,19 @@ "this program. If not, see ." msgstr "" "Audacious용 데스크톱 알림 플러그인\n" -"Copyright (C) 2010 Maximilian Bogner\n" -"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" +"저작권 (C) 2010 Maximilian Bogner\n" +"저작권 (C) 2011-2013 John Lindgren 및 Jean-Alexandre Anglès d'Auriac\n" "\n" -"이 플러그인은 자유 소프트웨어입니다; 자유 소프트웨어 재단이 발표한 GNU 일반 " -"공중 사용허가서 3판(또는 여러분의 선택에 따라) 이상의 조항에 따라 재배포 또" -"는 수정할 수 있습니다.\n" -"\n" -"이 프로그램이 유용하게 사용되길 바라지만 그 어떤 보증도 없으며 심지어는 상업" -"적 보증이나 일부 목적의 적합성에 대한 암시적 보증도 하지 않습니다. 자세한 내" -"용은 GNU 일반 공중 사용허가서를 보십시오.\n" +"이 플러그인은 자유 소프트웨어입니다; 자유 소프트웨어 재단에서 발행한 GNU 일" +"반 공중 라이선스, 라이선스 버전 3 또는 (귀하의 선택에 따라) 이후 버전의 조건" +"에 따라 이를 재배포 및/또는 수정할 수 있습니다.\n" +"\n" +"이 플러그인은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 하지 않습니" +"다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증도 없이. 자세한 내용" +"은 GNU 일반 공중 라이선스를 참조하십시오.\n" "\n" -"이 프로그램과 함께 GNU 일반 공중 사용 허가서 사본을 받아야 합니다. 만약 사본" -"이 없다면 링크를 참조하십시오." +"이 프로그램과 함께 GNU 일반 공중 라이선스를 받았어야 합니다. 그렇지 않은 경" +"우 를 참조하십시오." #: src/notify/notify.cc:104 msgid "Show playback controls" @@ -2840,19 +2972,19 @@ #: src/notify/notify.cc:108 msgid "Include album name in notification" -msgstr "속성에 앨범명 포함" +msgstr "알림에 앨범 이름 포함" #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "사용자 지정 알림 기간:" #: src/notify/osd.cc:74 msgid "Show" -msgstr "보이기" +msgstr "표시" #: src/openmpt/mpt.cc:50 msgid "OpenMPT (Module Player)" -msgstr "" +msgstr "OpenMPT (모듈 재생기)" #: src/openmpt/mpt.cc:133 msgid "" @@ -2860,10 +2992,13 @@ "\n" "Written by: Chris Spiegel " msgstr "" +"libopenmpt 기반 모듈 재생기\n" +"\n" +"작성자: Chris Spiegel " #: src/openmpt/mpt.cc:152 msgid "Stereo separation:" -msgstr "" +msgstr "스테레오 분리:" #: src/openmpt/mpt.cc:154 msgid "%" @@ -2871,19 +3006,19 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "" +msgstr "보간:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" -msgstr "" +msgstr "선형" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "큐빅" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "창으로 된 싱크" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -2911,7 +3046,7 @@ #: src/oss4/plugin.cc:87 msgid "Enable format conversions made by the OSS software." -msgstr "OSS 소프트웨어가 만드는 형 변환을 활성화 합니다." +msgstr "OSS 소프트웨어에서 만든 형식 변환을 활성화합니다." #: src/oss4/plugin.cc:89 msgid "Enable exclusive mode to prevent virtual mixing." @@ -2925,16 +3060,16 @@ "I would like to thank people on #audacious, especially Tony Vroon and John " "Lindgren and of course the authors of the previous OSS plugin." msgstr "" -"오데이셔스용 OSS4 출력 플러그인\n" -"Copyright 2010-2012 Michał Lipski\n" +"Audacious용 OSS4 출력 플러그인\n" +"저작권 2010-2012 Michał Lipski\n" "\n" -"#audacious 채널 사람, 특히 Tony Vroon, John Lindgren, 이전에 OSS 플러그인을 " -"만든 저작자분께 감사드리고 싶습니다." +"저는 #audacious 채널의 사람들, 특히 Tony Vroon과 John Lindgren, 그리고 물론 " +"이전 OSS 플러그인의 작성자분들께 감사드리고 싶습니다." #: src/playlist-manager/playlist-manager.cc:37 #: src/playlist-manager-qt/playlist-manager-qt.cc:40 msgid "Playlist Manager" -msgstr "재생 목록 관리자" +msgstr "재생목록 관리자" #: src/playlist-manager/playlist-manager.cc:220 #: src/playlist-manager-qt/playlist-manager-qt.cc:354 @@ -2948,7 +3083,7 @@ #: src/pls/pls.cc:35 msgid "PLS Playlists" -msgstr "PLS 재생 목록" +msgstr "PLS 재생목록" #: src/psf/plugin.cc:53 msgid "OpenPSF PSF1/PSF2 Decoder" @@ -2956,11 +3091,11 @@ #: src/psf/plugin.cc:270 msgid "OpenPSF Configuration" -msgstr "" +msgstr "OpenPSF 구성" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" -msgstr "" +msgstr "파일의 길이 무시" #: src/pulse/pulse_audio.cc:42 msgid "PulseAudio Output" @@ -2968,11 +3103,11 @@ #: src/pulse/pulse_audio.cc:72 msgid "Context name:" -msgstr "" +msgstr "컨텍스트 이름:" #: src/pulse/pulse_audio.cc:74 msgid "Stream name:" -msgstr "" +msgstr "스트림 이름:" #: src/pulse/pulse_audio.cc:575 msgid "" @@ -2992,6 +3127,19 @@ "this program; if not, write to the Free Software Foundation, Inc., 51 " "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" +"Audacious PulseAudio 출력 플러그인\n" +"\n" +"이 프로그램은 자유 소프트웨어입니다. 자유 소프트웨어 재단에서 발행한 GNU 일" +"반 공중 라이선스의 조건에 따라 이를 재배포 및/또는 수정할 수 있습니다; 라이선" +"스 버전 2 또는 (귀하의 선택에 따라) 이후 버전.\n" +"\n" +"이 프로그램은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 하지 않습니" +"다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증도 없이. 자세한 내용" +"은 GNU 일반 공중 라이선스를 참조하십시오.\n" +"\n" +"이 프로그램과 함께 GNU 일반 공중 라이선스를 받았어야 합니다. 그렇지 않은 경" +"우 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, " +"MA 02110-1301, USA에 문의하십시오." #: src/qtaudio/qtaudio.cc:44 msgid "QtMultimedia Output" @@ -3005,11 +3153,11 @@ "Based on SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" -"오데이셔스용 QtMultimedia 음성 출력 플러그인\n" -"Copyright 2014 William Pitcock\n" +"Audacious용 QtMultimedia 음성 출력 플러그인\n" +"저작권 2014 William Pitcock\n" "\n" -"오데이셔스용 SDL 출력 플러그인 기반임\n" -"Copyright 2010 John Lindgren" +"Audacious용 SDL 출력 플러그인 기반임\n" +"저작권 2010 John Lindgren" #: src/qtglspectrum/gl-spectrum.cc:41 msgid "" @@ -3023,10 +3171,19 @@ "\n" "License: GPLv2+" msgstr "" +"Audacious용 OpenGL 스펙트럼 분석기\n" +"저작권 2013 Christophe Budé, John Lindgren, 및 Carlo Bramini\n" +"저작권 2014, 2020 Ariadne Conill\n" +"\n" +"XMMS 플러그인 기반:\n" +"저작권 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, 및 " +"4Front Technologies\n" +"\n" +"라이선스: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "텍스트 필드 내에서 키 조합을 누르십시오." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3043,6 +3200,18 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"전역 단축키 플러그인\n" +"전역 키 조합 또는 멀티미디어 키로 플레이어를 제어합니다.\n" +"\n" +"저작권 (C) 2020 i.Dark_Templar \n" +"저작권 (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"기여자는 다음과 같습니다:\n" +"저작권 (C) 2006-2007 Vladimir Paskov \n" +"저작권 (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3050,7 +3219,7 @@ #: src/qtui/menus.cc:115 msgid "_Add Folder ..." -msgstr "폴더 추가(_A)..." +msgstr "폴더 추가하기(_A) ..." #: src/qtui/menus.cc:128 msgid "_Log Inspector ..." @@ -3066,11 +3235,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3078,39 +3247,39 @@ #: src/qtui/search_bar.cc:46 msgid "Search playlist" -msgstr "재생 목록 검색" +msgstr "재생목록 검색" #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "항상" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "자동 숨김" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "없음" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "재생목록 탭 표시:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "열 헤더에 굵은 글꼴 사용" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" -msgstr "샘플 주파수 변환기" +msgstr "샘플 레이트 변환기" #: src/resample/resample.cc:183 msgid "" "Sample Rate Converter Plugin for Audacious\n" "Copyright 2010-2012 John Lindgren" msgstr "" -"오데이셔스용 샘플 주파수 변환 플러그인\n" -"Copyright 2010-2012 John Lindgren" +"Audacious용 샘플 레이트 변환기 플러그인\n" +"저작권 2010-2012 John Lindgren" #: src/resample/resample.cc:187 msgid "Skip/repeat samples" @@ -3201,21 +3370,25 @@ "Your scrobbles are being saved on your computer temporarily. They will be " "submitted as soon as Audacious is allowed access." msgstr "" +"사용자의 스크러블이 컴퓨터에 일시적으로 저장되고 있습니다. Audious의 접근이 " +"허락되는 대로 제출될 것입니다." #: src/scrobbler2/config_window.cc:33 #, c-format msgid "Permission granted. Scrobbling for user %s." -msgstr "" +msgstr "권한이 부여되었습니다. 사용자 %s에 대한 스크러블링입니다." #: src/scrobbler2/config_window.cc:37 msgid "" "Permission denied. Open the following URL in a browser, allow Audacious " "access to your account, and then click 'Check Permission' again:" msgstr "" +"권한이 거부되었습니다. 브라우저에서 다음 URL을 열고 계정에 대한 Audacious 액" +"세스를 허용한 다음 '권한 확인'을 다시 클릭합니다:" #: src/scrobbler2/config_window.cc:47 msgid "There was a problem contacting Last.fm." -msgstr "" +msgstr "Last.fm에 접속하는 동안 문제가 발생했습니다." #: src/scrobbler2/config_window.cc:86 msgid "Check Permission" @@ -3228,6 +3401,8 @@ #: src/scrobbler2/config_window.cc:91 msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." msgstr "" +"Audacious가 사용자의 Last.fm 계정으로 트랙을 스크롤할 수 있도록 허용해야 합니" +"다." #: src/scrobbler2/scrobbler.cc:29 msgid "Scrobbler 2.0" @@ -3251,9 +3426,9 @@ "project.\n" "\n" msgstr "" -"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" +"Pitxyoki의 Audacious Scrobbler 플러그인 2.0,\n" "\n" -"Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" +"저작권 © 2012-2013 Luís M. Picciochi Oliveira \n" "\n" "이 프로젝트를 시작하는데 도움을 준 John Lindgren에게 감사드립니다.\n" "\n" @@ -3275,8 +3450,8 @@ "SDL Output Plugin for Audacious\n" "Copyright 2010 John Lindgren" msgstr "" -"오데이셔스용 SDL 출력 플러그인\n" -"Copyright 2010 John Lindgren" +"Audacious용 SDL 출력 플러그인\n" +"저작권 2010 John Lindgren" #: src/search-tool/library.cc:35 src/search-tool/library.cc:46 #: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 @@ -3295,30 +3470,30 @@ #: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 msgid "on" -msgstr "" +msgstr "앨범:" #: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 msgid "by" -msgstr "" +msgstr "아티스트:" #: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 msgid "Number of results to show:" -msgstr "" +msgstr "표시할 결과 수:" #: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 msgid "Rescan library at startup" -msgstr "" +msgstr "시작 시 라이브러리 다시 스캔" #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "" +msgstr "변경사항에 대한 라이브러리 모니터링" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" "To import your music library into Audacious, choose a folder and then click " "the \"refresh\" icon." msgstr "" -"음악 라이브러리를 오데이셔스로 가져오려면 폴더를 선택하고 \"새로고침\"아이콘" +"음악 라이브러리를 Audacious로 가져오려면 폴더를 선택하고 \"새로고침\"아이콘" "을 누르십시오." #: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 @@ -3337,7 +3512,7 @@ #, c-format msgid "%d of %d result shown" msgid_plural "%d of %d results shown" -msgstr[0] "" +msgstr[0] "%d / %d의 결과 표시됨" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3347,11 +3522,11 @@ #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" -msgstr "재생 목록 만들기(_C)" +msgstr "재생목록 만들기(_C)" #: src/search-tool-qt/search-tool-qt.cc:503 src/search-tool/search-tool.cc:347 msgid "_Add to Playlist" -msgstr "재생 목록 추가하기(_A)" +msgstr "재생목록 추가하기(_A)" #: src/sid/xmms-sid.cc:43 msgid "SID Player" @@ -3403,7 +3578,7 @@ #: src/sid/xs_config.cc:96 msgid "Subtunes" -msgstr "" +msgstr "서브튠스" #: src/sid/xs_config.cc:97 msgid "Enable subtunes" @@ -3426,8 +3601,8 @@ "Silence Removal Plugin for Audacious\n" "Copyright 2014 John Lindgren" msgstr "" -"오데이셔스용 무음 제거 플러그인\n" -"Copyright 2014 John Lindgren" +"Audacious용 무음 제거 플러그인\n" +"저작권 2014 John Lindgren" #: src/silence-removal/silence-removal.cc:67 msgid "Silence Removal" @@ -3499,7 +3674,7 @@ #: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 msgid "Audacious Equalizer" -msgstr "오데이셔스 이퀄라이저" +msgstr "Audacious 이퀄라이저" #: src/skins/main.cc:452 src/skins-qt/main.cc:436 msgid "Recording on" @@ -3584,7 +3759,7 @@ #: src/skins/menus.cc:89 src/skins-qt/menus.cc:80 msgid "Playlist" -msgstr "재생 목록" +msgstr "재생목록" #: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 msgid "Output" @@ -3596,7 +3771,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "서비스" @@ -3613,17 +3788,17 @@ msgstr "끝내기" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "곡 정보..." #: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 msgid "Shuffle by Album" -msgstr "앨범 섞기" +msgstr "앨범별로 순서섞기" #: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 msgid "No Playlist Advance" -msgstr "이전 재생목록이 없습니다" +msgstr "재생목록 진행 없음" #: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 msgid "Set A-B Repeat" @@ -3633,7 +3808,7 @@ msgid "Clear A-B Repeat" msgstr "A-B 반복 지우기" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "지정 곡으로 건너뛰기..." @@ -3647,35 +3822,35 @@ #: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 msgid "New Playlist" -msgstr "새 재생 목록" +msgstr "새 재생목록" #: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 msgid "Rename Playlist ..." -msgstr "재생 목록 제거..." +msgstr "재생목록 제거..." #: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 msgid "Remove Playlist" -msgstr "재생 목록 제거" +msgstr "재생목록 제거" #: src/skins/menus.cc:131 src/skins-qt/menus.cc:124 msgid "Previous Playlist" -msgstr "이전 재생 목록" +msgstr "이전 재생목록" #: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 msgid "Next Playlist" -msgstr "다음 재생 목록" +msgstr "다음 재생목록" #: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 msgid "Import Playlist ..." -msgstr "재생 목록 가져오기..." +msgstr "재생목록 가져오기..." #: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 msgid "Export Playlist ..." -msgstr "재생 목록 내보내기..." +msgstr "재생목록 내보내기..." #: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 msgid "Playlist Manager ..." -msgstr "재생 목록 관리자..." +msgstr "재생목록 관리자..." #: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 msgid "Queue Manager ..." @@ -3683,11 +3858,11 @@ #: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 msgid "Refresh Playlist" -msgstr "재생 목록 새로 고침" +msgstr "재생목록 새로 고침" #: src/skins/menus.cc:144 src/skins-qt/menus.cc:137 msgid "Show Playlist Editor" -msgstr "재생 목록 편집기 표시" +msgstr "재생목록 편집기 표시" #: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 msgid "Show Equalizer" @@ -3711,7 +3886,7 @@ #: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 msgid "Roll Up Playlist Editor" -msgstr "재생 목록 편집기 말아 올리기" +msgstr "재생목록 편집기 말아 올리기" #: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 msgid "Roll Up Equalizer" @@ -3719,27 +3894,27 @@ #: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 msgid "Add URL ..." -msgstr "URL 추가..." +msgstr "URL 추가하기 ..." #: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 msgid "Add Files ..." -msgstr "파일 추가..." +msgstr "파일 추가하기 ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" -msgstr "제목별" +msgstr "제목순" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" -msgstr "파일 이름별" +msgstr "파일 이름순" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "파일 경로순" @@ -3767,104 +3942,104 @@ msgid "Remove Selected" msgstr "선택한 항목 제거" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "검색하고 선택" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "선택 반전" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "선택하지 않음" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "모두 선택" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "트랙 번호순" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" -msgstr "음악가순" +msgstr "아티스트순" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" -msgstr "앨범 제목순" +msgstr "앨범순" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" -msgstr "앨범 음악가별" +msgstr "앨범 아티스트순" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" -msgstr "출시일자순" +msgstr "출시 일자순" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" -msgstr "장르별" +msgstr "장르순" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" -msgstr "길이별" +msgstr "길이순" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" -msgstr "지정 제목별" +msgstr "사용자 지정 제목순" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" -msgstr "" +msgstr "주석순" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "목록 순서 뒤섞기" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "목록 순서 뒤집기" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "선택한 항목 정렬" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "목록 정렬" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" -msgstr "" +msgstr "포함하는 폴더 열기" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "잘라내기" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "복사" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "붙여넣기" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" -msgstr "" +msgstr "마지막 부분에 붙여넣기" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "큐에 넣기/큐에서 빼기" @@ -3873,9 +4048,9 @@ msgid "%s (%d of %d)" msgstr "%1$s (%3$d중 %2$d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" -msgstr "오데이셔스 재생 목록 편집기" +msgstr "Audacious 재생목록 편집기" #: src/skins/plugin.cc:49 src/skins-qt/plugin.cc:64 msgid "Winamp Classic Interface" @@ -3887,169 +4062,220 @@ #: src/skins-qt/menus.cc:159 msgid "Add Folder ..." -msgstr "폴더 추가..." +msgstr "폴더 추가하기 ..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "활성 재생목록에서 항목 검색" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"하나 이상의 필드를 채워 재생목록에서 항목을 선택하십시오. 필드는 대소문자를 " +"구분하지 않는 정규식 구문을 사용합니다. 정규식이 어떻게 작동하는지 모른다면 " +"검색하려는 내용의 문장 일부를 넣으시면 됩니다." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "제목:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "앨범:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "아티스트:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "파일 이름:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "검색하기 전에 이전 선택항목 지우기" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "일치하는 항목에 대해 자동으로 대기 목록을 전환하기" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "일치하는 항목에 대해 새 재생목록 만들기" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "검색" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "연주자:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "주 재생기 창 글꼴 선택:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "재생목록:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" -msgstr "재생 목록 글꼴 선택:" +msgstr "재생목록 글꼴 선택:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "스킨" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "창에 초점을 맞출 때 활성 제목 보이기" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "글꼴" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" -msgstr "비트맵 글꼴 사용(아스키 전용 지원)" +msgstr "비트맵 글꼴 사용(ASCII만 지원)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "곡 제목 스크롤" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "양방향으로 곡 제목 스크롤" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "분석기" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "표시기" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "보이스출력 / VU 메터" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "끄기" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "보통" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "불" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "수평선" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "선" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "막대" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "가장 느리게" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "느리게" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "중간" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "빠르게" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "가장 빠르게" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "점" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "선" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" -msgstr "면" +msgstr "솔리드" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "얼음" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "부드럽게" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "색상 적용:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "방식:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "폴 오프:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "최대 폴 오프:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "스코프 모양새:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "보이스 출력 색상 적용:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU 메터 모양새:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "방식" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "시각화 방식:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "분석 프로그램" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "피크 표시" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "시각화" @@ -4061,58 +4287,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "압축하지 않은 Winamp 2.x 스킨" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "활성 재생 목록에서 항목 검색" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "검색" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"하나 이상의 칸을 채워 재생 목록의 항목을 검색합니다. 대소문자에 관계 없이 정" -"규표현식 문법을 사용합니다. 정규표현식이 어떻게 동작하는지 모르신다면 검색할 " -"문장 일부를 넣으시면 됩니다." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "제목:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "앨범:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "음악가:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "파일 이름:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "검색하기 전에 이전 선택항목 지우기" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "일치하는 항목에 대해 자동으로 대기 목록을 전환하기" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "일치하는 항목에 대해 새 재생 목록 만들기" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile 플러그인" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4134,22 +4313,22 @@ "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." msgstr "" "xmms_sndfile 플러그인 기반.\n" -"Copyright (C) 2000, 2002 Erik de Castro Lopo\n" +"저작권 (C) 2000, 2002 Erik de Castro Lopo\n" "\n" "Adapted for Audacious by Tony Vroon \n" "\n" "\n" -"이 프로그램은 자유 소프트웨어입니다; 자유 소프트웨어 재단이 발표한 GNU 일반 " -"공중 사용허가서 2판(또는 여러분의 선택에 따라) 이상의 조항에 따라 재배포 또" -"는 수정할 수 있습니다.\n" -"\n" -"이 프로그램이 유용하게 사용되길 바라지만 그 어떤 보증도 없으며 심지어는 상업" -"적 보증이나 일부 목적의 적합성에 대한 암시적 보증도 하지 않습니다. 자세한 내" -"용은 GNU 일반 공중 사용허가서를 보십시오.\n" -"\n" -"이 프로그램과 함께 GNU 일반 공중 사용 허가서 사본을 받아야 합니다. 만약 사본" -"이 없다면 자유 소프트웨어 재단에 요청하십시오. 51 Franklin Street, Fifth " -"Floor, Boston, MA 02110-1301, USA." +"이 프로그램은 자유 소프트웨어입니다; 자유 소프트웨어 재단에서 발행한 GNU 일" +"반 공중 라이선스의 조건에 따라 이를 재배포 및/또는 수정할 수 있습니다; 라이선" +"스 버전 2 또는 (귀하의 선택에 따라) 이후 버전.\n" +"\n" +"이 프로그램은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 하지 않습니" +"다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증도 없이. 자세한 내용" +"은 GNU 일반 공중 라이선스를 참조하십시오.\n" +"\n" +"이 프로그램과 함께 GNU 일반 공중 라이선스를 받았어야 합니다. 그렇지 않은 경" +"우 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, " +"MA 02110-1301, USA에 문의하십시오." #: src/sndio/sndio.cc:43 msgid "Sndio Output" @@ -4170,19 +4349,19 @@ #: src/sndio/sndio.cc:192 msgid "Sndio error: sio_open() failed" -msgstr "" +msgstr "Sndio 오류: sio_open() 실패" #: src/sndio/sndio.cc:221 msgid "Sndio error: sio_setpar() failed" -msgstr "" +msgstr "Sndio 오류: sio_setpar() 실패" #: src/sndio/sndio.cc:233 msgid "Sndio error: sio_start() failed" -msgstr "" +msgstr "Sndio 오류: sio_start() 실패" #: src/songchange/song_change.cc:30 msgid "Song Change" -msgstr "곡 바꾸기" +msgstr "곡 변경" #: src/songchange/song_change.cc:245 msgid "Commands" @@ -4202,13 +4381,15 @@ #: src/songchange/song_change.cc:256 msgid "Command to run when song title changes (for network streams):" -msgstr "" +msgstr "노래 제목이 변경될 때 실행할 명령(네트워크 스트림의 경우):" #: src/songchange/song_change.cc:259 msgid "" "You can use the following format codes, which will be replaced before " "running the command (not all are useful for the end-of-playlist command):" msgstr "" +"다음 형식 코드를 사용할 수 있습니다. 이 코드는 명령을 실행하기 전에 대체됩니" +"다(모든 재생목록의 끝 명령에 유용하지 않습니다):" #: src/songchange/song_change.cc:262 msgid "" @@ -4224,12 +4405,25 @@ "%t: Playlist position\n" "%T: Title (unformatted)" msgstr "" +"%a: 아티스트\n" +"%b: 앨범\n" +"%c: 채널 수\n" +"%f: 파일 이름(전체 경로)\n" +"%F: 주파수(헤르츠)\n" +"%l: 길이(밀리초)\n" +"%n 또는 %s: 형식이 지정된 제목(재생목록 설정 참조)\n" +"%p: 현재 재생 중(1 또는 0)\n" +"%r: 속도(초당 비트 수)\n" +"%t: 재생목록 위치\n" +"%T: 제목(형식 없음)" #: src/songchange/song_change.cc:273 msgid "" "Parameters passed to the shell should be enclosed in quotation marks. " "Unquoted parameters may lead to unexpected results." msgstr "" +"셸에 전달된 매개변수는 따옴표로 묶어야 합니다. 인용되지 않은 매개변수는 예상" +"치 못한 결과를 초래할 수 있습니다." #: src/song-info-qt/song-info.cc:30 msgid "Song Info" @@ -4247,11 +4441,11 @@ "Based on Sample Rate Converter Plugin:\n" "Copyright 2010-2012 John Lindgren" msgstr "" -"SoX Resampler Plugin for Audacious⏎\n" -"Copyright 2013 Michał Lipski⏎\n" -"⏎\n" -"샘플 주파수 변환 플러그인을 기반으로 하였습니다:\n" -"Copyright 2010-2012 John Lindgren" +"Audacious용 SoX 리샘플러 플러그인\n" +"저작권 2013 Michał Lipski\n" +"\n" +"샘플 레이트 변환기 플러그인 기반:\n" +"저작권 2010-2012 John Lindgren" #: src/soxr/sox-resampler.cc:178 msgid "Quick" @@ -4275,11 +4469,11 @@ #: src/soxr/sox-resampler.cc:187 msgid "Minimum" -msgstr "" +msgstr "최소" #: src/soxr/sox-resampler.cc:188 msgid "Intermediate" -msgstr "" +msgstr "중간" #: src/soxr/sox-resampler.cc:193 msgid "Quality:" @@ -4287,15 +4481,15 @@ #: src/soxr/sox-resampler.cc:196 msgid "Phase:" -msgstr "" +msgstr "위상:" #: src/soxr/sox-resampler.cc:200 msgid "Allow aliasing" -msgstr "" +msgstr "앨리어싱 허용" #: src/soxr/sox-resampler.cc:202 msgid "Use steep filter" -msgstr "" +msgstr "가파른 필터 사용" #: src/speedpitch/speed-pitch.cc:54 msgid "Speed and Pitch" @@ -4307,7 +4501,7 @@ #: src/speedpitch/speed-pitch.cc:248 msgid "Decouple from pitch" -msgstr "" +msgstr "피치에서 분리" #: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 msgid "Multiplier:" @@ -4332,6 +4526,14 @@ "This plugin provides a status icon, placed in\n" "the system tray area of the window manager." msgstr "" +"상태 아이콘 플러그인 (Qt 인터페이스용 부분 포트)\n" +"\n" +"저작권 2005-2007 Giacomo Lozito \n" +"저작권 2010 Michał Lipski \n" +"저작권 2015 Eugene Paskevich \n" +"\n" +"이 플러그인은 창 관리자의 시스템 트레이 영역에\n" +"있는 상태 아이콘을 제공합니다." #: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 msgid "Mouse Scroll Action" @@ -4339,11 +4541,11 @@ #: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 msgid "Change volume" -msgstr "음량 조절하기" +msgstr "음량 변경" #: src/statusicon-qt/statusicon.cc:90 src/statusicon/statusicon.cc:384 msgid "Change playing song" -msgstr "재생중인 곡 바꾸기" +msgstr "재생중인 곡 변경" #: src/statusicon-qt/statusicon.cc:93 src/statusicon/statusicon.cc:387 msgid "Other Settings" @@ -4377,8 +4579,8 @@ msgstr "" "상태 아이콘 플러그인\n" "\n" -"Copyright 2005-2007 Giacomo Lozito \n" -"Copyright 2010 Michał Lipski \n" +"저작권 2005-2007 Giacomo Lozito \n" +"저작권 2010 Michał Lipski \n" "\n" "이 플러그인은 창 관리자의 시스템 표시줄 영역에\n" "뜨는 상태 아이콘을 제공합니다." @@ -4403,39 +4605,39 @@ #: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 msgid "Type" -msgstr "" +msgstr "유형" #: src/streamtuner/icecast-model.cc:132 msgid "Current Song" -msgstr "" +msgstr "현재 노래" #: src/streamtuner/icecast-model.cc:164 msgid "Other" -msgstr "" +msgstr "기타" #: src/streamtuner/ihr-model.cc:63 msgid "Market" -msgstr "" +msgstr "장터" #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "" +msgstr "호출 부호" #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "설명" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" -msgstr "" +msgstr "청취자" #: src/streamtuner/shoutcast-model.cc:188 msgid "Top 500 Stations" -msgstr "" +msgstr "상위 500개 방송국" #: src/streamtuner/shoutcast-model.cc:189 msgid "Alternative" -msgstr "" +msgstr "대체" #: src/streamtuner/shoutcast-model.cc:190 msgid "Blues" @@ -4451,15 +4653,15 @@ #: src/streamtuner/shoutcast-model.cc:193 msgid "Decades" -msgstr "" +msgstr "년대" #: src/streamtuner/shoutcast-model.cc:194 msgid "Easy Listening" -msgstr "이지 리스닝" +msgstr "쉬운 듣기" #: src/streamtuner/shoutcast-model.cc:195 msgid "Electronic" -msgstr "" +msgstr "일렉트로닉" #: src/streamtuner/shoutcast-model.cc:196 msgid "Folk" @@ -4467,11 +4669,11 @@ #: src/streamtuner/shoutcast-model.cc:197 msgid "Inspirational" -msgstr "" +msgstr "영감" #: src/streamtuner/shoutcast-model.cc:198 msgid "International" -msgstr "" +msgstr "국가별" #: src/streamtuner/shoutcast-model.cc:199 msgid "Jazz" @@ -4479,11 +4681,11 @@ #: src/streamtuner/shoutcast-model.cc:200 msgid "Latin" -msgstr "" +msgstr "라틴어" #: src/streamtuner/shoutcast-model.cc:201 msgid "Metal" -msgstr "메달" +msgstr "메탈" #: src/streamtuner/shoutcast-model.cc:203 msgid "New Age" @@ -4495,11 +4697,11 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "" +msgstr "공공 라디오" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B 및 어반" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4515,31 +4717,31 @@ #: src/streamtuner/shoutcast-model.cc:210 msgid "Seasonal and Holiday" -msgstr "" +msgstr "계절 및 휴일" #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "사운드트랙" #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "말하기" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" -msgstr "" +msgstr "테마" #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "샤우트캐스트" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "아이스캐스트" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" -msgstr "" +msgstr "스트림 튜너" #: src/tonegen/tonegen.cc:45 msgid "Tone Generator" @@ -4562,21 +4764,34 @@ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -"사인 톤 생성기by Håvard Kvålen \n" +"사인 톤 생성기: Håvard Kvålen \n" "Daniel J. Peng 이 수정함\n" "\n" "사용하려면 다음 URL을 추가하십시오: tone://frequency1;frequency2;" "frequency3;...\n" -"사용 예) tone://2000;2005는 2000 Hz 톤과 a 2005 Hz 톤으로 재생합니다." +"예를 들어, tone://2000;2005는 2000 Hz 톤과 a 2005 Hz 톤으로 재생합니다." -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(이하 메시지는 숨겨져 있습니다.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "동작중 ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "wjdqh" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s은(는) 올바른 폴더가 아닌 것 같습니다." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "육성 제거" @@ -4601,15 +4816,15 @@ "Gian-Carlo Pascutto \n" "Eugene Zagidullin " msgstr "" -"오데이셔스 Ogg Vorbis 디코더\n" +"Audacious Ogg Vorbis 디코더\n" "\n" -"Xiph.org 재단의 Ogg Vorbis 플러그인을 기반으로 합니다:\n" +"Xiph.org 재단의 Ogg Vorbis 플러그인 기반:\n" "http://www.xiph.org/\n" "\n" "초기 코드 작성자:\n" "Tony Arcieri \n" "\n" -"공헌자:\n" +"기여자:\n" "Chris Montgomery \n" "Peter Alm \n" "Michael Smith \n" @@ -4642,6 +4857,17 @@ "Player Freq: %P\n" "Year: %y" msgstr "" +"제목: %t\n" +"작성자: %a\n" +"From: %f\n" +"트래커: %T\n" +"주석: %C\n" +"칩 유형: %c\n" +"스테레오: %s\n" +"루프: %l\n" +"칩 주파수: %F\n" +"재생기 주파수: %P\n" +"연도: %y" #: src/vtx/vtx.cc:38 msgid "VTX Decoder" @@ -4655,47 +4881,51 @@ msgstr "" "Vortex 파일 형식 재생기 by Sashnov Alexander \n" "Roman Sherbakov 의 in_vtx.dll을 기반으로 함\n" -"Pavel Vymetalek 이 오데이셔스 플러그인 제작" +"Pavel Vymetalek 이 Audacious 플러그인 제작" #: src/vumeter-qt/vumeter_qt.cc:31 msgid "" "VU Meter Plugin for Audacious\n" "Copyright 2017-2019 Marc Sánchez Fauste" msgstr "" +"Audacious용 VU 미터 플러그인\n" +"저작권 2017-2019 Marc Sánchez Fauste" #: src/vumeter-qt/vumeter_qt.cc:35 msgid "VU Meter Settings" -msgstr "" +msgstr "VU 미터 설정" #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" -msgstr "" +msgstr "피크 홀드 시간:" #: src/vumeter-qt/vumeter_qt.cc:42 msgid "Fall-off time:" -msgstr "" +msgstr "감소 시간:" #: src/vumeter-qt/vumeter_qt.cc:44 msgid "dB/second" -msgstr "" +msgstr "dB/초" #: src/vumeter-qt/vumeter_qt.cc:46 msgid "Display legend" -msgstr "" +msgstr "범례 보이기" #: src/vumeter-qt/vumeter_qt.h:37 msgid "VU Meter" -msgstr "" +msgstr "VU 미터" #: src/waveout/waveout.cc:43 msgid "Win32 waveOut" -msgstr "" +msgstr "Win32 waveOut" #: src/waveout/waveout.cc:69 msgid "" "Win32 waveOut Plugin for Audacious\n" "Copyright 2016 John Lindgren" msgstr "" +"Audacious용 Win32 waveOut 플러그인\n" +"저작권 2016 John Lindgren" #: src/wavpack/wavpack.cc:25 msgid "WavPack Decoder" @@ -4715,18 +4945,42 @@ "\n" "Some of the plugin code was by Miles Egan." msgstr "" -"Copyright 2006 William Pitcock \n" +"저작권 2006 William Pitcock \n" "\n" "플러그인 코드 일부는 Miles Egan이 작성했습니다." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF 디코더" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "코사인" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "급격한" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" -msgstr "XSF 설정" +msgstr "XSF 구성" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "기본 페이드 시간:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "보간 모드:" #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" -msgstr "XML 공유 가능 재생 목록(XSPF)" +msgstr "XML 공유 가능 재생목록(XSPF)" diff -Nru audacious-plugins-4.1/po/LINGUAS audacious-plugins-4.2/po/LINGUAS --- audacious-plugins-4.1/po/LINGUAS 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/LINGUAS 2022-07-10 01:12:34.000000000 +0000 @@ -1,3 +1,4 @@ +af ar be bg @@ -12,6 +13,8 @@ es_MX es et +eu +fa_IR fi fr gl @@ -39,5 +42,6 @@ ta tr uk +uz zh_CN zh_TW diff -Nru audacious-plugins-4.1/po/lt.po audacious-plugins-4.2/po/lt.po --- audacious-plugins-4.1/po/lt.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/lt.po 2022-07-10 01:12:34.000000000 +0000 @@ -12,9 +12,10 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Algimantas Margevičius , " +"2011-2014\n" "Language-Team: Lithuanian (http://www.transifex.com/audacious/audacious/" "language/lt/)\n" "Language: lt\n" @@ -34,7 +35,7 @@ msgstr "AdPlug (AdLib grotuvas)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "nuoseklus" @@ -64,7 +65,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Kita" @@ -409,6 +410,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -484,6 +486,7 @@ msgstr "* Šiame MIDI faile nėra žodžių *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Uždaryti" @@ -538,7 +541,7 @@ msgid "Concave Rectangle" msgstr "Įgaubtas stačiakampis" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Joks" @@ -735,6 +738,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious grojaraščiai (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Spalva" @@ -1110,7 +1129,7 @@ msgstr "Ištrinti" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Atšaukti" @@ -1144,7 +1163,7 @@ msgstr "Delsa:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1164,7 +1183,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg įskiepis" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1272,76 +1291,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1466,7 +1485,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Pagrindinės" @@ -1475,11 +1494,11 @@ msgid "FLAC Decoder" msgstr "FLAC dekoderis" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "lossless" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2141,8 +2160,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2505,7 +2524,7 @@ msgid "Looking for lyrics ..." msgstr "Ieškoma dainų žodžių" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Klaida" @@ -2860,7 +2879,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2945,7 +2964,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3585,7 +3604,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Tarnybos" @@ -3602,7 +3621,7 @@ msgstr "Baigti" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Dainos informacija..." @@ -3622,7 +3641,7 @@ msgid "Clear A-B Repeat" msgstr "Išvalyti A-B kartojimą" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Pereiti prie dainos ..." @@ -3715,20 +3734,20 @@ msgstr "Pridėti failus..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Pagal pavadinimą" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Pagal failo kelią" @@ -3756,104 +3775,104 @@ msgid "Remove Selected" msgstr "Pašalint pažymėtus" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Ieškoti ir pasirinkti" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertuoti pažymėjimą" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Nieko nepasirinkti" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Pasirinkti viską" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Pagal takelio numerį" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Pagal atlikėją" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Pagal albumą" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Pagal išleidimo datą" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Sumaišyti sąrašą" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Apversti sąrašą" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Rikuoti pasirinktus" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Rikiuoti sąrašą" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Iškirpti" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopijuoti" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Įklijuoti" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Į eilę/Iš eilės" @@ -3862,7 +3881,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d iš %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious grojaraščio redaktorius" @@ -3878,167 +3897,219 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Ieškoti įrašų aktyviame grojaraštyje" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Surask ir pasirink įrašus grojaraštyje užpildydamas vieną ar kelis " +"laukelius. Laukeliai naudoja reguliariųjų išraiškų sintaksę, raidžių lygis " +"nesvarbus. Jei nežinai kaip veikia reguliariosios išraiškos, paprasčiausiai " +"įrašyk paraidžiui tai ko ieškai." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Prie ieškant, išvalyti buvusius pasirinkimus" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Atitinkantiems įrašams automatiškai perjungti eilę" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Iš surastų įrašų sukurti naują grojaraštį" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Ieškoti" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Pasirinkti pagrindinį lango šriftą:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Pasirinkti grojaraščio šriftą:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Išvaizda" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Šriftai" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Naudoti bitmap šriftus (palaiko tik ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Slinkti pavadinimą" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Slinkti pavadinimą į abi puses" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizatorius" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Sritis" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Voiceprint / VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Išjungta" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normalus" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ugnis" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vertikalios linijos" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linijos" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Juostos" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Lėčiausias" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lėtas" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Vidutinis" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Greitas" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Greičiausias" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Taškai" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Eilutė " -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Vientisa" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ledas" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Tolygus" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Spalvinimas:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stilius:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Pikų krytis:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Pikų krytis:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Srities stilius:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Voiceprint spalvojimas:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU Meter stilius:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipas" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Vaizdo efektų tipas:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizatorius" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Rodyti pikus" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizacija" @@ -4050,59 +4121,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Išarchyvuotas Winamp 2.x skin" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Ieškoti įrašų aktyviame grojaraštyje" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Ieškoti" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Surask ir pasirink įrašus grojaraštyje užpildydamas vieną ar kelis " -"laukelius. Laukeliai naudoja reguliariųjų išraiškų sintaksę, raidžių lygis " -"nesvarbus. Jei nežinai kaip veikia reguliariosios išraiškos, paprasčiausiai " -"įrašyk paraidžiui tai ko ieškai." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Prie ieškant, išvalyti buvusius pasirinkimus" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Atitinkantiems įrašams automatiškai perjungti eilę" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Iš surastų įrašų sukurti naują grojaraštį" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile įskiepis" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4556,14 +4579,27 @@ "Norėdami naudoti, pridėkite URL: tone://dažnis1;dažnis2;dažnis3;...\n" "pvz. tone://2000;2005 norint atkurti 2000 Hz toną ir 2005 Hz toną" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Sekantys pranešimai paslėpti.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Balso pašalinimas" @@ -4706,14 +4742,38 @@ "\n" "Dalį kodo parašė Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF dekoderis" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML viešinami grojaraščiai (XSPF)" diff -Nru audacious-plugins-4.1/po/lv.po audacious-plugins-4.2/po/lv.po --- audacious-plugins-4.1/po/lv.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/lv.po 2022-07-10 01:12:34.000000000 +0000 @@ -10,9 +10,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-24 22:44+0000\n" -"Last-Translator: Oskars G \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Oskars G , 2020\n" "Language-Team: Latvian (http://www.transifex.com/audacious/audacious/" "language/lv/)\n" "Language: lv\n" @@ -31,7 +31,7 @@ msgstr "AdPlug (AdLib atskaņotājs)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekvencēts" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Dažādi" @@ -471,6 +471,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Iztveršanas temps:" @@ -546,6 +547,7 @@ msgstr "* dziesmu vārdu teksti šajā MIDI failā nav pieejami *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Ai_zvērt" @@ -605,7 +607,7 @@ msgid "Concave Rectangle" msgstr "Ieliekts taisnstrūris" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Neviens" @@ -803,6 +805,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious repertuāri (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Krāsa" @@ -1193,7 +1211,7 @@ msgstr "Dzēst" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Atcelt" @@ -1232,7 +1250,7 @@ msgstr "Aizture/aizkave:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1252,7 +1270,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg spraudnis" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1374,77 +1392,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1568,7 +1586,7 @@ msgid "Quality (0-1):" msgstr "Kvalitātes līmenis (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Vispārīgi" @@ -1577,11 +1595,11 @@ msgid "FLAC Decoder" msgstr "FLAC dekodētājs" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "bezzudumu" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2242,8 +2260,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2627,7 +2645,7 @@ msgid "Looking for lyrics ..." msgstr "Meklē dziesmas vārdu tekstu ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Kļūda" @@ -2985,7 +3003,7 @@ msgid "Interpolation:" msgstr "Interpolācija:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linēārā" @@ -3070,7 +3088,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF konfigurācija" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorēt ilgumu no faila" @@ -3756,7 +3774,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Servisi" @@ -3773,7 +3791,7 @@ msgstr "Iziet" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Dziesmas info ..." @@ -3793,7 +3811,7 @@ msgid "Clear A-B Repeat" msgstr "Atstatīt A-B atkārtošanu" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Pāriet uz dziesmu ..." @@ -3886,20 +3904,20 @@ msgstr "Pievienot failus ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Pēc dziesmas nosaukuma" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Pēc faila nosaukuma" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Pēc faila ceļa" @@ -3927,104 +3945,104 @@ msgid "Remove Selected" msgstr "Novākt iezīmētos" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Meklēt un iezīmēt" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertēt iezīmētos" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Novākt/notīrīt iezīmējumu" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Iezīmēt visus" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Pēc celiņa numura" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Pēc izpildītāja" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Pēc albuma" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Pēc albuma izpildītāja" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Pēc izlaišanas datuma" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Pēc žanra" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Pēc ilguma" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Pēc pielāgotā nosaukuma" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Pēc komentāra" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Sajaukt (nejaušībot) repertuāru" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Reversot repertuāru" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Kārtot iezīmētos" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Kārtot repertuāru" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Atvērt saturošo mapi" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Izgriezt" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopēt" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Ievietot" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Ievietot beigās" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Ierindot/Izņemt no rindas" @@ -4033,7 +4051,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d of %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious repertuāra redaktors" @@ -4049,167 +4067,218 @@ msgid "Add Folder ..." msgstr "Pievienot mapi ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Meklēt ierakstus aktīvajā repertuārā" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Iezīmējiet ierakstus repertuārā, aizpildot vienu vai vairākus laukus. Laukos " +"jāizmanto regulāro izteiksmju sintakse, reģistrnejutīga. Ja neziniet, kā " +"regulārās izteiksmes darbojas, vienkārši nosaukuma daļu tam, ko meklējat." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Nosaukums:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Albums: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Izpildītājs: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Faila nosaukums:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Notīrīt iepriekšējo iezīmējumu pirms meklēšanas" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Automātiski pārslēgt rindošanu atbilstošajiem ierakstiem" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Izveidot jaunu repertuāru no atlasei atbilstošajiem ierakstiem" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Meklēt" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Atskaņotājs:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Izvēlieties galvenā atskaņotāja loga fontu:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Repertuārs:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Izvēlieties repertuāra šriftu:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Apdare/ādiņa" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Šrifti" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Lietot bitmap šriftus (atbalsta tikai ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Ritināt dziesmas nosaukumu" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Ritināt dziesmas nosaukumu abos virzienos" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizators" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Loks/vēriens/sfēra" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Balss vizualizēšana / VU mērnieks" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Izslēgts" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normāls" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Uguns" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vertikālas līnijas" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Līnijas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Stabiņi" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Vislēnāk" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lēni" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Vidēji" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Ātri" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Visātrāk" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punkti" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Līnijas" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Aizpildīts" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ledus" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Gluds" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Krāsa:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stils:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Krišana:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Virsotņu krišana:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Loka/vēriena/sfēras stils:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Balss vizualizācijas krāsa:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU mērnieka stils:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tips" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Vizualizācijas tips:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizators" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Rādīt virsotnes" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizēšana" @@ -4221,58 +4290,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Atarhivēta Winamp 2.x ādiņa" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Meklēt ierakstus aktīvajā repertuārā" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Meklēt" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Iezīmējiet ierakstus repertuārā, aizpildot vienu vai vairākus laukus. Laukos " -"jāizmanto regulāro izteiksmju sintakse, reģistrnejutīga. Ja neziniet, kā " -"regulārās izteiksmes darbojas, vienkārši nosaukuma daļu tam, ko meklējat." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Nosaukums:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Albums: " - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Izpildītājs: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Faila nosaukums:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Notīrīt iepriekšējo iezīmējumu pirms meklēšanas" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Automātiski pārslēgt rindošanu atbilstošajiem ierakstiem" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Izveidot jaunu repertuāru no atlasei atbilstošajiem ierakstiem" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile spraudnis" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4752,14 +4774,27 @@ "frekvence3;...\n" "piem., tone://2000;2005, lai atskaņotu 2000 Hz tonu un 2005 Hz toni" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Turpmākie ziņojumi tika paslēpti.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Darbojas ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informācija" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Balss notušēšana/noņemšana" @@ -4916,14 +4951,38 @@ "\n" "Daļai koda autors ir Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF dekodētājs" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF konfigurācija" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML kopīgojamie repertuāri (XSPF)" diff -Nru audacious-plugins-4.1/po/Makefile audacious-plugins-4.2/po/Makefile --- audacious-plugins-4.1/po/Makefile 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/Makefile 2022-07-10 01:12:34.000000000 +0000 @@ -7,7 +7,8 @@ # have been introduced, and then continue with 'make update-po' or # 'make update-pot' respectively. # -LOCALES = ar.po \ +LOCALES = af.po \ + ar.po \ be.po \ bg.po \ ca.po \ @@ -21,6 +22,8 @@ es_MX.po \ es.po \ et.po \ + eu.po \ + fa_IR.po \ fi.po \ fr.po \ gl.po \ @@ -48,6 +51,7 @@ ta.po \ tr.po \ uk.po \ + uz.po \ zh_CN.po \ zh_TW.po diff -Nru audacious-plugins-4.1/po/meson.build audacious-plugins-4.2/po/meson.build --- audacious-plugins-4.1/po/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -9,7 +9,7 @@ '--keyword=N_', '--from-code=UTF-8', '--msgid-bugs-address="https://redmine.audacious-media-player.org/"', - '--directory=%0%'.format(meson.source_root()), + '--directory=%0%'.format(meson.current_source_dir()), '--files-from=POTFILES.in' ] ) diff -Nru audacious-plugins-4.1/po/ml_IN.po audacious-plugins-4.2/po/ml_IN.po --- audacious-plugins-4.1/po/ml_IN.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ml_IN.po 2022-07-10 01:12:34.000000000 +0000 @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: ST Alfas, 2014\n" "Language-Team: Malayalam (India) (http://www.transifex.com/audacious/" "audacious/language/ml_IN/)\n" "Language: ml_IN\n" @@ -31,7 +31,7 @@ msgstr "AdPlug (AdLib പ്ലേയര്‍)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "സീക്വന്‍സ്ഡ്" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "പലവക" @@ -398,6 +398,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -473,6 +474,7 @@ msgstr "* ഈ MIDI ഫയലില്‍ നിലവിലുള്ള വരികള്‍ ഒന്നുമില്ല *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_അടയ്ക്കുക" @@ -520,7 +522,7 @@ msgid "Concave Rectangle" msgstr "അവതലചതുരം" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "ശൂന്യം" @@ -650,8 +652,8 @@ "manager otherwise the OSD won't work properly" msgstr "" "കമ്പോസിറ്റ് മാനേജര്‍ ശ്രദ്ധയില്‍ പെട്ടിട്ടില്ല;\n" -"മറ്റൊന്ന് പ്രവര്‍ത്തിക്കുന്നത് നിങ്ങള്‍ക്കറിയാമെങ്കില്‍, ദയവ് ചെയ്ത് ഒരു കമ്പോസിറ്റ് മാനേജര്‍ പ്രാവര്‍" -"ത്തികമാക്കുക അല്ലെങ്കില്‍ OSD പ്രവര്‍ത്തിച്ചില്ലെന്ന് വരാം" +"മറ്റൊന്ന് പ്രവര്‍ത്തിക്കുന്നത് നിങ്ങള്‍ക്കറിയാമെങ്കില്‍, ദയവ് ചെയ്ത് ഒരു കമ്പോസിറ്റ് മാനേജര്‍ " +"പ്രാവര്‍ത്തികമാക്കുക അല്ലെങ്കില്‍ OSD പ്രവര്‍ത്തിച്ചില്ലെന്ന് വരാം" #: src/aosd/aosd_ui.cc:668 msgid "Composite manager not required for fake transparency" @@ -718,6 +720,22 @@ msgid "Audacious Playlists (audpl)" msgstr "" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "നിറം" @@ -1079,7 +1097,7 @@ msgstr "നീക്കം ചെയ്യുക" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "റദ്ദാക്കുക" @@ -1113,7 +1131,7 @@ msgstr "താമസം:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1133,7 +1151,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg പ്ലഗ്ഗിന്‍" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1235,76 +1253,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1429,7 +1447,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "പൊതുവായവ" @@ -1438,11 +1456,11 @@ msgid "FLAC Decoder" msgstr "FLAC ഡീകോഡര്‍" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "ലോസ്‌ലെസ്സ്" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2088,8 +2106,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2434,7 +2452,7 @@ msgid "Looking for lyrics ..." msgstr "വരികള്‍ക്കായി നോക്കുന്നു ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "പിശക്" @@ -2767,7 +2785,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2847,7 +2865,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3465,7 +3483,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "" @@ -3482,7 +3500,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3502,7 +3520,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3595,20 +3613,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "ടൈറ്റിലിനനുസരിച്ച്" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3636,104 +3654,104 @@ msgid "Remove Selected" msgstr "തിരഞ്ഞെടുത്തവ നീക്കംചെയ്യുക" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "തിരയുക, തിരഞ്ഞെടുക്കുക" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "തിരഞ്ഞെടുപ്പ് ഇന്‍വേര്‍ട്ട് ചെയ്യുക" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "ഒന്നും തിരഞ്ഞെടുക്കേണ്ട" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "എ​ല്ലാം തിരഞ്ഞെടുക്കുക" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "ട്രാക്ക് നമ്പര്‍ അനുസരിച്ച്" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "ആര്‍ട്ടസ്റ്റിനനുസരിച്ച്" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "ആല്‍ബമനുസരിച്ച്" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "ലിസ്റ്റ് ക്രമമില്ലാതെയാക്കുക" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "പട്ടിക തലതിരിയ്ക്കുക" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "തിരഞ്ഞെടുത്തവ ക്രമീകരിയ്ക്കുക" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "പട്ടിക അക്ഷരമാലാക്രമത്തിലാക്കുക" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "മുറിയ്ക്കുക" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "പകര്‍ത്തുക" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "ഒട്ടിയ്ക്കുക" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3742,7 +3760,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d / %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "ഒഡാഷ്യസ് പ്ലേലിസ്റ്റ് എഡിറ്റര്‍" @@ -3758,167 +3776,215 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "സജീവമായ പ്ലേലിസ്റ്റിലെ എന്‍ട്രികള്‍ തിരയുക" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "തിരയുന്നതിനുമുമ്പ് മുമ്പുള്ള തിരഞ്ഞെടുപ്പ് വെടിപ്പാക്കുക" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "യോജിയ്ക്കുന്ന എന്‍ട്രികള്‍ ഉപയോഗിച്ച് പുതിയൊരു പ്ലേലിസ്റ്റ് ഉണ്ടാക്കുക" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "പ്രധാനപ്പെട്ട പ്ലെയര്‍ വിന്‍ഡോയുടെ ഫോണ്ട് തെരെഞ്ഞെടുക്കുക:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "പ്ലേലിസ്റ്റ് ഫോണ്ട് തെരെഞ്ഞെടുക്കുക:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "ബിറ്റ്മാപ് ഫോണ്ടുകള്‍ ഉപയോഗിക്കാം (ASCII മാത്രം പിന്‍തുണയ്ക്കും)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "രണ്ട് ദിശകളിലും പാട്ടിന്റെ ശീര്‍ഷകം സ്‌ക്രോള്‍ ചെയ്യുക" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "അനലൈസര്‍" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "സ്കോപ്പ്" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "ഓഫ്" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "സാധാരണം" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "തീ" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "വരകള്‍" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "നാടകള്‍" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "വളരെപ്പതുക്കെ" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "പതുക്കെ" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "പാകം" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "വേഗം" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "അതിദ്രുതം" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "ഐസ്" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "മൃദുലം" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "ദൃശ്യവത്കരണം" @@ -3930,55 +3996,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "ശേഖരിക്കാത്ത വിനാമ്പ് 2.x രൂപം" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "സജീവമായ പ്ലേലിസ്റ്റിലെ എന്‍ട്രികള്‍ തിരയുക" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "തിരയുന്നതിനുമുമ്പ് മുമ്പുള്ള തിരഞ്ഞെടുപ്പ് വെടിപ്പാക്കുക" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "യോജിയ്ക്കുന്ന എന്‍ട്രികള്‍ ഉപയോഗിച്ച് പുതിയൊരു പ്ലേലിസ്റ്റ് ഉണ്ടാക്കുക" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile പ്ലഗ്ഗിന്‍" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4397,14 +4419,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(തുടര്‍ന്നുള്ള സന്ദേശങ്ങള്‍ മറച്ചുവച്ചിരിയ്ക്കുന്നു.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "വോയ്സ് റിമൂവല്‍" @@ -4524,14 +4559,38 @@ "Some of the plugin code was by Miles Egan." msgstr "" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF ഡീകോഡര്‍" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "" diff -Nru audacious-plugins-4.1/po/ms.po audacious-plugins-4.2/po/ms.po --- audacious-plugins-4.1/po/ms.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ms.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,15 +3,15 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# abuyop , 2014-2018 +# abuyop , 2014-2018,2021 # Mick The KN , 2012 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: abuyop , 2014-2018,2021\n" "Language-Team: Malay (http://www.transifex.com/audacious/audacious/language/" "ms/)\n" "Language: ms\n" @@ -29,7 +29,7 @@ msgstr "AdPlug (Pemain AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "berjujukan" @@ -39,7 +39,7 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "Emulator OPL:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" @@ -59,7 +59,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Pelbagai" @@ -471,6 +471,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Kadar sampel:" @@ -546,6 +547,7 @@ msgstr "* tiada lirik didapati dalam fail MIDI ini *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "T_utup" @@ -605,7 +607,7 @@ msgid "Concave Rectangle" msgstr "Cekung Segiempat Tepat" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Tiada" @@ -803,6 +805,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Senarai Main Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Warna" @@ -1192,7 +1210,7 @@ msgstr "Padam" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Batal" @@ -1230,7 +1248,7 @@ msgstr "Lengah:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1250,7 +1268,7 @@ msgid "FFmpeg Plugin" msgstr "Pemalam FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1373,77 +1391,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1567,7 +1585,7 @@ msgid "Quality (0-1):" msgstr "Kualiti (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Am" @@ -1576,11 +1594,11 @@ msgid "FLAC Decoder" msgstr "Penyahkod FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "tak hilang" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1810,12 +1828,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "Album Terdahulu" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "Album Berikutnya" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -2024,7 +2042,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Tunjuk Seni _Album Palang Maklumat" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2216,7 +2234,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menu" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2239,8 +2257,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2268,11 +2286,11 @@ #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "Langkah maju" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "Langkah undur" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2374,6 +2392,17 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Pemalam Kekunci Panas Sejagat\n" +"Kawal pemain dengan gabungan kekunci sejagat atau kekunci multimedia.\n" +"\n" +"Hak cipta (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Penyumbang terlibat:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2381,7 +2410,7 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "Nama klien:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" @@ -2393,11 +2422,11 @@ #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "Sambung ke port fizikal sahaja" #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Upmix ke" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" @@ -2405,7 +2434,7 @@ #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "Abai bilangan port yang tidak mencukupi" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." @@ -2540,7 +2569,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "Lirik" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" @@ -2548,7 +2577,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lyrics.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" @@ -2556,7 +2585,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Aksara dipangkas pada:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" @@ -2564,7 +2593,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Aksara diasing pada:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" @@ -2572,7 +2601,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Am" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" @@ -2580,23 +2609,23 @@ #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" -msgstr "" +msgstr "Sumber Internet" #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "" +msgstr "Dapatkan lirik daripada:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" -msgstr "" +msgstr "Simpan lirik yang diperoleh dalam cache setempat" #: src/lyricwiki-qt/lyricwiki.cc:144 msgid "Local Storage" -msgstr "" +msgstr "Storan Setempat" #: src/lyricwiki-qt/lyricwiki.cc:145 msgid "Load lyric files (.lrc) from local storage" -msgstr "" +msgstr "Muat fail lirik (.lrc) dari storan setempat" #: src/lyricwiki-qt/lyricwiki.cc:356 #, c-format @@ -2612,25 +2641,25 @@ msgid "Looking for lyrics ..." msgstr "Mencari lirik ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Ralat" #: src/lyricwiki-qt/lyricwiki.cc:433 msgid "Lyrics could not be found." -msgstr "" +msgstr "Lirik tidak ditemui." #: src/lyricwiki-qt/lyricwiki.cc:501 msgid "Missing title and/or artist." -msgstr "" +msgstr "Tajuk dan/atau artis hilang." #: src/lyricwiki-qt/lyricwiki.cc:553 msgid "Save Locally" -msgstr "" +msgstr "Simpan secara Setempat" #: src/lyricwiki-qt/lyricwiki.cc:561 msgid "Refresh" -msgstr "" +msgstr "Segar Semula" #: src/m3u/m3u.cc:32 msgid "M3U Playlists" @@ -2797,7 +2826,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2939,7 +2968,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Tempoh pemberitahuan suai:" #: src/notify/osd.cc:74 msgid "Show" @@ -2947,7 +2976,7 @@ #: src/openmpt/mpt.cc:50 msgid "OpenMPT (Module Player)" -msgstr "" +msgstr "OpenMPT (Pemain Module)" #: src/openmpt/mpt.cc:133 msgid "" @@ -2966,15 +2995,15 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "" +msgstr "Interpolasi:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linear" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "Kuib" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" @@ -3053,7 +3082,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Abai panjang dari fail" @@ -3063,11 +3092,11 @@ #: src/pulse/pulse_audio.cc:72 msgid "Context name:" -msgstr "" +msgstr "Nama konteks:" #: src/pulse/pulse_audio.cc:74 msgid "Stream name:" -msgstr "" +msgstr "Nama stream:" #: src/pulse/pulse_audio.cc:575 msgid "" @@ -3175,11 +3204,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3191,23 +3220,23 @@ #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "Sentiasa" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "Auto-sembunyi" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "Tidak Sesekali" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "Tunjuk tab senarai main:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Guna fon tebal untuk pengepala lajur" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3424,7 +3453,7 @@ #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "" +msgstr "Pantau pustaka jika ada perubahan" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" @@ -3709,7 +3738,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Perkhidmatan" @@ -3726,7 +3755,7 @@ msgstr "Keluar" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Maklumat Lagu ..." @@ -3746,7 +3775,7 @@ msgid "Clear A-B Repeat" msgstr "Kosongkan Ulang A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Lompat ke Lagu ..." @@ -3839,20 +3868,20 @@ msgstr "Tambah Fail ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Mengikut Tajuk" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Mengikut Nama Fail" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Mengikut Laluan Fail" @@ -3880,104 +3909,104 @@ msgid "Remove Selected" msgstr "Buang Terpilih" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Gelintar dan Pilih" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Songsangkan Pemilihan" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Pilih Tiada" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Pilih Semua" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Mengikut Nombor Trek" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Mengikut Artis" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Mengikut Album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Mengikut Album Artis" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Mengikut Tarikh Keluaran" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Mengikut Genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Mengikut Panjang" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Mengikut Tajuk Suai" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Mengikut Ulasan" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Rawakkan Senarai" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Songsangkan Senarai" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Isih Terpilih" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Isih Senarai" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Buka Folder Dikandungi" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Potong" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Salin" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Tampal" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Tampal di Penghujung" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Baris Gilir/Nyahbaris Gilir" @@ -3986,7 +4015,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d dar %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Penyunting Senarai Main Audacious" @@ -4002,167 +4031,219 @@ msgid "Add Folder ..." msgstr "Tambah Folder ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Gelintar masukan dalam senarai main aktif" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Pilih masukan dalam senarai main dengan mengisi satu atau lebih medan. Medan " +"guna sintaks ungkapan nalar, tidak-sensitif-kata. Jika anda tidak tahu " +"bagaimana ungkapan nalar berfungsi, hanya masukkan bahagian harfiah apa yang " +"anda gelintar." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Tajuk:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artis:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nama Fail:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Kosongkan pemilihan terdahulu sebelum menggelintar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Togol baris gilir secara automatik untuk pemadanan masukan" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Cipta senarai main baharu dengan masukan sepadan" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Gelintar" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Pemain:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Pilih fon tetingkap pemain utama:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Senarai Main:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Pilih fon senarai main:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Kulit" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Fon" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Guna fon peta bit (sokong ASCII sahaja)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Tatal tajuk lagu" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Tatal tajuk lagu dalam kedua-dua arah" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Penganalisis" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Skop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Voiceprint / VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Mati" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Biasa" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Api" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Garis menegak" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Garis" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Palang" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Paling lambat" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lambat" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Sederhana" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Pantas" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Paling pantas" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Titik" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Garis" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Tegar" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ais" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Licin" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Pewarnaan:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Gaya:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Jatuhan:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Jatuhan puncak:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Gaya Skop:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Pewarnaan Voiceprint:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Gaya Meter VU:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Jenis" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Jenis pengvisualan:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Penganalisis" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Tunjuk puncak" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Pengvisualan" @@ -4174,59 +4255,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Kulit Winamp 2.x tidak berarkib" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Gelintar masukan dalam senarai main aktif" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Gelintar" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Pilih masukan dalam senarai main dengan mengisi satu atau lebih medan. Medan " -"guna sintaks ungkapan nalar, tidak-sensitif-kata. Jika anda tidak tahu " -"bagaimana ungkapan nalar berfungsi, hanya masukkan bahagian harfiah apa yang " -"anda gelintar." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Tajuk:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artis:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nama Fail:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Kosongkan pemilihan terdahulu sebelum menggelintar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Togol baris gilir secara automatik untuk pemadanan masukan" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Cipta senarai main baharu dengan masukan sepadan" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Pemalam Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4544,15 +4577,15 @@ #: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 msgid "Type" -msgstr "" +msgstr "Jenis" #: src/streamtuner/icecast-model.cc:132 msgid "Current Song" -msgstr "" +msgstr "Lagu Semasa" #: src/streamtuner/icecast-model.cc:164 msgid "Other" -msgstr "" +msgstr "Lain-lain" #: src/streamtuner/ihr-model.cc:63 msgid "Market" @@ -4564,19 +4597,19 @@ #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "Keterangan" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" -msgstr "" +msgstr "Pendengar" #: src/streamtuner/shoutcast-model.cc:188 msgid "Top 500 Stations" -msgstr "" +msgstr "500 Stesen Teratas" #: src/streamtuner/shoutcast-model.cc:189 msgid "Alternative" -msgstr "" +msgstr "Alternatif" #: src/streamtuner/shoutcast-model.cc:190 msgid "Blues" @@ -4592,7 +4625,7 @@ #: src/streamtuner/shoutcast-model.cc:193 msgid "Decades" -msgstr "" +msgstr "Dekad" #: src/streamtuner/shoutcast-model.cc:194 msgid "Easy Listening" @@ -4600,7 +4633,7 @@ #: src/streamtuner/shoutcast-model.cc:195 msgid "Electronic" -msgstr "" +msgstr "Elektronik" #: src/streamtuner/shoutcast-model.cc:196 msgid "Folk" @@ -4608,11 +4641,11 @@ #: src/streamtuner/shoutcast-model.cc:197 msgid "Inspirational" -msgstr "" +msgstr "Inspirasi" #: src/streamtuner/shoutcast-model.cc:198 msgid "International" -msgstr "" +msgstr "Antara Bangsa" #: src/streamtuner/shoutcast-model.cc:199 msgid "Jazz" @@ -4620,7 +4653,7 @@ #: src/streamtuner/shoutcast-model.cc:200 msgid "Latin" -msgstr "" +msgstr "Latin" #: src/streamtuner/shoutcast-model.cc:201 msgid "Metal" @@ -4636,11 +4669,11 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "" +msgstr "Radio Awam" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B dan Urban" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4656,27 +4689,27 @@ #: src/streamtuner/shoutcast-model.cc:210 msgid "Seasonal and Holiday" -msgstr "" +msgstr "Bermusim dan Perayaan" #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "Runut Bunyi" #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "Bicara" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" -msgstr "" +msgstr "Tema" #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "Shoutcast" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "Icecast" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" @@ -4709,14 +4742,27 @@ "Untuk guna ia, tambah URL: tone://frequency1;frequency2;frequency3;...\n" "cth. tone://2000;2005 untuk mainkan nada 2000 Hz dan nada 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Mesej lanjut telah disembunyi.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Berfungsi ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Maklumat" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Pembuangan Suara" @@ -4872,14 +4918,38 @@ "\n" "Sebahagian kod pemalam oleh Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Penyahkod 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Konfigurasi XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Senarai Main Boleh Kongsi XML (XSPF)" diff -Nru audacious-plugins-4.1/po/nl.po audacious-plugins-4.2/po/nl.po --- audacious-plugins-4.1/po/nl.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/nl.po 2022-07-10 01:12:34.000000000 +0000 @@ -8,15 +8,16 @@ # dragnadh, 2015,2017 # Farioko , 2014 # Freek1A , 2012 -# Heimen Stoffels , 2018,2020 +# Heimen Stoffels , 2022 +# Heimen Stoffels , 2018,2020 # shured , 2014 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-21 11:30+0000\n" -"Last-Translator: Heimen Stoffels \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Heimen Stoffels , 2022\n" "Language-Team: Dutch (http://www.transifex.com/audacious/audacious/language/" "nl/)\n" "Language: nl\n" @@ -27,14 +28,14 @@ #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" -msgstr "AAC (Raw) Decoder" +msgstr "AAC (Raw)-decodering" #: src/adplug/adplug-xmms.cc:70 msgid "AdPlug (AdLib Player)" -msgstr "AdPlug (AdLib Player)" +msgstr "AdPlug (AdLib-speler)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "stapsgewijs" @@ -64,7 +65,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Overig" @@ -78,7 +79,7 @@ #: src/alarm/alarm.cc:782 msgid "Set Alarm ..." -msgstr "Alarm instellen..." +msgstr "Alarm instellen…" #: src/alarm/alarm.cc:810 msgid "" @@ -156,7 +157,7 @@ "\n" " Tijd:\n" " Kies de tijd waarop het alarm op elke dag moet aangaan,\n" -" of selecteer de aan/uit knop om de standaard tijd te \n" +" of selecteer de aan-/uitknop om de standaardtijd te \n" " selecteren.\n" "\n" "\n" @@ -170,7 +171,7 @@ "\n" " Laatste:\n" " Het volume laten stoppen bij. Als de tijd voor \n" -" vervagen 0 is zet dan het volume naar dit en\n" +" vervagen 0 is, zet dan het volume naar dit en\n" " start het afspelen.\n" "\n" "Opties:\n" @@ -179,9 +180,9 @@ "\n" " Afspeellijst:\n" " Laad deze afspeellijst. Als geen afspeellijst is\n" -" opgegeven dan zullen de tracks die op dit moment\n" -" in de lijst staan gebruikt worden.\n" -" Het URL van een mp3/ogg stream kan ook hier \n" +" opgegeven, dan zullen de nummers die op dat moment\n" +" op de lijst staan gebruikt worden.\n" +" De url van een mp3-/ogg-stream kan ook hier \n" " ingevoerd worden\n" "\n" " Herinnering:\n" @@ -195,7 +196,7 @@ #: src/alarm/interface.cc:96 msgid "Your reminder for today is..." -msgstr "Je herinnering voor vandaag is..." +msgstr "Je herinnering voor vandaag is…" #: src/alarm/interface.cc:98 src/alarm/interface.cc:372 msgid "Reminder" @@ -405,7 +406,7 @@ "\n" "Gemaakt door Giacomo Lozito\n" "\n" -"Met speciale dank aan...\n" +"Met speciale dank aan…\n" "\n" "Clemens Ladisch en Jaroslav Kysela\n" "Voor hun coole programma's aplaymidi en amixer; \n" @@ -476,6 +477,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Sample-rate:" @@ -551,6 +553,7 @@ msgstr "* geen songtekst beschikbaar in dit MIDI-bestand *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Sluiten" @@ -610,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Vierkant met bolle hoeken" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Geen" @@ -808,6 +811,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious-afspeellijsten (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitvertraging" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Bitdiepte:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Downsample-verhouding:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitvertraging" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Kleur" @@ -842,7 +861,7 @@ #: src/cdaudio/cdaudio-ng.cc:71 msgid "Audio CD Plugin" -msgstr "Audio-CD-plug-in" +msgstr "Audio-cd-plug-in" #: src/cdaudio/cdaudio-ng.cc:118 msgid "" @@ -908,7 +927,7 @@ #: src/cdaudio/cdaudio-ng.cc:250 #, c-format msgid "Invalid URI %s." -msgstr "Ongeldige URI %s." +msgstr "Ongeldige uri: %s." #: src/cdaudio/cdaudio-ng.cc:252 #, c-format @@ -922,20 +941,20 @@ #: src/cdaudio/cdaudio-ng.cc:329 msgid "Error reading audio CD." -msgstr "Fout bij lezen van Audio-CD" +msgstr "De audio-cd kan niet worden uitgelezen" #: src/cdaudio/cdaudio-ng.cc:398 msgid "Audio CD" -msgstr "Audio-CD" +msgstr "Audio-cd" #: src/cdaudio/cdaudio-ng.cc:435 src/cdaudio/cdaudio-ng.cc:444 #, c-format msgid "Failed to open CD device %s." -msgstr "Het openen van het CD-apparaat '%s' is mislukt." +msgstr "Het openen van het cd-apparaat ‘%s’ is mislukt." #: src/cdaudio/cdaudio-ng.cc:447 msgid "No audio capable CD drive found." -msgstr "Geen CD-speler met audiomogelijkheid aangetroffen." +msgstr "Geen cd-speler met audiomogelijkheid aangetroffen." #: src/cdaudio/cdaudio-ng.cc:470 msgid "Drive is empty." @@ -947,7 +966,7 @@ #: src/cdaudio/cdaudio-ng.cc:496 msgid "Failed to finish initializing opened CD drive." -msgstr "Het initialiseren van de geopende CD-schijf is mislukt." +msgstr "Het initialiseren van de geopende cd-schijf is mislukt." #: src/cdaudio/cdaudio-ng.cc:509 msgid "Failed to retrieve first/last track number." @@ -956,7 +975,7 @@ #: src/cdaudio/cdaudio-ng.cc:530 #, c-format msgid "Cannot read start/end LSN for track %d." -msgstr "Kan begin-/eind-LSN van het nummer '%d' niet lezen." +msgstr "Kan begin-/eind-LSN van het nummer ‘%d’ niet uitlezen." #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." @@ -978,7 +997,7 @@ #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" -msgstr "Audio-CD - menu-items" +msgstr "Audio-cd - menu-items" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" @@ -1196,7 +1215,7 @@ msgstr "Verwijderen" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Annuleren" @@ -1234,7 +1253,7 @@ msgstr "Vertraging:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1254,7 +1273,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg-plug-in" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1379,77 +1398,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1573,7 +1592,7 @@ msgid "Quality (0-1):" msgstr "Kwaliteit (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Algemeen" @@ -1582,11 +1601,11 @@ msgid "FLAC Decoder" msgstr "FLAC-decoder" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "lossless" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1755,19 +1774,19 @@ #: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 #: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 msgid "_Open Files ..." -msgstr "Bestanden _openen..." +msgstr "Bestanden _openen…" #: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 msgid "Open _URL ..." -msgstr "_URL openen..." +msgstr "_URL openen…" #: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 msgid "_Add Files ..." -msgstr "Best_anden toevoegen..." +msgstr "Best_anden toevoegen…" #: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 msgid "Add U_RL ..." -msgstr "U_RL toevoegen..." +msgstr "U_RL toevoegen…" #: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 msgid "Search _Library" @@ -1775,11 +1794,11 @@ #: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 msgid "A_bout ..." -msgstr "O_ver..." +msgstr "O_ver…" #: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 msgid "_Settings ..." -msgstr "In_stellingen..." +msgstr "In_stellingen…" #: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 #: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 @@ -1847,15 +1866,15 @@ #: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 #: src/qtui/menus.cc:292 msgid "Song _Info ..." -msgstr "Nummer_informatie..." +msgstr "Nummer_informatie…" #: src/gtkui/menus.cc:107 msgid "Jump to _Time ..." -msgstr "Spoelen naar _tijd..." +msgstr "Spoelen naar _tijd…" #: src/gtkui/menus.cc:108 msgid "_Jump to Song ..." -msgstr "_Spoelen naar nummer..." +msgstr "_Spoelen naar nummer…" #: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 msgid "Set Repeat Point _A" @@ -1973,7 +1992,7 @@ #: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 msgid "Ren_ame ..." -msgstr "_Naam wijzigen..." +msgstr "_Naam wijzigen…" #: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 #: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 @@ -1983,19 +2002,19 @@ #: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 msgid "_Import ..." -msgstr "_Importeren..." +msgstr "_Importeren…" #: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 msgid "_Export ..." -msgstr "_Exporteren..." +msgstr "_Exporteren…" #: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 msgid "Playlist _Manager ..." -msgstr "Afspeellijst_beheer..." +msgstr "Afspeellijst_beheer…" #: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 msgid "_Queue Manager ..." -msgstr "_Wachtrijbeheer..." +msgstr "_Wachtrijbeheer…" #: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 msgid "Volume _Up" @@ -2007,11 +2026,11 @@ #: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 msgid "_Equalizer ..." -msgstr "_Equalizer..." +msgstr "_Equalizer…" #: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 msgid "E_ffects ..." -msgstr "E_ffecten..." +msgstr "E_ffecten…" #: src/gtkui/menus.cc:182 msgid "_Record Stream" @@ -2019,7 +2038,7 @@ #: src/gtkui/menus.cc:183 msgid "Audio _Settings ..." -msgstr "Audio-in_stellingen..." +msgstr "Audio-in_stellingen…" #: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 msgid "Show _Menu Bar" @@ -2048,7 +2067,7 @@ #: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 #: src/skins-qt/menus.cc:152 msgid "_Visualizations ..." -msgstr "_Visualisaties..." +msgstr "_Visualisaties…" #: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 msgid "_File" @@ -2110,7 +2129,7 @@ #: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 #: src/qtui/playlist_tabs.cc:331 msgid "_Rename ..." -msgstr "_Naam wijzigen..." +msgstr "_Naam wijzigen…" #: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 msgid "Playlist Tabs" @@ -2152,7 +2171,7 @@ #: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 #: src/qtui/main_window.cc:384 msgid "Buffering ..." -msgstr "Bezig met bufferen..." +msgstr "Bezig met bufferen…" #: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 msgid "Audacious" @@ -2247,8 +2266,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2632,9 +2651,9 @@ #: src/lyricwiki-qt/lyricwiki.cc:403 msgid "Looking for lyrics ..." -msgstr "Bezig met zoeken naar songteksten..." +msgstr "Bezig met zoeken naar songteksten…" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Fout" @@ -2682,7 +2701,7 @@ msgstr "" "Een Tactgenerator door Martin Strauss \n" "\n" -"Om het te gebruiken, voeg een URL toe: tact://beats*num/den\n" +"Voeg een url toe om te gebruiken: tact://beats*num/den\n" "bijv. tact://77 om 77 beats per minuut (bpm) af te spelen\n" "of tact://60*3/4 om 60 bpm af te spelen in 3/4 tacts" @@ -2894,7 +2913,7 @@ #: src/neon/neon.cc:590 msgid "Error parsing URL" -msgstr "Fout bij verwerken van URL" +msgstr "De url kan niet worden verwerkt" #: src/neon/neon.cc:660 msgid "Too many redirects" @@ -2995,7 +3014,7 @@ msgid "Interpolation:" msgstr "Interpolatie:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Lineair" @@ -3050,8 +3069,8 @@ "OSS4-uitvoerplug-in voor Audacious\n" "Auteursrecht 2010-2012 Michał Lipski\n" "\n" -"Ik wil graag de mensen op #audacious bedanken. Speciaal Tony Vroon en John " -"Lindgren en natuurlijk de auteurs van de vorige OSS-plug-in." +"Ik wil graag de mensen op #audacious bedanken, in het bijzonder Tony Vroon " +"en John Lindgren en natuurlijk de auteurs van de vorige OSS-plug-in." #: src/playlist-manager/playlist-manager.cc:37 #: src/playlist-manager-qt/playlist-manager-qt.cc:40 @@ -3080,7 +3099,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF-instellingen" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Duur negeren volgens bestand" @@ -3205,23 +3224,23 @@ #: src/qtui/menus.cc:109 msgid "_Open Folder ..." -msgstr "Map _openen..." +msgstr "Map _openen…" #: src/qtui/menus.cc:115 msgid "_Add Folder ..." -msgstr "M_ap toevoegen..." +msgstr "M_ap toevoegen…" #: src/qtui/menus.cc:128 msgid "_Log Inspector ..." -msgstr "_Logboekinspectie..." +msgstr "_Logboekinspectie…" #: src/qtui/menus.cc:218 msgid "_Find ..." -msgstr "_Zoeken..." +msgstr "_Zoeken…" #: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 msgid "Audio Settings ..." -msgstr "Audio-instellingen..." +msgstr "Audio-instellingen…" #: src/qtui/playlist_model.cc:186 msgid "Q#" @@ -3353,7 +3372,7 @@ #: src/scrobbler2/config_window.cc:19 msgid "Checking Last.fm access ..." -msgstr "Bezig met controleren op Last.fm-toegang..." +msgstr "Bezig met controleren op Last.fm-toegang…" #: src/scrobbler2/config_window.cc:27 msgid "" @@ -3366,15 +3385,15 @@ #: src/scrobbler2/config_window.cc:33 #, c-format msgid "Permission granted. Scrobbling for user %s." -msgstr "Machtiging afgegeven; scrobbling voor gebruiker %s." +msgstr "Machtiging verleend; scrobbling voor gebruiker %s." #: src/scrobbler2/config_window.cc:37 msgid "" "Permission denied. Open the following URL in a browser, allow Audacious " "access to your account, and then click 'Check Permission' again:" msgstr "" -"Geen machtiging. Open de volgende URL in een browser, geef Audacious toegang " -"tot je account en klik vervolgens opnieuw op 'Machtiging controleren':" +"Niet bevoegd. Open de volgende url in een browser, geef Audacious toegang " +"tot je account en klik vervolgens opnieuw op ‘Machtiging controleren’:" #: src/scrobbler2/config_window.cc:47 msgid "There was a problem contacting Last.fm." @@ -3485,11 +3504,11 @@ "the \"refresh\" icon." msgstr "" "Om je muziekbibliotheek in Audacious te importeren, kies je een map en klik " -"je vervolgens op het pictogram 'Vernieuwen'." +"je vervolgens op het pictogram ‘Vernieuwen’." #: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 msgid "Please wait ..." -msgstr "Even geduld..." +msgstr "Even geduld…" #: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 msgid "Choose Folder" @@ -3707,11 +3726,11 @@ #: src/skins/main.cc:879 src/skins-qt/main.cc:820 msgid "Disable 'Always On Top'" -msgstr "'Altijd bovenaan' uitschakelen" +msgstr "‘Altijd bovenaan’ uitschakelen" #: src/skins/main.cc:881 src/skins-qt/main.cc:822 msgid "Enable 'Always On Top'" -msgstr "'Altijd bovenaan' inschakelen" +msgstr "‘Altijd bovenaan’ inschakelen" #: src/skins/main.cc:884 src/skins-qt/main.cc:825 msgid "File Info Box" @@ -3736,15 +3755,15 @@ #: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 msgid "Effects ..." -msgstr "Effecten..." +msgstr "Effecten…" #: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 msgid "Open Files ..." -msgstr "Bestanden openen..." +msgstr "Bestanden openen…" #: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 msgid "Open URL ..." -msgstr "URL openen..." +msgstr "URL openen…" #: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 msgid "Playback" @@ -3764,26 +3783,26 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Diensten" #: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 msgid "About ..." -msgstr "Over..." +msgstr "Over…" #: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 msgid "Settings ..." -msgstr "Instellingen..." +msgstr "Instellingen…" #: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 msgid "Quit" msgstr "Afsluiten" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." -msgstr "Nummerinformatie..." +msgstr "Nummerinformatie…" #: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 msgid "Shuffle by Album" @@ -3801,13 +3820,13 @@ msgid "Clear A-B Repeat" msgstr "A-B-herhaling wissen" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." -msgstr "Spoelen naar nummer..." +msgstr "Spoelen naar nummer…" #: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 msgid "Jump to Time ..." -msgstr "Spoelen naar tijd..." +msgstr "Spoelen naar tijd…" #: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 msgid "Play/Resume" @@ -3819,7 +3838,7 @@ #: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 msgid "Rename Playlist ..." -msgstr "Afspeellijstnaam wijzigen..." +msgstr "Afspeellijstnaam wijzigen…" #: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 msgid "Remove Playlist" @@ -3835,19 +3854,19 @@ #: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 msgid "Import Playlist ..." -msgstr "Afspeellijst importeren..." +msgstr "Afspeellijst importeren…" #: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 msgid "Export Playlist ..." -msgstr "Afspeellijst exporteren..." +msgstr "Afspeellijst exporteren…" #: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 msgid "Playlist Manager ..." -msgstr "Afspeellijstbeheer..." +msgstr "Afspeellijstbeheer…" #: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 msgid "Queue Manager ..." -msgstr "Wachtrijbeheer..." +msgstr "Wachtrijbeheer…" #: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 msgid "Refresh Playlist" @@ -3887,27 +3906,27 @@ #: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 msgid "Add URL ..." -msgstr "URL toevoegen..." +msgstr "URL toevoegen…" #: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 msgid "Add Files ..." -msgstr "Bestanden toevoegen..." +msgstr "Bestanden toevoegen…" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Op titel" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Op bestandsnaam" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Op bestandspad" @@ -3935,104 +3954,104 @@ msgid "Remove Selected" msgstr "Selectie verwijderen" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Zoeken-en-selecteren" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Selectie omkeren" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Niks selecteren" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Alles selecteren" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Op nummer" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Op artiest" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Op album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Op albumartiest" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Op uitgavedatum" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Op genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Op duur" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Op aangepaste titel" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Op commentaar" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Lijst in willekeurige volgorde" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Lijst omkeren" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Selectie sorteren" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Lijst sorteren" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Bijbehorende map openen" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Knippen" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopiëren" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Plakken" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Plakken aan het einde" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "In/Uit wachtrij" @@ -4041,7 +4060,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d van %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious-afspeellijstbewerker" @@ -4051,173 +4070,225 @@ #: src/skins-qt/menus.cc:75 msgid "Open Folder ..." -msgstr "Map openen..." +msgstr "Map openen…" #: src/skins-qt/menus.cc:159 msgid "Add Folder ..." -msgstr "Map toevoegen..." +msgstr "Map toevoegen…" + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Items doorzoeken in actieve afspeellijst" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Selecteer de items in de afspeellijst door één of meerdere velden in te " +"vullen. Deze velden maken gebruik van een regelmatige expressie-syntax, die " +"niet hoofdlettergevoelig zijn. Als je niet weet hoe reguliere expressies " +"werken, voer dan gewoon een letterlijk gedeelte in van wat je zoekt." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titel:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artiest:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Bestandsnaam:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Vorige selectie wissen voordat zoekopdracht start" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Wachtrij automatisch omschakelen voor overeenkomende items" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Nieuwe afspeellijst creëren met overeenkomende items" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Zoeken" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Speler:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Selecteer het hoofdvensterlettertype:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Afspeellijst:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Selecteer het afspeellijstlettertype:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Thema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Actieve titelbalk tonen na focussen van eender welk venster" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Lettertypen" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Bitmap-lettertypen gebruiken (ondersteunt alleen ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Titel scrollen" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Titel in beide richtingen scrollen" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyse" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Omvang" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Stemafdruk / VU-meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Uit" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normaal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Vuur" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Verticale strepen" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Strepen" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Horizontale strepen" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Traagst" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Traag" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Matig" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Snel" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Snelst" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punten" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Streep" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Solide" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "IJs" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Glad" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Verkleuring:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stijl:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Uitvallen:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Hoogtepunt afzwakken:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Omvangstijl:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Stemafdrukverkleuring:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU-meterstijl:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Type" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualisatietype:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analyse" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Pieken tonen" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisatie " @@ -4229,59 +4300,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Niet-gearchiveerd Winamp 2.x-thema" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Items doorzoeken in actieve afspeellijst" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Zoeken" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Selecteer de items in de afspeellijst door één of meerdere velden in te " -"vullen. Deze velden maken gebruik van een regelmatige expressie-syntax, die " -"niet hoofdlettergevoelig zijn. Als je niet weet hoe reguliere expressies " -"werken, voer dan gewoon een letterlijk gedeelte in van wat je zoekt." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titel:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artiest:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Bestandsnaam:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Vorige selectie wissen voordat zoekopdracht start" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Wachtrij automatisch omschakelen voor overeenkomende items" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Nieuwe afspeellijst creëren met overeenkomende items" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile-plug-in" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4558,7 +4581,7 @@ #: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 msgid "Se_ttings ..." -msgstr "Ins_tellingen..." +msgstr "Ins_tellingen…" #: src/statusicon/statusicon.cc:373 msgid "" @@ -4757,21 +4780,33 @@ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -"Sinus toongenerator door Håvard Kvålen \n" +"Sinus-toongenerator door Håvard Kvålen \n" "Aangepast door Daniel J. Peng \n" "\n" -"Om deze te gebruiken, voeg een URL toe: tone://frequency1;frequency2;" -"frequency3;...\n" +"Voeg een url toe om te gebruiken: tone://frequency1;frequency2;frequency3;…\n" "bijv. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Verdere berichten zijn verborgen.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." -msgstr "Bezig met werken..." +msgstr "Bezig met uitvoeren…" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informatie" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s lijkt geen geldige map te zijn." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Stemverwijdering" @@ -4929,14 +4964,38 @@ "\n" "Enkele regels code van de plugin zijn door Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF Decoder" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Scherp" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF Configuratie" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Standaard vervaagtijd::" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolatiemodus:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML deelbare afspeellijsten (XSPF)" diff -Nru audacious-plugins-4.1/po/pl.po audacious-plugins-4.2/po/pl.po --- audacious-plugins-4.1/po/pl.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/pl.po 2022-07-10 01:12:34.000000000 +0000 @@ -13,10 +13,11 @@ # mkkot , 2013 # Marco Oliver Grunwald , 2013 # Marco Oliver Grunwald , 2013 +# Marek Adamski, 2022 # Marco Oliver Grunwald , 2013 # mkkot , 2013-2014 -# No Ne, 2020 -# No Ne, 2017-2018,2020 +# Marek Adamski, 2020 +# Marek Adamski, 2017-2018,2020 # Piotr Sokół , 2012 # Piotr Strębski , 2017 # Piotr Strębski , 2014-2015 @@ -28,18 +29,18 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-21 06:36+0000\n" -"Last-Translator: No Ne\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Marek Adamski, 2022\n" "Language-Team: Polish (http://www.transifex.com/audacious/audacious/language/" "pl/)\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" -"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" -"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && " +"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && " +"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -50,7 +51,7 @@ msgstr "AdPlug (Odtwarzacz AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekwencjonowane" @@ -80,7 +81,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Różne" @@ -490,6 +491,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Częstotliwość próbkowania:" @@ -565,6 +567,7 @@ msgstr "* brak dostępnych tekstów utworów w tym pliku MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Zamknij" @@ -624,7 +627,7 @@ msgid "Concave Rectangle" msgstr "Wklęsły prostokąt" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Brak" @@ -827,6 +830,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listy odtwarzania Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Kruszarka bitów" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Głębia bitowa:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Współczynnik próbkowania w dół:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Kruszarka bitów" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Kolor" @@ -1220,7 +1239,7 @@ msgstr "Usuń" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Anuluj" @@ -1259,7 +1278,7 @@ msgstr "Opóźnienie:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1279,7 +1298,7 @@ msgid "FFmpeg Plugin" msgstr "Wtyczka FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1403,77 +1422,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1597,7 +1616,7 @@ msgid "Quality (0-1):" msgstr "Jakość (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Ogólne" @@ -1606,11 +1625,11 @@ msgid "FLAC Decoder" msgstr "Dekoder FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "bezstratna" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2272,8 +2291,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2658,7 +2677,7 @@ msgid "Looking for lyrics ..." msgstr "Szukanie tekstu piosenki ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Błąd" @@ -3021,7 +3040,7 @@ msgid "Interpolation:" msgstr "Interpolacja:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Liniowa" @@ -3107,7 +3126,7 @@ msgid "OpenPSF Configuration" msgstr "Konfiguracja OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorowanie czasu trwania z pliku" @@ -3797,7 +3816,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Usługi" @@ -3814,7 +3833,7 @@ msgstr "Zakończ" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informacje o piosence..." @@ -3834,7 +3853,7 @@ msgid "Clear A-B Repeat" msgstr "Usuń powtarzanie A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Przejdź do piosenki..." @@ -3927,20 +3946,20 @@ msgstr "Dodaj pliki..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Według tytułu" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Według nazwy pliku" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Według ścieżki dostępu" @@ -3968,104 +3987,104 @@ msgid "Remove Selected" msgstr "Usuń zaznaczone" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Szukaj i wybierz" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Odwróć zaznaczenie" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Wyczyść zaznaczenie" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Zaznacz wszystko" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "według numeru ścieżki" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "według wykonawcy" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "według albumu" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "według wykonawcy albumu" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "według daty wydania" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Według gatunku" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Według długości" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Według własnego tytułu" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Według komentarza" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Wymieszaj listę odtwarzania" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Odwróć kolejność listy odtwarzania" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Posortuj zaznaczone" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Sortuj" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Otwórz nadrzędny katalog" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Wytnij" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopiuj" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Wklej" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Wklej na końcu" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Przełącz kolejkę" @@ -4074,7 +4093,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d z %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Edytor listy odtwarzania Audacious" @@ -4090,167 +4109,219 @@ msgid "Add Folder ..." msgstr "Dodaj katalog..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Wyszukaj wpisy w aktywnej playliście" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Zaznacz wpisy na playliście poprzez wypełnienie jednego lub więcej pól. Pola " +"używają składni wyrażeń regularnych, z uwzględnieniem wielkości liter. Jeśli " +"nie wiesz, jak działają wyrażenia regularne, wpisz po prostu to, czego " +"szukasz." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Tytuł:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artysta:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nazwa pliku:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Wyczyść poprzednie zaznaczenie przed szukaniem" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Automatycznie przełącz kolejkę dla pasujących wpisów" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Utwórz nową playlistę z pasującymi wpisami" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Szukaj" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Odtwarzacz:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Wybór czcionki okna odtwarzacza:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista odtwarzania:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Wybór czcionki listy odtwarzania:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Skórka" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Wyświetlaj aktywny pasek tytułu, gdy aktywne jest dowolne okno" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Czcionki" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Czcionki bitmapowe (obsługuje tylko kodowanie ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Przewijaj tytuł piosenki" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Przewijanie tytułu piosenki w obydwu kierunkach" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizator" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Zakres" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Spektogram / wskaźnik wysterowania" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Wyłączony" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Zwykły" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ognisty" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Pionowe linie" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linie" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Kolumny" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Najwolniejszy" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Wolny" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Średni" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Szybki" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Najszybszy" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Kropki" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linia" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Zwykły" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Lodowy" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Wygładzony" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Kolorowanie:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Styl:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Upadanie:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Upadanie wartości szczytowych:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Stylistyka kształtu:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Kolor spektogramu:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Styl wskaźnika wysterowania:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Sposób" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Sposób wizualizacji:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizator" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Pokaż wartości szczytowe" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Wizualizacja" @@ -4262,59 +4333,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Styl programu Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Wyszukaj wpisy w aktywnej playliście" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Szukaj" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Zaznacz wpisy na playliście poprzez wypełnienie jednego lub więcej pól. Pola " -"używają składni wyrażeń regularnych, z uwzględnieniem wielkości liter. Jeśli " -"nie wiesz, jak działają wyrażenia regularne, wpisz po prostu to, czego " -"szukasz." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Tytuł:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artysta:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nazwa pliku:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Wyczyść poprzednie zaznaczenie przed szukaniem" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Automatycznie przełącz kolejkę dla pasujących wpisów" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Utwórz nową playlistę z pasującymi wpisami" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Wtyczka Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4797,14 +4820,27 @@ "przykładowo wprowadzenie: tone://2000;2005 wytworzy dźwięk o częstotliwości " "2000 Hz oraz 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Dalsze komunikaty zostały ukryte.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Działanie..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informacje" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s nie wygląda na prawidłowy katalog." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Usuwanie głosu (karaoke)" @@ -4963,14 +4999,38 @@ "\n" "Część kodu napisana przez Milesa Egana." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Dekoder 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Ostry" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Konfiguracja XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Domyślny czas zanikania:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Tryb interpolacji:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Współdzielone listy odtwarzania XML (XSPF)" diff -Nru audacious-plugins-4.1/po/POTFILES.in audacious-plugins-4.2/po/POTFILES.in --- audacious-plugins-4.1/po/POTFILES.in 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/POTFILES.in 2022-07-10 01:12:34.000000000 +0000 @@ -20,6 +20,7 @@ src/asx3/asx3.cc src/asx/asx.cc src/audpl/audpl.cc +src/bitcrusher/bitcrusher.cc src/blur_scope/blur_scope.cc src/blur_scope-qt/blur_scope.cc src/bs2b/plugin.cc @@ -178,6 +179,7 @@ src/skins-qt/playlist-widget.cc src/skins-qt/playlistwin.cc src/skins-qt/plugin.cc +src/skins-qt/search-select.cc src/skins-qt/skins_cfg.cc src/skins-qt/skinselector.cc src/skins/search-select.cc @@ -198,6 +200,8 @@ src/streamtuner/streamtuner.cc src/tonegen/tonegen.cc src/ui-common/dialogs-qt.cc +src/ui-common/menu-ops-gtk.cc +src/ui-common/menu-ops-qt.cc src/voice_removal/voice_removal.cc src/vorbis/vorbis.cc src/vorbis/vorbis.h @@ -207,6 +211,8 @@ src/vumeter-qt/vumeter_qt.h src/waveout/waveout.cc src/wavpack/wavpack.cc +src/xsf/desmume/arm_instructions.cc +src/xsf/desmume/PACKED.h src/xsf/desmume/types.h src/xsf/plugin.cc src/xspf/xspf.cc diff -Nru audacious-plugins-4.1/po/process-transifex-po audacious-plugins-4.2/po/process-transifex-po --- audacious-plugins-4.1/po/process-transifex-po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/process-transifex-po 2022-07-10 01:12:34.000000000 +0000 @@ -1,6 +1,9 @@ #!/bin/sh case "$1" in +af.po) + LANGUAGE="Afrikaans" + ;; ar.po) LANGUAGE="Arabic" ;; @@ -145,6 +148,9 @@ uk.po) LANGUAGE="Ukrainian" ;; +uz.po) + LANGUAGE="Uzbek" + ;; vi.po) LANGUAGE="Vietnamese" ;; diff -Nru audacious-plugins-4.1/po/pt_BR.po audacious-plugins-4.2/po/pt_BR.po --- audacious-plugins-4.1/po/pt_BR.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/pt_BR.po 2022-07-10 01:12:34.000000000 +0000 @@ -10,12 +10,12 @@ # Fabiano Ramos , 2018 # F Marcelo O Amarante , 2015 # Fuad Saud , 2012 -# Fúlvio Alves , 2020-2021 +# Fúlvio Alves , 2020-2022 # mcnd2 , 2012 # Iuri Suzano , 2017 # John_Norum , 2012 # Jorgebadad , 2016 -# Juliano da Silva Silva , 2019 +# Juliano Silva , 2019 # Bruno Bacelar , 2012 # Rafael Fontenelle , 2012 # rafael garcia , 2017 @@ -29,16 +29,17 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-10 20:36+0000\n" -"Last-Translator: Fúlvio Alves \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Fúlvio Alves , 2020-2022\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/audacious/" "audacious/language/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % " +"1000000 == 0 ? 1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -49,7 +50,7 @@ msgstr "AdPlug (Reprodutor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sequenciado" @@ -79,7 +80,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Diversos" @@ -494,6 +495,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Taxa de amostragem:" @@ -569,6 +571,7 @@ msgstr "* Sem letras disponíveis neste arquivo MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Fechar" @@ -628,7 +631,7 @@ msgid "Concave Rectangle" msgstr "Retângulo Côncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Nada" @@ -826,6 +829,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listas de Reproduções Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "Bitcrusher" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Profundidade de bits:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Relação de redução:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "Bitcrusher" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Cor" @@ -1216,7 +1235,7 @@ msgstr "Excluir" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1254,7 +1273,7 @@ msgstr "Atraso:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1274,7 +1293,7 @@ msgid "FFmpeg Plugin" msgstr "Plugin FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1398,77 +1417,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "40 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "112 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1592,7 +1611,7 @@ msgid "Quality (0-1):" msgstr "Qualidade (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Geral" @@ -1601,11 +1620,11 @@ msgid "FLAC Decoder" msgstr "Decodificador FLAG" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sem perdas" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2257,6 +2276,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canais" +msgstr[2] "%d canais" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2265,8 +2285,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2658,7 +2678,7 @@ msgid "Looking for lyrics ..." msgstr "Procurando a letra da faixa ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Erro" @@ -3016,7 +3036,7 @@ msgid "Interpolation:" msgstr "Interpolação:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linear" @@ -3101,7 +3121,7 @@ msgid "OpenPSF Configuration" msgstr "Configuração do OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorar duração do arquivo" @@ -3477,6 +3497,7 @@ msgid_plural "%d songs" msgstr[0] "%d faixa" msgstr[1] "%d faixas" +msgstr[2] "%d faixas" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3528,6 +3549,7 @@ msgid_plural "%d of %d results shown" msgstr[0] " %d de %d resultado mostrado" msgstr[1] "%d de %d resultados mostrados" +msgstr[2] "%d de %d resultados mostrados" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3535,6 +3557,7 @@ msgid_plural "%d results" msgstr[0] "%d resultado" msgstr[1] "%d resultados" +msgstr[2] "%d resultados" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3787,7 +3810,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Serviços" @@ -3804,7 +3827,7 @@ msgstr "Sair" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informações da Faixa ..." @@ -3824,7 +3847,7 @@ msgid "Clear A-B Repeat" msgstr "Limpar Repetição A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Ir para a Música ..." @@ -3917,20 +3940,20 @@ msgstr "Adicionar Arquivos ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Por Título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Por Nome de Arquivo" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Por Localização do Arquivo" @@ -3958,104 +3981,104 @@ msgid "Remove Selected" msgstr "Remover Selecionados" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Pesquisar e Selecionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverter Seleção" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Não Selecionar" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Selecionar Tudo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Por Número da Faixa" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Por Artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Por Album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Por Artista do Álbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Por Data de Lançamento" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Por Gênero" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Por Duração" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Por Título Personalizado" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Por Comentário" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Randomizar Lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Reverter Lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Organizar Selecionado" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Organizar Lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Abrir Pasta de Conteúdo" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Colar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Colar no final" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Adicionar/Remover da Fila de Reprodução" @@ -4064,7 +4087,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de lista de reprodução do Audacious" @@ -4080,167 +4103,220 @@ msgid "Add Folder ..." msgstr "Adicionar Pasta ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Procurar entradas na lista de reprodução ativa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleciona as entradas da lista de reprodução, preenchendo um ou mais campos. " +"Os campos utilizam expressões regulares, sem distinção entre maiúsculas e " +"minúsculas. Se não sabe o que são expressões regulares, basta inserir uma " +"parte do que pretende procurar." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Título:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Álbum:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nome do Arquivo:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Apagar seleção anterior antes de pesquisar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" +"Automaticamente habilitar/desabilitar fila para as entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Criar uma nova lista de reprodução com as entradas correspondentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Pesquisar" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reprodutor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Selecionar o tipo de letra do player:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista de Reprodução:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Selecionar o tipo de letra da lista de reprodução:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Aparência" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Exibir barra de título ativa quando qualquer janela estiver focada" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Fontes" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Usar letras bitmap (suporta ASCII somente)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Rolagem do título da faixa" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Título da musica rola em ambas as direções" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analisador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Escopo" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Gravador de Voz / medidor de VU" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Desligado" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fogo" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Linhas Verticais" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linhas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Mais Lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Médio" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Muito Rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Dots" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linha" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Solido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Gelo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Coloração:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estilo:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Queda:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Queda Máxima:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estilo do Escopo" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Coloração do Gravador de Voz:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Estilo do Medidor de VU" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipo" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo de Visualização:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analisador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostrar picos" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualização" @@ -4252,60 +4328,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema Winamp 2.x não arquivado" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Procurar entradas na lista de reprodução ativa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Pesquisar" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleciona as entradas da lista de reprodução, preenchendo um ou mais campos. " -"Os campos utilizam expressões regulares, sem distinção entre maiúsculas e " -"minúsculas. Se não sabe o que são expressões regulares, basta inserir uma " -"parte do que pretende procurar." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Título:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Álbum:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nome do Arquivo:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Apagar seleção anterior antes de pesquisar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" -"Automaticamente habilitar/desabilitar fila para as entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Criar uma nova lista de reprodução com as entradas correspondentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Plugin Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4790,14 +4817,27 @@ "frequência3;...\n" "Exemplo: tone://2000;2005 para reproduzir um tom 2000 Hz e outro de 2005 Hz." -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Demais mensagens foram escondidas.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Processando ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informação" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s não parece ser uma pasta válida." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Remoção de voz" @@ -4956,14 +4996,38 @@ "\n" "Parte do código do plugin foi por Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Decodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosseno" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Afiado" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuração XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Tempo de desvanecimento padrão:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Modo de interpolação:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Lista de Reprodução Compartilhável XML (XSPF)" diff -Nru audacious-plugins-4.1/po/pt_PT.po audacious-plugins-4.2/po/pt_PT.po --- audacious-plugins-4.1/po/pt_PT.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/pt_PT.po 2022-07-10 01:12:34.000000000 +0000 @@ -5,6 +5,7 @@ # Translators: # Alexandro Casanova , 2012 # Bruno Martins , 2011 +# Miguel Diaz Gonçalves, 2022 # Pitxyoki , 2013 # Pitxyoki , 2013 # Sérgio Marques , 2012-2018 @@ -13,16 +14,17 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Miguel Diaz Gonçalves, 2022\n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/audacious/" "audacious/language/pt_PT/)\n" "Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % " +"1000000 == 0 ? 1 : 2;\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -33,7 +35,7 @@ msgstr "AdPlug (Reprodutor AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sequencial" @@ -43,7 +45,7 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "Emulador OPL:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" @@ -63,7 +65,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Diversos" @@ -475,6 +477,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Frequência:" @@ -550,6 +553,7 @@ msgstr "* sem letra da música para este ficheiro MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Fe_char" @@ -609,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Retângulo côncavo" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Nenhum" @@ -807,6 +811,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Listas de reprodução Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Cor" @@ -1197,7 +1217,7 @@ msgstr "Eliminar" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Cancelar" @@ -1235,7 +1255,7 @@ msgstr "Atraso:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1255,7 +1275,7 @@ msgid "FFmpeg Plugin" msgstr "Suplemento FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1377,77 +1397,77 @@ msgid "32000 Hz" msgstr "32 000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44 100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48 000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1571,7 +1591,7 @@ msgid "Quality (0-1):" msgstr "Qualidade (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Geral" @@ -1580,11 +1600,11 @@ msgid "FLAC Decoder" msgstr "Descodificador FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "sem perda" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1814,12 +1834,12 @@ #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "" +msgstr "Álbum anterior" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "" +msgstr "Próximo álbum" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" @@ -2028,7 +2048,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Mostrar _arte do álbum na barra de informações" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2220,7 +2240,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Menu" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2236,6 +2256,7 @@ msgid_plural "%d channels" msgstr[0] "%d canal" msgstr[1] "%d canais" +msgstr[2] "%d canais" #: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 #, c-format @@ -2244,8 +2265,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2273,11 +2294,11 @@ #: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 msgid "Step forward" -msgstr "" +msgstr "Avançar" #: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 msgid "Step backward" -msgstr "" +msgstr "Retroceder" #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" @@ -2379,6 +2400,18 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Plugin Global Hotkey\n" +"Controla o player com combinações globais de teclas ou com teclas " +"multimídia.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Outros colaboradores:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan ." #: src/jack/jack-ng.cc:54 msgid "JACK Output" @@ -2386,7 +2419,7 @@ #: src/jack/jack-ng.cc:126 msgid "Client name:" -msgstr "" +msgstr "Nome do cliente:" #: src/jack/jack-ng.cc:128 msgid "Automatically connect to output ports" @@ -2394,27 +2427,29 @@ #: src/jack/jack-ng.cc:130 msgid "Filter ports (regex, use any port if blank):" -msgstr "" +msgstr "Filtrar portas (regex, usar qualquer porta se estiver em branco):" #: src/jack/jack-ng.cc:136 msgid "Connect to physical ports only" -msgstr "" +msgstr "Ligar apenas a portas físicas" #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Upmix para" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "" +msgstr "portas se a entrada tiver menos canais" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" -msgstr "" +msgstr "Ignorar número insuficiente de portas" #: src/jack/jack-ng.cc:181 msgid "No JACK output ports were found. Please check settings." msgstr "" +"Não foram encontradas portas de saída JACK. Por favor, verifique as " +"configurações." #: src/jack/jack-ng.cc:195 #, c-format @@ -2545,63 +2580,65 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "" +msgstr "Letras" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "" +msgstr "Em nenhum lugar" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" -msgstr "" +msgstr "lyrics.ovh" #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Artista é truncado no início, Título -- no final" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Caracteres para truncar em:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +"Os caracteres são ORed em RegExp, cercados por espaços em branco" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Caracteres para dividir em:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Truncar ainda mais os que se encontram em caracteres" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Geral" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Dividir título entre artista e título nos caracteres" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" -msgstr "" +msgstr "Fontes da Internet" #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "" +msgstr "Obter letras de:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" -msgstr "" +msgstr "Armazenar letras obtidas no cache local" #: src/lyricwiki-qt/lyricwiki.cc:144 msgid "Local Storage" -msgstr "" +msgstr "Armazenamento local" #: src/lyricwiki-qt/lyricwiki.cc:145 msgid "Load lyric files (.lrc) from local storage" -msgstr "" +msgstr "Carregar arquivos de letra (.lrc) do armazenamento local" #: src/lyricwiki-qt/lyricwiki.cc:356 #, c-format @@ -2617,25 +2654,25 @@ msgid "Looking for lyrics ..." msgstr "A procurar letra da faixa..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Erro" #: src/lyricwiki-qt/lyricwiki.cc:433 msgid "Lyrics could not be found." -msgstr "" +msgstr "Não foi possível encontrar a letra." #: src/lyricwiki-qt/lyricwiki.cc:501 msgid "Missing title and/or artist." -msgstr "" +msgstr "Título e/ou artista em falta." #: src/lyricwiki-qt/lyricwiki.cc:553 msgid "Save Locally" -msgstr "" +msgstr "Gravar localmente" #: src/lyricwiki-qt/lyricwiki.cc:561 msgid "Refresh" -msgstr "" +msgstr "Atualizar" #: src/m3u/m3u.cc:32 msgid "M3U Playlists" @@ -2802,7 +2839,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2944,7 +2981,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Duração de notificação personalizada:" #: src/notify/osd.cc:74 msgid "Show" @@ -2952,7 +2989,7 @@ #: src/openmpt/mpt.cc:50 msgid "OpenMPT (Module Player)" -msgstr "" +msgstr "OpenMPT (Reprodutor de módulos)" #: src/openmpt/mpt.cc:133 msgid "" @@ -2960,10 +2997,13 @@ "\n" "Written by: Chris Spiegel " msgstr "" +"Reprodutor de módulos baseado em libopenmpt\n" +"\n" +"Escrito por: Chris Spiegel " #: src/openmpt/mpt.cc:152 msgid "Stereo separation:" -msgstr "" +msgstr "Separação estéreo:" #: src/openmpt/mpt.cc:154 msgid "%" @@ -2971,19 +3011,19 @@ #: src/openmpt/mpt.cc:158 msgid "Interpolation:" -msgstr "" +msgstr "Interpolação:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linear" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "" +msgstr "Cúbica" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "" +msgstr "Sinc em janela" #: src/oss4/oss.h:75 msgid "OSS4 Output" @@ -3056,9 +3096,9 @@ #: src/psf/plugin.cc:270 msgid "OpenPSF Configuration" -msgstr "" +msgstr "Configuração do OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorar duração do ficheiro" @@ -3068,11 +3108,11 @@ #: src/pulse/pulse_audio.cc:72 msgid "Context name:" -msgstr "" +msgstr "Nome do contexto:" #: src/pulse/pulse_audio.cc:74 msgid "Stream name:" -msgstr "" +msgstr "Nome do stream:" #: src/pulse/pulse_audio.cc:575 msgid "" @@ -3139,10 +3179,19 @@ "\n" "License: GPLv2+" msgstr "" +"Analisador de Espectro OpenGL para Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, e Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Baseado no plugin XMMS:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, e " +"4Front \n" +"\n" +"Licença: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Prima uma combinação de teclas dentro de um campo de texto." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3159,6 +3208,19 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Plugin Global Hotkey\n" +"Controla o reprodutor com combinações de teclas globais ou teclas " +"multimídia.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Os colaboradores incluem:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonathan A. Davis ,\n" +"Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3182,11 +3244,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "F#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3198,23 +3260,23 @@ #: src/qtui/settings.cc:58 msgid "Always" -msgstr "" +msgstr "Sempre" #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "" +msgstr "Ocultar automaticamente" #: src/qtui/settings.cc:60 msgid "Never" -msgstr "" +msgstr "Nunca" #: src/qtui/settings.cc:64 msgid "Show playlist tabs:" -msgstr "" +msgstr "Mostrar guias da lista de reprodução:" #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Usar tipo de letra em negrito nos cabeçalhos de coluna" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3412,6 +3474,7 @@ msgid_plural "%d songs" msgstr[0] "%d faixa" msgstr[1] "%d faixas" +msgstr[2] "%d faixas" #: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 msgid "of this genre" @@ -3435,7 +3498,7 @@ #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "" +msgstr "Monitorizar biblioteca quanto a alterações" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" @@ -3463,6 +3526,7 @@ msgid_plural "%d of %d results shown" msgstr[0] "Mostrado %d de %d resultado" msgstr[1] "Mostrados %d de %d resultados" +msgstr[2] "Mostrados %d de %d resultados" #: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 #, c-format @@ -3470,6 +3534,7 @@ msgid_plural "%d results" msgstr[0] "%d resultado" msgstr[1] "%d resultados" +msgstr[2] "%d resultados" #: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 msgid "_Create Playlist" @@ -3722,7 +3787,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Serviços" @@ -3739,7 +3804,7 @@ msgstr "Sair" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informações da faixa..." @@ -3759,7 +3824,7 @@ msgid "Clear A-B Repeat" msgstr "Remover repetição A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Ir para a faixa..." @@ -3852,20 +3917,20 @@ msgstr "Adicionar ficheiros..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Por título" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Por nome de ficheiro" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Por caminho" @@ -3893,104 +3958,104 @@ msgid "Remove Selected" msgstr "Remover seleção" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Procurar e selecionar" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Inverter seleção" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Não selecionar" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Selecionar tudo" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Por número de faixa" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Por artista" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Por álbum" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Por artista do álbum" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Por data de lançamento" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Por género" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Por duração" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Por título personalizado" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Por comentário" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Lista aleatória" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Inverter lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Organizar seleção" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Ordenação" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Abrir pasta respetiva" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Cortar" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Copiar" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Colar" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Colar no final" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Colocar/retirar da fila" @@ -3999,7 +4064,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d de %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor de listas de reprodução" @@ -4015,167 +4080,219 @@ msgid "Add Folder ..." msgstr "Adicionar pasta..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Procurar entradas na lista de reprodução ativa" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Seleciona as entradas da lista de reprodução, preenchendo um ou mais campos. " +"Os campos utilizam expressões regulares, sem distinção entre maiúsculas e " +"minúsculas. Se não sabe o que são expressões regulares, basta inserir uma " +"parte do que pretende procurar." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Título:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Álbum: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artista: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Nome de ficheiro:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Limpar seleção anterior antes de procurar" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Alternar fila automaticamente para as entradas coincidentes" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Criar lista de reprodução com as entradas coincidentes" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Procura" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Reprodutor:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Selecione o tipo de letra do reprodutor:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Lista de reprodução:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Escolha o tipo de letra da lista de reprodução:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Tema" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Tipos de letra" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Utilizar letras bitmap (só para ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Deslocar título da faixa" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Deslocar título em ambas as direções" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analisador" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Scope" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Voiceprint/Medidor VU" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Desligado" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Fogo" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Linhas verticais" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linhas" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Barras" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Mais lento" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Lento" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rápido" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Mais rápido" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Pontos" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linha" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Sólido" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Gelo" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Suave" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Coloração:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Estilo:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Recurso:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Recurso de picos:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Estilo de scope:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Coloração Voiceprint:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Estilo do medidor VU:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tipo" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Tipo de visualização:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analisador" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Mostrar picos" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualização" @@ -4187,59 +4304,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Tema Winamp 2.x não arquivado" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Procurar entradas na lista de reprodução ativa" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Procura" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Seleciona as entradas da lista de reprodução, preenchendo um ou mais campos. " -"Os campos utilizam expressões regulares, sem distinção entre maiúsculas e " -"minúsculas. Se não sabe o que são expressões regulares, basta inserir uma " -"parte do que pretende procurar." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Título:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Álbum: " - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artista: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Nome de ficheiro:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Limpar seleção anterior antes de procurar" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Alternar fila automaticamente para as entradas coincidentes" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Criar lista de reprodução com as entradas coincidentes" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Suplemento Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4555,39 +4624,39 @@ #: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 msgid "Type" -msgstr "" +msgstr "Tipo" #: src/streamtuner/icecast-model.cc:132 msgid "Current Song" -msgstr "" +msgstr "Música atual" #: src/streamtuner/icecast-model.cc:164 msgid "Other" -msgstr "" +msgstr "Outro" #: src/streamtuner/ihr-model.cc:63 msgid "Market" -msgstr "" +msgstr "Mercado" #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "" +msgstr "Indicativo" #: src/streamtuner/ihr-model.cc:162 msgid "Description" -msgstr "" +msgstr "Descrição" #: src/streamtuner/shoutcast-model.cc:128 msgid "Listeners" -msgstr "" +msgstr "Ouvintes" #: src/streamtuner/shoutcast-model.cc:188 msgid "Top 500 Stations" -msgstr "" +msgstr "Estações do Top 500" #: src/streamtuner/shoutcast-model.cc:189 msgid "Alternative" -msgstr "" +msgstr "Alternativa" #: src/streamtuner/shoutcast-model.cc:190 msgid "Blues" @@ -4603,7 +4672,7 @@ #: src/streamtuner/shoutcast-model.cc:193 msgid "Decades" -msgstr "" +msgstr "Décadas" #: src/streamtuner/shoutcast-model.cc:194 msgid "Easy Listening" @@ -4611,7 +4680,7 @@ #: src/streamtuner/shoutcast-model.cc:195 msgid "Electronic" -msgstr "" +msgstr "Electrónica" #: src/streamtuner/shoutcast-model.cc:196 msgid "Folk" @@ -4619,11 +4688,11 @@ #: src/streamtuner/shoutcast-model.cc:197 msgid "Inspirational" -msgstr "" +msgstr "Inspiracional" #: src/streamtuner/shoutcast-model.cc:198 msgid "International" -msgstr "" +msgstr "Internacional" #: src/streamtuner/shoutcast-model.cc:199 msgid "Jazz" @@ -4631,7 +4700,7 @@ #: src/streamtuner/shoutcast-model.cc:200 msgid "Latin" -msgstr "" +msgstr "Latina" #: src/streamtuner/shoutcast-model.cc:201 msgid "Metal" @@ -4647,11 +4716,11 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "" +msgstr "Rádio Pública" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" -msgstr "" +msgstr "R&B e Urbana" #: src/streamtuner/shoutcast-model.cc:207 msgid "Rap" @@ -4667,31 +4736,31 @@ #: src/streamtuner/shoutcast-model.cc:210 msgid "Seasonal and Holiday" -msgstr "" +msgstr "Sazonais e Férias" #: src/streamtuner/shoutcast-model.cc:211 msgid "Soundtracks" -msgstr "" +msgstr "Bandas sonoras" #: src/streamtuner/shoutcast-model.cc:212 msgid "Talk" -msgstr "" +msgstr "Talk" #: src/streamtuner/shoutcast-model.cc:213 msgid "Themes" -msgstr "" +msgstr "Temas" #: src/streamtuner/streamtuner.cc:59 msgid "Shoutcast" -msgstr "" +msgstr "Shoutcast" #: src/streamtuner/streamtuner.cc:60 msgid "Icecast" -msgstr "" +msgstr "Icecast" #: src/streamtuner/streamtuner.cc:71 msgid "Stream Tuner" -msgstr "" +msgstr "Stream Tuner" #: src/tonegen/tonegen.cc:45 msgid "Tone Generator" @@ -4722,14 +4791,27 @@ "exemplo: tone://2000;2005 para reproduzir um tom de 2000 Hz e outro de 2005 " "Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Foram ocultas algumas mensagens.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Execução..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informações" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Remoção de voz" @@ -4827,30 +4909,32 @@ "VU Meter Plugin for Audacious\n" "Copyright 2017-2019 Marc Sánchez Fauste" msgstr "" +"Plugin Medidor de VU para Audacious\n" +"Copyright 2017-2019 Marc Sánchez Fauste" #: src/vumeter-qt/vumeter_qt.cc:35 msgid "VU Meter Settings" -msgstr "" +msgstr "Configurações do medidor VU" #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" -msgstr "" +msgstr "Tempo de espera de pico:" #: src/vumeter-qt/vumeter_qt.cc:42 msgid "Fall-off time:" -msgstr "" +msgstr "Tempo de queda:" #: src/vumeter-qt/vumeter_qt.cc:44 msgid "dB/second" -msgstr "" +msgstr "dB/segundo" #: src/vumeter-qt/vumeter_qt.cc:46 msgid "Display legend" -msgstr "" +msgstr "Mostrar legenda" #: src/vumeter-qt/vumeter_qt.h:37 msgid "VU Meter" -msgstr "" +msgstr "Medidor de VU" #: src/waveout/waveout.cc:43 msgid "Win32 waveOut" @@ -4886,14 +4970,38 @@ "\n" "Parte do código foi desenvolvido por Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Descodificador 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Configuração XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Listas de reprodução XML Shareable (XSPF)" diff -Nru audacious-plugins-4.1/po/ru.po audacious-plugins-4.2/po/ru.po --- audacious-plugins-4.1/po/ru.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ru.po 2022-07-10 01:12:34.000000000 +0000 @@ -7,7 +7,8 @@ # Alexander Orlov , 2007 # Alexa Poruch , 2020 # Денис , 2014 -# Andrei Stepanov , 2014-2015 +# Andrei Stepanov, 2014-2015 +# Arnold Layne, 2021 # Danila E , 2018 # dartraiden, 2018 # 85f5ad14c5f803c69d22f4aeb4ef6a7e, 2018 @@ -45,6 +46,7 @@ # Oleg , 2012 # Victor Ponomarev , 2013 # Volk Daemon , 2016,2018 +# Алексей , 2022 # Алексей , 2013 # Виктор Голованенко , 2020 # Денис , 2014-2015 @@ -54,18 +56,18 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Алексей , 2022\n" "Language-Team: Russian (http://www.transifex.com/audacious/audacious/" "language/ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" -"%100>=11 && n%100<=14)? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -76,7 +78,7 @@ msgstr "AdPlug (проигрыватель AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "последовательный" @@ -106,7 +108,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Разное" @@ -516,6 +518,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Частота дискретизации:" @@ -591,6 +594,7 @@ msgstr "* в этом MIDI-файле нет текстов *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "Закрыть" @@ -650,7 +654,7 @@ msgid "Concave Rectangle" msgstr "Вогнутый прямоугольник" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Нет" @@ -851,6 +855,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Списки воспроизведения Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "Разрядность:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "Коэффициент понижения дискретизации:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Цвет" @@ -1244,7 +1264,7 @@ msgstr "Удалить" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Отмена" @@ -1282,7 +1302,7 @@ msgstr "Задержка:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "мс" @@ -1302,7 +1322,7 @@ msgid "FFmpeg Plugin" msgstr "Модуль FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1424,76 +1444,76 @@ msgid "32000 Hz" msgstr "32000 Гц" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Гц" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Гц" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "8 кбит/с" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "16 кбит/с" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "32 кбит/с" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "40 кбит/с" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "48 кбит/с" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "56 кбит/с" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "64 кбит/с" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "80 кбит/с" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "96 кбит/с" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "112 кбит/с" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "128 кбит/с" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "160 кбит/с" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "192 кбит/с" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "224 кбит/с" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "256 кбит/с" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "320 кбит/с" #: src/filewriter/filewriter.cc:450 @@ -1618,7 +1638,7 @@ msgid "Quality (0-1):" msgstr "Качество (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Основной" @@ -1627,11 +1647,11 @@ msgid "FLAC Decoder" msgstr "Декодер FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "lossless" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2075,7 +2095,7 @@ #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "Показать информационную панель _Обложка альбома" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" @@ -2267,7 +2287,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Меню" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2293,7 +2313,7 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" +msgid "%d kbit/s" msgstr "%d кбит/с" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 @@ -2620,31 +2640,31 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Исполнитель -- с начала, Название -- с конца" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Обрезать до:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" -msgstr "" +msgstr "Варианты перечисляются через пробел" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Разделители:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Далее обрезать до символа" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Основные" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Разделить название на название и исполнителя" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2680,7 +2700,7 @@ msgid "Looking for lyrics ..." msgstr "Поиск текста песни ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Ошибка" @@ -2865,7 +2885,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -3002,7 +3022,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Длительность уведомления:" #: src/notify/osd.cc:74 msgid "Show" @@ -3034,7 +3054,7 @@ msgid "Interpolation:" msgstr "Интерполяция:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Линейный" @@ -3119,7 +3139,7 @@ msgid "OpenPSF Configuration" msgstr "Настройка OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Не придавать значение длительности из файла" @@ -3198,10 +3218,19 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL спектральный анализатор для Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Основан на плагине XMMS:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"Лицензия: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Нажмите комбинацию клавиш в текстовом поле." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3218,6 +3247,18 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Плагин горячих клавиш\n" +"Управление проигрывателем горячими клавишами или кнопками мультимедиа.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." @@ -3241,11 +3282,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3273,7 +3314,7 @@ #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Использовать жирный шрифт в заголовках колонок" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3786,7 +3827,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Службы" @@ -3803,7 +3844,7 @@ msgstr "Выход" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Информация о песне" @@ -3823,7 +3864,7 @@ msgid "Clear A-B Repeat" msgstr "Удалить A-B повтор" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Перейти к песне ..." @@ -3916,20 +3957,20 @@ msgstr "Добавить файлы..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "По названию" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "По имени файла" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "По расположению _файла" @@ -3957,104 +3998,104 @@ msgid "Remove Selected" msgstr "Удалить выбранные" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Найти и выбрать" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Инвертировать выбор" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Снять выделение" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Выбрать все" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "По номеру дорожки" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "По исполнителю" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "По альбому" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "По исполнителю" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "По _дате выпуска" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "По жанру" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "По длительности" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "По _заданному названию файла" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "По комментарию" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Сортировать в случайном порядке" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "В обратном порядке" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Сортировать выбранные" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Сортировать список" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Открыть директорию" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Вырезать" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Копировать" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Вставить" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Вставить в конец" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "В очередь/Из очереди" @@ -4063,7 +4104,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d из %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Редактор списков воспроизведения Audacious" @@ -4079,167 +4120,219 @@ msgid "Add Folder ..." msgstr "Добавить каталог ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Поиск записей в активном списке воспроизведения" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Выберите записи в списке воспроизведения, заполнив соответствующие поля. В " +"полях используется написание регулярных выражений, не чувствительное к " +"регистру. Если вы не знаете, как работают регулярные выражения, просто " +"вставьте часть букв из слова, которые хотите найти." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Заголовок:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Альбом:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Артист:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Имя файла:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Очистить предыдущий выбор до начала поиска" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Автоматически переключать поочерёдно на соответствующим записям" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Создать новый список воспроизведения с соответствующими записями" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Поиск" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Проигрыватель:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Выберите шрифт основного окна проигрывателя:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Список:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Выберите шрифт плейлиста:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Скин" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Отображать активный заголовок, когда любые окна находятся в фокусе" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Шрифты" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Использовать растровые шрифты (поддерживает только ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Прокручивать название песни " -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Прокручивать название песни в обоих направлениях" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Осциллограмма" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Отпечаток голоса / VU измеритель" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Выкл." -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Обычный" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Огонь" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Вертикальные линии" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Линии" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Полоски" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Очень медленно" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Медленно" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Средне" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Быстро" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Очень быстро" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Точки" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Линия" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Сплошная" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лёд" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Сглаженный" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Окраска:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Стиль:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Спад:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Спад пиков:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Стиль осциллограммы:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Окраска отпечатка голоса:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Стиль VU измерителя:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Тип" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Тип визуализации:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Показывать пики" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Визуализация" @@ -4251,59 +4344,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Не архивированная тема Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Поиск записей в активном списке воспроизведения" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Поиск" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Выберите записи в списке воспроизведения, заполнив соответствующие поля. В " -"полях используется написание регулярных выражений, не чувствительное к " -"регистру. Если вы не знаете, как работают регулярные выражения, просто " -"вставьте часть букв из слова, которые хотите найти." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Заголовок:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Альбом:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Артист:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Имя файла:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Очистить предыдущий выбор до начала поиска" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Автоматически переключать поочерёдно на соответствующим записям" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Создать новый список воспроизведения с соответствующими записями" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Модуль Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4788,14 +4833,27 @@ "частота1;частота2;частота3;...\n" "Например, tone://2000;2005 для воспроизведения сигналов 2000 Гц и 2005 Гц" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Подробные сообщения были скрыты.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Работаю ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Информация" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s является недопустимой папкой." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Удаление вокала" @@ -4953,14 +5011,38 @@ "\n" "Частично код от Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Декодер 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Гц" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Гц" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Настройки XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Время затухания по умолчанию:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Режим интерполяции:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Списки воспроизведения XSPF" diff -Nru audacious-plugins-4.1/po/si.po audacious-plugins-4.2/po/si.po --- audacious-plugins-4.1/po/si.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/si.po 2022-07-10 01:12:34.000000000 +0000 @@ -13,9 +13,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Ashintha Rukmal Perera , 2013-2014\n" "Language-Team: Sinhala (http://www.transifex.com/audacious/audacious/" "language/si/)\n" "Language: si\n" @@ -33,7 +33,7 @@ msgstr "Adකෙවෙනිය (AdLib ධාවකය)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "අනුපිළිවෙළ" @@ -63,7 +63,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "විවිධ" @@ -407,6 +407,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -482,6 +483,7 @@ msgstr "* මෙම MIDI ගොනුවෙහි පද රචනා නොමැත​ *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_වසන්න​" @@ -529,7 +531,7 @@ msgid "Concave Rectangle" msgstr "අවතල ඍජුකෝණාශ්‍රය" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "කිසිවක් නැත​" @@ -727,6 +729,22 @@ msgid "Audacious Playlists (audpl)" msgstr "ඔඩෙෂස් ධාවන ලැස්තු (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "වර්ණ" @@ -1099,7 +1117,7 @@ msgstr "මකන්න " #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "අවලංගු කිරීම​" @@ -1133,7 +1151,7 @@ msgstr "ප්‍රමාදය:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "මාත සංවේද්‍යතාව" @@ -1153,7 +1171,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg පේනු මෘදුකාංගය " -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1261,76 +1279,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1455,7 +1473,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "සාමාන්‍ය" @@ -1464,11 +1482,11 @@ msgid "FLAC Decoder" msgstr "FLAC විකේතකය" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "හානි වී නොමැති " -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2120,8 +2138,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d තත්පරයට කිලෝ බයිට් " +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2483,7 +2501,7 @@ msgid "Looking for lyrics ..." msgstr "පද රචනා සොයමින් පවතී ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "දෝෂය " @@ -2837,7 +2855,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2922,7 +2940,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3552,7 +3570,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "" @@ -3569,7 +3587,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3589,7 +3607,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3682,20 +3700,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "මාතෘකාවෙන් " #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3723,104 +3741,104 @@ msgid "Remove Selected" msgstr "තෝරාගත් ඒවා ඉවත් කරන්න " -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "සොයන්න සහ තෝරන්න " -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "වරණය පෙරලන්න " -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "කිසිවක් තෝරානොගන්න " -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "සියල්ල තෝරන්න" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "ඛණ්ඩ අංකයෙන් " -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "ශිල්පියාගෙන් " -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "ඇල්බමයෙන් " -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "සසම්භාවී ධාවන ලැයිස්තුව " -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "ලැස්තුවේ ආපස්සට යන්න " -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "තෝරාගත් අනුපිළිවලට " -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "ලැයිස්තුව අනුපිළිවලට සකසන්න " -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "කපන්න " -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "පිටපත් කරන්න " -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "අලවන්න " -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3829,7 +3847,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d ගෙන් %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "ඔඩෙෂස් ධාවන ලැස්තු සකසනය " @@ -3845,167 +3863,218 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "සක්‍රිය ධාවන ලැයිස්තුවේ පිවිසුම් සොයන්න " + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"ධාවන ලැයිස්තුවේ පිවිසුම්, ක්ෂේත්‍ර එකක් හෝ වැඩි ගණනක් ගොනු කිරිමනේ තෝරන්න. ක්ෂේත්‍ර විධිමත් ප්‍රකාශන " +"වාග් රීති, අකුරු තටු-සංවේදී නැති භාවිතා කරයි. ඔබට විධිමත් ප්‍රකාශන වාග් රීති ක්‍රියාත්මක වන ආකාරය " +"පිළිබඳ අවබෝධයක් නැති නම්, ඔබ සොයන වචන කොටස ඇතුල් කරන්න." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "පෙර තේරීම සෙවීමට පෙර හිස් කරන්න " + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "ගැලපෙන පිවිසුම් සඳහා ස්වයංක්‍රියව පෙළගැස්ම ටෝගල කරන්න " + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "ගැලපෙන පිවිසුම් සමග නව ධාවන ලැයිස්තුව තනන්න " + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "කවුළු ෆොන්ටයේ ප්‍රධාන ධාවකය තෝරන්න:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "ධාවන ලැස්තු ෆොන්ටය තෝරන්න:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "බිට්මැප් ෆොන්ට භාවිතා කරන්න (ASCII පමණක් සහය වන )" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "ගීත තේමාව දෙපසට චලනය කරන්න " -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "විශ්ලේශකය " -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "විෂය පථය " -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "වහනවා " -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "සාමාන්‍ය " -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "දල්වනවා " -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr " රේඛා" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "තීරු " -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "මන්දගාමිම " -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "මන්දගාමි" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "මධ්‍යම " -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "වේගවත් " -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "වේගවත්ම " -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "හිම " -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "මෘදු " -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "දෘෂ්ටි කල්පනය " @@ -4017,58 +4086,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "සංරක්ෂණය නොකරන ලද Winamp 2.x මතුපිට" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "සක්‍රිය ධාවන ලැයිස්තුවේ පිවිසුම් සොයන්න " - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"ධාවන ලැයිස්තුවේ පිවිසුම්, ක්ෂේත්‍ර එකක් හෝ වැඩි ගණනක් ගොනු කිරිමනේ තෝරන්න. ක්ෂේත්‍ර විධිමත් ප්‍රකාශන " -"වාග් රීති, අකුරු තටු-සංවේදී නැති භාවිතා කරයි. ඔබට විධිමත් ප්‍රකාශන වාග් රීති ක්‍රියාත්මක වන ආකාරය " -"පිළිබඳ අවබෝධයක් නැති නම්, ඔබ සොයන වචන කොටස ඇතුල් කරන්න." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "පෙර තේරීම සෙවීමට පෙර හිස් කරන්න " - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "ගැලපෙන පිවිසුම් සඳහා ස්වයංක්‍රියව පෙළගැස්ම ටෝගල කරන්න " - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "ගැලපෙන පිවිසුම් සමග නව ධාවන ලැයිස්තුව තනන්න " - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Snd ගොනු පේනු මෘදුකාංගය" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4524,14 +4546,27 @@ "භාවිතා කිරීම සඳහා, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(අතිරේක පණිවිඩ සඟවන ලඳි.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "කටහඬ ඉවත් කිරීම​" @@ -4673,14 +4708,38 @@ "ප්‍රකාශන හිමිකම 2006 William Pitcock \n" "ඇතැම් පේනු මෘදුකාංග කේත Miles Egan විසිනි." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr " 2SF විකේතකය" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML හුවමාරු කළ හැකි ධාවන ලැයිස්තුව​ (XSPF)" diff -Nru audacious-plugins-4.1/po/sk.po audacious-plugins-4.2/po/sk.po --- audacious-plugins-4.1/po/sk.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sk.po 2022-07-10 01:12:34.000000000 +0000 @@ -5,7 +5,9 @@ # Translators: # Andrej Časo , 2017 # Andrej Herceg , 2007, 2008, 2010, 2011 +# awg awg, 2022 # Lukáš Dobránsky , 2012 +# Mastný Chleba, 2022 # Tomáš Tomovčík , 2016 # 7dcd6f74323fe8d9c477949ff8fcbb1c_c427b63 <3fcd202e3dfab15fda15b8e88e54d449_7173>, 2012 # Corduroy , 2013 @@ -14,9 +16,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: awg awg, 2022\n" "Language-Team: Slovak (http://www.transifex.com/audacious/audacious/language/" "sk/)\n" "Language: sk\n" @@ -28,14 +30,14 @@ #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" -msgstr "AAC (Raw) dekodér" +msgstr "AAC (Raw) Dekodér" #: src/adplug/adplug-xmms.cc:70 msgid "AdPlug (AdLib Player)" msgstr "AdPlug (AdLib prehrávač)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekvenčný" @@ -45,11 +47,11 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "" +msgstr "OPL Emulátor:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "" +msgstr "Vzorkovacia frekvencia" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -65,13 +67,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Rôzne" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "" +msgstr "Nekonečné opakovanie skladby" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -475,6 +477,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Vzorkovacia frekvencia:" @@ -550,6 +553,7 @@ msgstr "* v MIDI súbore sa nenachádzajú žiadne texty skladby *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Zatvoriť" @@ -609,7 +613,7 @@ msgid "Concave Rectangle" msgstr "Konkávny obdĺžnik" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Žiadne" @@ -809,6 +813,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious zoznamy skladieb (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Farba" @@ -964,7 +984,7 @@ #: src/cdaudio/cdaudio-ng.cc:612 msgid "Failed to create the CDDB connection." -msgstr "" +msgstr "Zlyhalo pripojenie k CDDB databáze" #: src/cdaudio/cdaudio-ng.cc:678 msgid "Failed to query the CDDB server" @@ -1190,7 +1210,7 @@ msgstr "Odstrániť" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Zrušiť" @@ -1228,7 +1248,7 @@ msgstr "Oneskorenie:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1248,7 +1268,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg zásuvný modul" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1372,77 +1392,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kb/s" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kb/s" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kb/s" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40kb/s" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48kb/s" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56kb/s" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64kb/s" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80kb/s" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96kb/s" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112kb/s" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128kb/s" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160kb/s" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192kb/s" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224kb/s" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256kb/s" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1566,7 +1586,7 @@ msgid "Quality (0-1):" msgstr "Kvalita (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Všeobecné" @@ -1575,11 +1595,11 @@ msgid "FLAC Decoder" msgstr "FLAC dekodér" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "bezstratový" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2241,8 +2261,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2608,7 +2628,7 @@ msgid "Looking for lyrics ..." msgstr "Vyhľadáva sa text skladby..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Chyba" @@ -2965,7 +2985,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -3050,7 +3070,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorovať dĺžku zo súboru" @@ -3719,7 +3739,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Služby" @@ -3736,7 +3756,7 @@ msgstr "Ukončiť" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Informácie o skladbe ..." @@ -3756,7 +3776,7 @@ msgid "Clear A-B Repeat" msgstr "Odstrániť A-B opakovanie" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Prejsť na skladbu ..." @@ -3849,20 +3869,20 @@ msgstr "Pridať súbory …" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Podľa názvu" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Podľa názvu súboru" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Podľa cesty k súboru" @@ -3890,104 +3910,104 @@ msgid "Remove Selected" msgstr "Odstrániť označené" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Hľadanie a výber" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertovať výber" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Zrušiť výber" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Označiť všetko" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Podľa čísla stopy" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Podľa umelca" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Podľa albumu" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Podľa umelca albumu" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Podľa dátumu vydania" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Podľa žánru" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Podľa dĺžky" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Podľa vlastného názvu" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Podľa komentára" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Premiešať poradie" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Obrátiť poradie" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Triediť výber" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Triediť zoznam" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Otvoriť priečinok" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Vystrihnúť" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopírovať" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Vložiť" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Vložiť na koniec" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Pridať alebo odobrať z fronty" @@ -3996,7 +4016,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d z %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Editor zoznamu skladieb" @@ -4012,167 +4032,219 @@ msgid "Add Folder ..." msgstr "Pridať priečinok ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Vyhľadať skladby v aktívnom zozname skladieb" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Položky v zozname skladieb vyberiete vyplnením jedného alebo viacerých polí. " +"Polia používajú regulárne výrazy a neberie sa ohľad na veľkosť písmen. Ak " +"regulárnym výrazom nerozumiete, jednoducho zadajte časť textu, ktorý chcete " +"vyhľadať." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Názov: " + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album: " + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Umelec: " + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Názov súboru:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Pred hľadaním vymazať predchádzajúci výber" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Zhodujúce sa položky pridať do (odstrániť z) frontu" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Zo zhodujúcich sa položiek vytvoriť nový zoznam skladieb" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Hľadať" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Prehrávač:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Vyberte písmo pre hlavné okno prehrávača:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Zoznam skladieb:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Zvoliť písmo pre zoznam skladieb:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Téma vzhľadu" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Písma" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Použiť bitmapové písma (podporuje iba ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Rolovať názov skladby" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Rolovať názov skladby obidvoma smermi" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analyzátor" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Osciloskop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Zvukový odtlačok / VU meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Žiadne" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normálny" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Oheň" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vertikálne čiary" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Čiary" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Obdĺžniky" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Najpomalšie" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Pomaly" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Stredne" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Rýchlo" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Najrýchlejšie" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Body" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Čiara" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Plná vlnovka" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Ľad" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Plynulý" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Farebná schéma:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Štýl:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Klesanie:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Klesanie vrcholu:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Štýl vlnovky:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Farebná schéma zvukového odtlačku:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Štýl VU metera:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Typ" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Typ vizualizácie:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analyzátor" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Zobrazovať zvukové špičky" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizácia" @@ -4184,59 +4256,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Nezabalený vzhľad pre WinAMP 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Vyhľadať skladby v aktívnom zozname skladieb" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Hľadať" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Položky v zozname skladieb vyberiete vyplnením jedného alebo viacerých polí. " -"Polia používajú regulárne výrazy a neberie sa ohľad na veľkosť písmen. Ak " -"regulárnym výrazom nerozumiete, jednoducho zadajte časť textu, ktorý chcete " -"vyhľadať." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Názov: " - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album: " - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Umelec: " - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Názov súboru:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Pred hľadaním vymazať predchádzajúci výber" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Zhodujúce sa položky pridať do (odstrániť z) frontu" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Zo zhodujúcich sa položiek vytvoriť nový zoznam skladieb" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile zásuvný modul" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4716,14 +4740,27 @@ "Pre použitie, pridajte URL: tone://frequency1;frequency2;frequency3;...\n" "napr.. tone://2000;2005 prehrá 2000 Hz tón a 2005 Hz tón" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Ďalšie správy boli skryté.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Pracujem..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informácie" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Odstránenie hlasu" @@ -4879,14 +4916,38 @@ "\n" "časť kódu zásuvného modulu napísal Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF dekodér" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Konfigurácia XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Shareable Playlists (XSPF)" diff -Nru audacious-plugins-4.1/po/sl.po audacious-plugins-4.2/po/sl.po --- audacious-plugins-4.1/po/sl.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sl.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,22 +3,24 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# Nejc Bertoncelj , 2020 +# Arnold Marko , 2021 +# Nejc Bertoncelj, 2020 +# Nejc Bertoncelj , 2020-2021 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-27 17:36+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Arnold Marko , 2021\n" "Language-Team: Slovenian (http://www.transifex.com/audacious/audacious/" "language/sl/)\n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" -"%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -29,7 +31,7 @@ msgstr "AdPlug (AdLib Player)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekvenčno" @@ -39,11 +41,11 @@ #: src/adplug/adplug-xmms.cc:350 msgid "OPL Emulator:" -msgstr "Emulator OPL:" +msgstr "OPL emulator:" #: src/adplug/adplug-xmms.cc:353 msgid "Sample rate" -msgstr "Hitrost vzorčenja" +msgstr "Frekvenca vzorčenja" #: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 #: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 @@ -59,13 +61,13 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Razno" #: src/adplug/adplug-xmms.cc:356 msgid "Repeat song in endless loop" -msgstr "Ponavljaj skladbe v neskončni zanki" +msgstr "Ponavljaj skladbo v neskončni zanki" #: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 msgid "Alarm" @@ -73,7 +75,7 @@ #: src/alarm/alarm.cc:782 msgid "Set Alarm ..." -msgstr "Nastavi alarm ..." +msgstr "Nastavi alarm" #: src/alarm/alarm.cc:810 msgid "" @@ -81,9 +83,9 @@ "\n" "Originally written by Adam Feakin and Daniel Stodden." msgstr "" -"Vtičnik, ki zažene predvajanje ob določenem času.\n" +"A plugin that can be used to start playing at a certain time.\n" "\n" -"Avtorja: Adam Feakin in Daniel Stodden." +"Originally written by Adam Feakin and Daniel Stodden." #: src/alarm/interface.cc:28 msgid "" @@ -169,7 +171,7 @@ " Zaženi ta ukaz ob bujenju.\n" "\n" " Seznam predvajanja:\n" -" Naloži ta seznam. Če ni vnešen, se bo uporabil trenutni.\n" +" Naloži ta seznam. Če ni vnesen, se bo uporabil trenutni.\n" " Lahko vnesete tudi naslov URL pretoka mp3/ogg.\n" "\n" " Opomnik:\n" @@ -178,11 +180,11 @@ #: src/alarm/interface.cc:78 msgid "This is your wakeup call." -msgstr "To je vaš klic bujenja." +msgstr "Zbudite se." #: src/alarm/interface.cc:96 msgid "Your reminder for today is..." -msgstr "Vaš opomnik za danes..." +msgstr "Vaš opomnik za danes je..." #: src/alarm/interface.cc:98 src/alarm/interface.cc:372 msgid "Reminder" @@ -231,7 +233,7 @@ #: src/alarm/interface.cc:192 msgid "Quiet after:" -msgstr "Utišaj čez:" +msgstr "Utišaj po:" #: src/alarm/interface.cc:204 msgid "hours" @@ -243,7 +245,7 @@ #: src/alarm/interface.cc:224 msgid "Choose the days for the alarm to come on" -msgstr "Ob katerih dneh se alarm vklopi?" +msgstr "Določite dneve za vklop alarma" #: src/alarm/interface.cc:231 msgid "Day" @@ -267,7 +269,7 @@ #: src/sid/xs_config.cc:94 src/sid/xs_config.cc:103 #: src/vumeter-qt/vumeter_qt.cc:39 msgid "seconds" -msgstr "sekund" +msgstr "sek" #: src/alarm/interface.cc:301 src/alarm/interface.cc:342 msgid "Volume" @@ -295,7 +297,7 @@ #: src/alarm/interface.cc:361 msgid "Playlist (optional)" -msgstr "Seznam predvajanja (neobvezno)" +msgstr "Seznam predvajanja (neobvezen)" #: src/alarm/interface.cc:365 msgid "Select a playlist" @@ -315,11 +317,11 @@ #: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 msgid "Album Art" -msgstr "Platnica albuma" +msgstr "Naslovnica albuma" #: src/alsa/alsa.h:64 msgid "ALSA Output" -msgstr "Izhod ALSA" +msgstr "ALSA" #: src/alsa/config.cc:28 msgid "" @@ -345,7 +347,7 @@ #: src/alsa/config.cc:188 msgid "Default mixer device" -msgstr "Privzet mešalnik" +msgstr "Privzeta mešalka" #: src/alsa/config.cc:296 msgid "PCM device:" @@ -353,11 +355,11 @@ #: src/alsa/config.cc:299 msgid "Mixer device:" -msgstr "Mešalnik:" +msgstr "Mešalka:" #: src/alsa/config.cc:302 msgid "Mixer element:" -msgstr "Mešalniški element:" +msgstr "Element mešalke:" #: src/amidiplug/amidi-plug.cc:42 msgid "AMIDI-Plug (MIDI Player)" @@ -415,15 +417,15 @@ #: src/amidiplug/i_configure.cc:110 msgid "Override default reverb:" -msgstr "Prezri privzet reverb:" +msgstr "Prezri privzeti odjek:" #: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 msgid "On" -msgstr "Vklop" +msgstr "vklopi" #: src/amidiplug/i_configure.cc:118 msgid "Override default chorus:" -msgstr "Prezri privzet zbor:" +msgstr "Prezri privzeti odmev:" #: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 msgid "Playback" @@ -431,15 +433,15 @@ #: src/amidiplug/i_configure.cc:129 msgid "Transpose:" -msgstr "Transponiraj:" +msgstr "Transpozicija:" #: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 msgid "semitones" -msgstr "poltoni" +msgstr "poltonov" #: src/amidiplug/i_configure.cc:132 msgid "Drum shift:" -msgstr "Zamik bobnov:" +msgstr "Premik bobnov:" #: src/amidiplug/i_configure.cc:134 msgid "note numbers" @@ -463,8 +465,9 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" -msgstr "Hitrost vzorčenja:" +msgstr "Frekvenca vzorčenja:" #: src/amidiplug/i_configure-fluidsynth.cc:57 #: src/amidiplug/i_configure-fluidsynth.cc:536 @@ -503,7 +506,7 @@ #: src/amidiplug/i_fileinfo.cc:204 msgid "Length (msec):" -msgstr "Dolžina (msec):" +msgstr "Dolžina (ms):" #: src/amidiplug/i_fileinfo.cc:207 msgid "No. of Tracks:" @@ -531,13 +534,14 @@ #: src/amidiplug/i_fileinfo.cc:284 msgid "* no comments available in this MIDI file *" -msgstr "* ta datoteka MIDI ne vsebuje komentarjev *" +msgstr "* ta MIDI datoteka ne vsebuje komentarjev *" #: src/amidiplug/i_fileinfo.cc:296 msgid "* no lyrics available in this MIDI file *" -msgstr "* ta datoteka MIDI ne vsebuje besedil *" +msgstr "* ta MIDI datoteka ne vsebuje besedil *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Zapri" @@ -597,7 +601,7 @@ msgid "Concave Rectangle" msgstr "Udrti pravokotnik" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ničesar" @@ -794,13 +798,29 @@ msgid "Audacious Playlists (audpl)" msgstr "Seznami predvajanja Audacious Playlists (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Barva" #: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 msgid "Blur Scope" -msgstr "Obseg zabrisa" +msgstr "Osciloskop" #: src/bs2b/plugin.cc:38 msgid "Bauer Stereophonic-to-Binaural (BS2B)" @@ -936,7 +956,7 @@ #: src/cdaudio/cdaudio-ng.cc:496 msgid "Failed to finish initializing opened CD drive." -msgstr "Napaka inicializiranja odprtega CD-pogona." +msgstr "Napaka inicializacije odprtega CD-pogona." #: src/cdaudio/cdaudio-ng.cc:509 msgid "Failed to retrieve first/last track number." @@ -967,15 +987,15 @@ #: src/cd-menu-items/cd-menu-items.cc:33 msgid "Audio CD Menu Items" -msgstr "Elementi glasbenega CD" +msgstr "Menijski vnos za predvajanje CD-nosilca" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "Pla_y CD" -msgstr "Predvaja_j CD" +msgstr "_Predvajaj CD" #: src/cd-menu-items/cd-menu-items.cc:45 msgid "_Add CD" -msgstr "Dod_aj CD" +msgstr "_Dodaj CD" #: src/compressor/compressor.cc:45 msgid "Compression" @@ -1059,7 +1079,7 @@ #: src/coreaudio/coreaudio.cc:53 msgid "CoreAudio output" -msgstr "Izhod CoreAudio" +msgstr "CoreAudio" #: src/coreaudio/coreaudio.cc:156 msgid "" @@ -1148,7 +1168,7 @@ #: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 #: src/delete-files/delete-files.cc:230 msgid "Delete Files" -msgstr "Izbiši datoteke" +msgstr "Izbris datotek" #: src/delete-files/delete-files.cc:120 msgid "No files are selected." @@ -1167,12 +1187,12 @@ #: src/delete-files/delete-files.cc:133 #, c-format msgid "Do you want to move %d files to the trash?" -msgstr "Želite premakniti %d datotek v koš?" +msgstr "Želite premakniti toliko datotek v koš: %d?" #: src/delete-files/delete-files.cc:134 #, c-format msgid "Do you want to permanently delete %d files?" -msgstr "Želite trajno izbrisati %d datotek?" +msgstr "Želite trajno izbrisati toliko datotek: %d?" #: src/delete-files/delete-files.cc:146 msgid "Move to trash" @@ -1183,7 +1203,7 @@ msgstr "Izbriši" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Prekliči" @@ -1221,7 +1241,7 @@ msgstr "Zamik:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1241,7 +1261,7 @@ msgid "FFmpeg Plugin" msgstr "Vtičnik FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1259,7 +1279,7 @@ #: src/filewriter/filewriter.cc:48 msgid "FileWriter Plugin" -msgstr "Vtičnik FileWriter" +msgstr "FileWriter" #: src/filewriter/filewriter.cc:316 #, c-format @@ -1330,7 +1350,7 @@ #: src/filewriter/filewriter.cc:411 msgid "Prepend track number to file name" -msgstr "Pripni številko skladbe imenu datoteke" +msgstr "Pred ime datoteke pripiši številko skladbe" #: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 msgid "Auto" @@ -1364,77 +1384,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1460,7 +1480,7 @@ #: src/filewriter/filewriter.cc:478 msgid "Algorithm quality:" -msgstr "Kvaliteta algoritma:" +msgstr "Kakovost algoritma:" #: src/filewriter/filewriter.cc:484 msgid "Bitrate:" @@ -1558,7 +1578,7 @@ msgid "Quality (0-1):" msgstr "Kakovost (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Splošno" @@ -1567,11 +1587,11 @@ msgid "FLAC Decoder" msgstr "Dekodirnik FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "brezizgubno" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1739,36 +1759,36 @@ #: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 #: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 msgid "_Open Files ..." -msgstr "Odpri datoteke ..." +msgstr "Odpri _datoteke" #: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 msgid "Open _URL ..." -msgstr "Odpri URL ..." +msgstr "Odpri _URL" #: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 msgid "_Add Files ..." -msgstr "Dodaj datoteke ..." +msgstr "Dodaj datotek_e" #: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 msgid "Add U_RL ..." -msgstr "Dodaj URL ..." +msgstr "Dodaj UR_L" #: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 msgid "Search _Library" -msgstr "Išči po knjižnici" +msgstr "Išči po _knjižnici" #: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 msgid "A_bout ..." -msgstr "O Audacious ..." +msgstr "O programu _Audacious" #: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 msgid "_Settings ..." -msgstr "Nastavitve ..." +msgstr "_Nastavitve" #: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 #: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 msgid "_Quit" -msgstr "Izhod ..." +msgstr "_Izhod" #: src/gtkui/menus.cc:92 src/gtkui/menus.cc:224 #: src/moonstone/playlist_tabs.cc:306 src/qtui/menus.cc:135 @@ -1776,70 +1796,70 @@ #: src/search-tool/search-tool.cc:343 src/statusicon-qt/statusicon.cc:106 #: src/statusicon/statusicon.cc:276 msgid "_Play" -msgstr "Predvajaj" +msgstr "_Predvajaj" #: src/gtkui/menus.cc:93 src/qtui/menus.cc:137 #: src/statusicon-qt/statusicon.cc:107 src/statusicon/statusicon.cc:277 msgid "Paus_e" -msgstr "Premor" +msgstr "P_remor" #: src/gtkui/menus.cc:94 src/qtui/menus.cc:139 #: src/statusicon-qt/statusicon.cc:108 src/statusicon/statusicon.cc:278 msgid "_Stop" -msgstr "Ustavi" +msgstr "_Ustavi" #: src/gtkui/menus.cc:95 src/qtui/menus.cc:141 #: src/statusicon-qt/statusicon.cc:109 src/statusicon/statusicon.cc:279 msgid "Pre_vious" -msgstr "Prejšnja" +msgstr "Pr_ejšnja" #: src/gtkui/menus.cc:96 src/qtui/menus.cc:143 #: src/statusicon-qt/statusicon.cc:110 src/statusicon/statusicon.cc:280 msgid "_Next" -msgstr "Naslednja" +msgstr "Nas_lednja" #: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 #: src/skins-qt/menus.cc:105 msgid "Previous Album" -msgstr "Prejšnji album" +msgstr "Prejš_nji album" #: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 #: src/skins-qt/menus.cc:106 msgid "Next Album" -msgstr "Naslednji album" +msgstr "Nasledn_ji album" #: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 msgid "_Repeat" -msgstr "Ponavljaj" +msgstr "P_onavljaj" #: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 msgid "S_huffle" -msgstr "Mešaj" +msgstr "_Mešaj" #: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 msgid "Shuffle by Albu_m" -msgstr "Mešaj med albumi" +msgstr "Me_šaj med albumi" #: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 msgid "N_o Playlist Advance" -msgstr "Ne nadaljuj po seznamu predvajanja" +msgstr "Ne nadaljuj po _seznamu predvajanja" #: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 msgid "Stop A_fter This Song" -msgstr "Ustavi po tej skladbi" +msgstr "Ustavi po _tej skladbi" #: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 #: src/qtui/menus.cc:292 msgid "Song _Info ..." -msgstr "Informacije o skladbi ..." +msgstr "_Informacije o skladbi" #: src/gtkui/menus.cc:107 msgid "Jump to _Time ..." -msgstr "Skoči na ..." +msgstr "Skoči na" #: src/gtkui/menus.cc:108 msgid "_Jump to Song ..." -msgstr "Skoči na skladbo ..." +msgstr "Skoči na skladbo" #: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 msgid "Set Repeat Point _A" @@ -1851,7 +1871,7 @@ #: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 msgid "_Clear Repeat Points" -msgstr "Počisti točke ponavljanja" +msgstr "Počisti to_čki ponavljanja" #: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 #: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 @@ -1928,111 +1948,111 @@ #: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 msgid "_Play/Resume" -msgstr "Predvajaj/premor" +msgstr "_Predvajaj/nadaljuj" #: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 msgid "_Refresh" -msgstr "Osveži" +msgstr "_Osveži" #: src/gtkui/menus.cc:159 src/qtui/menus.cc:220 msgid "_Sort" -msgstr "Razvrsti" +msgstr "_Razvrsti" #: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 msgid "Sort Se_lected" -msgstr "Razvrsti izbrane" +msgstr "Razvrsti _izbrane" #: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 msgid "Remove _Duplicates" -msgstr "Odstani dvojnike" +msgstr "Odstrani _dvojnike" #: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 msgid "Remove _Unavailable Files" -msgstr "Odstrani nedosegljive datoteke" +msgstr "Odstrani _nedosegljive datoteke" #: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 #: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 msgid "_New" -msgstr "Novo" +msgstr "No_v" #: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 msgid "Ren_ame ..." -msgstr "Preimenuj ..." +msgstr "Pr_eimenuj" #: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 #: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 #: src/qtui/playlist_tabs.cc:333 msgid "Remo_ve" -msgstr "Odstrani" +msgstr "Od_strani" #: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 msgid "_Import ..." -msgstr "Uvozi ..." +msgstr "_Uvozi" #: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 msgid "_Export ..." -msgstr "Izvozi ..." +msgstr "I_zvozi" #: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 msgid "Playlist _Manager ..." -msgstr "Upravljalnik seznamov predvajanj ..." +msgstr "Upravljalnik seznamov predvajan_j" #: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 msgid "_Queue Manager ..." -msgstr "Upravljalnik vrste ..." +msgstr "Upravljalnik vrs_te" #: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 msgid "Volume _Up" -msgstr "Zvišaj glasnost" +msgstr "Z_višaj glasnost" #: src/gtkui/menus.cc:177 src/qtui/menus.cc:243 msgid "Volume _Down" -msgstr "Znižaj glasnost" +msgstr "Z_nižaj glasnost" #: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 msgid "_Equalizer ..." -msgstr "Uravnalnik" +msgstr "_Izenačevalnik" #: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 msgid "E_ffects ..." -msgstr "Učinki ..." +msgstr "_Učinki" #: src/gtkui/menus.cc:182 msgid "_Record Stream" -msgstr "Snemanje pretoka" +msgstr "Snemanje _pretoka" #: src/gtkui/menus.cc:183 msgid "Audio _Settings ..." -msgstr "Zvočne nastavitve" +msgstr "_Zvočne nastavitve" #: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 msgid "Show _Menu Bar" -msgstr "Prikaži vrstico z meniji" +msgstr "Prikaži _menijsko vrstico" #: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 msgid "Show I_nfo Bar" -msgstr "Prikažo informacijsko vrstico" +msgstr "Prikaži _informacijsko vrstico" #: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 msgid "Show Info Bar _Album Art" -msgstr "" +msgstr "V informacijski vrstici prikaži _platnico" #: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 msgid "Show Info Bar Vis_ualization" -msgstr "Prikaži stolpično vizualizacijo" +msgstr "Prikaži stolpčno _vizualizacijo" #: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 msgid "Show _Status Bar" -msgstr "Prikaži vrstico stanja" +msgstr "Prikaži vrstico _stanja" #: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 msgid "Show _Remaining Time" -msgstr "Prikaži preostali čas" +msgstr "Prikaži preostali _čas" #: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 #: src/skins-qt/menus.cc:152 msgid "_Visualizations ..." -msgstr "Vizualizacije ..." +msgstr "Vi_zualizacije" #: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 msgid "_File" @@ -2057,7 +2077,7 @@ #: src/gtkui/menus.cc:204 src/qtui/menus.cc:283 msgid "_View" -msgstr "Poglej" +msgstr "Pogled" #: src/gtkui/menus.cc:209 src/qtui/menus.cc:294 msgid "_Queue/Unqueue" @@ -2094,7 +2114,7 @@ #: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 #: src/qtui/playlist_tabs.cc:331 msgid "_Rename ..." -msgstr "Preimenuj ..." +msgstr "Preimenuj" #: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 msgid "Playlist Tabs" @@ -2106,23 +2126,23 @@ #: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 msgid "Show entry counts" -msgstr "Prikaži števec vnosov" +msgstr "Prikaži število skladb v naslovu zavihka" #: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 msgid "Show close buttons" -msgstr "Prikaži gumbe za zaprtje" +msgstr "Prikaži gumb za zaprtje zavihka" #: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 msgid "Playlist Columns" -msgstr "Stolpci seznamov predvajanj" +msgstr "Glava seznama predvajanja" #: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 msgid "Show column headers" -msgstr "Prikaži glave stolpcev" +msgstr "Prikaži glavo" #: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 msgid "Scroll on song change" -msgstr "Pomakni seznam ob zamenjavi skladbe" +msgstr "Zamakni dolg seznam ob zamenjavi skladbe" #: src/gtkui/ui_gtk.cc:74 msgid "GTK Interface" @@ -2161,7 +2181,7 @@ #: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 #: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 msgid "Search Library" -msgstr "Knjižnjica iskanja" +msgstr "Knjižnica iskanja" #: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 #: src/qtui/main_window.cc:147 @@ -2207,7 +2227,7 @@ #: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 msgid "Menu" -msgstr "" +msgstr "Meni" #: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 msgid "mono" @@ -2233,8 +2253,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2254,7 +2274,7 @@ #: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 msgid "Pause/Resume" -msgstr "Premor/predvajaj" +msgstr "Premor/nadaljuj" #: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 msgid "Next track" @@ -2302,7 +2322,7 @@ #: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 msgid "Toggle stop after current" -msgstr "Preklopi ustavitev po trenutnjem" +msgstr "Preklopi ustavitev po trenutnem" #: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 msgid "Raise player window(s)" @@ -2382,7 +2402,7 @@ #: src/jack/jack-ng.cc:54 msgid "JACK Output" -msgstr "Izhod JACK" +msgstr "JACK" #: src/jack/jack-ng.cc:126 msgid "Client name:" @@ -2406,7 +2426,7 @@ #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" -msgstr "vrat, če ima vhod manj kanalov" +msgstr "vrat(a), če ima vhod manj kanalov" #: src/jack/jack-ng.cc:143 msgid "Ignore insufficient number of ports" @@ -2420,7 +2440,7 @@ #: src/jack/jack-ng.cc:195 #, c-format msgid "Only %d JACK output ports were found but %d are required." -msgstr "Le %d izhodnih vrat za JACK je bilo najdenih, potrebnih pa je %d" +msgstr "Najdenih toliko izhodnih vrat za JACK: %d, potrebnih pa toliko: %d." #: src/jack/jack-ng.cc:210 #, c-format @@ -2433,7 +2453,7 @@ "depth to floating-point in Audacious settings." msgstr "" "JACK podpira le zvok s plavajočo vejico. V nastavitvah za Audacious morate " -"nastaviti ozhodno bitno globino na tisto s plavajočo vejico." +"nastaviti izhodno bitno globino na tisto s plavajočo vejico." #: src/jack/jack-ng.cc:245 msgid "Failed to connect to the JACK server; is it running?" @@ -2544,11 +2564,11 @@ #: src/lyricwiki-qt/lyricwiki.cc:89 msgid "Lyrics" -msgstr "Besedilo" +msgstr "Besedilo skladbe" #: src/lyricwiki-qt/lyricwiki.cc:116 msgid "Nowhere" -msgstr "Nikamor" +msgstr "ne išči" #: src/lyricwiki-qt/lyricwiki.cc:117 msgid "lyrics.ovh" @@ -2556,31 +2576,33 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Izvajalec je skrajšan na začetku, naslov -- na koncu" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Skrajšaj na znakih:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" msgstr "" +"Nad regularnimi izrazi, ločenimi s presledkom, je izvedena operacija " +"OR" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Razdruži na znakih:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Nadalje skrajšaj na znakih" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" -msgstr "" +msgstr "Splošno" #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Razdeli naslov v izvajalca in naslov na znakih" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2588,7 +2610,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:139 msgid "Fetch lyrics from:" -msgstr "Išči besedila na:" +msgstr "Storitev za besedila:" #: src/lyricwiki-qt/lyricwiki.cc:142 msgid "Store fetched lyrics in local cache" @@ -2614,9 +2636,9 @@ #: src/lyricwiki-qt/lyricwiki.cc:403 msgid "Looking for lyrics ..." -msgstr "Iščem besedilo ..." +msgstr "Iščem besedilo..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Napaka" @@ -2686,7 +2708,7 @@ #: src/mixer/mixer.cc:260 msgid "Output channels:" -msgstr "Izhodni kanali:" +msgstr "Št. izhodnih kanalov:" #: src/mms/mms.cc:35 msgid "MMS Plugin" @@ -2710,15 +2732,15 @@ #: src/modplug/plugin_main.cc:60 msgid "Linear (fast)" -msgstr "Linearno (hitro)" +msgstr "Linearni (hitro)" #: src/modplug/plugin_main.cc:61 msgid "Spline (good)" -msgstr "Zlepek (dobro)" +msgstr "Spline (dobro)" #: src/modplug/plugin_main.cc:62 msgid "Polyphase (best)" -msgstr "Polifazno (najboljše)" +msgstr "Polifazni (najboljše)" #: src/modplug/plugin_main.cc:63 msgid "Sample rate" @@ -2747,7 +2769,7 @@ #: src/modplug/plugin_main.cc:77 msgid "Cutoff:" -msgstr "Odrez:" +msgstr "Odreži pri:" #: src/modplug/plugin_main.cc:90 msgid "Reverb" @@ -2801,7 +2823,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Moonstone" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2931,7 +2953,7 @@ #: src/notify/notify.cc:104 msgid "Show playback controls" -msgstr "Prikaži nadzornike predvajanja" +msgstr "Prikaži gumbe za nadzor predvajanja" #: src/notify/notify.cc:106 msgid "Always show notification" @@ -2943,7 +2965,7 @@ #: src/notify/notify.cc:110 msgid "Custom notification duration:" -msgstr "" +msgstr "Trajanje po meri:" #: src/notify/osd.cc:74 msgid "Show" @@ -2975,25 +2997,25 @@ msgid "Interpolation:" msgstr "Interpolacija:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" -msgstr "Linearno" +msgstr "Linearna" #: src/openmpt/mptwrap.h:52 msgid "Cubic" -msgstr "Kubično" +msgstr "Kubična" #: src/openmpt/mptwrap.h:53 msgid "Windowed sinc" -msgstr "Okenski sinc" +msgstr "Oknjeni sinc" #: src/oss4/oss.h:75 msgid "OSS4 Output" -msgstr "Izhod OSS4" +msgstr "OSS4" #: src/oss4/oss.h:77 msgid "OSS3 Output" -msgstr "Izhod OSS3" +msgstr "OSS3" #: src/oss4/plugin.cc:35 msgid "Default device" @@ -3001,7 +3023,7 @@ #: src/oss4/plugin.cc:78 msgid "Audio device:" -msgstr "Zvokona naprava:" +msgstr "Zvočna naprava:" #: src/oss4/plugin.cc:81 msgid "Use alternate device:" @@ -3060,13 +3082,13 @@ msgid "OpenPSF Configuration" msgstr "Nastavitve OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Prezri dolžino iz datoteke" #: src/pulse/pulse_audio.cc:42 msgid "PulseAudio Output" -msgstr "Izhod PulseAudio" +msgstr "PulseAudio" #: src/pulse/pulse_audio.cc:72 msgid "Context name:" @@ -3112,7 +3134,7 @@ #: src/qtaudio/qtaudio.cc:44 msgid "QtMultimedia Output" -msgstr "Izhod QtMultimedia" +msgstr "QtMultimedia" #: src/qtaudio/qtaudio.cc:72 msgid "" @@ -3140,10 +3162,19 @@ "\n" "License: GPLv2+" msgstr "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" #: src/qthotkey/gui.cc:165 msgid "Press a key combination inside a text field." -msgstr "" +msgstr "Vnesite tipkovno kombinacijo v besedilno polje." #: src/qthotkey/plugin.cc:103 msgid "" @@ -3160,34 +3191,46 @@ " Jonathan A. Davis ,\n" " Jeremy Tan " msgstr "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " #: src/qtui/menus.cc:109 msgid "_Open Folder ..." -msgstr "_Odpri mapo ..." +msgstr "_Odpri mapo" #: src/qtui/menus.cc:115 msgid "_Add Folder ..." -msgstr "_Dodaj mapo ..." +msgstr "Dodaj _mapo" #: src/qtui/menus.cc:128 msgid "_Log Inspector ..." -msgstr "Pregledovalnik _zapisnika ..." +msgstr "Pregledovalnik _zapisnika" #: src/qtui/menus.cc:218 msgid "_Find ..." -msgstr "_Išči ..." +msgstr "_Išči" #: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 msgid "Audio Settings ..." -msgstr "Zvočne nastavitve ..." +msgstr "Zvočne nastavitve" #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3203,7 +3246,7 @@ #: src/qtui/settings.cc:59 msgid "Auto-hide" -msgstr "Samodejno skrij" +msgstr "Če je odprt več kot eden" #: src/qtui/settings.cc:60 msgid "Never" @@ -3215,7 +3258,7 @@ #: src/qtui/settings.cc:78 msgid "Use bold font for column headers" -msgstr "" +msgstr "Prikaži z odebeljeno pisavo" #: src/resample/resample.cc:43 msgid "Sample Rate Converter" @@ -3259,7 +3302,7 @@ #: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 msgid "Rate:" -msgstr "Hitrost:" +msgstr "Hitrost vzorčenja:" #: src/resample/resample.cc:202 msgid "Rate Mappings" @@ -3311,7 +3354,7 @@ #: src/scrobbler2/config_window.cc:19 msgid "Checking Last.fm access ..." -msgstr "Preverjam dostop do Last.fm ..." +msgstr "Preverjam dostop do Last.fm..." #: src/scrobbler2/config_window.cc:27 msgid "" @@ -3344,7 +3387,7 @@ #: src/scrobbler2/config_window.cc:87 msgid "Revoke Permission" -msgstr "Odvzemi pravico" +msgstr "Odvzemi pravice" #: src/scrobbler2/config_window.cc:91 msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." @@ -3391,7 +3434,7 @@ #: src/sdlout/sdlout.cc:43 msgid "SDL Output" -msgstr "Izhod SDL" +msgstr "SDL" #: src/sdlout/sdlout.cc:72 msgid "" @@ -3404,7 +3447,7 @@ #: src/search-tool/library.cc:35 src/search-tool/library.cc:46 #: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 msgid "Library" -msgstr "Knjižnjica" +msgstr "Knjižnica" #: src/search-tool-qt/search-model.cc:49 src/search-tool/search-tool.cc:291 #, c-format @@ -3433,23 +3476,23 @@ #: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 msgid "Rescan library at startup" -msgstr "Vnovič preišči knjižnjico ob zagonu" +msgstr "Ob zagonu ponovno preišči knjižnico" #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" -msgstr "Opazuj knjižnjico za spremembe" +msgstr "Opazuj knjižnico za spremembe" #: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 msgid "" "To import your music library into Audacious, choose a folder and then click " "the \"refresh\" icon." msgstr "" -"Za uvoz vaše knjižnjice v program Audacious izberite mapo in kliknite ikono " +"Za uvoz vaše knjižnice v program Audacious izberite mapo in kliknite ikono " "za osvežitev." #: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 msgid "Please wait ..." -msgstr "Prosimo počajakte ..." +msgstr "Prosimo počakajte..." #: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 msgid "Choose Folder" @@ -3457,7 +3500,7 @@ #: src/search-tool-qt/search-tool-qt.cc:201 msgid "Search library" -msgstr "Išči po knjižnjici" +msgstr "Išči po knjižnici" #: src/search-tool-qt/search-tool-qt.cc:327 src/search-tool/search-tool.cc:155 #, c-format @@ -3491,7 +3534,7 @@ #: src/sid/xs_config.cc:62 msgid "Channels:" -msgstr "Kanali:" +msgstr "Št. kanalov:" #: src/sid/xs_config.cc:68 msgid "Emulation" @@ -3523,7 +3566,7 @@ #: src/sid/xs_config.cc:81 msgid "Set maximum playback time:" -msgstr "Nastavi največji čas predvajanja:" +msgstr "Nastavi najdaljši čas predvajanja:" #: src/sid/xs_config.cc:87 msgid "Use only when song length is unknown" @@ -3531,7 +3574,7 @@ #: src/sid/xs_config.cc:90 msgid "Set minimum playback time:" -msgstr "Nastavi najmanjši čas predvajanja:" +msgstr "Nastavi najkrajši čas predvajanja:" #: src/sid/xs_config.cc:96 msgid "Subtunes" @@ -3547,7 +3590,7 @@ #: src/sid/xs_config.cc:105 msgid "Note" -msgstr "Nota" +msgstr "Opomba" #: src/silence-removal/silence-removal.cc:39 msgid "Silence Removal" @@ -3575,7 +3618,7 @@ #: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 msgid "Repeat points cleared." -msgstr "Točke ponavljanja izbrisane." +msgstr "Točki ponavljanja izbrisani." #: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 msgid "Repeat point A set." @@ -3631,7 +3674,7 @@ #: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 msgid "Audacious Equalizer" -msgstr "Uravnalnik Audacious" +msgstr "Izenačevalnik Audacious" #: src/skins/main.cc:452 src/skins-qt/main.cc:436 msgid "Recording on" @@ -3700,15 +3743,15 @@ #: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 msgid "Effects ..." -msgstr "Učinki ..." +msgstr "Učinki" #: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 msgid "Open Files ..." -msgstr "Odpri datoteke ..." +msgstr "Odpri datoteke" #: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 msgid "Open URL ..." -msgstr "Odpri URL ..." +msgstr "Odpri URL" #: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 msgid "Playback" @@ -3724,30 +3767,30 @@ #: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 msgid "View" -msgstr "Poglej" +msgstr "Pogled" #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Storitve" #: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 msgid "About ..." -msgstr "O programu ..." +msgstr "O programu" #: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 msgid "Settings ..." -msgstr "Nastavitve ..." +msgstr "Nastavitve" #: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 msgid "Quit" msgstr "Izhod" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." -msgstr "Podatki o skladbi ..." +msgstr "Podatki o skladbi" #: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 msgid "Shuffle by Album" @@ -3765,13 +3808,13 @@ msgid "Clear A-B Repeat" msgstr "Počisti ponavljanje A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." -msgstr "Skoči na skladbo ..." +msgstr "Skoči na skladbo" #: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 msgid "Jump to Time ..." -msgstr "Skoči na čas ..." +msgstr "Skoči na čas" #: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 msgid "Play/Resume" @@ -3783,7 +3826,7 @@ #: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 msgid "Rename Playlist ..." -msgstr "Preimenuj seznam predvajanja ..." +msgstr "Preimenuj seznam predvajanja" #: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 msgid "Remove Playlist" @@ -3799,19 +3842,19 @@ #: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 msgid "Import Playlist ..." -msgstr "Uvozi seznam predvajanja ..." +msgstr "Uvozi seznam predvajanja" #: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 msgid "Export Playlist ..." -msgstr "Izvozi seznam predvajanja ..." +msgstr "Izvozi seznam predvajanja" #: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 msgid "Playlist Manager ..." -msgstr "Upravljalnik seznamov predvajanj ..." +msgstr "Upravljalnik seznamov predvajanj" #: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 msgid "Queue Manager ..." -msgstr "Upravljalnik vrste ..." +msgstr "Upravljalnik vrste" #: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 msgid "Refresh Playlist" @@ -3823,7 +3866,7 @@ #: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 msgid "Show Equalizer" -msgstr "Prikaži uravnalnik" +msgstr "Prikaži izenačevalnik" #: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 msgid "Show Remaining Time" @@ -3847,31 +3890,31 @@ #: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 msgid "Roll Up Equalizer" -msgstr "Privzdigni uravnalnik" +msgstr "Privzdigni izenačevalnik" #: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 msgid "Add URL ..." -msgstr "Dodaj URL ..." +msgstr "Dodaj URL" #: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 msgid "Add Files ..." -msgstr "Dodaj datoteke ..." +msgstr "Dodaj datoteke" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Po naslovu" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Po imenu datoteke" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Po poti datoteke" @@ -3899,104 +3942,104 @@ msgid "Remove Selected" msgstr "Odstrani izbrane" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Išči in izberi" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Obrni izbor" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Izberi nič" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Izberi vse" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Po številki skladbe" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Po izvajalcu" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Po albumu" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Po izvajalcu albuma" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Po datumu izdaje" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Po žanru" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Po dolžini" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Po naslovu po meri" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Po komentarju" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Razvrsti seznam naključno" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Razvrsti seznam vzvratno " -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Razvrsti izbrane" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Razvrsti seznam" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Odpri vsebujočo mapo" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Izreži" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopiraj" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Prilepi" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Prilepi na konec" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Dodaj/odstrani iz vrste" @@ -4005,7 +4048,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d od %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Urejevalnik seznamov predvajanj Audacious" @@ -4015,173 +4058,224 @@ #: src/skins-qt/menus.cc:75 msgid "Open Folder ..." -msgstr "Odpri mapo ..." +msgstr "Odpri mapo" #: src/skins-qt/menus.cc:159 msgid "Add Folder ..." -msgstr "Dodaj mapo ..." +msgstr "Dodaj mapo" + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Išči v dejavnem seznamu predvajanja" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Iščite po seznamu predvajanja z izpolnjevanjem enega ali več polj. Uporablja " +"se regex, neodvisen od velikosti črk. Če sintakse regex ne poznate, " +"dobesedno vpišite termine za iskanje." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Naslov:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Izvajalec:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Ime datoteke:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Počisti prejšnji izbor pred iskanjem" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Samodejno prikaži vrsto za ujemajoče zadetke" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Ustvari nov seznam predvajanja z ujemajočimi zadetki" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Išči" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Predvajalnik:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Izberite pisavo glavnega okna predvajalnika:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Seznam predvajanja:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Izberite pisavo seznama predvajanja:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Preobleka" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Pisave" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Uporabi bitne pisave (podpirajo le znake ASCII, brez šumnikov)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Drseč naslov skladbe" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Drseč naslov skladbe v obeh smereh" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizator" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Osciloskop" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Spektrogram / VU-meter" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Izklop" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Običajno" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ogenj" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Navpične črte" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Črte" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Vrstice" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Najpočasneje" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Počasi" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Srednje" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Hitro" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Najhitreje" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Pike" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Črta" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Trdno" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Led" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Gladko" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Barvanje:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Slog:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Padec:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Vrh padca:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Slog osciloskopa:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Barve spektrograma:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" -msgstr "Stil VU-metra:" +msgstr "Slog VU-metra:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Vrsta" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Vrsta vizualizacije:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizator" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Prikaži vrhe" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizacija" @@ -4193,58 +4287,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Nearhivirane Winamp 2.x preobleke" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Išči v dejavnem seznamu predvajanja" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Išči" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Iščite po seznamu predvajanja z izpolnjevanjem enega ali več polj. Uporablja " -"se regex, neodvisen od velikosti črk. Če sintakse regex ne poznate, " -"dobesedno vpišite termine za iskanje." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Naslov:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Izvajalec:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Ime datoteke:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Počisti prejšen izbor pred iskanjem" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Samodejno prikaži vrsto za ujemajoče zadetke" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Ustvari nov seznam predvajanja z ujemajočimi zadetki" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Vtičnik Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4286,7 +4333,7 @@ #: src/sndio/sndio.cc:43 msgid "Sndio Output" -msgstr "Izhod Sndio" +msgstr "Sndio" #: src/sndio/sndio.cc:98 msgid "Device (blank for default):" @@ -4315,7 +4362,7 @@ #: src/songchange/song_change.cc:30 msgid "Song Change" -msgstr "Sprememba skladbe" +msgstr "Dejanja ob spremembi skladbe" #: src/songchange/song_change.cc:245 msgid "Commands" @@ -4376,8 +4423,8 @@ "Parameters passed to the shell should be enclosed in quotation marks. " "Unquoted parameters may lead to unexpected results." msgstr "" -"Parametri, podani ukazni lupini morajo biti obdani z narekovaji, da se " -"izognete nepričakovanim ukazom." +"Parametri, podani ukazni lupini, morajo biti obdani z narekovaji, da se " +"izognete nepričakovanim odzivom." #: src/song-info-qt/song-info.cc:30 msgid "Song Info" @@ -4403,31 +4450,31 @@ #: src/soxr/sox-resampler.cc:178 msgid "Quick" -msgstr "Hitro" +msgstr "hitra" #: src/soxr/sox-resampler.cc:179 msgid "Low" -msgstr "Nizko" +msgstr "nizka" #: src/soxr/sox-resampler.cc:181 msgid "High" -msgstr "Visoko" +msgstr "visoka" #: src/soxr/sox-resampler.cc:182 msgid "Very High" -msgstr "Zelo visoko" +msgstr "zelo visoka" #: src/soxr/sox-resampler.cc:183 msgid "Ultra High" -msgstr "Izjemno visoko" +msgstr "izjemno visoka" #: src/soxr/sox-resampler.cc:187 msgid "Minimum" -msgstr "Najmanjše" +msgstr "najmanjša" #: src/soxr/sox-resampler.cc:188 msgid "Intermediate" -msgstr "Srednje" +msgstr "srednja" #: src/soxr/sox-resampler.cc:193 msgid "Quality:" @@ -4455,11 +4502,11 @@ #: src/speedpitch/speed-pitch.cc:248 msgid "Decouple from pitch" -msgstr "Loči od višine tona" +msgstr "Razdruži od višine tona" #: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 msgid "Multiplier:" -msgstr "Množilnik:" +msgstr "Faktor:" #: src/speedpitch/speed-pitch.cc:254 msgid "Pitch" @@ -4467,7 +4514,7 @@ #: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 msgid "Status Icon" -msgstr "Statusna ikona" +msgstr "Ikona v orodni vrstici" #: src/statusicon-qt/statusicon.cc:65 msgid "" @@ -4519,7 +4566,7 @@ #: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 msgid "Se_ttings ..." -msgstr "Nas_tavitve ..." +msgstr "Nas_tavitve" #: src/statusicon/statusicon.cc:373 msgid "" @@ -4575,7 +4622,7 @@ #: src/streamtuner/ihr-model.cc:156 msgid "Call Letters" -msgstr "Klicne črke" +msgstr "Klicni znak" #: src/streamtuner/ihr-model.cc:162 msgid "Description" @@ -4651,7 +4698,7 @@ #: src/streamtuner/shoutcast-model.cc:205 msgid "Public Radio" -msgstr "Javni radio" +msgstr "Public Radio" #: src/streamtuner/shoutcast-model.cc:206 msgid "R&B and Urban" @@ -4708,7 +4755,7 @@ #: src/tonegen/tonegen.cc:92 msgid "Tone Generator: " -msgstr "Generator tonov: " +msgstr "Generator tonov:" #: src/tonegen/tonegen.cc:161 msgid "" @@ -4724,14 +4771,27 @@ "To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(nadaljnja sporočila so bila skrita)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." -msgstr "Nalagam ..." +msgstr "Nalagam..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Podatki" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Odstranitev glasu" @@ -4889,14 +4949,38 @@ "\n" "Some of the plugin code was by Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Dekodirnik 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Nastavitve XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Deljivi seznami predvajanja XML (XSPF)" diff -Nru audacious-plugins-4.1/po/sq.po audacious-plugins-4.2/po/sq.po --- audacious-plugins-4.1/po/sq.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sq.po 2022-07-10 01:12:34.000000000 +0000 @@ -10,9 +10,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-17 21:35+0000\n" -"Last-Translator: Besnik Bleta \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Milot Shala , 2013\n" "Language-Team: Albanian (http://www.transifex.com/audacious/audacious/" "language/sq/)\n" "Language: sq\n" @@ -30,7 +30,7 @@ msgstr "" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "" @@ -60,7 +60,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Të ndryshme" @@ -397,6 +397,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -472,6 +473,7 @@ msgstr "* s’ka vargje në këtë kartelë MIDI *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Mbylle" @@ -519,7 +521,7 @@ msgid "Concave Rectangle" msgstr "Drejtkëndësh i Lugët" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Asnjë" @@ -714,6 +716,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Luajlista Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Ngjyrë" @@ -1087,7 +1105,7 @@ msgstr "Fshije" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Anuloje" @@ -1121,7 +1139,7 @@ msgstr "Vonesë:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1141,7 +1159,7 @@ msgid "FFmpeg Plugin" msgstr "Shtojcë FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1258,77 +1276,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1452,7 +1470,7 @@ msgid "Quality (0-1):" msgstr "Cilësi (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Të përgjithshme" @@ -1461,11 +1479,11 @@ msgid "FLAC Decoder" msgstr "Shkodues FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "pa humbje" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2113,8 +2131,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2457,7 +2475,7 @@ msgid "Looking for lyrics ..." msgstr "Po kërkohet për vargje …" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Gabim" @@ -2807,7 +2825,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2887,7 +2905,7 @@ msgid "OpenPSF Configuration" msgstr "Formësim OpenPFS-je" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Shpërfille gjatësinë prej kartele" @@ -3505,7 +3523,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Shërbime" @@ -3522,7 +3540,7 @@ msgstr "Dil" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Të dhëna Kënge …" @@ -3542,7 +3560,7 @@ msgid "Clear A-B Repeat" msgstr "Spastro Përsëritje A-B" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3635,20 +3653,20 @@ msgstr "Shtoni Kartela …" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Sipas Titujsh" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Sipas Emrash Kartelash" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Sipas Shtigjesh Kartelash" @@ -3676,104 +3694,104 @@ msgid "Remove Selected" msgstr "Hiq të Përzgjedhurën" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Kërkoni dhe Përzgjidhni" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Mos Përzgjidh Gjë" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Përzgjidhi Krejt" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Sipas Numrash Pjesësh" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Sipas Artistësh" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Hap Dosjen Që e Përmban" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Prije" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopjoje" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Ngjite" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Ngjite në Fund" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3782,7 +3800,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d nga %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "" @@ -3798,167 +3816,215 @@ msgid "Add Folder ..." msgstr "Shtoni Dosje …" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titull:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artist:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Emër Kartele:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Lojtës:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Luajlistë:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Lëkurçe" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Shkronja" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analizues" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Fokus" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Off" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Zjarr" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vija vertikale" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Vija" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Shtylla" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Pika" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Vijë" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stil:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Stil Matësi VU:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Lloj" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Lloj vizualizimi:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analizues" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Shfaq kulme" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Vizualizim" @@ -3970,55 +4036,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titull:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artist:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Emër Kartele:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4447,14 +4469,27 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Mesazhet e mëtejshëm janë fshehur.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Po punohet …" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Informacion" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Heqje Zëri" @@ -4577,14 +4612,38 @@ "\n" "Një pjesë e kodit të shtojcës qe nga Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Shkodues 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Formësim XSF-je" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "Listat e dëgjimit XML shareable (XSPF)" diff -Nru audacious-plugins-4.1/po/sr.po audacious-plugins-4.2/po/sr.po --- audacious-plugins-4.1/po/sr.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sr.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,23 +3,24 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# Мирослав Николић , 2014-2015 -# Мирослав Николић , 2020 +# Мирослав Николић , 2014-2015,2020,2022 +# Мирослав Николић , 2020,2022 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-12 14:22+0000\n" -"Last-Translator: Мирослав Николић \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Мирослав Николић , " +"2014-2015,2020,2022\n" "Language-Team: Serbian (http://www.transifex.com/audacious/audacious/" "language/sr/)\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -30,7 +31,7 @@ msgstr "Ад прикључак (АдБибл програм)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "низовни" @@ -60,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Разно" @@ -471,6 +472,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Проток узорка:" @@ -546,6 +548,7 @@ msgstr "* нема доступних текстова песама у овој МИДИ датотеци *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Затвори" @@ -605,7 +608,7 @@ msgid "Concave Rectangle" msgstr "Удубљен правоугаоник" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ништа" @@ -803,6 +806,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Аудацијусови спискови нумера (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Боје" @@ -1192,7 +1211,7 @@ msgstr "Обриши" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Откажи" @@ -1230,7 +1249,7 @@ msgstr "Застој:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1250,7 +1269,7 @@ msgid "FFmpeg Plugin" msgstr "Прикључак ФФмпег-а" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1373,77 +1392,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kb/s" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kb/s" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kb/s" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kb/s" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kb/s" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kb/s" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kb/s" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kb/s" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kb/s" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kb/s" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kb/s" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kb/s" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kb/s" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kb/s" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kb/s" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kb/s" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1567,7 +1586,7 @@ msgid "Quality (0-1):" msgstr "Квалитет (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Опште" @@ -1576,11 +1595,11 @@ msgid "FLAC Decoder" msgstr "ФЛАЦ декодер" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "без губитака" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2241,8 +2260,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2627,7 +2646,7 @@ msgid "Looking for lyrics ..." msgstr "Тражим текст песме ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Грешка" @@ -2987,7 +3006,7 @@ msgid "Interpolation:" msgstr "Уметање:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Линеарно" @@ -3072,7 +3091,7 @@ msgid "OpenPSF Configuration" msgstr "ОпенПСФ подешавања" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Занемари трајање из датотеке" @@ -3759,7 +3778,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Услуге" @@ -3776,7 +3795,7 @@ msgstr "Изађи" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Подаци о песми ..." @@ -3796,7 +3815,7 @@ msgid "Clear A-B Repeat" msgstr "Очисти А—Б понављања" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Пређи на песму ..." @@ -3889,20 +3908,20 @@ msgstr "Додај датотеке ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Према наслову" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Према називу датотеке" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Према путањи датотеке" @@ -3930,104 +3949,104 @@ msgid "Remove Selected" msgstr "Уклони означене" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Претражи и означи" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Обрни избор" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Означи ништа" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Означи све" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Према броју нумере" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Према извођачу" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Према албуму" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Према извођачу албума" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Према датуму издавања" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Према жанру" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Према трајању" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Према произвољном наслову" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Према коментару" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Насумице испремештај списак" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Преокрени списак" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Поређај означене" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Поређај списак" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Отвори садржавајућу фасциклу" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Исеци" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Умножи" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Убаци" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Убаци на крај" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Стави у ред/Избаци из реда" @@ -4036,7 +4055,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d од %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Уређивач списка нумера" @@ -4052,167 +4071,219 @@ msgid "Add Folder ..." msgstr "Додај фасциклу ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Претражи ставке у активном списку нумера" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Обележите ставке у списку нумера попуњавајући једно или више поља. Поља " +"користе синтаксу обичних израза, не разликују величину слова. Ако не знате " +"како обични изрази функционишу, једноставно дословно унесите део онога што " +"тражите." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Наслов:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Албум:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Извођач:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Назив датотеке:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Обриши претходни избор пре претраге" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Подударајуће ставке самостално пребаци у ред" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Направи нови списак нумера са подударајућим ставкама" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Потражи" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Пуштач:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Изаберите словни лик главног прозора програма:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Списак нумера:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Изабери словни лик списка нумера:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Маска" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Приказује активну траку наслова када је било који прозор у фокусу" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Слова" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Користи битмап словне ликове (подржава само АСКРИ)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Померај наслов песме" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Померај наслов песме у оба смера" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Досег" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Режим отиска гласа / ВУ мерач" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Искључено" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Нормалан" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ватра" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Усправне линије" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Линије" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Траке" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Најспорије" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Споро" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Средње" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Брзо" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Најбрже" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Тачке" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Линија" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Испуњено" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лед" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Глатко" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Боја:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Изглед:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Опадање:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Опадање врхова:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Режим досега:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Обојавање отиска гласа:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Стил ВУ мерача:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Врста" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Врста приказивања:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Прикажи врхунце" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Приказивање" @@ -4224,59 +4295,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Неархивирана Винамп 2.x маска" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Претражи ставке у активном списку нумера" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Потражи" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Обележите ставке у списку нумера попуњавајући једно или више поља. Поља " -"користе синтаксу обичних израза, не разликују величину слова. Ако не знате " -"како обични изрази функционишу, једноставно дословно унесите део онога што " -"тражите." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Наслов:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Албум:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Извођач:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Назив датотеке:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Обриши претходни избор пре претраге" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Подударајуће ставке самостално пребаци у ред" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Направи нови списак нумера са подударајућим ставкама" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Прикључак звучне датотеке" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4758,14 +4781,27 @@ "учесталост3;...\n" "нпр.: tone://2000;2005 да пустите тонове 2000 Hz и 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Додатне поруке су скривене.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Радим ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Информације" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Уклањање гласа" @@ -4925,14 +4961,38 @@ "\n" "Нешто кода прикључка је написао Мајлс Иган." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2СФ декодер" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Косинусно" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Оштро" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "ИксСФ подешавања" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Основно време ишчезавања:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Режим уметања:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "ИксМЛ дељиви спискови пуштања (XSPF)" diff -Nru audacious-plugins-4.1/po/sr_RS.po audacious-plugins-4.2/po/sr_RS.po --- audacious-plugins-4.1/po/sr_RS.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sr_RS.po 2022-07-10 01:12:34.000000000 +0000 @@ -8,17 +8,18 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Мирослав Николић , " +"2011-2012\n" "Language-Team: Serbian (Serbia) (http://www.transifex.com/audacious/" "audacious/language/sr_RS/)\n" "Language: sr_RS\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/aac/aac.cc:19 msgid "AAC (Raw) Decoder" @@ -29,7 +30,7 @@ msgstr "Ад прикључак (АдБибл програм)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "низовни" @@ -59,7 +60,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Разно" @@ -404,6 +405,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -479,6 +481,7 @@ msgstr "* нема доступних текстова песама у овој МИДИ датотеци *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Затвори" @@ -526,7 +529,7 @@ msgid "Concave Rectangle" msgstr "Удубљен правоугаоник" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ништа" @@ -724,6 +727,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Безочникови спискови нумера (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Боје" @@ -1098,7 +1117,7 @@ msgstr "Обриши" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Откажи" @@ -1132,7 +1151,7 @@ msgstr "Застој:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1152,7 +1171,7 @@ msgid "FFmpeg Plugin" msgstr "Прикључак ФФмпег-а" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1262,76 +1281,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1456,7 +1475,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Опште" @@ -1465,11 +1484,11 @@ msgid "FLAC Decoder" msgstr "ФЛАЦ декодер" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "без губитака" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2122,8 +2141,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kb/s" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2487,7 +2506,7 @@ msgid "Looking for lyrics ..." msgstr "Тражим текст песме ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Грешка" @@ -2827,7 +2846,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2912,7 +2931,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3539,7 +3558,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Услуге" @@ -3556,7 +3575,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3576,7 +3595,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3669,20 +3688,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Према наслову" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3710,104 +3729,104 @@ msgid "Remove Selected" msgstr "Уклони означене" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Претражи и означи" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Обрни избор" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Означи ништа" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Означи све" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Према броју нумере" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Према извођачу" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Према албуму" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Насумице испремештај списак" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Преокрени списак" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Поређај означене" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Поређај списак" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Исеци" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Умножи" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Убаци" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3816,7 +3835,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d од %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Уређивач списка нумера" @@ -3832,167 +3851,219 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Претражи ставке у активном списку нумера" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Обележите ставке у списку нумера попуњавајући једно или више поља. Поља " +"користе синтаксу обичних израза, не разликују величину слова. Ако не знате " +"како обични изрази функционишу, једноставно дословно унесите део онога што " +"тражите." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Обриши претходни избор пре претраге" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Подударајуће ставке самостално пребаци у ред" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Направи нови списак нумера са подударајућим ставкама" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Изаберите словни лик главног прозора плејера:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Изабери словни лик списка нумера:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Користи битмап словне ликове (подржава само АСКРИ)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Померај наслов песме у оба смера" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Анализатор" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Досег" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Искључено" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Нормалан" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ватра" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Линије" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Траке" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Најспорије" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Споро" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Средње" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Брзо" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Најбрже" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лед" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Глатко" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Приказивање" @@ -4004,59 +4075,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Неархивирана Винамп 2.x маска" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Претражи ставке у активном списку нумера" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Обележите ставке у списку нумера попуњавајући једно или више поља. Поља " -"користе синтаксу обичних израза, не разликују величину слова. Ако не знате " -"како обични изрази функционишу, једноставно дословно унесите део онога што " -"тражите." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Обриши претходни избор пре претраге" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Подударајуће ставке самостално пребаци у ред" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Направи нови списак нумера са подударајућим ставкама" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Прикључак звучне датотеке" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4510,14 +4533,27 @@ "учесталост3;...\n" "нпр.: tone://2000;2005 да пустите тонове 2000 Hz и 2005 Hz" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Додатне поруке су скривене.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Радим ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Информације" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Уклањање гласа" @@ -4662,14 +4698,38 @@ "\n" "Нешто кода прикључка је написао Мајлс Иган." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2СФ декодер" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "ИксМЛ дељиви спискови пуштања (XSPF)" diff -Nru audacious-plugins-4.1/po/sv.po audacious-plugins-4.2/po/sv.po --- audacious-plugins-4.1/po/sv.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/sv.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,23 +3,24 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# Anders Jonsson , 2017-2018 +# Anders Jonsson , 2017-2018,2022 # Bo Serrander , 2013,2016 # cb445fb3dfd1fe3c2b9f58ac5638f478, 2015-2016 # Henrik Mattsson-Mårn , 2015 -# Jonatan Nyberg , 2018-2020 -# Jonatan Nyberg , 2017-2018 +# Jonatan Nyberg , 2021-2022 +# Jonatan Nyberg , 2018-2021 +# efef6ec5b435a041fce803c7f8af77d2_2341d43, 2017-2018 # Josef Gottlander , 2020 # Kristoffer Grundström , 2016 -# Luna Jernberg , 2020 +# Luna Jernberg , 2020-2022 # Luna Jernberg , 2014 msgid "" msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-23 00:57+0000\n" -"Last-Translator: Luna Jernberg \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Luna Jernberg , 2020-2022\n" "Language-Team: Swedish (http://www.transifex.com/audacious/audacious/" "language/sv/)\n" "Language: sv\n" @@ -37,7 +38,7 @@ msgstr "AdPlug (AdLib spelare)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sekvensierad" @@ -67,7 +68,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Diverse" @@ -478,6 +479,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Samplingsfrekvens:" @@ -502,7 +504,7 @@ #: src/amidiplug/i_configure-fluidsynth.cc:234 #: src/amidiplug/i_configure-fluidsynth.cc:479 msgid "Size (bytes)" -msgstr "Storlek (bytes)" +msgstr "Storlek (byte)" #: src/amidiplug/i_fileinfo.cc:169 msgid "Name:" @@ -553,6 +555,7 @@ msgstr "* inga låttexter finns i denna MIDI-fil *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Stäng" @@ -612,7 +615,7 @@ msgid "Concave Rectangle" msgstr "Konkav rektangel" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Ingen" @@ -741,9 +744,9 @@ "unless you know that you have one running, please activate a composite " "manager otherwise the OSD won't work properly" msgstr "" -"Kompositionshanterare inte detekterad;\n" -"om du inte vet att du har en körande, vänligen aktivera en " -"kompositionshanterare, annars kommer inte OSD att fungera korrekt" +"Kompositionshanterare inte upptäckt;\n" +"om du inte vet att du har en igång, aktivera en kompositionshanterare annars " +"fungerar inte OSD korrekt" #: src/aosd/aosd_ui.cc:668 msgid "Composite manager not required for fake transparency" @@ -810,6 +813,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious-spellistor (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Färg" @@ -1199,7 +1218,7 @@ msgstr "Ta bort" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Avsluta" @@ -1237,7 +1256,7 @@ msgstr "Fördröjning:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1257,7 +1276,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg Plugin" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1380,77 +1399,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 kbit/s" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 kbit/s" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 kbit/s" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 kbit/s" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 kbit/s" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 kbit/s" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 kbit/s" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 kbit/s" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 kbit/s" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 kbit/s" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 kbit/s" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 kbit/s" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 kbit/s" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 kbit/s" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 kbit/s" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 kbit/s" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1574,7 +1593,7 @@ msgid "Quality (0-1):" msgstr "Kvalitet (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Allmänt" @@ -1583,11 +1602,11 @@ msgid "FLAC Decoder" msgstr "FLAC-avkodare" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "felfri kompression" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -1771,7 +1790,7 @@ #: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 msgid "Search _Library" -msgstr "Sök i _biblioteket" +msgstr "Sök i _bibliotek" #: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 msgid "A_bout ..." @@ -2122,7 +2141,7 @@ #: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 msgid "Show entry counts" -msgstr "Visa inmatningsräkningar" +msgstr "Visa inmatningsantal" #: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 msgid "Show close buttons" @@ -2177,7 +2196,7 @@ #: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 #: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 msgid "Search Library" -msgstr "Sök i biblioteket" +msgstr "Sök i bibliotek" #: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 #: src/qtui/main_window.cc:147 @@ -2247,8 +2266,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d kbit/s" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2284,7 +2303,7 @@ #: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 msgid "Mute" -msgstr "Tysta" +msgstr "Ljud av" #: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 msgid "Volume up" @@ -2417,7 +2436,7 @@ #: src/jack/jack-ng.cc:139 msgid "Upmix to" -msgstr "" +msgstr "Upmix till" #: src/jack/jack-ng.cc:141 msgid "ports if input has fewer channels" @@ -2480,7 +2499,7 @@ msgstr "" "Separera flera sökvägar med ett kolon.\n" "Dessa sökvägar söks utöver LADSPA_PATH.\n" -"Efter att nya sökvägar lagts till, trycka på Enter för att söka efter nya " +"Efter att nya sökvägar lagts till, trycka på Enter för att skanna efter nya " "insticksmoduler." #: src/ladspa/plugin.cc:502 @@ -2572,23 +2591,23 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "Artist är avkortad i början, Titel -- i slutet" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" -msgstr "" +msgstr "Tecken att avkorta vid:" #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" -msgstr "" +msgstr "Tecken är ORed i RegExp, omgivet av mellanrum" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "Tecken att uppdela vid: " #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "Ytterligare avkorta vid dessa tecken" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" @@ -2596,7 +2615,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "Dela upp titel i artist och titel vid tecken" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2632,7 +2651,7 @@ msgid "Looking for lyrics ..." msgstr "Letar efter låttexter ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Fel" @@ -2803,7 +2822,7 @@ #: src/modplug/plugin_main.cc:111 msgid "To repeat forever, set the repeat count to -1." -msgstr "För att repetera för alltid, sätt uppräkningsantalet till -1." +msgstr "För att upprepa för evigt, ställ in upprepningsantalet till -1." #: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 msgid "These settings will take effect when Audacious is restarted." @@ -2817,7 +2836,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "Månsten" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2991,7 +3010,7 @@ msgid "Interpolation:" msgstr "Interpolation:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Linjär" @@ -3076,7 +3095,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF konfiguration" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Ignorera längd från fil" @@ -3300,11 +3319,11 @@ #: src/resample/resample.cc:202 msgid "Rate Mappings" -msgstr "" +msgstr "Hastighetskartläggningar" #: src/resample/resample.cc:203 msgid "Use rate mappings" -msgstr "" +msgstr "Använd hastighetskartläggningar" #: src/resample/resample.cc:205 msgid "8 kHz:" @@ -3466,7 +3485,7 @@ #: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 msgid "Rescan library at startup" -msgstr "Sök igenom biblioteket vid uppstart" +msgstr "Skanna om biblioteket vid uppstart" #: src/search-tool-qt/search-tool-qt.cc:170 msgid "Monitor library for changes" @@ -3757,7 +3776,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Tjänster" @@ -3767,14 +3786,14 @@ #: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 msgid "Settings ..." -msgstr "Inställningar..." +msgstr "Inställningar ..." #: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 msgid "Quit" msgstr "Avsluta" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Låtinformation ..." @@ -3794,7 +3813,7 @@ msgid "Clear A-B Repeat" msgstr "Rensa A-B-upprepning" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Hoppa till låt ..." @@ -3824,7 +3843,7 @@ #: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 msgid "Next Playlist" -msgstr "Nästa Spellista" +msgstr "Nästa spellista" #: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 msgid "Import Playlist ..." @@ -3887,26 +3906,26 @@ msgstr "Lägg till filer ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Efter titel" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Efter filnamn" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Efter sökväg" #: src/skins/menus.cc:176 src/skins-qt/menus.cc:172 msgid "Remove All" -msgstr "Ta Bort Alla" +msgstr "Ta bort alla" #: src/skins/menus.cc:177 src/skins-qt/menus.cc:173 msgid "Clear Queue" @@ -3928,104 +3947,104 @@ msgid "Remove Selected" msgstr "Ta bort valda" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Sök och välj" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Invertera valet" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" -msgstr "Välj inga" +msgstr "Välj ingen" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Välj alla" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Efter spårnummer" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Efter artist" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Efter album" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Efter albumartist" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Efter utgivningsdatum" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Efter genre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Efter längd" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Efter anpassad titel" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Efter kommentar" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" -msgstr "Slumpa lista" +msgstr "Slumpmässig lista" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Omvänd lista" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" -msgstr "Sortera vald" +msgstr "Sortera valda" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Sortera lista" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "Öppna innehållande mapp" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Klipp" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopiera" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Klistra in" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Klistra in i slutet" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Lägg till i kö/Ta bort från kö" @@ -4034,7 +4053,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d av %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious spellistsredigerare" @@ -4050,167 +4069,219 @@ msgid "Add Folder ..." msgstr "Lägg till mapp ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Sök poster i aktiv spellista" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Välj poster i spellistan genom att fylla i ett eller flera fält. Fält " +"använder syntax för regeluttryck, skiftlägeskänslig. Om du inte vet hur " +"vanliga uttryck fungerar, sätt bara in en bokstavlig del av det du söker " +"efter." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Titel:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Album:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Artist:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Filnamn:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Rensa tidigare val innan du söker" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Växla automatiskt till kö för matchande poster" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Skapa en ny spellista med matchande poster" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Sök" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Spelare:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Välj teckensnitt för huvudfönster:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Spellista:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Välj teckensnitt för spellista:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Skal" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Visa aktiv titelrad när något fönster är fokuserat" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Teckensnitt" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Använd bitmappsteckensnitt (stöder endast ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Rulla låttitel" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Rulla låttitel i båda riktningarna" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analysator" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Omfattning" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Röstavtryck / VU-mätare" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Av" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Eld" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Vertikala linjer" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Linjer" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Staplar" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Långsammast" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Långsam" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Mellan" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Snabb" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Snabbast" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Punkter" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Linje" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Fast" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Is" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Mjuk" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Färgläggning:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Stil:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Minskning:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Största minskning:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Omfattningsstil:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Röstavtrycksfärgning:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU-mätarstil:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Typ" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Visualiseringstyp:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Analysator" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Visa toppar" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Visualisering" @@ -4222,59 +4293,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Oarkiverat Winamp 2.x skal" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Sök poster i aktiv spellista" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Sök" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Välj poster i spellistan genom att fylla i ett eller flera fält. Fält " -"använder syntax för regeluttryck, skiftlägeskänslig. Om du inte vet hur " -"vanliga uttryck fungerar, sätt bara in en bokstavlig del av det du söker " -"efter." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Titel:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Album:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Artist:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Filnamn:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Rensa tidigare val innan du söker" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Växla automatiskt till kö för matchande poster" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Skapa en ny spellista med matchande poster" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile Plugin" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4755,14 +4778,27 @@ "frequency3;...\n" "t.ex. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Ytterligare meddelanden har dolts.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Arbetar ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Information" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s verkar inte vara en giltig mapp." + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Röstavlägsnande" @@ -4868,11 +4904,11 @@ #: src/vumeter-qt/vumeter_qt.cc:37 msgid "Peak hold time:" -msgstr "" +msgstr "Högsta hålltid:" #: src/vumeter-qt/vumeter_qt.cc:42 msgid "Fall-off time:" -msgstr "" +msgstr "Reduktionstid:" #: src/vumeter-qt/vumeter_qt.cc:44 msgid "dB/second" @@ -4920,14 +4956,38 @@ "\n" "En del av insticksmodulskoden var av Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF-avkodare" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Hz" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Hz" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Cosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Skarp" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF-konfiguration" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Standardtoningstid:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolationsläge:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML-delbara spellistor (XSPF)" diff -Nru audacious-plugins-4.1/po/ta.po audacious-plugins-4.2/po/ta.po --- audacious-plugins-4.1/po/ta.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/ta.po 2022-07-10 01:12:34.000000000 +0000 @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Nareshwar Raju Vaneshwar , 2013\n" "Language-Team: Tamil (http://www.transifex.com/audacious/audacious/language/" "ta/)\n" "Language: ta\n" @@ -31,7 +31,7 @@ msgstr "AdPlug (AdLib Player)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "" @@ -61,7 +61,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "" @@ -398,6 +398,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "" @@ -473,6 +474,7 @@ msgstr "*இந்த MIDI கோப்பிற்கான எந்தவொரு பாடல்வரிகளும் கிடைக்கப்படவில்லை * " #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_மூடவும்" @@ -520,7 +522,7 @@ msgid "Concave Rectangle" msgstr "குழிவான செவ்வகம் " -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "ஏதுமில்லை " @@ -719,6 +721,22 @@ msgid "Audacious Playlists (audpl)" msgstr "ஔடகிவஸ் பாடல் பட்டியல்கள் " +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "நிறம்" @@ -1080,7 +1098,7 @@ msgstr "அழிக்குக " #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "ரத்து செய்க " @@ -1114,7 +1132,7 @@ msgstr "தாமதம் :" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1134,7 +1152,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg நீட்சி" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1236,76 +1254,76 @@ msgid "32000 Hz" msgstr "" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" +msgid "8 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" +msgid "16 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" +msgid "32 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" +msgid "40 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" +msgid "48 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" +msgid "56 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" +msgid "64 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" +msgid "80 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" +msgid "96 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" +msgid "112 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" +msgid "128 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" +msgid "160 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" +msgid "192 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" +msgid "224 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" +msgid "256 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" +msgid "320 kbit/s" msgstr "" #: src/filewriter/filewriter.cc:450 @@ -1430,7 +1448,7 @@ msgid "Quality (0-1):" msgstr "" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "பொதுவான" @@ -1439,11 +1457,11 @@ msgid "FLAC Decoder" msgstr "FLAC குறிவிலக்கி " -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2091,8 +2109,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2441,7 +2459,7 @@ msgid "Looking for lyrics ..." msgstr "" -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "thavaruthal" @@ -2774,7 +2792,7 @@ msgid "Interpolation:" msgstr "" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "" @@ -2854,7 +2872,7 @@ msgid "OpenPSF Configuration" msgstr "" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "" @@ -3474,7 +3492,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "சேவைகள் " @@ -3491,7 +3509,7 @@ msgstr "" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "" @@ -3511,7 +3529,7 @@ msgid "Clear A-B Repeat" msgstr "" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "" @@ -3604,20 +3622,20 @@ msgstr "" #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "தலைப்பின் படி " #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "" @@ -3645,104 +3663,104 @@ msgid "Remove Selected" msgstr "தெரிவுசெய்தவற்றை அகற்றுக" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "தேடி தேர்ந்தெடுக்கவும்" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "தலைகீழ் தேர்ந்தெடுப்பு" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "எதனையும் தேர்ந்தெடுக்க வேண்டாம்." -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "அனைத்தையும் தேர்ந்தெடுக்குக " -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "பாடல் இலக்க அடிப்படையில் " -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "பாடகர்களின் படி " -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "குறுவட்டின் படி " -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "பட்டியலினை தற்போக்காக தோன்றச்செய்க " -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "பட்டியலினை தலைகீழாக்குக" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "வரிசையானவற்றை தெரிக." -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "பட்டியலை வரிசையாக்குக " -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "வெட்டுக " -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "நகleடுக்குக" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "ஒட்டுக " -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "" @@ -3751,7 +3769,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d இன் %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "ஔடகிவஸ் பாடல் பட்டியல் திருத்தி" @@ -3767,167 +3785,218 @@ msgid "Add Folder ..." msgstr "" -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "செய்வினை பாடல் பட்டியலிலுள்ள பதிவுகளை தேடுக " + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"ஒன்று அல்லது மேற்பட்ட வெற்றிடங்களை நிரப்புவதன் மூலம் பட்டியல் பதிவுகளை தெரிக. வெற்றிடங்கள் " +"வழக்கமான வெளிப்பாடுகள் தொடரியலை கொண்டவை. வழக்கமான வெளிப்பாடுகள் எவ்வாறு இயங்கும் என " +"தெரியாவிடின் நீங்கள் தேடுவதின் துல்லியமான பகுதியினை உள்ளிடுக. " + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "தேட முன் முன்னைய தெரிவுகளை துடைத்தழிக்குக " + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "தேர்வடையும் பதிவுகளை தானாக நிலைமாற்று வரிசையாக்குக" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "தேர்வடையும் பதிவுகளுக்கு புதிய பாடல் பட்டியலொன்றை உருவாக்குக." + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "பிரதான இயக்கி சாளரத்தின் எழுத்துருவை தெரிவு செய்க :" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "பாடல் பட்டியலின் எழுத்துருவை தெரிவு செய்க :" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "பிட்மாப் பட எழுத்துருக்களை உபயோகிக்க (ASCII இணை மட்டும் ஆதரிக்கிறது)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "இரு திசைகளிலும் பாடல் தலைப்பை ururavaikkuga " -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "பகுப்பாய்வி " -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "குறியிலக்கம்" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "அணைக்குக " -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "இயல்பான" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "நெருப்பு " -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "கோடுகள் " -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "பட்டைகள்" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "மெதுவான " -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "மெதுவாய் " -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "நடுத்தரம் " -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "விரைவு " -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "மிக விரைவாக " -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "பனி " -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "மிருதுவான " -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "உருவக காட்சிப்படுத்தல் " @@ -3939,58 +4008,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "ஆவணப்படுத்தப்படாத Winamp 2.x தோல் " -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "செய்வினை பாடல் பட்டியலிலுள்ள பதிவுகளை தேடுக " - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"ஒன்று அல்லது மேற்பட்ட வெற்றிடங்களை நிரப்புவதன் மூலம் பட்டியல் பதிவுகளை தெரிக. வெற்றிடங்கள் " -"வழக்கமான வெளிப்பாடுகள் தொடரியலை கொண்டவை. வழக்கமான வெளிப்பாடுகள் எவ்வாறு இயங்கும் என " -"தெரியாவிடின் நீங்கள் தேடுவதின் துல்லியமான பகுதியினை உள்ளிடுக. " - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "தேட முன் முன்னைய தெரிவுகளை துடைத்தழிக்குக " - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "தேர்வடையும் பதிவுகளை தானாக நிலைமாற்று வரிசையாக்குக" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "தேர்வடையும் பதிவுகளுக்கு புதிய பாடல் பட்டியலொன்றை உருவாக்குக." - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4409,14 +4431,25 @@ "e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" msgstr "" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "" -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "தகவல் " +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "குரல் நீக்கம்" @@ -4536,14 +4569,38 @@ "Some of the plugin code was by Miles Egan." msgstr "" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "" diff -Nru audacious-plugins-4.1/po/tr.po audacious-plugins-4.2/po/tr.po --- audacious-plugins-4.1/po/tr.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/tr.po 2022-07-10 01:12:34.000000000 +0000 @@ -30,9 +30,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Yaşar Çiv , 2020\n" "Language-Team: Turkish (http://www.transifex.com/audacious/audacious/" "language/tr/)\n" "Language: tr\n" @@ -50,7 +50,7 @@ msgstr "AdPlug(AdLib Oynatıcı)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "sıralı" @@ -80,7 +80,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Karışık" @@ -491,6 +491,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Örnekleme oranı:" @@ -566,6 +567,7 @@ msgstr "* bu midi dosyasında şarkı sözü bulunamadı *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Kapat" @@ -625,7 +627,7 @@ msgid "Concave Rectangle" msgstr "İçbükey Dikdörtgen" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Hiçbiri" @@ -823,6 +825,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious Çalma Listeleri (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Renk" @@ -1213,7 +1231,7 @@ msgstr "Sil" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "İptal" @@ -1252,7 +1270,7 @@ msgstr "Gecikme:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "ms" @@ -1272,7 +1290,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg Eklentisi" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1394,77 +1412,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1588,7 +1606,7 @@ msgid "Quality (0-1):" msgstr "Kalite (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Genel" @@ -1597,11 +1615,11 @@ msgid "FLAC Decoder" msgstr "FLAC Çözücü" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "kayıpsız" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2261,8 +2279,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2649,7 +2667,7 @@ msgid "Looking for lyrics ..." msgstr "Şarkı sözü ara ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Hata" @@ -3008,7 +3026,7 @@ msgid "Interpolation:" msgstr "İnterpolasyon:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Doğrusal" @@ -3093,7 +3111,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF Yapılandırması" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Dosyadan uzunluğu yoksay" @@ -3754,7 +3772,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Hizmetler" @@ -3771,7 +3789,7 @@ msgstr "Çıkış" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Şarkı Bilgisi ..." @@ -3791,7 +3809,7 @@ msgid "Clear A-B Repeat" msgstr "A-B Tekrarlama'yı Kaldır" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Şarkı'ya Geç" @@ -3884,20 +3902,20 @@ msgstr "Dosyaları Ekle ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "Başlığa Göre" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "Dosya İsmine Göre" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "Dosya Yoluna Göre" @@ -3925,104 +3943,104 @@ msgid "Remove Selected" msgstr "Seçilenleri Kaldır" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Ara ve Seç" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Seçimi Ters Çevir" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Hiçbiri Seçilmedi" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Tümünü_Seç" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "Parça Numarasına Göre" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "Sanatçıya Göre" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "Albüme Göre" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "Albüm Sanatçısına Göre" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "Yayınlama Tarihine Göre" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "Türüne Göre" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "Uzunluğuna Göre" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "Özel Başlığa Göre" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "Yoruma Göre" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Rastgele Listele" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Ters Liste" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Seçileni Sırala" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Kısa Liste" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "İçeren Dizini Aç" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Kes" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Kopyala" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Yapıştır" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Sonunda Yapıştır" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "Kuyruğa Ekle/Kaldır" @@ -4031,7 +4049,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d 'den %d 'si)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious Çalma Listesi Düzenleyici" @@ -4047,167 +4065,219 @@ msgid "Add Folder ..." msgstr "Dizin Ekle ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Etkin oynatma listesinde arama girişleri" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Bir veya daha fazla alanı doldurarak oynatma listesindeki girişleri seçin. " +"Alanlarda normal ifadeler sözdizimi, büyük / küçük harf duyarlı değil. " +"Normal ifadelerin nasıl çalıştığını bilmiyorsanız, aradığınız şeylerin basit " +"bir kısmını eklemeniz yeterlidir." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Başlık:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Albüm:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Sanatçı:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Dosya Adı:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Önceki aramaları temizle" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Eşleşen girişler için sıraya otomatik olarak geçiş yap" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Eşleşen girişlerle yeni bir oynatma listesi oluşturun" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Ara" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Çalıcı:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Arayüz yazı tipini seçiniz:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Çalma Listesi:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Çalma listesi yazıtipi seç:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Kabuk" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Yazıtipleri" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Bitmap yazı tiplerini kullan (yalnızca ASCII'yi destekler)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Şarkı başlığını kaydır" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Her iki yönde şarkı başlığını kaydır" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Analiz Et" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Kapsam" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Ses izi / VU metre" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Kapalı" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Normal" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Ateş" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Dikey çizgiler" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Çizgiler" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Çubuk" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "En yavaş" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Yavaş" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Orta" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Hızlı" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "En hızlı" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Noktalar" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Satır" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Katı" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Buz" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Pürüzsüz" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Boyama:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Tarz:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Düşme:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Tepe düşme:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Kapsam Tarzı:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Ses izi Boyama:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU Metre Tarzı:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Tür" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Görselleştirme türü:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Çözümleyici" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Tepeleri göster" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Görselleştirme" @@ -4219,59 +4289,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Arşivlenmemiş Winamp 2.x kabuğu" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Etkin oynatma listesinde arama girişleri" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Ara" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Bir veya daha fazla alanı doldurarak oynatma listesindeki girişleri seçin. " -"Alanlarda normal ifadeler sözdizimi, büyük / küçük harf duyarlı değil. " -"Normal ifadelerin nasıl çalıştığını bilmiyorsanız, aradığınız şeylerin basit " -"bir kısmını eklemeniz yeterlidir." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Başlık:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Albüm:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Sanatçı:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Dosya Adı:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Önceki aramaları temizle" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Eşleşen girişler için sıraya otomatik olarak geçiş yap" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Eşleşen girişlerle yeni bir oynatma listesi oluşturun" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile Eklentisi" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4750,14 +4772,27 @@ "Kullanmak için bir URL ekleyin: tone://frequency1;frequency2;frequency3;...\n" "örneğin tone://2000;2005 bir 2000 Hz ton ve bir 2005 Hz ton çalmak için" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Devam eden iletiler gizlendi.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Çalışıyor..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Bilgi" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Ses yok etme" @@ -4916,14 +4951,38 @@ "\n" "Bazı eklentiler Miles Egan tarafından kodlanmıştır." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF Çözücü" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF Yapılandırması" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML Paylaşılabilir çalma listesi (XSPF)" diff -Nru audacious-plugins-4.1/po/uk.po audacious-plugins-4.2/po/uk.po --- audacious-plugins-4.1/po/uk.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/uk.po 2022-07-10 01:12:34.000000000 +0000 @@ -28,9 +28,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: First Last , 2020\n" "Language-Team: Ukrainian (http://www.transifex.com/audacious/audacious/" "language/uk/)\n" "Language: uk\n" @@ -51,7 +51,7 @@ msgstr "AdPlug (програвач AdLib)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "послідовний" @@ -81,7 +81,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "Різне" @@ -494,6 +494,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "Висота семплів:" @@ -569,6 +570,7 @@ msgstr "* цей MIDI-файл не має тексту пісні *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "_Закрити" @@ -628,7 +630,7 @@ msgid "Concave Rectangle" msgstr "Увігнутий прямокутник" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "Тільки текст" @@ -826,6 +828,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Списки відтворення Audacious (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "Колір" @@ -1216,7 +1234,7 @@ msgstr "Вилучити" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "Скасувати" @@ -1254,7 +1272,7 @@ msgstr "Затримка:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "мс" @@ -1274,7 +1292,7 @@ msgid "FFmpeg Plugin" msgstr "Втулок FFmpeg" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1400,77 +1418,77 @@ msgid "32000 Hz" msgstr "32000 Гц" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Гц" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Гц" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 кб/с" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 кб/с" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 кб/с" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 кб/с" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 кб/с" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 кб/с" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 кб/с" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 кб/с" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 кб/с" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 кб/с" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 кб/с" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 кб/с" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 кб/с" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 кб/с" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 кб/с" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 кб/с" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1594,7 +1612,7 @@ msgid "Quality (0-1):" msgstr "Якість (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "Загальне" @@ -1603,11 +1621,11 @@ msgid "FLAC Decoder" msgstr "Декодер FLAC" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "без втрат" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2269,8 +2287,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d кб/с" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2653,7 +2671,7 @@ msgid "Looking for lyrics ..." msgstr "Шукаю текст пісні..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "Помилка" @@ -3016,7 +3034,7 @@ msgid "Interpolation:" msgstr "Інтерполяція:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "Лінійна" @@ -3102,7 +3120,7 @@ msgid "OpenPSF Configuration" msgstr "Конфігурація OpenPSF" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "Іґнорувати час програвання з файлу" @@ -3773,7 +3791,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "Служби" @@ -3790,7 +3808,7 @@ msgstr "Вихід" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "Інформація про стежку ..." @@ -3810,7 +3828,7 @@ msgid "Clear A-B Repeat" msgstr "Скинути A-B повтор" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "Перейти до стежки ..." @@ -3903,20 +3921,20 @@ msgstr "Додати файли ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "За назвою" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "За назвою файлу" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "За шляхом до файлу" @@ -3944,104 +3962,104 @@ msgid "Remove Selected" msgstr "Вилучити виділені" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "Пошук і вибрання" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "Інвертувати вибрання" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "Зняти вибрання" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "Виділити все" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "За номером стежки" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "За виконавцем" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "За альбомом" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "За виконавцем альбому" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "За датою видання" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "За напрямком" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "За часом" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "За налаштовною назвою" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "За коментарями" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "Порушити порядок" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "Обернути список" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "Сортувати виділене" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "Сортувати список..." -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "За текою вмісту" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "Вирізати" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "Копіювати" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "Вставити" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "Унести у кінці" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "В чергу/З черги" @@ -4050,7 +4068,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d із %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Редактор списків відтворення Audacious" @@ -4066,167 +4084,218 @@ msgid "Add Folder ..." msgstr "Додати теку ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "Пошук у чинному спискові відтворення" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"Аби шукати стежки в спискові відтворення, заповніть одне чи більше полів. " +"Можна використовувати літери, цифри, інші знаки, регулярні вирази. Поля " +"нечутливі до регістру." + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "Назва:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "Альбом:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "Виконавець:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "Назва файлу:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "Зняти попереднє вибрання перед пошуком" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "Автоматично перемикати стан черги знайдених елементів" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "Виділити знайдене в новий список відтворення" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "Пошук" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "Програвач:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "Шрифт основного вікна програвача" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "Плейлист:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "Шрифт списку відтворення:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "Жупан" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "Шрифти" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "Використовувати растрові шрифти (підтримується тільки ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "Прокручувати назву пісні" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "Прокручувати назву пісні в обох напрямках" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "Аналізатор" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "Осцилограф" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "Спектрограма / VU-вимірювач" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "Вимкнено" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "Звичайний" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "Вогонь" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "Вертикальні лінії" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "Лінії" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "Стовпчики" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "Дуже повільне" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "Повільне" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "Помірне" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "Швидке" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "Найшвидше" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "Точки" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "Лінія" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "Суцільна" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "Лід" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "Плавний" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "Забарвлення:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "Стиль:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "Спад" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "Спадання часового піку" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "Стиль осцилограми:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "Забарвлення спектрограми:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "Стиль VU-вимірювача:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "Тип" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "Тип візуалізації:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "Аналізатор" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "Показувати піки часу" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "Візуалізація" @@ -4238,58 +4307,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "Розархівлений жупан Winamp 2.x" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "Пошук у чинному спискові відтворення" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "Пошук" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"Аби шукати стежки в спискові відтворення, заповніть одне чи більше полів. " -"Можна використовувати літери, цифри, інші знаки, регулярні вирази. Поля " -"нечутливі до регістру." - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "Назва:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "Альбом:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "Виконавець:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "Назва файлу:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "Зняти попереднє вибрання перед пошуком" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "Автоматично перемикати стан черги знайдених елементів" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "Виділити знайдене в новий список відтворення" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Втулок Sndfile" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4775,14 +4797,27 @@ "Наприклад, tone://2000;2005 — послідовне відтворення тонів з частотою 2000 " "Гц і 2005 Гц." -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Наступні повідомлення були приховані.)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "Опрацювання ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "Інформація" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "Видалення голосу" @@ -4941,14 +4976,38 @@ "\n" "Деякий код написав Майлс Еґен." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "Декодер 2SF" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "Конфіґурація XSF" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML-списки відтворення (XSPF)" diff -Nru audacious-plugins-4.1/po/uz.po audacious-plugins-4.2/po/uz.po --- audacious-plugins-4.1/po/uz.po 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/po/uz.po 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,4926 @@ +# Uzbek translation for Audacious Plugins +# Copyright (C) Audacious translators +# This file is distributed under the same license as the Audacious Plugins package. +# +# Translators: +# Umidjon Almasov , 2022 +# Umidjon Almasov , 2013 +# Umidjon Almasov , 2022 +# 9ce67d7e9a84f219fd63ae516bbe9dee_5a4e663 , 2022 +msgid "" +msgstr "" +"Project-Id-Version: Audacious Plugins\n" +"Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: Umidjon Almasov , 2022\n" +"Language-Team: Uzbek (http://www.transifex.com/audacious/audacious/language/" +"uz/)\n" +"Language: uz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/aac/aac.cc:19 +msgid "AAC (Raw) Decoder" +msgstr "AAC (Raw) dekoder" + +#: src/adplug/adplug-xmms.cc:70 +msgid "AdPlug (AdLib Player)" +msgstr "AdPlug (AdLib pleyer)" + +#: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 +msgid "sequenced" +msgstr "ketma-ket" + +#: src/adplug/adplug-xmms.cc:349 src/sid/xs_config.cc:61 +msgid "Output" +msgstr "Chiqarish" + +#: src/adplug/adplug-xmms.cc:350 +msgid "OPL Emulator:" +msgstr "OPL emulyatori:" + +#: src/adplug/adplug-xmms.cc:353 +msgid "Sample rate" +msgstr "Namuna tezligi" + +#: src/adplug/adplug-xmms.cc:354 src/amidiplug/i_configure.cc:155 +#: src/bs2b/plugin.cc:141 src/console/plugin.cc:47 +#: src/modplug/plugin_main.cc:77 src/resample/resample.cc:201 +#: src/resample/resample.cc:207 src/resample/resample.cc:211 +#: src/resample/resample.cc:215 src/resample/resample.cc:219 +#: src/resample/resample.cc:223 src/resample/resample.cc:227 +#: src/resample/resample.cc:231 src/resample/resample.cc:235 +#: src/resample/resample.cc:239 src/resample/resample.cc:243 +#: src/sid/xs_config.cc:67 src/soxr/sox-resampler.cc:205 +msgid "Hz" +msgstr "Gts" + +#: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 +#: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 +msgid "Miscellaneous" +msgstr "Turli xil" + +#: src/adplug/adplug-xmms.cc:356 +msgid "Repeat song in endless loop" +msgstr "Qo'shiqni cheksiz siklda takrorlash" + +#: src/alarm/alarm.cc:55 src/alarm/interface.cc:79 +msgid "Alarm" +msgstr "Signal" + +#: src/alarm/alarm.cc:782 +msgid "Set Alarm ..." +msgstr "Signal sozlash..." + +#: src/alarm/alarm.cc:810 +msgid "" +"A plugin that can be used to start playing at a certain time.\n" +"\n" +"Originally written by Adam Feakin and Daniel Stodden." +msgstr "" +"Muayyan vaqtda o'ynashni boshlash uchun ishlatilishi mumkin bo'lgan plagin.\n" +"\n" +"Dastlab Adam Feakin va Daniel Stodden tomonidan yozilgan." + +#: src/alarm/interface.cc:28 +msgid "" +"Time\n" +" Alarm at:\n" +" The time for the alarm to come on.\n" +"\n" +" Quiet after:\n" +" Stop alarm after this amount of time.\n" +" (if the wakeup dialog is not closed)\n" +"\n" +"\n" +"Days\n" +" Day:\n" +" Select the days for the alarm to activate.\n" +"\n" +" Time:\n" +" Choose the time for the alarm on each day,\n" +" or select the toggle button to use the default\n" +" time.\n" +"\n" +"\n" +"Volume\n" +" Fading:\n" +" Fade the volume up to the chosen volume\n" +" for this amount of time.\n" +"\n" +" Start at:\n" +" Start fading from this volume.\n" +"\n" +" Final:\n" +" The volume to stop fading at. If the fading\n" +" time is 0 then set volume to this and start\n" +" playing.\n" +"\n" +"\n" +"Options:\n" +" Additional Command:\n" +" Run this command at the alarm time.\n" +"\n" +" Playlist:\n" +" Load this playlist. If no playlist\n" +" is given, the current one will be used.\n" +" The URL of an mp3/ogg stream\n" +" can also be entered here.\n" +"\n" +" Reminder:\n" +" Display a reminder when the alarm goes off.\n" +" Type the reminder in the input field and enable\n" +" the checkbox if you want it to be shown." +msgstr "" +"Vaqt\n" +"Signal:\n" +"Signal chalish vaqti.\n" +"\n" +"Jimlik:\n" +"Bu vaqtdan keyin signalni to'xtatish.\n" +"(uyg'otish oynasi yopiq bo'lmasa)\n" +"\n" +"\n" +"Kunlar\n" +"Kun:\n" +"Signalni yoqish uchun kunlarni tanlang.\n" +"\n" +"Vaqt:\n" +"Har kuni signal uchun vaqtni tanlang,\n" +"yoki standartni ishlatish uchun almashtirish tugmasini tanlang\n" +"vaqt.\n" +"\n" +"\n" +"Ovoz balandligi\n" +"Pasaygan:\n" +"Ovozni tanlangan ovoz balandligigacha o'chiring\n" +"bu vaqt uchun.\n" +"\n" +"Boshlash:\n" +"Ushbu ovoz balandligidan pasayish boshlansin.\n" +"\n" +"Yakun:\n" +"Pasayishni toʻxtatish uchun ovoz balandligi. Agar pasaigan bo'lsa\n" +"vaqt 0 ga teng, keyin ovoz balandligini o'rnating va boshlang.\n" +"\n" +"\n" +"Variantlar:\n" +"Qo'shimcha buyruq:\n" +"Ushbu buyruqni signal vaqtida ishga tushiring.\n" +"\n" +"Pleylist:\n" +"Ushbu pleylistni yuklang. Agar pleylist berilmagan bo'lsa,\n" +"joriyidan foydalaniladi.\n" +"Mp3/ogg oqimining URL manzilini\n" +"bu yerga ham kiritish mumkin.\n" +"\n" +"Eslatma:\n" +"Signal o'chganda eslatmani ko'rsatish.\n" +"Kiritish maydoniga eslatmani kiriting va yoqing\n" +"ko'rsatilishini xohlasangiz, katagiga belgi qo'ying." + +#: src/alarm/interface.cc:78 +msgid "This is your wakeup call." +msgstr "Bu sizning uyg'otuvchi qo'ng'iroqingiz." + +#: src/alarm/interface.cc:96 +msgid "Your reminder for today is..." +msgstr "Bugungi eslatmangiz..." + +#: src/alarm/interface.cc:98 src/alarm/interface.cc:372 +msgid "Reminder" +msgstr "Eslatma" + +#: src/alarm/interface.cc:122 +msgid "Monday" +msgstr "Dushanba" + +#: src/alarm/interface.cc:122 +msgid "Tuesday" +msgstr "Seshanba" + +#: src/alarm/interface.cc:122 +msgid "Wednesday" +msgstr "Chorshanba" + +#: src/alarm/interface.cc:123 +msgid "Thursday" +msgstr "Payshanba" + +#: src/alarm/interface.cc:123 +msgid "Friday" +msgstr "Juma" + +#: src/alarm/interface.cc:123 +msgid "Saturday" +msgstr "Shanba" + +#: src/alarm/interface.cc:123 +msgid "Sunday" +msgstr "Yakshanba" + +#: src/alarm/interface.cc:160 src/alarm/interface.cc:219 +#: src/alarm/interface.cc:234 +msgid "Time" +msgstr "Vaqt" + +#: src/alarm/interface.cc:167 +msgid "Alarm at (default):" +msgstr "Signal (standart):" + +#: src/alarm/interface.cc:189 +msgid "h" +msgstr "s" + +#: src/alarm/interface.cc:192 +msgid "Quiet after:" +msgstr "Jimlik:" + +#: src/alarm/interface.cc:204 +msgid "hours" +msgstr "soat" + +#: src/alarm/interface.cc:215 +msgid "minutes" +msgstr "daqiqa" + +#: src/alarm/interface.cc:224 +msgid "Choose the days for the alarm to come on" +msgstr "Signal chalinadigan kunlarni tanlang" + +#: src/alarm/interface.cc:231 +msgid "Day" +msgstr "Kun" + +#: src/alarm/interface.cc:248 src/bs2b/plugin.cc:130 +msgid "Default" +msgstr "Standart" + +#: src/alarm/interface.cc:277 +msgid "Days" +msgstr "Kun" + +#: src/alarm/interface.cc:286 +msgid "Fading" +msgstr "Pasaygan" + +#: src/alarm/interface.cc:294 src/console/plugin.cc:41 +#: src/crossfade/crossfade.cc:52 src/crossfade/crossfade.cc:58 +#: src/lirc/lirc.cc:395 src/notify/notify.cc:113 src/sid/xs_config.cc:85 +#: src/sid/xs_config.cc:94 src/sid/xs_config.cc:103 +#: src/vumeter-qt/vumeter_qt.cc:39 +msgid "seconds" +msgstr "soniya" + +#: src/alarm/interface.cc:301 src/alarm/interface.cc:342 +msgid "Volume" +msgstr "Ovoz balandligi" + +#: src/alarm/interface.cc:306 +msgid "Start at" +msgstr "Boshlash" + +#: src/alarm/interface.cc:322 +msgid "Final" +msgstr "Yakun" + +#: src/alarm/interface.cc:335 +msgid "Current" +msgstr "Joriy" + +#: src/alarm/interface.cc:348 +msgid "Additional Command" +msgstr "Qo'shimcha buyruq" + +#: src/alarm/interface.cc:354 src/alarm/interface.cc:377 +msgid "enable" +msgstr "yoqish" + +#: src/alarm/interface.cc:361 +msgid "Playlist (optional)" +msgstr "Pleylist (ixtiyoriy)" + +#: src/alarm/interface.cc:365 +msgid "Select a playlist" +msgstr "Pleylistni tanlang" + +#: src/alarm/interface.cc:385 +msgid "Options" +msgstr "Variantlar" + +#: src/alarm/interface.cc:390 +msgid "What do these options mean?" +msgstr "Bu variantlar nimani anglatadi?" + +#: src/alarm/interface.cc:404 +msgid "Help" +msgstr "Yordam" + +#: src/albumart/albumart.cc:31 src/albumart-qt/albumart.cc:35 +msgid "Album Art" +msgstr "Albom qoplamasi" + +#: src/alsa/alsa.h:64 +msgid "ALSA Output" +msgstr "ALSA chiqishi" + +#: src/alsa/config.cc:28 +msgid "" +"ALSA Output Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren\n" +"\n" +"My thanks to William Pitcock, author of the ALSA Output Plugin NG, whose " +"code served as a reference when the ALSA manual was not enough." +msgstr "" +"Audacious uchun ALSA chiqish plagini\n" +"Mualliflik huquqi 2009-2012 Jon Lindgren\n" +"\n" +"ALSA qoʻllanmasi yetarli boʻlmaganda kodi maʼlumotnoma boʻlib xizmat qilgan " +"ALSA Output Plugin NG muallifi Uilyam Pitkokka rahmat." + +#: src/alsa/config.cc:61 +msgid "(no description)" +msgstr "(tavsif yo'q)" + +#: src/alsa/config.cc:166 +msgid "Default PCM device" +msgstr "Standart PCM qurilmasi" + +#: src/alsa/config.cc:188 +msgid "Default mixer device" +msgstr "Standart mikser qurilmasi" + +#: src/alsa/config.cc:296 +msgid "PCM device:" +msgstr "PCM qurilmasi:" + +#: src/alsa/config.cc:299 +msgid "Mixer device:" +msgstr "Mikser qurilmasi:" + +#: src/alsa/config.cc:302 +msgid "Mixer element:" +msgstr "Mikser elementi:" + +#: src/amidiplug/amidi-plug.cc:42 +msgid "AMIDI-Plug (MIDI Player)" +msgstr "AMIDI-Plug (MIDI pleyer)" + +#: src/amidiplug/amidi-plug.cc:445 +msgid "" +"AMIDI-Plug\n" +"modular MIDI music player\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"written by Giacomo Lozito\n" +"\n" +"\n" +"special thanks to...\n" +"\n" +"Clemens Ladisch and Jaroslav Kysela\n" +"for their cool programs aplaymidi and amixer; those\n" +"were really useful, along with alsa-lib docs, in order\n" +"to learn more about the ALSA API\n" +"\n" +"Alfredo Spadafina\n" +"for the nice midi keyboard logo\n" +"\n" +"Tony Vroon\n" +"for the good help with alpha testing" +msgstr "" +"AMIDI-Plug\n" +"modulli MIDI musiqa pleyeri\n" +"http://www.develia.org/projects.php?p=amidiplug\n" +"\n" +"Giakomo Lozito tomonidan yozilgan\n" +"\n" +"\n" +"alohida rahmat...\n" +"\n" +"Klemens Ladish va Yaroslav Kisela\n" +"aplaymidi va amikser ajoyib dasturlari uchun; bular\n" +"alsa-lib hujjatlari bilan bir qatorda haqiqatdan ham foydali edi\n" +"ALSA API haqida ko'proq ma'lumot olish uchun\n" +"\n" +"Alfredo Spadafina\n" +"Chiroyli midi klaviatura logotipi uchun\n" +"\n" +"Toni Vroon\n" +"alfa sinovida yaxshi yordam uchun" + +#: src/amidiplug/i_configure.cc:94 +msgid "Override default gain:" +msgstr "Standart kuchayishni o'zgartirish" + +#: src/amidiplug/i_configure.cc:102 +msgid "Override default polyphony:" +msgstr "Standart polifoniyani o'zgartirish:" + +#: src/amidiplug/i_configure.cc:110 +msgid "Override default reverb:" +msgstr "Standart reverberatsiyani o'zgartirish:" + +#: src/amidiplug/i_configure.cc:112 src/amidiplug/i_configure.cc:120 +msgid "On" +msgstr "Yoqilgan" + +#: src/amidiplug/i_configure.cc:118 +msgid "Override default chorus:" +msgstr "Standart xorni o'zgartirish:" + +#: src/amidiplug/i_configure.cc:128 src/console/plugin.cc:29 +msgid "Playback" +msgstr "Ijro" + +#: src/amidiplug/i_configure.cc:129 +msgid "Transpose:" +msgstr "Ko'chirish:" + +#: src/amidiplug/i_configure.cc:131 src/speedpitch/speed-pitch.cc:257 +msgid "semitones" +msgstr "yarim tonlar" + +#: src/amidiplug/i_configure.cc:132 +msgid "Drum shift:" +msgstr "Baraban almashinuvi:" + +#: src/amidiplug/i_configure.cc:134 +msgid "note numbers" +msgstr "raqamlarga e'tibor berish" + +#: src/amidiplug/i_configure.cc:135 +msgid "Skip leading silence" +msgstr "Oldingi jimlikni o'tkazib yuborish" + +#: src/amidiplug/i_configure.cc:137 +msgid "Skip trailing silence" +msgstr "Keyingi jimlikni o'tkazib yuborish" + +#: src/amidiplug/i_configure.cc:141 +msgid "SoundFont" +msgstr "SoundFont" + +#: src/amidiplug/i_configure.cc:148 +msgid "Synthesizer" +msgstr "Sintezator" + +#: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 +#: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 +msgid "Sample rate:" +msgstr "Namuna tezligi:" + +#: src/amidiplug/i_configure-fluidsynth.cc:57 +#: src/amidiplug/i_configure-fluidsynth.cc:536 +msgid "AMIDI-Plug - select SoundFont file" +msgstr "AMIDI-Plug - SoundFont faylini tanlang" + +#: src/amidiplug/i_configure-fluidsynth.cc:60 +msgid "_Cancel" +msgstr "_Bekor qilish" + +#: src/amidiplug/i_configure-fluidsynth.cc:61 +msgid "_Open" +msgstr "_Ochish" + +#: src/amidiplug/i_configure-fluidsynth.cc:230 +#: src/amidiplug/i_configure-fluidsynth.cc:476 src/gtkui/columns.cc:46 +msgid "File name" +msgstr "Fayl nomi" + +#: src/amidiplug/i_configure-fluidsynth.cc:234 +#: src/amidiplug/i_configure-fluidsynth.cc:479 +msgid "Size (bytes)" +msgstr "Hajmi (bayt)" + +#: src/amidiplug/i_fileinfo.cc:169 +msgid "Name:" +msgstr "Nomi:" + +#: src/amidiplug/i_fileinfo.cc:187 +msgid " MIDI Info " +msgstr "MIDI haqida ma'lumot" + +#: src/amidiplug/i_fileinfo.cc:201 +msgid "Format:" +msgstr "Format:" + +#: src/amidiplug/i_fileinfo.cc:204 +msgid "Length (msec):" +msgstr "Uzunlik (msek):" + +#: src/amidiplug/i_fileinfo.cc:207 +msgid "No. of Tracks:" +msgstr "Qo'shiqlar raqami:" + +#: src/amidiplug/i_fileinfo.cc:213 +msgid "variable" +msgstr "o'zgaruvchan" + +#: src/amidiplug/i_fileinfo.cc:215 +msgid "BPM:" +msgstr "BPM:" + +#: src/amidiplug/i_fileinfo.cc:223 +msgid "BPM (wavg):" +msgstr "BPM (wavg):" + +#: src/amidiplug/i_fileinfo.cc:226 +msgid "Time Div:" +msgstr "Vaqt taqsimoti:" + +#: src/amidiplug/i_fileinfo.cc:237 +msgid " MIDI Comments and Lyrics " +msgstr "MIDI izohlari va matni" + +#: src/amidiplug/i_fileinfo.cc:284 +msgid "* no comments available in this MIDI file *" +msgstr "* ushbu MIDI faylida hech qanday izoh mavjud emas *" + +#: src/amidiplug/i_fileinfo.cc:296 +msgid "* no lyrics available in this MIDI file *" +msgstr "* ushbu MIDI faylda hech qanday matn mavjud emas *" + +#: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 +msgid "_Close" +msgstr "_Yopish" + +#: src/amidiplug/i_fileinfo.cc:331 +msgid " (invalid UTF-8)" +msgstr "(yaroqsiz UTF-8)" + +#: src/ampache/ampache.cc:33 +msgid "Ampache Browser" +msgstr "Ampache brauzeri" + +#: src/ampache/ampache.cc:46 +msgid "" +"Ampache Browser for Audacious\n" +"http://ampache-browser.org/\n" +"\n" +"Copyright (C) Róbert Čerňanský and John Lindgren\n" +"License: GNU GPLv3" +msgstr "" +"Audacious uchun Ampache brauzeri\n" +"http://ampache-browser.org/\n" +"\n" +"Mualliflik huquqi (C) Róbert Čerňanski va Jon Lindgren\n" +"Litsenziya: GNU GPLv3" + +#: src/aosd/aosd.cc:31 +msgid "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Written by Giacomo Lozito \n" +"\n" +"Based in part on Evan Martin's Ghosd library:\n" +"http://neugierig.org/software/ghosd/" +msgstr "" +"Audacious OSD\n" +"http://www.develia.org/projects.php?p=audacious#aosd\n" +"\n" +"Giakomo Lozito tomonidan yozilgan \n" +"\n" +"Qisman Evan Martinning Ghosd kutubxonasiga asoslangan:\n" +"http://neugierig.org/software/ghosd/" + +#: src/aosd/aosd.h:37 +msgid "AOSD (On-Screen Display)" +msgstr "AOSD (ekrandagi displey)" + +#: src/aosd/aosd_style.cc:54 +msgid "Rectangle" +msgstr "To'rtburchak" + +#: src/aosd/aosd_style.cc:59 +msgid "Rounded Rectangle" +msgstr "Dumaloq to'rtburchak" + +#: src/aosd/aosd_style.cc:64 +msgid "Concave Rectangle" +msgstr "Botiq to'rtburchak" + +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 +msgid "None" +msgstr "Yo'q" + +#: src/aosd/aosd_trigger.cc:49 +msgid "Playback Start" +msgstr "Ijroni boshlash" + +#: src/aosd/aosd_trigger.cc:50 +msgid "Triggers OSD when a playlist entry is played." +msgstr "Pleylist yozuvi ijro etilganda OSD ni ishga tushiradi." + +#: src/aosd/aosd_trigger.cc:55 +msgid "Title Change" +msgstr "Sarlavhani o'zgartirish" + +#: src/aosd/aosd_trigger.cc:56 +msgid "Triggers OSD when the song title changes (for internet streams)." +msgstr "" +"Qo'shiq nomi o'zgarganda OSD ni ishga tushiradi (internet oqimlari uchun)." + +#: src/aosd/aosd_trigger.cc:61 +msgid "Pause On" +msgstr "Pauza yoqilgan" + +#: src/aosd/aosd_trigger.cc:62 +msgid "Triggers OSD when playback is paused." +msgstr "Ijro toʻxtatilganda OSD ni ishga tushiradi." + +#: src/aosd/aosd_trigger.cc:67 +msgid "Pause Off" +msgstr "Pauza oʻchirilgan" + +#: src/aosd/aosd_trigger.cc:68 +msgid "Triggers OSD when playback is unpaused." +msgstr "Ijro davom etganda OSD ni ishga tushiradi." + +#: src/aosd/aosd_ui.cc:162 +msgid "Placement" +msgstr "Joylashuv" + +#: src/aosd/aosd_ui.cc:195 +msgid "Relative X offset:" +msgstr "Nisbiy X ofset:" + +#: src/aosd/aosd_ui.cc:202 +msgid "Relative Y offset:" +msgstr "Nisbiy Y ofset:" + +#: src/aosd/aosd_ui.cc:209 +msgid "Max OSD width:" +msgstr "Maksimal OSD kengligi:" + +#: src/aosd/aosd_ui.cc:220 +msgid "Multi-Monitor options" +msgstr "Ko'p monitorli variantlar" + +#: src/aosd/aosd_ui.cc:224 +msgid "Display OSD using:" +msgstr "OSD ni ko'rsatish:" + +#: src/aosd/aosd_ui.cc:226 +msgid "all monitors" +msgstr "hamma monitorlarda" + +#: src/aosd/aosd_ui.cc:229 +#, c-format +msgid "monitor %i" +msgstr "%i monitorda" + +#: src/aosd/aosd_ui.cc:281 +msgid "Timing (ms)" +msgstr "Vaqt (ms)" + +#: src/aosd/aosd_ui.cc:286 +msgid "Display:" +msgstr "Displey:" + +#: src/aosd/aosd_ui.cc:291 +msgid "Fade in:" +msgstr "Paydo bo'lish" + +#: src/aosd/aosd_ui.cc:296 +msgid "Fade out:" +msgstr "Yo'qolish" + +#: src/aosd/aosd_ui.cc:360 +msgid "Fonts" +msgstr "Shriftlar" + +#: src/aosd/aosd_ui.cc:367 +#, c-format +msgid "Font %i:" +msgstr "Shrift %i:" + +#: src/aosd/aosd_ui.cc:381 +msgid "Shadow" +msgstr "Soya" + +#: src/aosd/aosd_ui.cc:485 +msgid "Render Style" +msgstr "Render uslubi" + +#: src/aosd/aosd_ui.cc:501 +msgid "Colors" +msgstr "Ranglar" + +#: src/aosd/aosd_ui.cc:512 +#, c-format +msgid "Color %i:" +msgstr "Rang %i:" + +#: src/aosd/aosd_ui.cc:599 +msgid "Enable trigger" +msgstr "Triggerni yoqish" + +#: src/aosd/aosd_ui.cc:626 +msgid "Event" +msgstr "Voqea" + +#: src/aosd/aosd_ui.cc:653 +msgid "Composite manager detected" +msgstr "Kompozit boshqaruvchi aniqlandi" + +#: src/aosd/aosd_ui.cc:660 +msgid "" +"Composite manager not detected;\n" +"unless you know that you have one running, please activate a composite " +"manager otherwise the OSD won't work properly" +msgstr "" +"Kompozit boshqaruvchi aniqlanmadi;\n" +"Agar siz uni ishlayotganini bilmangiz, kompozit boshqaruvchini " +"faollashtiring, aks holda OSD to‘g‘ri ishlamaydi." + +#: src/aosd/aosd_ui.cc:668 +msgid "Composite manager not required for fake transparency" +msgstr "Soxta shaffoflik uchun kompozit menejer talab qilinmaydi" + +#: src/aosd/aosd_ui.cc:705 +msgid "Transparency" +msgstr "Shaffoflik" + +#: src/aosd/aosd_ui.cc:711 +msgid "Fake transparency" +msgstr "Soxta shaffoflik" + +#: src/aosd/aosd_ui.cc:713 +msgid "Real transparency (requires X Composite Ext.)" +msgstr "Haqiqiy shaffoflik (X Composite Ext. talab qilinadi)" + +#: src/aosd/aosd_ui.cc:754 +msgid "Composite extension not loaded" +msgstr "Kompozit kengaytma yuklanmagan" + +#: src/aosd/aosd_ui.cc:771 +#, c-format +msgid "Audacious OSD" +msgstr "Audacious OSD" + +#: src/aosd/aosd_ui.cc:834 +msgid "Position" +msgstr "Joy" + +#: src/aosd/aosd_ui.cc:839 +msgid "Animation" +msgstr "Animatsiya" + +#: src/aosd/aosd_ui.cc:844 +msgid "Text" +msgstr "Matn" + +#: src/aosd/aosd_ui.cc:849 +msgid "Decoration" +msgstr "Bezatish" + +#: src/aosd/aosd_ui.cc:854 +msgid "Trigger" +msgstr "Trigger" + +#: src/aosd/aosd_ui.cc:859 src/streamtuner/shoutcast-model.cc:202 +msgid "Misc" +msgstr "Boshqa" + +#: src/aosd/aosd_ui.cc:868 +msgid "Test" +msgstr "Sinov" + +#: src/asx3/asx3.cc:35 +msgid "ASXv3 Playlists" +msgstr "ASXv3 pleylistlari" + +#: src/asx/asx.cc:33 +msgid "ASXv1/ASXv2 Playlists" +msgstr "ASXv1/ASXv2 pleylistlari" + +#: src/audpl/audpl.cc:33 +msgid "Audacious Playlists (audpl)" +msgstr "Audacious pleylistlari (audpl)" + +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + +#: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 +msgid "Color" +msgstr "Rang" + +#: src/blur_scope/blur_scope.cc:55 src/blur_scope-qt/blur_scope.cc:158 +msgid "Blur Scope" +msgstr "Blur Scope" + +#: src/bs2b/plugin.cc:38 +msgid "Bauer Stereophonic-to-Binaural (BS2B)" +msgstr "Bauer Stereophonic-to-Binaural (BS2B)" + +#: src/bs2b/plugin.cc:129 +msgid "Presets:" +msgstr "Sozlamalar:" + +#: src/bs2b/plugin.cc:136 +msgid "Feed level:" +msgstr "Ta'minot darajasi:" + +#: src/bs2b/plugin.cc:138 +msgid "x1/10 dB" +msgstr "x1/10 dB" + +#: src/bs2b/plugin.cc:139 +msgid "Cut frequency:" +msgstr "Kesish chastotasi:" + +#: src/cairo-spectrum/cairo-spectrum.cc:41 src/qt-spectrum/qt-spectrum.cc:107 +msgid "Spectrum Analyzer" +msgstr "Spektr analizatori" + +#: src/cdaudio/cdaudio-ng.cc:71 +msgid "Audio CD Plugin" +msgstr "Audio CD plagini" + +#: src/cdaudio/cdaudio-ng.cc:118 +msgid "" +"Copyright (C) 2007-2012 Calin Crisan and others.\n" +"\n" +"Many thanks to libcdio developers \n" +"and to libcddb developers .\n" +"\n" +"Also thank you to Tony Vroon for mentoring and guiding me.\n" +"\n" +"This was a Google Summer of Code 2007 project." +msgstr "" +"Mualliflik huquqi (C) 2007-2012 Calin Crisan va " +"boshqalar.\n" +"\n" +"Libcdio dasturchilariga katta rahmat \n" +"va libcddb dasturchilariga .\n" +"\n" +"Toni Vroonga ham menga maslahat bergani va yo'l-yo'riq ko'rsatgani uchun " +"rahmat.\n" +"\n" +"Bu Google Summer of Code 2007 loyihasi edi." + +#: src/cdaudio/cdaudio-ng.cc:134 +msgid "Device" +msgstr "Qurilma" + +#: src/cdaudio/cdaudio-ng.cc:135 +msgid "Read speed:" +msgstr "O'qish tezligi:" + +#: src/cdaudio/cdaudio-ng.cc:138 +msgid "Override device:" +msgstr "Qurilmani o'zgartirish" + +#: src/cdaudio/cdaudio-ng.cc:140 +msgid "Metadata" +msgstr "Metamaʼlumot" + +#: src/cdaudio/cdaudio-ng.cc:141 +msgid "Use CD-Text" +msgstr "CD-Text dan foydalanish" + +#: src/cdaudio/cdaudio-ng.cc:143 +msgid "Use CDDB" +msgstr "CDDB dan foydalanish" + +#: src/cdaudio/cdaudio-ng.cc:145 +msgid "Use HTTP instead of CDDBP" +msgstr "CDDBP o'rniga HTTP dan foydalanish" + +#: src/cdaudio/cdaudio-ng.cc:148 +msgid "Server:" +msgstr "Server:" + +#: src/cdaudio/cdaudio-ng.cc:152 +msgid "Path:" +msgstr "Yoʻl:" + +#: src/cdaudio/cdaudio-ng.cc:156 +msgid "Port:" +msgstr "Port:" + +#: src/cdaudio/cdaudio-ng.cc:220 +msgid "Failed to initialize cdio subsystem." +msgstr "cdio quyi tizimini ishga tushirib boʻlmadi." + +#: src/cdaudio/cdaudio-ng.cc:250 +#, c-format +msgid "Invalid URI %s." +msgstr "Yaroqsiz URI %s." + +#: src/cdaudio/cdaudio-ng.cc:252 +#, c-format +msgid "Track %d not found." +msgstr "Trek %d topilmadi." + +#: src/cdaudio/cdaudio-ng.cc:254 +#, c-format +msgid "Track %d is a data track." +msgstr "Trek %d bu ma'lumotlar treki." + +#: src/cdaudio/cdaudio-ng.cc:329 +msgid "Error reading audio CD." +msgstr "Audio CD ni o'qishda xatolik yuz berdi." + +#: src/cdaudio/cdaudio-ng.cc:398 +msgid "Audio CD" +msgstr "Audio CD" + +#: src/cdaudio/cdaudio-ng.cc:435 src/cdaudio/cdaudio-ng.cc:444 +#, c-format +msgid "Failed to open CD device %s." +msgstr "%s CD qurilmasini ochib bo'lmadi." + +#: src/cdaudio/cdaudio-ng.cc:447 +msgid "No audio capable CD drive found." +msgstr "Hech qanday audio moslamasi mavjud CD drayvi topilmadi." + +#: src/cdaudio/cdaudio-ng.cc:470 +msgid "Drive is empty." +msgstr "Drayv bo'sh." + +#: src/cdaudio/cdaudio-ng.cc:472 +msgid "Unsupported disk type." +msgstr "Qo'llab-quvvatlanmaydigan disk turi." + +#: src/cdaudio/cdaudio-ng.cc:496 +msgid "Failed to finish initializing opened CD drive." +msgstr "Ochiq CD diskini ishga tushirishni tugatib bo'lmadi." + +#: src/cdaudio/cdaudio-ng.cc:509 +msgid "Failed to retrieve first/last track number." +msgstr "Birinchi/oxirgi trek raqamini olib bo‘lmadi." + +#: src/cdaudio/cdaudio-ng.cc:530 +#, c-format +msgid "Cannot read start/end LSN for track %d." +msgstr "%d Trek uchun boshlash/tugatish LSNni o'qib bo'lmadi." + +#: src/cdaudio/cdaudio-ng.cc:612 +msgid "Failed to create the CDDB connection." +msgstr "CDDB ulanishini yaratib bo‘lmadi." + +#: src/cdaudio/cdaudio-ng.cc:678 +msgid "Failed to query the CDDB server" +msgstr "CDDB serverini so‘rash bajarilmadi" + +#: src/cdaudio/cdaudio-ng.cc:680 +#, c-format +msgid "Failed to query the CDDB server: %s" +msgstr "CDDB serverini so'rash bajarilmadi: %s" + +#: src/cdaudio/cdaudio-ng.cc:704 +#, c-format +msgid "Failed to read the CDDB info: %s" +msgstr "CDDB ma'lumotlarini o'qib bo'lmadi: %s" + +#: src/cd-menu-items/cd-menu-items.cc:33 +msgid "Audio CD Menu Items" +msgstr "Audio CD menyu bandlari" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "Pla_y CD" +msgstr "CD ni ijro ettirish" + +#: src/cd-menu-items/cd-menu-items.cc:45 +msgid "_Add CD" +msgstr "CD qo'shish" + +#: src/compressor/compressor.cc:45 +msgid "Compression" +msgstr "Siqish" + +#: src/compressor/compressor.cc:46 +msgid "Center volume:" +msgstr "Markaz ovoz balandligi:" + +#: src/compressor/compressor.cc:49 +msgid "Dynamic range:" +msgstr "Dinamik diapazon:" + +#: src/compressor/compressor.cc:57 +msgid "" +"Dynamic Range Compression Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" +"Audacious uchun dinamik diapazonni siqish plagini\n" +"Mualliflik huquqi 2010-2014 Jon Lindgren" + +#: src/compressor/compressor.cc:64 +msgid "Dynamic Range Compressor" +msgstr "Dinamik diapazon kompressori" + +#: src/console/plugin.cc:15 +msgid "" +"Console music decoder engine based on Game_Music_Emu 0.5.2\n" +"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Shay Green " +msgstr "" +"Game_Music_Emu 0.5.2 asosidagi konsol musiqa dekoder mexanizmi\n" +"Qo'llab-quvvatlanadigan formatlar: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, " +"SPC, VGM, VGZ\n" +"\n" +"Audacious plagin mualliflari:\n" +"Uilyam Pitkok \n" +"Shay Green " + +#: src/console/plugin.cc:30 +msgid "Bass:" +msgstr "Bass:" + +#: src/console/plugin.cc:33 +msgid "Treble:" +msgstr "Treble:" + +#: src/console/plugin.cc:36 +msgid "Echo:" +msgstr "Aks sado:" + +#: src/console/plugin.cc:39 +msgid "Default song length:" +msgstr "Standart qo‘shiq uzunligi:" + +#: src/console/plugin.cc:42 src/modplug/plugin_main.cc:58 +msgid "Resampling" +msgstr "Qayta namuna olish" + +#: src/console/plugin.cc:43 +msgid "Enable audio resampling" +msgstr "Ovozni qayta namuna olishni yoqish" + +#: src/console/plugin.cc:49 +msgid "SPC" +msgstr "SPC" + +#: src/console/plugin.cc:50 +msgid "Ignore length from SPC tags" +msgstr "SPC teglaridan uzunlikni e'tiborsiz qoldirish" + +#: src/console/plugin.cc:52 +msgid "Increase reverb" +msgstr "Reverberatsiyani ko'paytirish" + +#: src/console/plugin.h:26 +msgid "Game Console Music Decoder" +msgstr "O'yin konsoli musiqa dekoderi" + +#: src/coreaudio/coreaudio.cc:53 +msgid "CoreAudio output" +msgstr "CoreAudio chiqishi" + +#: src/coreaudio/coreaudio.cc:156 +msgid "" +"CoreAudio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"Copyright 2017,18 René J.V. Bertin\n" +" (original code and code adapted from\n" +" Apple examples, (C) Apple 2013)\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"Audacious uchun CoreAudio chiqish plagini\n" +"Mualliflik huquqi 2014 Uilyam Pitkok\n" +"Mualliflik huquqi 2017,18 René J.V. Bertin\n" +"(asl kod va kod moslashtirilgan\n" +"Apple misollari, (C) Apple 2013)\n" +"\n" +"Audacious uchun SDL chiqish plaginiga asoslangan\n" +"Mualliflik huquqi 2010 Jon Lindgren" + +#: src/coreaudio/coreaudio.cc:172 +msgid "Use exclusive mode" +msgstr "Maxsus rejimdan foydalanish" + +#: src/coreaudio/coreaudio.cc:174 +msgid "Use bit perfect audio (adapt device sampling rate)" +msgstr "" +"Bit mukammal audiodan foydalanish (qurilma namuna olish tezligini " +"moslashtirish)" + +#: src/crossfade/crossfade.cc:43 +msgid "" +"Crossfade Plugin for Audacious\n" +"Copyright 2010-2014 John Lindgren" +msgstr "" +"Audacious uchun Crossfade plagini\n" +"Mualliflik huquqi 2010-2014 Jon Lindgren" + +#: src/crossfade/crossfade.cc:47 +msgid "Crossfade" +msgstr "Oʻzaro oʻtish" + +#: src/crossfade/crossfade.cc:48 +msgid "On automatic song change" +msgstr "Qo'shiqni avtomatik o'zgartirishda" + +#: src/crossfade/crossfade.cc:50 src/crossfade/crossfade.cc:56 +msgid "Overlap:" +msgstr "Overlap:" + +#: src/crossfade/crossfade.cc:54 +msgid "On seek or manual song change" +msgstr "Qidiruv yoki qo'lda qo'shiqni o'zgartirishda" + +#: src/crossfade/crossfade.cc:60 +msgid "Tip" +msgstr "Maslahat" + +#: src/crossfade/crossfade.cc:61 +msgid "" +"For better crossfading, enable\n" +"the Silence Removal effect." +msgstr "" +"Yaxshiroq oʻzaro oʻtish uchun\n" +"jimlikni olib tashlash effektini yoqing." + +#: src/crossfade/crossfade.cc:71 +msgid "Crossfade" +msgstr "Oʻzaro oʻtish" + +#: src/crystalizer/crystalizer.cc:31 +msgid "Crystalizer" +msgstr "Kristalizator" + +#: src/crystalizer/crystalizer.cc:32 src/stereo_plugin/stereo.cc:45 +msgid "Intensity:" +msgstr "Intensivlik:" + +#: src/crystalizer/crystalizer.cc:43 +msgid "Crystalizer" +msgstr "Kristalizator" + +#: src/cue/cue.cc:42 +msgid "Cue Sheet Plugin" +msgstr "Cue Sheet plagini" + +#: src/delete-files/delete-files.cc:53 src/delete-files/delete-files.cc:215 +#: src/delete-files/delete-files.cc:230 +msgid "Delete Files" +msgstr "Fayllarni o'chirish" + +#: src/delete-files/delete-files.cc:120 +msgid "No files are selected." +msgstr "Hech qanday fayl tanlanmagan." + +#: src/delete-files/delete-files.cc:125 +#, c-format +msgid "Do you want to move %s to the trash?" +msgstr "%s chiqindiga o'tkazmoqchimisiz?" + +#: src/delete-files/delete-files.cc:126 +#, c-format +msgid "Do you want to permanently delete %s?" +msgstr "%s butunlay o'chirib tashlamoqchimisiz?" + +#: src/delete-files/delete-files.cc:133 +#, c-format +msgid "Do you want to move %d files to the trash?" +msgstr "%dfayllarni chiqindiga o'tkazmoqchimisiz?" + +#: src/delete-files/delete-files.cc:134 +#, c-format +msgid "Do you want to permanently delete %d files?" +msgstr "%d fayllarni butunlay oʻchirib tashlamoqchimisiz?" + +#: src/delete-files/delete-files.cc:146 +msgid "Move to trash" +msgstr "Chiqindiga o'tkazish" + +#: src/delete-files/delete-files.cc:146 +msgid "Delete" +msgstr "Oʻchirish" + +#: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 +msgid "Cancel" +msgstr "Bekor qilish" + +#: src/delete-files/delete-files.cc:266 +msgid "Delete Selected Files" +msgstr "Tanlangan fayllarni o'chirish" + +#: src/delete-files/delete-files.cc:286 +msgid "Delete Method" +msgstr "O'chirish usuli" + +#: src/delete-files/delete-files.cc:287 +msgid "Move to trash instead of deleting immediately" +msgstr "Darhol oʻchirish oʻrniga chiqindiga oʻtkazish" + +#: src/echo_plugin/echo.cc:9 +msgid "" +"Echo Plugin\n" +"By Johan Levin, 1999\n" +"Surround echo by Carl van Schaik, 1999\n" +"Updated for Audacious by William Pitcock and John Lindgren, 2010-2014" +msgstr "" +"Aks sado plagini\n" +"Yohan Levin tomonidan, 1999 yil\n" +"Surround echo Karl van Schaik tomonidan, 1999 yil\n" +"Uilyam Pitkok va Jon Lindgren tomonidan Audacious uchun yangilangan, " +"2010-2014" + +#: src/echo_plugin/echo.cc:21 +msgid "Echo" +msgstr "Aks sado" + +#: src/echo_plugin/echo.cc:22 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 +msgid "Delay:" +msgstr "Kechikish:" + +#: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 +msgid "ms" +msgstr "ms" + +#: src/echo_plugin/echo.cc:25 +msgid "Feedback:" +msgstr "Fikr-mulohaza:" + +#: src/echo_plugin/echo.cc:28 src/modplug/plugin_main.cc:86 +msgid "Volume:" +msgstr "Ovoz balandligi:" + +#: src/echo_plugin/echo.cc:39 +msgid "Echo" +msgstr "Aks sado" + +#: src/ffaudio/ffaudio-core.cc:49 +msgid "FFmpeg Plugin" +msgstr "FFmpeg plagini" + +#: src/ffaudio/ffaudio-core.cc:635 +msgid "" +"Multi-format audio decoding plugin for Audacious using\n" +"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" +"\n" +"Audacious plugin by:\n" +"William Pitcock \n" +"Matti Hämäläinen " +msgstr "" +"Audacious foydalanish uchun ko'p formatli audio dekodlash plagini\n" +"FFmpeg multimedia freymvorki (http://www.ffmpeg.org/)\n" +"\n" +"Audacious plagin mualliflari:\n" +"William Pitcock \n" +"Matti Hämäläinen " + +#: src/filewriter/filewriter.cc:48 +msgid "FileWriter Plugin" +msgstr "FileWriter plagini" + +#: src/filewriter/filewriter.cc:316 +#, c-format +msgid "" +"Error opening %s:\n" +"%s" +msgstr "" +" %s ochilishda xatolik:\n" +"%s" + +#: src/filewriter/filewriter.cc:358 +msgid "" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" +"Bu dastur bepul dastur hisoblanadi; siz uni qayta tarqatishingiz va/yoki uni " +"Free Software Foundation tomonidan nashr etilgan GNU General Public License " +"shartlariga muvofiq o'zgartirishingiz mumkin; Litsenziyaning 2-versiyasi " +"yoki (sizning xohishingizga ko'ra) har qanday keyingi versiyasi.\n" +"\n" +"Ushbu dastur foydali bo'ladi degan umidda tarqatiladi, lekin HECH QANDAY " +"KAFOLATSIZ; SOVLASH MUVOFIQligi yoki MAQSUS MAQSADGA MUVOFIQligi haqidagi " +"nazarda tutilgan kafolatsiz. Batafsil ma'lumot uchun GNU General Public " +"License-ga qarang.\n" +"\n" +"Siz ushbu dastur bilan birga GNU General Public License nusxasini olishingiz " +"kerak edi; bo'lmasa, Free Software Foundation, Inc., 51 Franklin Street, " +"Fifth Floor, Boston, MA 02110-1301, AQSH ga yozing." + +#: src/filewriter/filewriter.cc:385 +msgid "Output file format:" +msgstr "Chiqarish fayl formati:" + +#: src/filewriter/filewriter.cc:389 +msgid "Save into original directory" +msgstr "Asl katalogga saqlash" + +#: src/filewriter/filewriter.cc:392 +msgid "Save into custom directory:" +msgstr "Maxsus katalogga saqlash:" + +#: src/filewriter/filewriter.cc:400 +msgid "Generate file name from:" +msgstr "Fayl nomini quyidagidan yarating:" + +#: src/filewriter/filewriter.cc:401 +msgid "Original file name" +msgstr "Asl fayl nomi" + +#: src/filewriter/filewriter.cc:404 +msgid "Original file name (no suffix)" +msgstr "Asl fayl nomi (qo'shimchasi yo'q)" + +#: src/filewriter/filewriter.cc:407 +msgid "Original file tag" +msgstr "Asl fayl yorlig'i" + +#: src/filewriter/filewriter.cc:411 +msgid "Prepend track number to file name" +msgstr "Fayl nomiga trek raqamini qo'ying" + +#: src/filewriter/filewriter.cc:417 src/filewriter/filewriter.cc:449 +msgid "Auto" +msgstr "Avtomatik" + +#: src/filewriter/filewriter.cc:418 +msgid "8000 Hz" +msgstr "8000 Gts" + +#: src/filewriter/filewriter.cc:419 +msgid "11025 Hz" +msgstr "11025 Gts" + +#: src/filewriter/filewriter.cc:420 +msgid "12000 Hz" +msgstr "12000 Gts" + +#: src/filewriter/filewriter.cc:421 +msgid "16000 Hz" +msgstr "16000 Gts" + +#: src/filewriter/filewriter.cc:422 +msgid "22050 Hz" +msgstr "22050 Gts" + +#: src/filewriter/filewriter.cc:423 +msgid "24000 Hz" +msgstr "24000 Gts" + +#: src/filewriter/filewriter.cc:424 +msgid "32000 Hz" +msgstr "32000 Gts" + +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 +msgid "44100 Hz" +msgstr "44100 Gts" + +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 +msgid "48000 Hz" +msgstr "48000 Gts" + +#: src/filewriter/filewriter.cc:430 +msgid "8 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:431 +msgid "16 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:432 +msgid "32 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:433 +msgid "40 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:434 +msgid "48 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:435 +msgid "56 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:436 +msgid "64 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:437 +msgid "80 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:438 +msgid "96 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:439 +msgid "112 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:440 +msgid "128 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:441 +msgid "160 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:442 +msgid "192 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:443 +msgid "224 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:444 +msgid "256 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:445 +msgid "320 kbit/s" +msgstr "" + +#: src/filewriter/filewriter.cc:450 +msgid "Joint Stereo" +msgstr "Joint Stereo" + +#: src/filewriter/filewriter.cc:451 src/modplug/plugin_main.cc:57 +#: src/mpg123/mpg123.cc:255 +msgid "Stereo" +msgstr "Stereo" + +#: src/filewriter/filewriter.cc:452 src/modplug/plugin_main.cc:56 +#: src/mpg123/mpg123.cc:256 +msgid "Mono" +msgstr "Mono" + +#: src/filewriter/filewriter.cc:456 +msgid "VBR" +msgstr "VBR" + +#: src/filewriter/filewriter.cc:457 +msgid "ABR" +msgstr "ABR" + +#: src/filewriter/filewriter.cc:478 +msgid "Algorithm quality:" +msgstr "Algoritm sifati:" + +#: src/filewriter/filewriter.cc:484 +msgid "Bitrate:" +msgstr "Bit tezligi:" + +#: src/filewriter/filewriter.cc:491 +msgid "Compression ratio:" +msgstr "Siqish nisbati:" + +#: src/filewriter/filewriter.cc:498 +msgid "Audio mode:" +msgstr "Audio rejimi:" + +#: src/filewriter/filewriter.cc:501 +msgid "Enforce strict ISO compliance" +msgstr "ISO talablariga qat'iy rioya qilish" + +#: src/filewriter/filewriter.cc:503 +msgid "Error protection" +msgstr "Xatolardan himoya qilish" + +#: src/filewriter/filewriter.cc:508 +msgid "Enable VBR/ABR" +msgstr "VBR/ABR ni yoqish" + +#: src/filewriter/filewriter.cc:510 +msgid "Type:" +msgstr "Turi:" + +#: src/filewriter/filewriter.cc:514 +msgid "Minimum bitrate:" +msgstr "Minimal bit tezligi:" + +#: src/filewriter/filewriter.cc:518 +msgid "Maximum bitrate:" +msgstr "Maksimal bit tezligi:" + +#: src/filewriter/filewriter.cc:522 +msgid "Average bitrate:" +msgstr "O'rtacha bit tezligi:" + +#: src/filewriter/filewriter.cc:526 +msgid "VBR quality level:" +msgstr "VBR sifat darajasi:" + +#: src/filewriter/filewriter.cc:530 +msgid "Strictly enforce minimum bitrate" +msgstr "Minimal bit tezligiga qat'iy rioya qilish" + +#: src/filewriter/filewriter.cc:533 +msgid "Omit Xing VBR header" +msgstr "Xing VBR sarlavhasini o'tkazib yubormaslik" + +#: src/filewriter/filewriter.cc:539 +msgid "Frame Headers" +msgstr "Kadr sarlavhalari" + +#: src/filewriter/filewriter.cc:540 +msgid "Mark as copyright" +msgstr "Mualliflik huquqi sifatida belgilash" + +#: src/filewriter/filewriter.cc:542 +msgid "Mark as original" +msgstr "Asl sifatida belgilash" + +#: src/filewriter/filewriter.cc:544 +msgid "ID3 Tags" +msgstr "ID3 teglari" + +#: src/filewriter/filewriter.cc:545 +msgid "Force addition of version 2 tag" +msgstr "2 versiya tegini majburan qo‘shish" + +#: src/filewriter/filewriter.cc:547 +msgid "Only add v1 tag" +msgstr "Faqat v1 tegini qo'shish" + +#: src/filewriter/filewriter.cc:549 +msgid "Only add v2 tag" +msgstr "Faqat v2 tegini qo'shish" + +#: src/filewriter/filewriter.cc:554 +msgid "Quality" +msgstr "Sifat" + +#: src/filewriter/filewriter.cc:555 +msgid "VBR/ABR" +msgstr "VBR/ABR" + +#: src/filewriter/filewriter.cc:556 +msgid "Tags" +msgstr "Teglar" + +#: src/filewriter/filewriter.cc:566 +msgid "Quality (0-1):" +msgstr "Sifat (0-1):" + +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 +#: src/skins/skins_cfg.cc:285 +msgid "General" +msgstr "Umumiy" + +#: src/flac/flacng.h:36 +msgid "FLAC Decoder" +msgstr "FLAC dekoder" + +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 +msgid "lossless" +msgstr "yo'qotishsiz" + +#: src/flac/plugin.cc:180 +msgid "" +"Original code by\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" +msgstr "" +"Asl kod muallifi\n" +"Ralf Ertzinger \n" +"\n" +"http://www.skytale.net/projects/bmp-flac2/" + +#: src/gio/gio.cc:34 +msgid "" +"GIO Plugin for Audacious\n" +"Copyright 2009-2012 John Lindgren" +msgstr "" +"Audacious uchun GIO plagini\n" +"Mualliflik huquqi 2009-2012 Jon Lindgren" + +#: src/gio/gio.cc:42 +msgid "GIO Plugin" +msgstr "GIO plagini" + +#: src/gio/gio.cc:152 +msgid "Read-and-append mode not supported" +msgstr "O‘qish va qo‘shish rejimi qo‘llab-quvvatlanmaydi" + +#: src/gio/gio.cc:165 +msgid "Invalid open mode" +msgstr "Yaroqsiz ochiq rejim" + +#: src/glspectrum/gl-spectrum.cc:51 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" +"Audacious uchun OpenGL spektr analizatori\n" +"Mualliflik huquqi 2013 Kristof Bude, Jon Lindgren va Karlo Bramini\n" +"\n" +"XMMS plagini asosida:\n" +"Mualliflik huquqi 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Tomas " +"Nilsson va 4Front Technologies\n" +"\n" +"Litsenziya: GPLv2+" + +#: src/glspectrum/gl-spectrum.cc:62 src/qtglspectrum/gl-spectrum.cc:53 +msgid "OpenGL Spectrum Analyzer" +msgstr "OpenGL spektr analizatori" + +#: src/gtkui/columns.cc:35 +msgid "Entry number" +msgstr "Kirish raqami" + +#: src/gtkui/columns.cc:36 src/moonstone/playlist_model.cc:38 +#: src/moonstone/playlist_selection.cc:62 +#: src/playlist-manager/playlist-manager.cc:199 +#: src/playlist-manager-qt/playlist-manager-qt.cc:186 +#: src/qtui/playlist_model.cc:33 src/streamtuner/icecast-model.cc:120 +#: src/streamtuner/ihr-model.cc:159 src/streamtuner/shoutcast-model.cc:122 +msgid "Title" +msgstr "Sarlavha" + +#: src/gtkui/columns.cc:37 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Artist" +msgstr "Artist" + +#: src/gtkui/columns.cc:38 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:33 +msgid "Year" +msgstr "Yil" + +#: src/gtkui/columns.cc:39 src/moonstone/playlist_model.cc:39 +#: src/qtui/playlist_model.cc:34 +msgid "Album" +msgstr "Albom" + +#: src/gtkui/columns.cc:40 +msgid "Album artist" +msgstr "Albom artisti" + +#: src/gtkui/columns.cc:41 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 +msgid "Track" +msgstr "Trek" + +#: src/gtkui/columns.cc:42 src/moonstone/playlist_model.cc:40 +#: src/qtui/playlist_model.cc:34 src/streamtuner/icecast-model.cc:123 +#: src/streamtuner/shoutcast-model.cc:125 +#: src/streamtuner/shoutcast-model.cc:236 +msgid "Genre" +msgstr "Janr" + +#: src/gtkui/columns.cc:43 +msgid "Queue position" +msgstr "Navbat holati" + +#: src/gtkui/columns.cc:44 src/moonstone/playlist_model.cc:41 +#: src/qtui/playlist_model.cc:35 +msgid "Length" +msgstr "Uzunligi" + +#: src/gtkui/columns.cc:45 +msgid "File path" +msgstr "Fayl yo'li" + +#: src/gtkui/columns.cc:47 +msgid "Custom title" +msgstr "Maxsus sarlavha" + +#: src/gtkui/columns.cc:48 src/moonstone/playlist_model.cc:42 +#: src/qtui/playlist_model.cc:36 src/streamtuner/icecast-model.cc:129 +#: src/streamtuner/shoutcast-model.cc:134 +msgid "Bitrate" +msgstr "Bit tezligi" + +#: src/gtkui/columns.cc:49 src/moonstone/playlist_model.cc:43 +#: src/qtui/playlist_model.cc:36 +msgid "Comment" +msgstr "Izoh" + +#: src/gtkui/columns.cc:315 +msgid "Available columns" +msgstr "Mavjud ustunlar" + +#: src/gtkui/columns.cc:341 +msgid "Displayed columns" +msgstr "Ko'rsatilgan ustunlar" + +#: src/gtkui/layout.cc:73 src/search-tool-qt/search-tool-qt.cc:58 +#: src/search-tool/search-tool.cc:48 +msgid "Search Tool" +msgstr "Qidiruv vositasi" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Left" +msgstr "Chapga o'rnatish" + +#: src/gtkui/layout.cc:168 +msgid "Dock at Right" +msgstr "Oʻngga oʻrnatish" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Top" +msgstr "Yuqoriga oʻrnatish" + +#: src/gtkui/layout.cc:169 +msgid "Dock at Bottom" +msgstr "Pastga o'rnatish" + +#: src/gtkui/layout.cc:169 +msgid "Undock" +msgstr "Yechish" + +#: src/gtkui/layout.cc:169 src/ladspa/plugin.cc:534 +msgid "Disable" +msgstr "Oʻchirish" + +#: src/gtkui/menus.cc:79 src/qtui/menus.cc:107 +#: src/statusicon-qt/statusicon.cc:112 src/statusicon/statusicon.cc:282 +msgid "_Open Files ..." +msgstr "_Fayllarni ochish..." + +#: src/gtkui/menus.cc:80 src/qtui/menus.cc:111 +msgid "Open _URL ..." +msgstr "URL ochish..." + +#: src/gtkui/menus.cc:81 src/qtui/menus.cc:113 +msgid "_Add Files ..." +msgstr "Fayllarni qo'shish..." + +#: src/gtkui/menus.cc:82 src/qtui/menus.cc:118 +msgid "Add U_RL ..." +msgstr "URL qo'shish..." + +#: src/gtkui/menus.cc:84 src/qtui/menus.cc:120 +msgid "Search _Library" +msgstr "Kutubxonani qidirish" + +#: src/gtkui/menus.cc:86 src/qtui/menus.cc:123 +msgid "A_bout ..." +msgstr "Haqida..." + +#: src/gtkui/menus.cc:87 src/qtui/menus.cc:125 +msgid "_Settings ..." +msgstr "Sozlamalar..." + +#: src/gtkui/menus.cc:88 src/qtui/menus.cc:131 +#: src/statusicon-qt/statusicon.cc:114 src/statusicon/statusicon.cc:284 +msgid "_Quit" +msgstr "Chiqish" + +#: src/gtkui/menus.cc:92 src/gtkui/menus.cc:224 +#: src/moonstone/playlist_tabs.cc:306 src/qtui/menus.cc:135 +#: src/qtui/playlist_tabs.cc:328 src/search-tool-qt/search-tool-qt.cc:499 +#: src/search-tool/search-tool.cc:343 src/statusicon-qt/statusicon.cc:106 +#: src/statusicon/statusicon.cc:276 +msgid "_Play" +msgstr "Ijro ettirish" + +#: src/gtkui/menus.cc:93 src/qtui/menus.cc:137 +#: src/statusicon-qt/statusicon.cc:107 src/statusicon/statusicon.cc:277 +msgid "Paus_e" +msgstr "Pauza" + +#: src/gtkui/menus.cc:94 src/qtui/menus.cc:139 +#: src/statusicon-qt/statusicon.cc:108 src/statusicon/statusicon.cc:278 +msgid "_Stop" +msgstr "To'xtatish" + +#: src/gtkui/menus.cc:95 src/qtui/menus.cc:141 +#: src/statusicon-qt/statusicon.cc:109 src/statusicon/statusicon.cc:279 +msgid "Pre_vious" +msgstr "Oldingi" + +#: src/gtkui/menus.cc:96 src/qtui/menus.cc:143 +#: src/statusicon-qt/statusicon.cc:110 src/statusicon/statusicon.cc:280 +msgid "_Next" +msgstr "_Keyingi" + +#: src/gtkui/menus.cc:97 src/qtui/menus.cc:145 src/skins/menus.cc:114 +#: src/skins-qt/menus.cc:105 +msgid "Previous Album" +msgstr "Oldingi albom" + +#: src/gtkui/menus.cc:98 src/qtui/menus.cc:146 src/skins/menus.cc:115 +#: src/skins-qt/menus.cc:106 +msgid "Next Album" +msgstr "Keyingi albom" + +#: src/gtkui/menus.cc:100 src/qtui/menus.cc:148 +msgid "_Repeat" +msgstr "Takrorlash" + +#: src/gtkui/menus.cc:101 src/qtui/menus.cc:150 +msgid "S_huffle" +msgstr "Aralashtirish" + +#: src/gtkui/menus.cc:102 src/qtui/menus.cc:152 +msgid "Shuffle by Albu_m" +msgstr "Albom bo'yicha aralashtirish" + +#: src/gtkui/menus.cc:103 src/qtui/menus.cc:155 +msgid "N_o Playlist Advance" +msgstr "Pleylist harakati yo'q" + +#: src/gtkui/menus.cc:104 src/qtui/menus.cc:157 +msgid "Stop A_fter This Song" +msgstr "Ushbu qo'shiqdan keyin to'xtash" + +#: src/gtkui/menus.cc:106 src/gtkui/menus.cc:208 src/qtui/menus.cc:162 +#: src/qtui/menus.cc:292 +msgid "Song _Info ..." +msgstr "Qo'shiq haqida ma'lumot..." + +#: src/gtkui/menus.cc:107 +msgid "Jump to _Time ..." +msgstr "Vaqtga o'tish..." + +#: src/gtkui/menus.cc:108 +msgid "_Jump to Song ..." +msgstr "Qo'shiqqa o'tish..." + +#: src/gtkui/menus.cc:110 src/qtui/menus.cc:165 +msgid "Set Repeat Point _A" +msgstr "A takrorlash nuqtasini sozlash" + +#: src/gtkui/menus.cc:111 src/qtui/menus.cc:167 +msgid "Set Repeat Point _B" +msgstr "B takrorlash nuqtasini sozlash" + +#: src/gtkui/menus.cc:112 src/qtui/menus.cc:169 +msgid "_Clear Repeat Points" +msgstr "Takrorlash nuqtalarini tozalash" + +#: src/gtkui/menus.cc:116 src/gtkui/menus.cc:123 src/gtkui/menus.cc:140 +#: src/qtui/menus.cc:173 src/qtui/menus.cc:180 src/qtui/menus.cc:197 +msgid "By _Title" +msgstr "Sarlavha bo'yicha" + +#: src/gtkui/menus.cc:117 src/qtui/menus.cc:174 +msgid "By _File Name" +msgstr "Fayl nomi bo'yicha" + +#: src/gtkui/menus.cc:118 src/qtui/menus.cc:175 +msgid "By File _Path" +msgstr "Fayl yo'li bo'yicha" + +#: src/gtkui/menus.cc:122 src/gtkui/menus.cc:139 src/qtui/menus.cc:179 +#: src/qtui/menus.cc:196 +msgid "By Track _Number" +msgstr "Trek raqami bo'yicha" + +#: src/gtkui/menus.cc:124 src/gtkui/menus.cc:141 src/qtui/menus.cc:181 +#: src/qtui/menus.cc:198 +msgid "By _Artist" +msgstr "Artist bo'yicha" + +#: src/gtkui/menus.cc:125 src/gtkui/menus.cc:142 src/qtui/menus.cc:182 +#: src/qtui/menus.cc:199 +msgid "By Al_bum" +msgstr "Albom bo'yicha" + +#: src/gtkui/menus.cc:126 src/gtkui/menus.cc:143 src/qtui/menus.cc:183 +#: src/qtui/menus.cc:200 +msgid "By Albu_m Artist" +msgstr "Albom artisti bo'yicha" + +#: src/gtkui/menus.cc:127 src/gtkui/menus.cc:144 src/qtui/menus.cc:184 +#: src/qtui/menus.cc:201 +msgid "By Release _Date" +msgstr "Chiqarilgan sana bo'yicha" + +#: src/gtkui/menus.cc:128 src/gtkui/menus.cc:145 src/qtui/menus.cc:185 +#: src/qtui/menus.cc:202 +msgid "By _Genre" +msgstr "Janr bo'yicha" + +#: src/gtkui/menus.cc:129 src/gtkui/menus.cc:146 src/qtui/menus.cc:186 +#: src/qtui/menus.cc:203 +msgid "By _Length" +msgstr "Uzunlik bo'yicha" + +#: src/gtkui/menus.cc:130 src/gtkui/menus.cc:147 src/qtui/menus.cc:187 +#: src/qtui/menus.cc:204 +msgid "By _File Path" +msgstr "Fayl yo'li bo'yicha" + +#: src/gtkui/menus.cc:131 src/gtkui/menus.cc:148 src/qtui/menus.cc:188 +#: src/qtui/menus.cc:205 +msgid "By _Custom Title" +msgstr "Maxsus sarlavha bo'yicha" + +#: src/gtkui/menus.cc:132 src/gtkui/menus.cc:149 src/qtui/menus.cc:189 +#: src/qtui/menus.cc:206 +msgid "By C_omment" +msgstr "Izoh bo'yicha" + +#: src/gtkui/menus.cc:134 src/gtkui/menus.cc:151 src/qtui/menus.cc:191 +#: src/qtui/menus.cc:208 +msgid "R_everse Order" +msgstr "Teskari tartib" + +#: src/gtkui/menus.cc:135 src/gtkui/menus.cc:152 src/qtui/menus.cc:193 +#: src/qtui/menus.cc:210 +msgid "_Random Order" +msgstr "Tasodifiy tartib" + +#: src/gtkui/menus.cc:156 src/qtui/menus.cc:214 +msgid "_Play/Resume" +msgstr "Ijro ettirish/Davom etish" + +#: src/gtkui/menus.cc:157 src/qtui/menus.cc:216 +msgid "_Refresh" +msgstr "Yangilash" + +#: src/gtkui/menus.cc:159 src/qtui/menus.cc:220 +msgid "_Sort" +msgstr "Saralash" + +#: src/gtkui/menus.cc:160 src/qtui/menus.cc:221 +msgid "Sort Se_lected" +msgstr "Tanlangan saralash" + +#: src/gtkui/menus.cc:161 src/qtui/menus.cc:223 +msgid "Remove _Duplicates" +msgstr "Dublikatlarni olib tashlash" + +#: src/gtkui/menus.cc:162 src/qtui/menus.cc:224 +msgid "Remove _Unavailable Files" +msgstr "Mavjud bo'lmagan fayllarni olib tashlash" + +#: src/gtkui/menus.cc:164 src/playlist-manager/playlist-manager.cc:218 +#: src/playlist-manager-qt/playlist-manager-qt.cc:346 src/qtui/menus.cc:227 +msgid "_New" +msgstr "Yangi" + +#: src/gtkui/menus.cc:165 src/qtui/menus.cc:228 +msgid "Ren_ame ..." +msgstr "Nomini o'zgartirish..." + +#: src/gtkui/menus.cc:166 src/gtkui/menus.cc:226 +#: src/moonstone/playlist_tabs.cc:311 src/qtui/menus.cc:229 +#: src/qtui/playlist_tabs.cc:333 +msgid "Remo_ve" +msgstr "O'chirish" + +#: src/gtkui/menus.cc:168 src/qtui/menus.cc:231 +msgid "_Import ..." +msgstr "Import..." + +#: src/gtkui/menus.cc:169 src/qtui/menus.cc:232 +msgid "_Export ..." +msgstr "Eksport..." + +#: src/gtkui/menus.cc:171 src/qtui/menus.cc:235 +msgid "Playlist _Manager ..." +msgstr "Pleylist menejeri..." + +#: src/gtkui/menus.cc:172 src/qtui/menus.cc:237 +msgid "_Queue Manager ..." +msgstr "Navbat menejeri..." + +#: src/gtkui/menus.cc:176 src/qtui/menus.cc:241 +msgid "Volume _Up" +msgstr "Ovozni oshirish" + +#: src/gtkui/menus.cc:177 src/qtui/menus.cc:243 +msgid "Volume _Down" +msgstr "Ovozni pasaytirish" + +#: src/gtkui/menus.cc:179 src/qtui/menus.cc:247 +msgid "_Equalizer ..." +msgstr "Ekvalayzer..." + +#: src/gtkui/menus.cc:180 src/qtui/menus.cc:249 +msgid "E_ffects ..." +msgstr "Effektlar..." + +#: src/gtkui/menus.cc:182 +msgid "_Record Stream" +msgstr "Oqim yozib olish" + +#: src/gtkui/menus.cc:183 +msgid "Audio _Settings ..." +msgstr "Audio sozlamalari..." + +#: src/gtkui/menus.cc:187 src/qtui/menus.cc:258 +msgid "Show _Menu Bar" +msgstr "Menyu panelini ko'rsatish" + +#: src/gtkui/menus.cc:188 src/qtui/menus.cc:260 +msgid "Show I_nfo Bar" +msgstr "Ma'lumot panelini ko'rsatish" + +#: src/gtkui/menus.cc:189 src/qtui/menus.cc:262 +msgid "Show Info Bar _Album Art" +msgstr "Ma'lumot panelidagi albom qoplamasini ko'rsatish" + +#: src/gtkui/menus.cc:190 src/qtui/menus.cc:264 +msgid "Show Info Bar Vis_ualization" +msgstr "Ma'lumot paneli vizualizatsiyasini ko'rsatish" + +#: src/gtkui/menus.cc:191 src/qtui/menus.cc:266 +msgid "Show _Status Bar" +msgstr "Holat panelini ko‘rsatish" + +#: src/gtkui/menus.cc:193 src/qtui/menus.cc:270 +msgid "Show _Remaining Time" +msgstr "Qolgan vaqtni ko'rsatish" + +#: src/gtkui/menus.cc:195 src/qtui/menus.cc:274 src/skins/menus.cc:157 +#: src/skins-qt/menus.cc:152 +msgid "_Visualizations ..." +msgstr "Vizualizatsiya..." + +#: src/gtkui/menus.cc:199 src/qtui/menus.cc:278 +msgid "_File" +msgstr "Fayl" + +#: src/gtkui/menus.cc:200 src/qtui/menus.cc:279 +msgid "_Playback" +msgstr "Ijro ettirish" + +#: src/gtkui/menus.cc:201 src/qtui/menus.cc:280 +msgid "P_laylist" +msgstr "Pleylist" + +#: src/gtkui/menus.cc:202 src/gtkui/menus.cc:220 src/qtui/menus.cc:281 +#: src/qtui/menus.cc:310 +msgid "_Services" +msgstr "Xizmatlar" + +#: src/gtkui/menus.cc:203 src/qtui/menus.cc:282 +msgid "_Output" +msgstr "Chiqarish" + +#: src/gtkui/menus.cc:204 src/qtui/menus.cc:283 +msgid "_View" +msgstr "Ko'rinish" + +#: src/gtkui/menus.cc:209 src/qtui/menus.cc:294 +msgid "_Queue/Unqueue" +msgstr "Navbat/navbatni bekor qilish" + +#: src/gtkui/menus.cc:211 src/qtui/menus.cc:297 +msgid "_Open Containing Folder" +msgstr "O'z ichiga olgan jildni ochish" + +#: src/gtkui/menus.cc:212 src/qtui/menus.cc:299 +msgid "_Refresh Selected" +msgstr "Tanlanganni yangilash" + +#: src/gtkui/menus.cc:214 src/qtui/menus.cc:302 +msgid "Cu_t" +msgstr "Kesish" + +#: src/gtkui/menus.cc:215 src/qtui/menus.cc:303 +msgid "_Copy" +msgstr "Nusxalash" + +#: src/gtkui/menus.cc:216 src/qtui/menus.cc:304 +msgid "_Paste" +msgstr "Joylashtirish" + +#: src/gtkui/menus.cc:217 src/qtui/menus.cc:305 +msgid "Paste at _End" +msgstr "Oxirida joylashtirish" + +#: src/gtkui/menus.cc:218 src/qtui/menus.cc:307 +msgid "Select _All" +msgstr "Hammasini belgilash" + +#: src/gtkui/menus.cc:225 src/moonstone/playlist_tabs.cc:309 +#: src/qtui/playlist_tabs.cc:331 +msgid "_Rename ..." +msgstr "Nomini oʻzgartirish..." + +#: src/gtkui/settings.cc:35 src/qtui/settings.cc:63 +msgid "Playlist Tabs" +msgstr "Pleylist yorliqlari" + +#: src/gtkui/settings.cc:36 +msgid "Always show tabs" +msgstr "Har doim yorliqlarni ko'rsatish" + +#: src/gtkui/settings.cc:38 src/qtui/settings.cc:68 +msgid "Show entry counts" +msgstr "Kiritilgan sonlarni ko'rsatish" + +#: src/gtkui/settings.cc:40 src/qtui/settings.cc:71 +msgid "Show close buttons" +msgstr "Yopish tugmalarini ko'rsatish" + +#: src/gtkui/settings.cc:42 src/qtui/settings.cc:74 +msgid "Playlist Columns" +msgstr "Pleylist ustunlari" + +#: src/gtkui/settings.cc:44 src/qtui/settings.cc:76 +msgid "Show column headers" +msgstr "Ustun sarlavhalarini ko'rsatish" + +#: src/gtkui/settings.cc:47 src/qtui/settings.cc:82 +msgid "Scroll on song change" +msgstr "Qo'shiqni o'zgartirish uchun aylantiring" + +#: src/gtkui/ui_gtk.cc:74 +msgid "GTK Interface" +msgstr "GTK interfeysi" + +#: src/gtkui/ui_gtk.cc:210 src/skins/main.cc:227 src/skins-qt/main.cc:225 +#, c-format +msgid "%s - Audacious" +msgstr "%s - Audacious" + +#: src/gtkui/ui_gtk.cc:212 src/moonstone/main_window.cc:184 +#: src/qtui/main_window.cc:384 +msgid "Buffering ..." +msgstr "Buferlash..." + +#: src/gtkui/ui_gtk.cc:215 src/skins/main.cc:229 src/skins-qt/main.cc:227 +msgid "Audacious" +msgstr "Audacious" + +#: src/gtkui/ui_gtk.cc:428 src/gtkui/ui_gtk.cc:459 src/gtkui/ui_gtk.cc:817 +#: src/hotkey/gui.cc:71 src/moonstone/main_window.cc:67 +#: src/moonstone/main_window.cc:145 src/moonstone/main_window.cc:146 +#: src/notify/osd.cc:85 src/qthotkey/gui.cc:64 src/qtui/main_window.cc:154 +#: src/qtui/main_window.cc:346 src/qtui/main_window.cc:347 +#: src/skins/menus.cc:109 src/skins-qt/menus.cc:100 +msgid "Play" +msgstr "Ijro ettirish" + +#: src/gtkui/ui_gtk.cc:428 src/moonstone/main_window.cc:151 +#: src/moonstone/main_window.cc:152 src/notify/osd.cc:82 +#: src/qtui/main_window.cc:352 src/qtui/main_window.cc:353 +#: src/skins/menus.cc:110 src/skins-qt/menus.cc:101 +msgid "Pause" +msgstr "Pauza" + +#: src/gtkui/ui_gtk.cc:803 src/moonstone/main_window.cc:57 +#: src/qtui/main_window.cc:145 src/skins/menus.cc:86 src/skins-qt/menus.cc:77 +msgid "Search Library" +msgstr "Kutubxonani qidirish" + +#: src/gtkui/ui_gtk.cc:810 src/moonstone/main_window.cc:60 +#: src/qtui/main_window.cc:147 +msgid "Open Files" +msgstr "Fayllarni ochish" + +#: src/gtkui/ui_gtk.cc:811 src/moonstone/main_window.cc:62 +#: src/qtui/main_window.cc:149 +msgid "Add Files" +msgstr "Fayllarni qo'shish" + +#: src/gtkui/ui_gtk.cc:816 src/moonstone/main_window.cc:65 +#: src/qtui/main_window.cc:152 src/skins/menus.cc:112 src/skins-qt/menus.cc:103 +msgid "Previous" +msgstr "Oldingi" + +#: src/gtkui/ui_gtk.cc:818 src/hotkey/gui.cc:73 src/moonstone/main_window.cc:69 +#: src/qthotkey/gui.cc:66 src/qtui/main_window.cc:156 src/skins/menus.cc:111 +#: src/skins-qt/menus.cc:102 +msgid "Stop" +msgstr "To'xtatish" + +#: src/gtkui/ui_gtk.cc:819 src/moonstone/main_window.cc:76 src/notify/osd.cc:89 +#: src/qtui/main_window.cc:163 src/skins/menus.cc:113 src/skins-qt/menus.cc:104 +msgid "Next" +msgstr "Keyingi" + +#: src/gtkui/ui_gtk.cc:821 src/moonstone/main_window.cc:79 +#: src/qtui/main_window.cc:166 src/qtui/menus.cc:252 src/skins/menus.cc:79 +#: src/skins-qt/menus.cc:69 +msgid "Record Stream" +msgstr "Oqim yozib olish" + +#: src/gtkui/ui_gtk.cc:854 src/moonstone/main_window.cc:86 +#: src/qtui/main_window.cc:173 src/skins/menus.cc:103 src/skins-qt/menus.cc:94 +msgid "Repeat" +msgstr "Takrorlash" + +#: src/gtkui/ui_gtk.cc:857 src/moonstone/main_window.cc:89 +#: src/qtui/main_window.cc:176 src/skins/menus.cc:104 src/skins-qt/menus.cc:95 +msgid "Shuffle" +msgstr "Aralashtirish" + +#: src/gtkui/ui_gtk.cc:1030 src/qtui/main_window.cc:123 +msgid "Menu" +msgstr "Menyu" + +#: src/gtkui/ui_statusbar.cc:63 src/qtui/status_bar.cc:155 +msgid "mono" +msgstr "mono" + +#: src/gtkui/ui_statusbar.cc:65 src/qtui/status_bar.cc:157 +msgid "stereo" +msgstr "stereo" + +#: src/gtkui/ui_statusbar.cc:67 src/qtui/status_bar.cc:160 +#, c-format +msgid "%d channel" +msgid_plural "%d channels" +msgstr[0] "%d kanal" + +#: src/gtkui/ui_statusbar.cc:75 src/qtui/status_bar.cc:168 +#, c-format +msgid "%d kHz" +msgstr "%d kGts" + +#: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 +#, c-format +msgid "%d kbit/s" +msgstr "" + +#: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 +msgid "Single mode." +msgstr "Yagona rejim." + +#: src/gtkui/ui_statusbar.cc:109 src/skins/main.cc:473 src/skins-qt/main.cc:457 +msgid "Playlist mode." +msgstr "Pleylist rejimi." + +#: src/gtkui/ui_statusbar.cc:117 src/skins/main.cc:479 src/skins-qt/main.cc:463 +msgid "Stopping after song." +msgstr "Qo'shiqdan keyin to'xtash." + +#: src/hotkey/gui.cc:70 src/qthotkey/gui.cc:63 +msgid "Previous track" +msgstr "Oldingi trek" + +#: src/hotkey/gui.cc:72 src/qthotkey/gui.cc:65 +msgid "Pause/Resume" +msgstr "To'xtatib turish/Davom ettirish" + +#: src/hotkey/gui.cc:74 src/qthotkey/gui.cc:67 +msgid "Next track" +msgstr "Keyingi trek" + +#: src/hotkey/gui.cc:75 src/qthotkey/gui.cc:68 +msgid "Step forward" +msgstr "Oldinga qadam" + +#: src/hotkey/gui.cc:76 src/qthotkey/gui.cc:69 +msgid "Step backward" +msgstr "Orqaga qadam" + +#: src/hotkey/gui.cc:77 src/qthotkey/gui.cc:70 +msgid "Mute" +msgstr "Ovozsiz" + +#: src/hotkey/gui.cc:78 src/qthotkey/gui.cc:71 +msgid "Volume up" +msgstr "Ovozni ko'tarish" + +#: src/hotkey/gui.cc:79 src/qthotkey/gui.cc:72 +msgid "Volume down" +msgstr "Ovozni pasaytirish" + +#: src/hotkey/gui.cc:80 src/qthotkey/gui.cc:73 +msgid "Jump to file" +msgstr "Faylga o'tish" + +#: src/hotkey/gui.cc:81 src/qthotkey/gui.cc:74 +msgid "Toggle player window(s)" +msgstr "Pleyer oynasini (oynalarini) almashtirish" + +#: src/hotkey/gui.cc:82 src/qthotkey/gui.cc:75 +msgid "Show On-Screen-Display" +msgstr "Ekrandagi displeyni ko'rsatish" + +#: src/hotkey/gui.cc:83 src/qthotkey/gui.cc:76 +msgid "Toggle repeat" +msgstr "Takrorlashni yoqish/o‘chirish" + +#: src/hotkey/gui.cc:84 src/qthotkey/gui.cc:77 +msgid "Toggle shuffle" +msgstr "Aralashtirishni yoqish/o‘chirish" + +#: src/hotkey/gui.cc:85 src/qthotkey/gui.cc:78 +msgid "Toggle stop after current" +msgstr "Joriydan keyin almashtirishni to'xtatish" + +#: src/hotkey/gui.cc:86 src/qthotkey/gui.cc:79 +msgid "Raise player window(s)" +msgstr "Pleyer oynasini (oynalarini) ko'tarish" + +#: src/hotkey/gui.cc:97 src/qthotkey/gui.cc:97 +msgid "(none)" +msgstr "(yo'q)" + +#: src/hotkey/gui.cc:260 +msgid "" +"It is not recommended to bind the primary mouse buttons without modifiers.\n" +"\n" +"Do you want to continue?" +msgstr "" +"Sichqonchaning asosiy tugmalarini modifikatorlarsiz bog'lash tavsiya " +"etilmaydi.\n" +"\n" +"Davom etishni xohlaysizmi?" + +#: src/hotkey/gui.cc:263 +msgid "Binding mouse buttons" +msgstr "Sichqoncha tugmachalarini bog'lash" + +#: src/hotkey/gui.cc:426 +msgid "" +"Press a key combination inside a text field.\n" +"You can also bind mouse buttons." +msgstr "" +"Matn maydonidagi tugmalar birikmasini bosing.\n" +"Sichqoncha tugmachalarini ham bog'lashingiz mumkin." + +#: src/hotkey/gui.cc:432 src/qthotkey/gui.cc:167 +msgid "Hotkeys:" +msgstr "Tezkor tugmalar:" + +#: src/hotkey/gui.cc:448 src/qthotkey/gui.cc:169 +msgid "Action:" +msgstr "Harakat:" + +#: src/hotkey/gui.cc:454 src/qthotkey/gui.cc:170 +msgid "Key Binding:" +msgstr "Kalit bog'lash:" + +#: src/hotkey/gui.cc:501 src/qthotkey/gui.cc:172 +msgid "_Add" +msgstr "_Qo'shish" + +#: src/hotkey/plugin.cc:61 src/qthotkey/plugin.cc:77 +msgid "Global Hotkeys" +msgstr "Global tezkor tugmalar" + +#: src/hotkey/plugin.cc:76 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" +"Global tezkor tugmalar plagini\n" +"Pleyerni global tugmalar birikmalari yoki multimedia tugmalari bilan " +"boshqarish.\n" +"\n" +"Mualliflik huquqi (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Ishtirokchilar:\n" +"Mualliflik huquqi (C) 2006-2007 Vladimir Paskov \n" +"Mualliflik huquqi (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonatan A. Davis ,\n" +"Jeremi Tan " + +#: src/jack/jack-ng.cc:54 +msgid "JACK Output" +msgstr "JACK chiqishi" + +#: src/jack/jack-ng.cc:126 +msgid "Client name:" +msgstr "Mijoz nomi:" + +#: src/jack/jack-ng.cc:128 +msgid "Automatically connect to output ports" +msgstr "Chiqarish portlariga avtomatik ulanish" + +#: src/jack/jack-ng.cc:130 +msgid "Filter ports (regex, use any port if blank):" +msgstr "" +"Portlarni filtrlash (regex, bo'sh bo'lsa, istalgan portdan foydalaning):" + +#: src/jack/jack-ng.cc:136 +msgid "Connect to physical ports only" +msgstr "Faqat jismoniy portlarga ulanish" + +#: src/jack/jack-ng.cc:139 +msgid "Upmix to" +msgstr "Upmix to" + +#: src/jack/jack-ng.cc:141 +msgid "ports if input has fewer channels" +msgstr "ports if input has fewer channels" + +#: src/jack/jack-ng.cc:143 +msgid "Ignore insufficient number of ports" +msgstr "Portlar soni yetarli emasligiga e'tibor bermaslik" + +#: src/jack/jack-ng.cc:181 +msgid "No JACK output ports were found. Please check settings." +msgstr "JACK chiqish portlari topilmadi. Iltimos, sozlamalarni tekshiring." + +#: src/jack/jack-ng.cc:195 +#, c-format +msgid "Only %d JACK output ports were found but %d are required." +msgstr "Faqat %d JACK chiqish portlari topildi, lekin %d talab qilinadi." + +#: src/jack/jack-ng.cc:210 +#, c-format +msgid "Failed to connect to JACK port %s." +msgstr "%s JACK portiga ulanib bo‘lmadi.." + +#: src/jack/jack-ng.cc:230 +msgid "" +"JACK supports only floating-point audio. You must change the output bit " +"depth to floating-point in Audacious settings." +msgstr "" +"JACK faqat suzuvchi nuqtali audioni qo'llab-quvvatlaydi. Audacious " +"sozlamalarida chiqish bit chuqurligini suzuvchi nuqtaga o'zgartirishingiz " +"kerak." + +#: src/jack/jack-ng.cc:245 +msgid "Failed to connect to the JACK server; is it running?" +msgstr "JACK serveriga ulanib bo'lmadi, ishga tushirilganmi?" + +#: src/jack/jack-ng.cc:321 +#, c-format +msgid "" +"The JACK server requires a sample rate of %d Hz, but Audacious is playing at " +"%d Hz. Please use the Sample Rate Converter effect to correct the mismatch." +msgstr "" +"JACK serveri %dGts namuna tezligini talab qiladi, lekin Audacious %d Gts da " +"ijro ettirmoqda. Iltimos, nomuvofiqlikni tuzatish uchun Sample Rate " +"Converter effektidan foydalaning." + +#: src/ladspa/plugin.cc:415 +#, c-format +msgid "%s Settings" +msgstr "%s sozlamalari" + +#: src/ladspa/plugin.cc:481 +msgid "Module paths:" +msgstr "Modul yo'llari:" + +#: src/ladspa/plugin.cc:486 +msgid "" +"Separate multiple paths with a colon.\n" +"These paths are searched in addition to LADSPA_PATH.\n" +"After adding new paths, press Enter to scan for new plugins." +msgstr "" +"Ikki nuqta bilan bir nechta yo'llarni ajrating.\n" +"Bu yoʻllar LADSPA_PATH ga qoʻshimcha ravishda qidiriladi.\n" +"Yangi yo'llarni qo'shgandan so'ng, yangi plaginlarni skanerlash uchun Enter " +"tugmasini bosing." + +#: src/ladspa/plugin.cc:502 +msgid "Available plugins:" +msgstr "Mavjud plaginlar:" + +#: src/ladspa/plugin.cc:515 src/modplug/plugin_main.cc:91 +#: src/modplug/plugin_main.cc:94 src/modplug/plugin_main.cc:97 +#: src/modplug/plugin_main.cc:100 +msgid "Enable" +msgstr "Yoqish" + +#: src/ladspa/plugin.cc:521 +msgid "Enabled plugins:" +msgstr "Yoqilgan plaginlar:" + +#: src/ladspa/plugin.cc:537 +msgid "Settings" +msgstr "Sozlamalar" + +#: src/ladspa/plugin.cc:554 +msgid "" +"LADSPA Host for Audacious\n" +"Copyright 2011 John Lindgren" +msgstr "" +"Audacious uchun LADSPA xosti\n" +"Mualliflik huquqi 2011 Jon Lindgren" + +#: src/ladspa/plugin.h:78 +msgid "LADSPA Host" +msgstr "LADSPA xosti" + +#: src/lirc/lirc.cc:55 +msgid "LIRC Plugin" +msgstr "LIRC plagini" + +#: src/lirc/lirc.cc:379 +msgid "" +"A simple plugin to control Audacious using the LIRC remote control daemon\n" +"\n" +"Adapted for Audacious by:\n" +"Tony Vroon \n" +"Joonas Harjumäki \n" +"\n" +"Based on the XMMS LIRC plugin by:\n" +"Carl van Schaik \n" +"Christoph Bartelmus \n" +"Andrew O. Shadoura \n" +"\n" +"For more information about LIRC, see http://lirc.org." +msgstr "" +"LIRC masofadan boshqarish pulti yordamida Audacious ni boshqarish uchun " +"oddiy plagin\n" +"\n" +"Audacious uchun moslashtirilgan:\n" +"Toni Vroon \n" +"Joonas Harjumäki \n" +"\n" +"XMMS LIRC plaginida asoslangan:\n" +"Karl van Schaik \n" +"Kristof Bartelmus \n" +"Endryu O. Shadoura \n" +"\n" +"LIRC haqida ko'proq ma'lumot olish uchun http://lirc.org ga qarang." + +#: src/lirc/lirc.cc:390 +msgid "Connection" +msgstr "Ulanish" + +#: src/lirc/lirc.cc:391 +msgid "Reconnect to LIRC server" +msgstr "LIRC serveriga qayta ulanish" + +#: src/lirc/lirc.cc:393 +msgid "Wait before reconnecting:" +msgstr "Qayta ulanishdan oldin kutish:" + +#: src/lyricwiki-qt/lyricwiki.cc:89 +msgid "Lyrics" +msgstr "Qo'shiq matni" + +#: src/lyricwiki-qt/lyricwiki.cc:116 +msgid "Nowhere" +msgstr "Hech qayerda" + +#: src/lyricwiki-qt/lyricwiki.cc:117 +msgid "lyrics.ovh" +msgstr "lyrics.ovh" + +#: src/lyricwiki-qt/lyricwiki.cc:121 +msgid "Artist is truncated at the start, Title -- at the end" +msgstr "Artist boshida, sarlavha - oxirida qisqartiriladi" + +#: src/lyricwiki-qt/lyricwiki.cc:122 +msgid "Chars to truncate on:" +msgstr "Kesish uchun belgilar:" + +#: src/lyricwiki-qt/lyricwiki.cc:126 +msgid "Chars are ORed in RegExp, surrounded by whitespace" +msgstr "Chars are ORed in RegExp, surrounded by whitespace" + +#: src/lyricwiki-qt/lyricwiki.cc:127 +msgid "Chars to split on:" +msgstr "Bo'lish uchun belgilar:" + +#: src/lyricwiki-qt/lyricwiki.cc:128 +msgid "Further truncate those on chars" +msgstr "Belgilardagilarni yanada qisqartirish" + +#: src/lyricwiki-qt/lyricwiki.cc:134 +msgid "General" +msgstr "Umumiy" + +#: src/lyricwiki-qt/lyricwiki.cc:135 +msgid "Split title into artist and title on chars" +msgstr "Sarlavhani artistga va sarlavhani belgilarga ajrating" + +#: src/lyricwiki-qt/lyricwiki.cc:138 +msgid "Internet Sources" +msgstr "Internet manbalari" + +#: src/lyricwiki-qt/lyricwiki.cc:139 +msgid "Fetch lyrics from:" +msgstr "Qo'shiq matnni yuklab oling:" + +#: src/lyricwiki-qt/lyricwiki.cc:142 +msgid "Store fetched lyrics in local cache" +msgstr "Olingan qo'shiq matnlarini mahalliy keshda saqlash" + +#: src/lyricwiki-qt/lyricwiki.cc:144 +msgid "Local Storage" +msgstr "Mahalliy saqlash joyi" + +#: src/lyricwiki-qt/lyricwiki.cc:145 +msgid "Load lyric files (.lrc) from local storage" +msgstr "Qo'shiq matnlarini fayllarni (.lrc) mahalliy xotiradan yuklash" + +#: src/lyricwiki-qt/lyricwiki.cc:356 +#, c-format +msgid "Unable to fetch %s" +msgstr "%s olib bo‘lmadi" + +#: src/lyricwiki-qt/lyricwiki.cc:365 +#, c-format +msgid "Unable to parse %s" +msgstr "%s tahlil qilib boʻlmadi" + +#: src/lyricwiki-qt/lyricwiki.cc:403 +msgid "Looking for lyrics ..." +msgstr "Qo'shiq matni qidirilmoqda..." + +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 +msgid "Error" +msgstr "Xato" + +#: src/lyricwiki-qt/lyricwiki.cc:433 +msgid "Lyrics could not be found." +msgstr "Qoʻshiq matni topilmadi." + +#: src/lyricwiki-qt/lyricwiki.cc:501 +msgid "Missing title and/or artist." +msgstr "Sarlavha va/yoki artist yetishmayapti." + +#: src/lyricwiki-qt/lyricwiki.cc:553 +msgid "Save Locally" +msgstr "Mahalliy ravishda saqlash" + +#: src/lyricwiki-qt/lyricwiki.cc:561 +msgid "Refresh" +msgstr "Yangilash" + +#: src/m3u/m3u.cc:32 +msgid "M3U Playlists" +msgstr "M3U pleylistlari" + +#: src/metronom/metronom.cc:44 +msgid "Tact Generator" +msgstr "Takt generatori" + +#: src/metronom/metronom.cc:145 +#, c-format +msgid "Tact generator: %d bpm" +msgstr "Takt generatori: %d zarba/daq " + +#: src/metronom/metronom.cc:147 +#, c-format +msgid "Tact generator: %d bpm %d/%d" +msgstr " Takt generatori: %d zarba/daq %d/%d" + +#: src/metronom/metronom.cc:235 +msgid "" +"A Tact Generator by Martin Strauss \n" +"\n" +"To use it, add a URL: tact://beats*num/den\n" +"e.g. tact://77 to play 77 beats per minute\n" +"or tact://60*3/4 to play 60 bpm in 3/4 tacts" +msgstr "" +"Martin Strauss tomonidan Takt generatori \n" +"\n" +"Undan foydalanish uchun URL manzilini qo'shing: tact://beats*num/den\n" +"masalan daqiqada 77 zarba ijro ettirish uchun tact://77\n" +"yoki tact://60*3/4 3/4 taktda 60 zarba/daqiqada ijro ettirish uchun" + +#: src/mixer/mixer.cc:43 +msgid "Channel Mixer" +msgstr "Kanal mikser" + +#: src/mixer/mixer.cc:255 +msgid "" +"Channel Mixer Plugin for Audacious\n" +"Copyright 2011-2012 John Lindgren and Michał Lipski" +msgstr "" +"Audacious uchun kanal mikser plagini\n" +"Mualliflik huquqi 2011-2012 Jon Lindgren va Mixal Lipski" + +#: src/mixer/mixer.cc:259 +msgid "Channel Mixer" +msgstr "Kanal mikser" + +#: src/mixer/mixer.cc:260 +msgid "Output channels:" +msgstr "Chiqish kanallari:" + +#: src/mms/mms.cc:35 +msgid "MMS Plugin" +msgstr "MMS plagin" + +#: src/mms/mms.cc:82 +msgid "Error connecting to MMS server" +msgstr "MMS serveriga ulanishda xatolik yuz berdi" + +#: src/modplug/modplugbmp.h:57 +msgid "ModPlug (Module Player)" +msgstr "ModPlug (modul pleyer)" + +#: src/modplug/plugin_main.cc:55 +msgid "Channels" +msgstr "Kanallar" + +#: src/modplug/plugin_main.cc:59 +msgid "Nearest (fastest)" +msgstr "Eng yaqin (eng tez)" + +#: src/modplug/plugin_main.cc:60 +msgid "Linear (fast)" +msgstr "Chiziqli (tez)" + +#: src/modplug/plugin_main.cc:61 +msgid "Spline (good)" +msgstr "Splayn (yaxshi)" + +#: src/modplug/plugin_main.cc:62 +msgid "Polyphase (best)" +msgstr "Ko'p fazali (eng yaxshi)" + +#: src/modplug/plugin_main.cc:63 +msgid "Sample rate" +msgstr "Namuna tezligi" + +#: src/modplug/plugin_main.cc:64 +msgid "22 kHz" +msgstr "22 kGts" + +#: src/modplug/plugin_main.cc:65 +msgid "44 kHz" +msgstr "44 kGts" + +#: src/modplug/plugin_main.cc:66 +msgid "48 kHz" +msgstr "48 kGts" + +#: src/modplug/plugin_main.cc:67 +msgid "96 kHz" +msgstr "96 kGts" + +#: src/modplug/plugin_main.cc:71 src/modplug/plugin_main.cc:76 +#: src/modplug/plugin_main.cc:81 +msgid "Level:" +msgstr "Daraja:" + +#: src/modplug/plugin_main.cc:77 +msgid "Cutoff:" +msgstr "Kesish:" + +#: src/modplug/plugin_main.cc:90 +msgid "Reverb" +msgstr "Reverberatsiya" + +#: src/modplug/plugin_main.cc:93 +msgid "Bass Boost" +msgstr "Bass kuchaytirish" + +#: src/modplug/plugin_main.cc:96 +msgid "Surround" +msgstr "Surround" + +#: src/modplug/plugin_main.cc:99 +msgid "Preamp" +msgstr "Oldindan kuchaytirgich" + +#: src/modplug/plugin_main.cc:106 +msgid "Oversample" +msgstr "Ortiqcha namuna" + +#: src/modplug/plugin_main.cc:107 +msgid "Noise reduction" +msgstr "Shovqinni kamaytirish" + +#: src/modplug/plugin_main.cc:108 +msgid "Play Amiga MODs" +msgstr "Amiga MOD larini ijro ettirish" + +#: src/modplug/plugin_main.cc:109 +msgid "Repeat" +msgstr "Takrorlash" + +#: src/modplug/plugin_main.cc:110 +msgid "Repeat count:" +msgstr "Takrorlanish soni:" + +#: src/modplug/plugin_main.cc:111 +msgid "To repeat forever, set the repeat count to -1." +msgstr "Abadiy takrorlash uchun takrorlash sonini -1 ga o'rnating." + +#: src/modplug/plugin_main.cc:124 src/sid/xs_config.cc:106 +msgid "These settings will take effect when Audacious is restarted." +msgstr "Ushbu sozlamalar Audacious qayta ishga tushirilganda kuchga kiradi." + +#: src/moonstone/main_window.cc:72 src/moonstone/main_window.cc:73 +#: src/qtui/main_window.cc:159 src/qtui/main_window.cc:160 +#: src/skins/menus.cc:107 src/skins-qt/menus.cc:98 +msgid "Stop After This Song" +msgstr "Bu qo'shiqdan keyin to'xtatish" + +#: src/moonstone/moonstone.cc:39 +msgid "Moonstone" +msgstr "Moonstone" + +#: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 +msgid "Reset to Defaults" +msgstr "Asl holatiga qaytarish" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_header.cc:225 +msgid "Now Playing" +msgstr "Hozir ijro etilmoqda" + +#: src/moonstone/playlist_model.cc:38 src/qtui/playlist_model.cc:33 +msgid "Entry Number" +msgstr "Kiritish raqami" + +#: src/moonstone/playlist_model.cc:40 src/qtui/playlist_model.cc:34 +msgid "Album Artist" +msgstr "Albom artisti" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "Queue Position" +msgstr "Navbatdagi joylashuv" + +#: src/moonstone/playlist_model.cc:41 src/qtui/playlist_model.cc:35 +msgid "File Path" +msgstr "Fayl yo'li" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:35 +msgid "File Name" +msgstr "Fayl nomi" + +#: src/moonstone/playlist_model.cc:42 src/qtui/playlist_model.cc:36 +msgid "Custom Title" +msgstr "Maxsus sarlavha" + +#: src/moonstone/playlist_selection.cc:64 +#: src/playlist-manager/playlist-manager.cc:200 +#: src/playlist-manager-qt/playlist-manager-qt.cc:188 +msgid "Entries" +msgstr "Yozuvlar" + +#: src/mpg123/mpg123.cc:54 +msgid "MPG123 Plugin" +msgstr "MPG123 plagin" + +#: src/mpg123/mpg123.cc:81 +msgid "Advanced" +msgstr "Kengaytirilgan" + +#: src/mpg123/mpg123.cc:82 +msgid "Use accurate length calculation (slow)" +msgstr "To'g'ri uzunlik hisobini ishlatish (sekin)" + +#: src/mpg123/mpg123.cc:256 +msgid "Surround" +msgstr "Surround" + +#: src/mpris2/plugin.cc:38 +msgid "MPRIS 2 Server" +msgstr "MPRIS 2 serveri" + +#: src/neon/neon.cc:97 +msgid "Neon HTTP/HTTPS Plugin" +msgstr "Neon HTTP/HTTPS plagini" + +#: src/neon/neon.cc:526 +msgid "Error parsing redirect" +msgstr "Qayta yoʻnaltirishni tahlil qilishda xatolik yuz berdi" + +#: src/neon/neon.cc:540 +msgid "Unknown HTTP error" +msgstr "Noma'lum HTTP xatosi" + +#: src/neon/neon.cc:590 +msgid "Error parsing URL" +msgstr "URL ni tahlil qilishda xatolik yuz berdi" + +#: src/neon/neon.cc:660 +msgid "Too many redirects" +msgstr "Yo‘naltirishlar juda ko‘p" + +#: src/notify/event.cc:97 +msgid "Stopped" +msgstr "To'xtatildi" + +#: src/notify/event.cc:97 +msgid "Audacious is not playing." +msgstr "Audacious ijro ettirilmayapti." + +#: src/notify/notify.cc:39 +msgid "Desktop Notifications" +msgstr "Ish stoli bildirishnomalari" + +#: src/notify/notify.cc:57 +msgid "" +"Desktop Notifications Plugin for Audacious\n" +"Copyright (C) 2010 Maximilian Bogner\n" +"Copyright (C) 2011-2013 John Lindgren and Jean-Alexandre Anglès d'Auriac\n" +"\n" +"This plugin 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 3 of the License, or (at your option) " +"any later version.\n" +"\n" +"This plugin 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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program. If not, see ." +msgstr "" +"Audacious uchun ish stoli bildirishnomalari plagini\n" +"Mualliflik huquqi (C) 2010 Maksimilian Bogner\n" +"Mualliflik huquqi (C) 2011-2013 Jon Lindgren va Jan-Aleksandr Angles " +"d'Auriak\n" +"\n" +"Ushbu plagin bepul dasturiy ta'minotdir: siz uni qayta tarqatishingiz va/" +"yoki uni Free Software Foundation tomonidan e'lon qilingan GNU General " +"Public License shartlariga muvofiq, Litsenziyaning 3-versiyasi yoki (sizning " +"xohishingizga ko'ra) har qanday keyingi versiyada o'zgartirishingiz mumkin.\n" +"\n" +"Ushbu plagin foydali bo'ladi degan umidda tarqatiladi, lekin HAR QANDAY " +"KAFOLATSIZ; SOVLASH MUVOFIQligi yoki MAQSUS MAQSADGA MUVOFIQligi " +"to'g'risidagi nazarda tutilgan kafolatsiz ham. Batafsil ma'lumot uchun GNU " +"General Public License-ga qarang.\n" +"\n" +"Siz ushbu dastur bilan birga GNU General Public License nusxasini olishingiz " +"kerak edi. Aks holda, ga qarang. " + +#: src/notify/notify.cc:104 +msgid "Show playback controls" +msgstr "Ijro qilish boshqaruvlarini ko‘rsatish" + +#: src/notify/notify.cc:106 +msgid "Always show notification" +msgstr "Har doim bildirishnomani ko'rsatish" + +#: src/notify/notify.cc:108 +msgid "Include album name in notification" +msgstr "Bildirishnomaga albom nomini kiritish" + +#: src/notify/notify.cc:110 +msgid "Custom notification duration:" +msgstr "Moslashtirilgan bildirishnoma muddati:" + +#: src/notify/osd.cc:74 +msgid "Show" +msgstr "Ko'rsatish" + +#: src/openmpt/mpt.cc:50 +msgid "OpenMPT (Module Player)" +msgstr "OpenMPT (modul pleyer)" + +#: src/openmpt/mpt.cc:133 +msgid "" +"Module player based on libopenmpt\n" +"\n" +"Written by: Chris Spiegel " +msgstr "" +"Libopenmpt asosidagi modul pleer\n" +"\n" +"Muallif: Chris Spiegel " + +#: src/openmpt/mpt.cc:152 +msgid "Stereo separation:" +msgstr "Stereo ajratish:" + +#: src/openmpt/mpt.cc:154 +msgid "%" +msgstr "foiz" + +#: src/openmpt/mpt.cc:158 +msgid "Interpolation:" +msgstr "Interpolyatsiya:" + +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 +msgid "Linear" +msgstr "Chiziqli" + +#: src/openmpt/mptwrap.h:52 +msgid "Cubic" +msgstr "Kubik" + +#: src/openmpt/mptwrap.h:53 +msgid "Windowed sinc" +msgstr "Oynali sinc" + +#: src/oss4/oss.h:75 +msgid "OSS4 Output" +msgstr "OSS4 chiqishi" + +#: src/oss4/oss.h:77 +msgid "OSS3 Output" +msgstr "OSS3 chiqishi" + +#: src/oss4/plugin.cc:35 +msgid "Default device" +msgstr "Standart qurilma" + +#: src/oss4/plugin.cc:78 +msgid "Audio device:" +msgstr "Audio qurilma:" + +#: src/oss4/plugin.cc:81 +msgid "Use alternate device:" +msgstr "Muqobil qurilmadan foydalanish:" + +#: src/oss4/plugin.cc:85 +msgid "Save volume between sessions." +msgstr "Seanslar orasidagi ovoz balandligini saqlash." + +#: src/oss4/plugin.cc:87 +msgid "Enable format conversions made by the OSS software." +msgstr "" +"OSS dasturi tomonidan amalga oshirilgan formatni o'zgartirishni yoqish." + +#: src/oss4/plugin.cc:89 +msgid "Enable exclusive mode to prevent virtual mixing." +msgstr "" +"Virtual aralashtirishning oldini olish uchun eksklyuziv rejimni yoqish." + +#: src/oss4/plugin.cc:101 +msgid "" +"OSS4 Output Plugin for Audacious\n" +"Copyright 2010-2012 Michał Lipski\n" +"\n" +"I would like to thank people on #audacious, especially Tony Vroon and John " +"Lindgren and of course the authors of the previous OSS plugin." +msgstr "" +"Audacious uchun OSS4 chiqish plagini\n" +"Mualliflik huquqi 2010-2012 Michał Lipski\n" +"\n" +"Men #audacious-dagi odamlarga, ayniqsa Toni Vroon va Jon Lindgrenga va, " +"albatta, avvalgi OSS plaginining mualliflariga minnatdorchilik " +"bildirmoqchiman. " + +#: src/playlist-manager/playlist-manager.cc:37 +#: src/playlist-manager-qt/playlist-manager-qt.cc:40 +msgid "Playlist Manager" +msgstr "Pleylist menejeri" + +#: src/playlist-manager/playlist-manager.cc:220 +#: src/playlist-manager-qt/playlist-manager-qt.cc:354 +msgid "_Remove" +msgstr "_O'chirish" + +#: src/playlist-manager/playlist-manager.cc:221 +#: src/playlist-manager-qt/playlist-manager-qt.cc:349 +msgid "Ren_ame" +msgstr "Nomini o'zgartirish" + +#: src/pls/pls.cc:35 +msgid "PLS Playlists" +msgstr "PLS pleylistlari" + +#: src/psf/plugin.cc:53 +msgid "OpenPSF PSF1/PSF2 Decoder" +msgstr "OpenPSF PSF1/PSF2 dekoderi" + +#: src/psf/plugin.cc:270 +msgid "OpenPSF Configuration" +msgstr "OpenPSF konfiguratsiyasi" + +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 +msgid "Ignore length from file" +msgstr "Fayldagi uzunlikka e'tibor bermaslik" + +#: src/pulse/pulse_audio.cc:42 +msgid "PulseAudio Output" +msgstr "PulseAudio chiqishi" + +#: src/pulse/pulse_audio.cc:72 +msgid "Context name:" +msgstr "Kontekst nomi:" + +#: src/pulse/pulse_audio.cc:74 +msgid "Stream name:" +msgstr "Oqim nomi:" + +#: src/pulse/pulse_audio.cc:575 +msgid "" +"Audacious PulseAudio Output Plugin\n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" +"Audacious PulseAudio chiqish plagini\n" +"\n" +"Bu dastur bepul dastur hisoblanadi; siz uni qayta tarqatishingiz va/yoki uni " +"Free Software Foundation tomonidan e'lon qilingan GNU General Public License " +"shartlariga muvofiq o'zgartirishingiz mumkin; Litsenziyaning 2-versiyasi " +"yoki (sizning xohishingizga ko'ra) har qanday keyingi versiyasi.\n" +"\n" +"Ushbu dastur foydali bo'ladi degan umidda tarqatiladi, lekin HAR QANDAY " +"KAFOLATSIZ; SOVLASH MUVOFIQligi yoki MAQSUS MAQSADGA MUVOFIQligi " +"to'g'risidagi nazarda tutilgan kafolatsiz ham. Batafsil ma'lumot uchun GNU " +"General Public License-ga qarang.\n" +"\n" +"Siz ushbu dastur bilan birga GNU General Public License nusxasini olishingiz " +"kerak edi; bo'lmasa, Free Software Foundation, Inc., 51 Franklin Street, " +"Fifth Floor, Boston, MA 02110-1301, AQSH ga yozing." + +#: src/qtaudio/qtaudio.cc:44 +msgid "QtMultimedia Output" +msgstr "QtMultimedia chiqishi" + +#: src/qtaudio/qtaudio.cc:72 +msgid "" +"QtMultimedia Audio Output Plugin for Audacious\n" +"Copyright 2014 William Pitcock\n" +"\n" +"Based on SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"Audacious uchun QtMultimedia audio chiqish plagini\n" +"Mualliflik huquqi 2014 Uilyam Pitkok\n" +"\n" +"Audacious uchun SDL chiqish plaginiga asoslangan\n" +"Mualliflik huquqi 2010 Jon Lindgren" + +#: src/qtglspectrum/gl-spectrum.cc:41 +msgid "" +"OpenGL Spectrum Analyzer for Audacious\n" +"Copyright 2013 Christophe Budé, John Lindgren, and Carlo Bramini\n" +"Copyright 2014, 2020 Ariadne Conill\n" +"\n" +"Based on the XMMS plugin:\n" +"Copyright 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson, and " +"4Front Technologies\n" +"\n" +"License: GPLv2+" +msgstr "" +"Audacious uchun OpenGL Spektr analizatori\n" +"Mualliflik huquqi 2013 Kristof Bude, Jon Lindgren va Karlo Bramini\n" +"Mualliflik huquqi 2014, 2020 Ariadne Conill\n" +"\n" +"XMMS plagini asosida:\n" +"Mualliflik huquqi 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Tomas " +"Nilsson va 4Front Technologies\n" +"\n" +"Litsenziya: GPLv2+ " + +#: src/qthotkey/gui.cc:165 +msgid "Press a key combination inside a text field." +msgstr "Matn maydoni ichiga tugmalar birikmasini bosing." + +#: src/qthotkey/plugin.cc:103 +msgid "" +"Global Hotkey Plugin\n" +"Control the player with global key combinations or multimedia keys.\n" +"\n" +"Copyright (C) 2020 i.Dark_Templar \n" +"Copyright (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Contributors include:\n" +"Copyright (C) 2006-2007 Vladimir Paskov \n" +"Copyright (C) 2000-2002 Ville Syrjälä ,\n" +" Bryn Davies ,\n" +" Jonathan A. Davis ,\n" +" Jeremy Tan " +msgstr "" +"Global tezkor tugma plagini\n" +"Pleyerni global tugmalar birikmalari yoki multimedia tugmalari bilan " +"boshqaring.\n" +"\n" +"Mualliflik huquqi (C) 2020 i.Dark_Templar \n" +"Mualliflik huquqi (C) 2007-2008 Sascha Hlusiak \n" +"\n" +"Ishtirokchilar:\n" +"Mualliflik huquqi (C) 2006-2007 Vladimir Paskov \n" +"Mualliflik huquqi (C) 2000-2002 Ville Syrjälä ,\n" +"Bryn Davies ,\n" +"Jonatan A. Devis ,\n" +"Jeremi Tan " + +#: src/qtui/menus.cc:109 +msgid "_Open Folder ..." +msgstr "Jildni ochish..." + +#: src/qtui/menus.cc:115 +msgid "_Add Folder ..." +msgstr "Jild qo'shish..." + +#: src/qtui/menus.cc:128 +msgid "_Log Inspector ..." +msgstr "Jurnal inspektori..." + +#: src/qtui/menus.cc:218 +msgid "_Find ..." +msgstr "Topish..." + +#: src/qtui/menus.cc:254 src/skins/menus.cc:80 src/skins-qt/menus.cc:70 +msgid "Audio Settings ..." +msgstr "Audio sozlamalari..." + +#: src/qtui/playlist_model.cc:186 +msgid "Q#" +msgstr "Q#" + +#: src/qtui/playlist_model.cc:188 +msgid "T#" +msgstr "T#" + +#: src/qtui/qtui.cc:40 +msgid "Qt Interface" +msgstr "Qt interfeysi" + +#: src/qtui/search_bar.cc:46 +msgid "Search playlist" +msgstr "Pleylistni qidirish" + +#: src/qtui/settings.cc:58 +msgid "Always" +msgstr "Har doim" + +#: src/qtui/settings.cc:59 +msgid "Auto-hide" +msgstr "Avtomatik yashirish" + +#: src/qtui/settings.cc:60 +msgid "Never" +msgstr "Hech qachon" + +#: src/qtui/settings.cc:64 +msgid "Show playlist tabs:" +msgstr "Pleylist yorliqlarini ko'rsatish:" + +#: src/qtui/settings.cc:78 +msgid "Use bold font for column headers" +msgstr "Ustun sarlavhalari uchun qalin shriftdan foydalanish" + +#: src/resample/resample.cc:43 +msgid "Sample Rate Converter" +msgstr "Namuna tezligi konvertori" + +#: src/resample/resample.cc:183 +msgid "" +"Sample Rate Converter Plugin for Audacious\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" +"Audacious uchun namuna tezligi plagini\n" +"Mualliflik huquqi 2010-2012 Jon Lindgren " + +#: src/resample/resample.cc:187 +msgid "Skip/repeat samples" +msgstr "Namunalarni o'tkazib yuborish/takrorlash" + +#: src/resample/resample.cc:188 +msgid "Linear interpolation" +msgstr "Chiziqli interpolyatsiya" + +#: src/resample/resample.cc:189 +msgid "Fast sinc interpolation" +msgstr "Tez sink interpolatsiyasi" + +#: src/resample/resample.cc:190 +msgid "Medium sinc interpolation" +msgstr "O'rta sink interpolyatsiyasi" + +#: src/resample/resample.cc:191 +msgid "Best sinc interpolation" +msgstr "Eng yaxshi sink interpolyatsiyasi" + +#: src/resample/resample.cc:195 +msgid "Conversion" +msgstr "Konvertatsiya" + +#: src/resample/resample.cc:196 +msgid "Method:" +msgstr "Usul:" + +#: src/resample/resample.cc:199 src/soxr/sox-resampler.cc:203 +msgid "Rate:" +msgstr "Baho:" + +#: src/resample/resample.cc:202 +msgid "Rate Mappings" +msgstr "Baholash xaritalari" + +#: src/resample/resample.cc:203 +msgid "Use rate mappings" +msgstr "Daraja xaritalashdan foydalanish" + +#: src/resample/resample.cc:205 +msgid "8 kHz:" +msgstr "8 kGts:" + +#: src/resample/resample.cc:209 +msgid "16 kHz:" +msgstr "16 kGts:" + +#: src/resample/resample.cc:213 +msgid "22.05 kHz:" +msgstr "22.05 kGts:" + +#: src/resample/resample.cc:217 +msgid "32.0 kHz:" +msgstr "32.0 kGts:" + +#: src/resample/resample.cc:221 +msgid "44.1 kHz:" +msgstr "44.1 kGts:" + +#: src/resample/resample.cc:225 +msgid "48 kHz:" +msgstr "48 kGts:" + +#: src/resample/resample.cc:229 +msgid "88.2 kHz:" +msgstr "88.2 kGts:" + +#: src/resample/resample.cc:233 +msgid "96 kHz:" +msgstr "96 kGts:" + +#: src/resample/resample.cc:237 +msgid "176.4 kHz:" +msgstr "176.4 kGts:" + +#: src/resample/resample.cc:241 +msgid "192 kHz:" +msgstr "192 kGts:" + +#: src/scrobbler2/config_window.cc:19 +msgid "Checking Last.fm access ..." +msgstr "Last.fm ga kirish tekshirilmoqda..." + +#: src/scrobbler2/config_window.cc:27 +msgid "" +"Your scrobbles are being saved on your computer temporarily. They will be " +"submitted as soon as Audacious is allowed access." +msgstr "" +"Scrobbllar kompyuteringizda vaqtinchalik saqlanmoqda. Ular Audacious ga " +"kirishga ruxsat berilgan zahoti yuboriladi." + +#: src/scrobbler2/config_window.cc:33 +#, c-format +msgid "Permission granted. Scrobbling for user %s." +msgstr "Ruxsat berildi. %s foydalanuvchi uchun scrobbling." + +#: src/scrobbler2/config_window.cc:37 +msgid "" +"Permission denied. Open the following URL in a browser, allow Audacious " +"access to your account, and then click 'Check Permission' again:" +msgstr "" +"Ruxsat berilmadi. Brauzerda quyidagi URL manzilini oching, Audacious ga " +"hisobingizga kirishga ruxsat bering va “Ruxsatni tekshirish” tugmasini yana " +"bir marta bosing:" + +#: src/scrobbler2/config_window.cc:47 +msgid "There was a problem contacting Last.fm." +msgstr "Last.fm bilan bog‘lanishda muammo yuz berdi." + +#: src/scrobbler2/config_window.cc:86 +msgid "Check Permission" +msgstr "Ruxsatni tekshiring" + +#: src/scrobbler2/config_window.cc:87 +msgid "Revoke Permission" +msgstr "Ruxsatni bekor qilish" + +#: src/scrobbler2/config_window.cc:91 +msgid "You need to allow Audacious to scrobble tracks to your Last.fm account." +msgstr "" +"Audacious ga Last.fm hisobingizga treklarni siljitishga ruxsat berishingiz " +"kerak." + +#: src/scrobbler2/scrobbler.cc:29 +msgid "Scrobbler 2.0" +msgstr "Scrobbler 2.0" + +#: src/scrobbler2/scrobbler.cc:226 +msgid "" +"The Scrobbler plugin could not be started.\n" +"There might be a problem with your installation." +msgstr "" +"Scrobbler plaginini ishga tushirib bo‘lmadi.\n" +"O'rnatishingizda muammo bo'lishi mumkin." + +#: src/scrobbler2/scrobbler.cc:291 +msgid "" +"Audacious Scrobbler Plugin 2.0 by Pitxyoki,\n" +"\n" +"Copyright © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Thanks to John Lindgren for giving me a hand at the beginning of this " +"project.\n" +"\n" +msgstr "" +"itxyoki tomonidan Audacious Scrobbler plagini 2.0,\n" +"\n" +"Mualliflik huquqi © 2012-2013 Luís M. Picciochi Oliveira \n" +"\n" +"Ushbu loyihaning boshida menga yordam bergani uchun Jon Lindgrenga rahmat.\n" +"\n" + +#: src/scrobbler2/scrobbler_communication.cc:663 +msgid "" +"Audacious is now using an improved version of the Last.fm Scrobbler.\n" +"Please check the Preferences for the Scrobbler plugin." +msgstr "" +"Audacious endi Last.fm Scrobblerning takomillashtirilgan versiyasidan " +"foydalanmoqda.\n" +"Iltimos, Scrobbler plaginining imkoniyatlarini tekshiring." + +#: src/sdlout/sdlout.cc:43 +msgid "SDL Output" +msgstr "SDL chiqishi" + +#: src/sdlout/sdlout.cc:72 +msgid "" +"SDL Output Plugin for Audacious\n" +"Copyright 2010 John Lindgren" +msgstr "" +"Audacious uchun SDL chiqish plagini\n" +"Mualliflik huquqi 2010 Jon Lindgren" + +#: src/search-tool/library.cc:35 src/search-tool/library.cc:46 +#: src/search-tool-qt/library.cc:35 src/search-tool-qt/library.cc:46 +msgid "Library" +msgstr "Kutubxona" + +#: src/search-tool-qt/search-model.cc:49 src/search-tool/search-tool.cc:291 +#, c-format +msgid "%d song" +msgid_plural "%d songs" +msgstr[0] "%d qo'shiq " + +#: src/search-tool-qt/search-model.cc:58 src/search-tool/search-tool.cc:298 +msgid "of this genre" +msgstr "ushbu janrdan" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "on" +msgstr "" + +#: src/search-tool-qt/search-model.cc:64 src/search-tool/search-tool.cc:305 +msgid "by" +msgstr "" + +#: src/search-tool-qt/search-tool-qt.cc:165 src/search-tool/search-tool.cc:73 +msgid "Number of results to show:" +msgstr "Ko'rsatiladigan natijalar soni:" + +#: src/search-tool-qt/search-tool-qt.cc:168 src/search-tool/search-tool.cc:76 +msgid "Rescan library at startup" +msgstr "Ishga tushganda kutubxonani qayta ko'rib chiqish" + +#: src/search-tool-qt/search-tool-qt.cc:170 +msgid "Monitor library for changes" +msgstr "O'zgarishlar uchun kutubxonani kuzatib borish" + +#: src/search-tool-qt/search-tool-qt.cc:193 src/search-tool/search-tool.cc:446 +msgid "" +"To import your music library into Audacious, choose a folder and then click " +"the \"refresh\" icon." +msgstr "" +"Musiqa kutubxonangizni Audacious ga import qilish uchun jildni tanlang va " +"keyin “yangilash” belgisini bosing." + +#: src/search-tool-qt/search-tool-qt.cc:195 src/search-tool/search-tool.cc:455 +msgid "Please wait ..." +msgstr "Iltimos kuting... " + +#: src/search-tool-qt/search-tool-qt.cc:197 src/search-tool/search-tool.cc:483 +msgid "Choose Folder" +msgstr "Jildni tanlang" + +#: src/search-tool-qt/search-tool-qt.cc:201 +msgid "Search library" +msgstr "Kutubxonani qidirish" + +#: src/search-tool-qt/search-tool-qt.cc:327 src/search-tool/search-tool.cc:155 +#, c-format +msgid "%d of %d result shown" +msgid_plural "%d of %d results shown" +msgstr[0] "%d %d dan natijalari ko'rsatilgan" + +#: src/search-tool-qt/search-tool-qt.cc:331 src/search-tool/search-tool.cc:159 +#, c-format +msgid "%d result" +msgid_plural "%d results" +msgstr[0] "%d natija" + +#: src/search-tool-qt/search-tool-qt.cc:501 src/search-tool/search-tool.cc:345 +msgid "_Create Playlist" +msgstr "Pleylist yaratish" + +#: src/search-tool-qt/search-tool-qt.cc:503 src/search-tool/search-tool.cc:347 +msgid "_Add to Playlist" +msgstr "Pleylistga qo'shish" + +#: src/sid/xmms-sid.cc:43 +msgid "SID Player" +msgstr "SID pleyer" + +#: src/sid/xs_config.cc:62 +msgid "Channels:" +msgstr "Kanallar:" + +#: src/sid/xs_config.cc:68 +msgid "Emulation" +msgstr "Emulyatsiya" + +#: src/sid/xs_config.cc:69 +msgid "Emulate MOS 8580 (default: MOS 6581)" +msgstr "MOS 8580 ni emulyatsiya qilish (standart: MOS 6581)" + +#: src/sid/xs_config.cc:71 +msgid "Do not automatically select chip model" +msgstr "Chip modelini avtomatik tanlamaslik" + +#: src/sid/xs_config.cc:73 +msgid "Emulate filter" +msgstr "Filtrni emulyatsiya qilish" + +#: src/sid/xs_config.cc:75 +msgid "Clock speed:" +msgstr "Soat tezligi:" + +#: src/sid/xs_config.cc:78 +msgid "Do not automatically select clock speed" +msgstr "Soat tezligini avtomatik tanlamaslik" + +#: src/sid/xs_config.cc:80 +msgid "Playback time" +msgstr "Ijro vaqti" + +#: src/sid/xs_config.cc:81 +msgid "Set maximum playback time:" +msgstr "Maksimal ijro vaqtini sozlash:" + +#: src/sid/xs_config.cc:87 +msgid "Use only when song length is unknown" +msgstr "Faqat qo'shiq uzunligi noma'lum bo'lganda foydalanish" + +#: src/sid/xs_config.cc:90 +msgid "Set minimum playback time:" +msgstr "Minimal ijro vaqtini sozlash:" + +#: src/sid/xs_config.cc:96 +msgid "Subtunes" +msgstr "Subtunes" + +#: src/sid/xs_config.cc:97 +msgid "Enable subtunes" +msgstr "Subtunes yoqish" + +#: src/sid/xs_config.cc:99 +msgid "Ignore subtunes shorter than:" +msgstr "" + +#: src/sid/xs_config.cc:105 +msgid "Note" +msgstr "Eslatma" + +#: src/silence-removal/silence-removal.cc:39 +msgid "Silence Removal" +msgstr "Sukunatni olib tashlash" + +#: src/silence-removal/silence-removal.cc:58 +msgid "" +"Silence Removal Plugin for Audacious\n" +"Copyright 2014 John Lindgren" +msgstr "" +"Audacious uchun Sukunatni olib tashlash plagini\n" +"Mualliflik huquqi 2014 Jon Lindgren " + +#: src/silence-removal/silence-removal.cc:67 +msgid "Silence Removal" +msgstr "Sukunatni olib tashlash" + +#: src/silence-removal/silence-removal.cc:68 +msgid "Threshold:" +msgstr "Chegara:" + +#: src/silence-removal/silence-removal.cc:70 +msgid "dB" +msgstr "dB" + +#: src/skins/actions.cc:45 src/skins-qt/actions.cc:43 +msgid "Repeat points cleared." +msgstr "Takrorlash nuqtalari tozalandi." + +#: src/skins/actions.cc:60 src/skins-qt/actions.cc:58 +msgid "Repeat point A set." +msgstr "A nuqta to'plamini takrorlash." + +#: src/skins/actions.cc:65 src/skins-qt/actions.cc:63 +msgid "Repeat point B set." +msgstr "B nuqta to'plamini takrorlash." + +#: src/skins/equalizer.cc:224 src/skins-qt/equalizer.cc:221 +msgid "Preamp" +msgstr "Kuchaytirgich" + +#: src/skins/equalizer.cc:228 src/skins-qt/equalizer.cc:225 +msgid "31 Hz" +msgstr "31 Gts" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "63 Hz" +msgstr "63 Gts" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "125 Hz" +msgstr "125 Gts" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "250 Hz" +msgstr "250 Gts" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "500 Hz" +msgstr "500 Gts" + +#: src/skins/equalizer.cc:229 src/skins-qt/equalizer.cc:226 +msgid "1 kHz" +msgstr "1 kGts" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "2 kHz" +msgstr "2 kGts" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "4 kHz" +msgstr "4 kGts" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "8 kHz" +msgstr "8 kGts" + +#: src/skins/equalizer.cc:230 src/skins-qt/equalizer.cc:227 +msgid "16 kHz" +msgstr "16 kGts" + +#: src/skins/equalizer.cc:271 src/skins-qt/equalizer.cc:268 +msgid "Audacious Equalizer" +msgstr "Audacious ekvalayzeri" + +#: src/skins/main.cc:452 src/skins-qt/main.cc:436 +msgid "Recording on" +msgstr "Yozib olish yoqilgan" + +#: src/skins/main.cc:454 src/skins-qt/main.cc:438 +msgid "Recording off" +msgstr "Yozib olish oʻchirilgan" + +#: src/skins/main.cc:749 src/skins-qt/main.cc:690 +#, c-format +msgid "Seek to %d:%-2.2d / %d:%-2.2d" +msgstr "Izlash %d:%-2.2d / %d:%-2.2d" + +#: src/skins/main.cc:766 src/skins-qt/main.cc:707 +#, c-format +msgid "Volume: %d%%" +msgstr "Ovoz balandligi: %d%%" + +#: src/skins/main.cc:779 src/skins-qt/main.cc:720 +#, c-format +msgid "Balance: %d%% left" +msgstr "Balans: %d%% chap" + +#: src/skins/main.cc:781 src/skins-qt/main.cc:722 +msgid "Balance: center" +msgstr "Balans: markaz" + +#: src/skins/main.cc:783 src/skins-qt/main.cc:724 +#, c-format +msgid "Balance: %d%% right" +msgstr "Balans: %d%% oʻng" + +#: src/skins/main.cc:875 src/skins-qt/main.cc:816 +msgid "Options Menu" +msgstr "Variantlar menyusi" + +#: src/skins/main.cc:879 src/skins-qt/main.cc:820 +msgid "Disable 'Always On Top'" +msgstr "\"Har doim ustida\" ni o'chirish" + +#: src/skins/main.cc:881 src/skins-qt/main.cc:822 +msgid "Enable 'Always On Top'" +msgstr "“Har doim ustida”ni yoqish" + +#: src/skins/main.cc:884 src/skins-qt/main.cc:825 +msgid "File Info Box" +msgstr "Fayl ma'lumotlar qutisi" + +#: src/skins/main.cc:887 src/skins/menus.cc:149 src/skins-qt/main.cc:828 +#: src/skins-qt/menus.cc:142 +msgid "Double Size" +msgstr "Ikki o'lchamli" + +#: src/skins/main.cc:890 src/skins-qt/main.cc:831 +msgid "Visualizations" +msgstr "Vizualizatsiya" + +#: src/skins/menus.cc:74 src/skins-qt/menus.cc:64 +msgid "Volume Up" +msgstr "Ovozni oshirish" + +#: src/skins/menus.cc:75 src/skins-qt/menus.cc:65 +msgid "Volume Down" +msgstr "Ovozni pasaytirish" + +#: src/skins/menus.cc:77 src/skins-qt/menus.cc:67 +msgid "Effects ..." +msgstr "Effektlar..." + +#: src/skins/menus.cc:84 src/skins-qt/menus.cc:74 +msgid "Open Files ..." +msgstr "Fayllarni ochish..." + +#: src/skins/menus.cc:85 src/skins-qt/menus.cc:76 +msgid "Open URL ..." +msgstr "URL ni ochish..." + +#: src/skins/menus.cc:88 src/skins-qt/menus.cc:79 +msgid "Playback" +msgstr "Ijro" + +#: src/skins/menus.cc:89 src/skins-qt/menus.cc:80 +msgid "Playlist" +msgstr "Pleylist" + +#: src/skins/menus.cc:90 src/skins-qt/menus.cc:81 +msgid "Output" +msgstr "Chiqarish" + +#: src/skins/menus.cc:91 src/skins-qt/menus.cc:82 +msgid "View" +msgstr "Ko'rinish" + +#: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 +#: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 +msgid "Services" +msgstr "Xizmatlar" + +#: src/skins/menus.cc:95 src/skins-qt/menus.cc:86 +msgid "About ..." +msgstr "Haqida..." + +#: src/skins/menus.cc:96 src/skins-qt/menus.cc:87 +msgid "Settings ..." +msgstr "Sozlamalar..." + +#: src/skins/menus.cc:97 src/skins-qt/menus.cc:88 +msgid "Quit" +msgstr "Chiqish" + +#: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 +#: src/skins-qt/menus.cc:229 +msgid "Song Info ..." +msgstr "Qo'shiq haqida ma'lumot..." + +#: src/skins/menus.cc:105 src/skins-qt/menus.cc:96 +msgid "Shuffle by Album" +msgstr "Albom bo'yicha aralashtirish" + +#: src/skins/menus.cc:106 src/skins-qt/menus.cc:97 +msgid "No Playlist Advance" +msgstr "" + +#: src/skins/menus.cc:117 src/skins-qt/menus.cc:108 +msgid "Set A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:118 src/skins-qt/menus.cc:109 +msgid "Clear A-B Repeat" +msgstr "" + +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 +msgid "Jump to Song ..." +msgstr "Qo'shiqqa o'tish..." + +#: src/skins/menus.cc:121 src/skins-qt/menus.cc:113 +msgid "Jump to Time ..." +msgstr "Jump to Time..." + +#: src/skins/menus.cc:125 src/skins-qt/menus.cc:118 +msgid "Play/Resume" +msgstr "Ijro etish/Davom etish" + +#: src/skins/menus.cc:127 src/skins-qt/menus.cc:120 +msgid "New Playlist" +msgstr "Yangi pleylist" + +#: src/skins/menus.cc:128 src/skins-qt/menus.cc:121 +msgid "Rename Playlist ..." +msgstr "Pleylist nomini oʻzgartirish..." + +#: src/skins/menus.cc:129 src/skins-qt/menus.cc:122 +msgid "Remove Playlist" +msgstr "Pleylistni olib tashlash" + +#: src/skins/menus.cc:131 src/skins-qt/menus.cc:124 +msgid "Previous Playlist" +msgstr "Oldingi pleylist" + +#: src/skins/menus.cc:132 src/skins-qt/menus.cc:125 +msgid "Next Playlist" +msgstr "Keyingi pleylist" + +#: src/skins/menus.cc:134 src/skins-qt/menus.cc:127 +msgid "Import Playlist ..." +msgstr "Pleylistni import qilish..." + +#: src/skins/menus.cc:135 src/skins-qt/menus.cc:128 +msgid "Export Playlist ..." +msgstr "Pleylistni eksport qilish..." + +#: src/skins/menus.cc:137 src/skins-qt/menus.cc:130 +msgid "Playlist Manager ..." +msgstr "Pleylist menejeri..." + +#: src/skins/menus.cc:138 src/skins-qt/menus.cc:131 +msgid "Queue Manager ..." +msgstr "Navbat menejeri..." + +#: src/skins/menus.cc:140 src/skins-qt/menus.cc:133 +msgid "Refresh Playlist" +msgstr "Pleylistni yangilash" + +#: src/skins/menus.cc:144 src/skins-qt/menus.cc:137 +msgid "Show Playlist Editor" +msgstr "Pleylist muharririni ko'rsatish" + +#: src/skins/menus.cc:145 src/skins-qt/menus.cc:138 +msgid "Show Equalizer" +msgstr "Ekvalayzerni ko'rsatish" + +#: src/skins/menus.cc:147 src/skins-qt/menus.cc:140 +msgid "Show Remaining Time" +msgstr "Qolgan vaqtni ko'rsatish" + +#: src/skins/menus.cc:150 src/skins-qt/menus.cc:143 +msgid "Always on Top" +msgstr "Har doim ustida" + +#: src/skins/menus.cc:151 src/skins-qt/menus.cc:145 +msgid "On All Workspaces" +msgstr "Barcha ish joylarida" + +#: src/skins/menus.cc:153 src/skins-qt/menus.cc:148 +msgid "Roll Up Player" +msgstr "Roll Up pleyeri" + +#: src/skins/menus.cc:154 src/skins-qt/menus.cc:149 +msgid "Roll Up Playlist Editor" +msgstr "Roll Up pleylist muharriri" + +#: src/skins/menus.cc:155 src/skins-qt/menus.cc:150 +msgid "Roll Up Equalizer" +msgstr "Roll Up ekvalayzeri" + +#: src/skins/menus.cc:163 src/skins-qt/menus.cc:158 +msgid "Add URL ..." +msgstr "URL qo‘shish..." + +#: src/skins/menus.cc:164 src/skins-qt/menus.cc:160 +msgid "Add Files ..." +msgstr "Fayllarni qo'shish..." + +#: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 +msgid "By Title" +msgstr "Sarlavha bo'yicha" + +#: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 +msgid "By File Name" +msgstr "Fayl nomi bo'yicha" + +#: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 +msgid "By File Path" +msgstr "Fayl yo'li bo'yicha" + +#: src/skins/menus.cc:176 src/skins-qt/menus.cc:172 +msgid "Remove All" +msgstr "Hammasini o'chirish" + +#: src/skins/menus.cc:177 src/skins-qt/menus.cc:173 +msgid "Clear Queue" +msgstr "Navbatni tozalash" + +#: src/skins/menus.cc:179 src/skins-qt/menus.cc:175 +msgid "Remove Unavailable Files" +msgstr "Mavjud bo'lmagan fayllarni o'chirish" + +#: src/skins/menus.cc:180 src/skins-qt/menus.cc:176 +msgid "Remove Duplicates" +msgstr "Dublikatlarni o'chirish" + +#: src/skins/menus.cc:182 src/skins-qt/menus.cc:178 +msgid "Remove Unselected" +msgstr "Tanlanmaganni o'chirish" + +#: src/skins/menus.cc:183 src/skins-qt/menus.cc:179 +msgid "Remove Selected" +msgstr "Tanlanganni o'chirish" + +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 +msgid "Search and Select" +msgstr "Qidirish va tanlash" + +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 +msgid "Invert Selection" +msgstr "Tanlovni teskari aylantirish" + +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 +msgid "Select None" +msgstr "Hech birini tanlamaslik" + +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 +msgid "Select All" +msgstr "Hammasini belgilash" + +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 +msgid "By Track Number" +msgstr "Trek raqami bo'yicha" + +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 +msgid "By Artist" +msgstr "Artist bo'yicha" + +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 +msgid "By Album" +msgstr "Albom bo'yicha" + +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 +msgid "By Album Artist" +msgstr "Albom artisti bo'yicha" + +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 +msgid "By Release Date" +msgstr "Chiqarilgan sana bo'yicha" + +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 +msgid "By Genre" +msgstr "Janr bo'yicha" + +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 +msgid "By Length" +msgstr "Uzunlik bo'yicha" + +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 +msgid "By Custom Title" +msgstr "Maxsus sarlavha bo'yicha" + +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 +msgid "By Comment" +msgstr "Izoh bo'yicha" + +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 +msgid "Randomize List" +msgstr "Ro'yxatni tasodifiy qilish" + +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 +msgid "Reverse List" +msgstr "Ro'yxatni teskari qilish" + +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 +msgid "Sort Selected" +msgstr "Tanlanganlarni saralash" + +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 +msgid "Sort List" +msgstr "Roʻyxatni saralash" + +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 +msgid "Open Containing Folder" +msgstr "O'z ichiga olgan jildni ochish" + +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 +msgid "Cut" +msgstr "Kesish" + +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 +msgid "Copy" +msgstr "Nusxalash" + +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 +msgid "Paste" +msgstr "Joylashtirish" + +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 +msgid "Paste at End" +msgstr "Oxirida joylashtirish" + +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 +msgid "Queue/Unqueue" +msgstr "Navbat/navbatni bekor qilish" + +#: src/skins/playlist-widget.cc:55 src/skins-qt/playlist-widget.cc:56 +#, c-format +msgid "%s (%d of %d)" +msgstr "%s (%d %d dan)" + +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 +msgid "Audacious Playlist Editor" +msgstr "Audacious pleylist muharriri" + +#: src/skins/plugin.cc:49 src/skins-qt/plugin.cc:64 +msgid "Winamp Classic Interface" +msgstr "Winamp klassik interfeysi" + +#: src/skins-qt/menus.cc:75 +msgid "Open Folder ..." +msgstr "Jildni ochish..." + +#: src/skins-qt/menus.cc:159 +msgid "Add Folder ..." +msgstr "Jild qo'shish..." + +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 +msgid "Player:" +msgstr "Pleyer:" + +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 +msgid "Select main player window font:" +msgstr "Asosiy pleyer oynasi shriftini tanlash:" + +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 +msgid "Playlist:" +msgstr "Pleylist:" + +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 +msgid "Select playlist font:" +msgstr "Pleylist shriftini tanlash:" + +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 +msgid "Skin" +msgstr "Skin" + +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "Har qanday oyna fokuslanganda faol sarlavha panelini ko'rsatish" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 +msgid "Fonts" +msgstr "Shriftlar" + +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 +msgid "Use bitmap fonts (supports ASCII only)" +msgstr "Bitmap shriftlaridan foydalaning (faqat ASCII ni qo'llab-quvvatlaydi)" + +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 +msgid "Scroll song title" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 +msgid "Scroll song title in both directions" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 +msgid "Analyzer" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 +msgid "Scope" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 +msgid "Voiceprint / VU meter" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 +msgid "Off" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 +#: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 +msgid "Normal" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 +#: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 +msgid "Fire" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 +msgid "Vertical lines" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 +msgid "Lines" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 +msgid "Bars" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 +msgid "Slowest" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 +msgid "Slow" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 +#: src/soxr/sox-resampler.cc:180 +msgid "Medium" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 +msgid "Fast" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 +msgid "Fastest" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 +msgid "Dots" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 +msgid "Line" +msgstr "Satr" + +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 +msgid "Solid" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 +msgid "Ice" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 +msgid "Smooth" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 +msgid "Coloring:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 +msgid "Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 +msgid "Falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 +msgid "Peak falloff:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 +msgid "Scope Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 +msgid "Voiceprint Coloring:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 +msgid "VU Meter Style:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 +msgid "Type" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 +msgid "Visualization type:" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 +msgid "Analyzer" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 +msgid "Show peaks" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 +msgid "Visualization" +msgstr "Vizualizatsiya" + +#: src/skins-qt/skinselector.cc:98 src/skins/skinselector.cc:111 +msgid "Archived Winamp 2.x skin" +msgstr "" + +#: src/skins-qt/skinselector.cc:102 src/skins/skinselector.cc:115 +msgid "Unarchived Winamp 2.x skin" +msgstr "" + +#: src/sndfile/plugin.cc:38 +msgid "Sndfile Plugin" +msgstr "" + +#: src/sndfile/plugin.cc:372 +msgid "" +"Based on the xmms_sndfile plugin:\n" +"Copyright (C) 2000, 2002 Erik de Castro Lopo\n" +"\n" +"Adapted for Audacious by Tony Vroon \n" +"\n" +"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.\n" +"\n" +"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.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"this program; if not, write to the Free Software Foundation, Inc., 51 " +"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." +msgstr "" + +#: src/sndio/sndio.cc:43 +msgid "Sndio Output" +msgstr "" + +#: src/sndio/sndio.cc:98 +msgid "Device (blank for default):" +msgstr "" + +#: src/sndio/sndio.cc:100 +msgid "Save and restore volume:" +msgstr "" + +#: src/sndio/sndio.cc:181 +#, c-format +msgid "Sndio error: Unsupported audio format (%d)" +msgstr "" + +#: src/sndio/sndio.cc:192 +msgid "Sndio error: sio_open() failed" +msgstr "" + +#: src/sndio/sndio.cc:221 +msgid "Sndio error: sio_setpar() failed" +msgstr "" + +#: src/sndio/sndio.cc:233 +msgid "Sndio error: sio_start() failed" +msgstr "" + +#: src/songchange/song_change.cc:30 +msgid "Song Change" +msgstr "" + +#: src/songchange/song_change.cc:245 +msgid "Commands" +msgstr "" + +#: src/songchange/song_change.cc:247 +msgid "Command to run when starting a new song:" +msgstr "" + +#: src/songchange/song_change.cc:250 +msgid "Command to run at the end of a song:" +msgstr "" + +#: src/songchange/song_change.cc:253 +msgid "Command to run at the end of the playlist:" +msgstr "" + +#: src/songchange/song_change.cc:256 +msgid "Command to run when song title changes (for network streams):" +msgstr "" + +#: src/songchange/song_change.cc:259 +msgid "" +"You can use the following format codes, which will be replaced before " +"running the command (not all are useful for the end-of-playlist command):" +msgstr "" + +#: src/songchange/song_change.cc:262 +msgid "" +"%a: Artist\n" +"%b: Album\n" +"%c: Number of channels\n" +"%f: File name (full path)\n" +"%F: Frequency (Hertz)\n" +"%l: Length (milliseconds)\n" +"%n or %s: Formatted title (see playlist settings)\n" +"%p: Currently playing (1 or 0)\n" +"%r: Rate (bits per second)\n" +"%t: Playlist position\n" +"%T: Title (unformatted)" +msgstr "" + +#: src/songchange/song_change.cc:273 +msgid "" +"Parameters passed to the shell should be enclosed in quotation marks. " +"Unquoted parameters may lead to unexpected results." +msgstr "" + +#: src/song-info-qt/song-info.cc:30 +msgid "Song Info" +msgstr "Qo'shiq haqida ma'lumot" + +#: src/soxr/sox-resampler.cc:44 +msgid "SoX Resampler" +msgstr "" + +#: src/soxr/sox-resampler.cc:172 +msgid "" +"SoX Resampler Plugin for Audacious\n" +"Copyright 2013 Michał Lipski\n" +"\n" +"Based on Sample Rate Converter Plugin:\n" +"Copyright 2010-2012 John Lindgren" +msgstr "" + +#: src/soxr/sox-resampler.cc:178 +msgid "Quick" +msgstr "" + +#: src/soxr/sox-resampler.cc:179 +msgid "Low" +msgstr "" + +#: src/soxr/sox-resampler.cc:181 +msgid "High" +msgstr "" + +#: src/soxr/sox-resampler.cc:182 +msgid "Very High" +msgstr "" + +#: src/soxr/sox-resampler.cc:183 +msgid "Ultra High" +msgstr "" + +#: src/soxr/sox-resampler.cc:187 +msgid "Minimum" +msgstr "" + +#: src/soxr/sox-resampler.cc:188 +msgid "Intermediate" +msgstr "" + +#: src/soxr/sox-resampler.cc:193 +msgid "Quality:" +msgstr "Sifat:" + +#: src/soxr/sox-resampler.cc:196 +msgid "Phase:" +msgstr "" + +#: src/soxr/sox-resampler.cc:200 +msgid "Allow aliasing" +msgstr "" + +#: src/soxr/sox-resampler.cc:202 +msgid "Use steep filter" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:54 +msgid "Speed and Pitch" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:247 +msgid "Speed" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:248 +msgid "Decouple from pitch" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:250 src/speedpitch/speed-pitch.cc:258 +msgid "Multiplier:" +msgstr "" + +#: src/speedpitch/speed-pitch.cc:254 +msgid "Pitch" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:44 src/statusicon/statusicon.cc:47 +msgid "Status Icon" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:65 +msgid "" +"Status Icon Plugin (partial port for Qt interface)\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"Copyright 2015 Eugene Paskevich \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/statusicon-qt/statusicon.cc:86 src/statusicon/statusicon.cc:380 +msgid "Mouse Scroll Action" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:87 src/statusicon/statusicon.cc:381 +msgid "Change volume" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:90 src/statusicon/statusicon.cc:384 +msgid "Change playing song" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:93 src/statusicon/statusicon.cc:387 +msgid "Other Settings" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:94 src/statusicon/statusicon.cc:388 +msgid "Disable the popup window" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:96 src/statusicon/statusicon.cc:390 +msgid "Close to the system tray" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:98 src/statusicon/statusicon.cc:392 +msgid "Advance in playlist when scrolling upward" +msgstr "" + +#: src/statusicon-qt/statusicon.cc:113 src/statusicon/statusicon.cc:283 +msgid "Se_ttings ..." +msgstr "" + +#: src/statusicon/statusicon.cc:373 +msgid "" +"Status Icon Plugin\n" +"\n" +"Copyright 2005-2007 Giacomo Lozito \n" +"Copyright 2010 Michał Lipski \n" +"\n" +"This plugin provides a status icon, placed in\n" +"the system tray area of the window manager." +msgstr "" + +#: src/stereo_plugin/stereo.cc:19 +msgid "Extra Stereo" +msgstr "" + +#: src/stereo_plugin/stereo.cc:36 +msgid "" +"Extra Stereo Plugin\n" +"\n" +"By Johan Levin, 1999" +msgstr "" + +#: src/stereo_plugin/stereo.cc:44 +msgid "Extra Stereo" +msgstr "" + +#: src/streamtuner/icecast-model.cc:126 src/streamtuner/shoutcast-model.cc:131 +msgid "Type" +msgstr "" + +#: src/streamtuner/icecast-model.cc:132 +msgid "Current Song" +msgstr "" + +#: src/streamtuner/icecast-model.cc:164 +msgid "Other" +msgstr "" + +#: src/streamtuner/ihr-model.cc:63 +msgid "Market" +msgstr "" + +#: src/streamtuner/ihr-model.cc:156 +msgid "Call Letters" +msgstr "" + +#: src/streamtuner/ihr-model.cc:162 +msgid "Description" +msgstr "Tavsif" + +#: src/streamtuner/shoutcast-model.cc:128 +msgid "Listeners" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:188 +msgid "Top 500 Stations" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:189 +msgid "Alternative" +msgstr "Alternative" + +#: src/streamtuner/shoutcast-model.cc:190 +msgid "Blues" +msgstr "Blues" + +#: src/streamtuner/shoutcast-model.cc:191 +msgid "Classical" +msgstr "Classical" + +#: src/streamtuner/shoutcast-model.cc:192 +msgid "Country" +msgstr "Country" + +#: src/streamtuner/shoutcast-model.cc:193 +msgid "Decades" +msgstr "Decades" + +#: src/streamtuner/shoutcast-model.cc:194 +msgid "Easy Listening" +msgstr "Easy Listening" + +#: src/streamtuner/shoutcast-model.cc:195 +msgid "Electronic" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:196 +msgid "Folk" +msgstr "Folk" + +#: src/streamtuner/shoutcast-model.cc:197 +msgid "Inspirational" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:198 +msgid "International" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:199 +msgid "Jazz" +msgstr "Jazz" + +#: src/streamtuner/shoutcast-model.cc:200 +msgid "Latin" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:201 +msgid "Metal" +msgstr "Metal" + +#: src/streamtuner/shoutcast-model.cc:203 +msgid "New Age" +msgstr "New Age" + +#: src/streamtuner/shoutcast-model.cc:204 +msgid "Pop" +msgstr "Pop" + +#: src/streamtuner/shoutcast-model.cc:205 +msgid "Public Radio" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:206 +msgid "R&B and Urban" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:207 +msgid "Rap" +msgstr "Rap" + +#: src/streamtuner/shoutcast-model.cc:208 +msgid "Reggae" +msgstr "Reggae" + +#: src/streamtuner/shoutcast-model.cc:209 +msgid "Rock" +msgstr "Rock" + +#: src/streamtuner/shoutcast-model.cc:210 +msgid "Seasonal and Holiday" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:211 +msgid "Soundtracks" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:212 +msgid "Talk" +msgstr "" + +#: src/streamtuner/shoutcast-model.cc:213 +msgid "Themes" +msgstr "" + +#: src/streamtuner/streamtuner.cc:59 +msgid "Shoutcast" +msgstr "" + +#: src/streamtuner/streamtuner.cc:60 +msgid "Icecast" +msgstr "Icecast" + +#: src/streamtuner/streamtuner.cc:71 +msgid "Stream Tuner" +msgstr "Stream Tuner" + +#: src/tonegen/tonegen.cc:45 +msgid "Tone Generator" +msgstr "Ohang generatori" + +#: src/tonegen/tonegen.cc:92 +#, c-format +msgid "%s %.1f Hz" +msgstr "%s %.1f Gts" + +#: src/tonegen/tonegen.cc:92 +msgid "Tone Generator: " +msgstr "Ohang generatori:" + +#: src/tonegen/tonegen.cc:161 +msgid "" +"Sine tone generator by Håvard Kvålen \n" +"Modified by Daniel J. Peng \n" +"\n" +"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n" +"e.g. tone://2000;2005 to play a 2000 Hz tone and a 2005 Hz tone" +msgstr "" +"Håvard Kvålen tomonidan sinus ohang generatori \n" +"Daniel J. Peng tomonidan tahrirlangan \n" +"\n" +"Undan foydalanish uchun URL manzilini qo'shing: tone://frequency1;frequency2;" +"frequency3;...\n" +"masalan tone://2000;2005 2000 Gts ohang va 2005 Gts ohangni ijro etish uchun " + +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(Qo'shimcha xabarlar yashirilgan.)" + +#: src/ui-common/dialogs-qt.cc:52 +msgid "Working ..." +msgstr "Ishlamoqda..." + +#: src/ui-common/dialogs-qt.cc:72 +msgid "Information" +msgstr "Ma'lumot" + +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + +#: src/voice_removal/voice_removal.cc:28 +msgid "Voice Removal" +msgstr "Ovozni olib tashlash" + +#: src/vorbis/vorbis.cc:429 +msgid "" +"Audacious Ogg Vorbis Decoder\n" +"\n" +"Based on the Xiph.org Foundation's Ogg Vorbis Plugin:\n" +"http://www.xiph.org/\n" +"\n" +"Original code by:\n" +"Tony Arcieri \n" +"\n" +"Contributions from:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " +msgstr "" +"Audacious Ogg Vorbis dekoderi\n" +"\n" +"Xiph.org fondining Ogg Vorbis plaginiga asoslangan:\n" +"http://www.xiph.org/\n" +"\n" +"Asl kod:\n" +"Tony Arcieri \n" +"\n" +"Quyidagilardan hissalar:\n" +"Chris Montgomery \n" +"Peter Alm \n" +"Michael Smith \n" +"Jack Moffitt \n" +"Jorn Baayen \n" +"Håvard Kvålen \n" +"Gian-Carlo Pascutto \n" +"Eugene Zagidullin " + +#: src/vorbis/vorbis.h:18 +msgid "Ogg Vorbis Decoder" +msgstr "" + +#: src/vtx/info.cc:24 +#, c-format +msgid "Details about %s" +msgstr "" + +#: src/vtx/info.cc:26 +msgid "" +"Title: %t\n" +"Author: %a\n" +"From: %f\n" +"Tracker: %T\n" +"Comment: %C\n" +"Chip type: %c\n" +"Stereo: %s\n" +"Loop: %l\n" +"Chip freq: %F\n" +"Player Freq: %P\n" +"Year: %y" +msgstr "" + +#: src/vtx/vtx.cc:38 +msgid "VTX Decoder" +msgstr "" + +#: src/vtx/vtx.cc:178 +msgid "" +"Vortex file format player by Sashnov Alexander \n" +"Based on in_vtx.dll by Roman Sherbakov \n" +"Audacious plugin by Pavel Vymetalek " +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:31 +msgid "" +"VU Meter Plugin for Audacious\n" +"Copyright 2017-2019 Marc Sánchez Fauste" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:35 +msgid "VU Meter Settings" +msgstr "" + +#: src/vumeter-qt/vumeter_qt.cc:37 +msgid "Peak hold time:" +msgstr "Maksimal ushlab turish vaqti:" + +#: src/vumeter-qt/vumeter_qt.cc:42 +msgid "Fall-off time:" +msgstr "Tushish vaqti:" + +#: src/vumeter-qt/vumeter_qt.cc:44 +msgid "dB/second" +msgstr "dB/sekund" + +#: src/vumeter-qt/vumeter_qt.cc:46 +msgid "Display legend" +msgstr "Afsonani ko'rsatish" + +#: src/vumeter-qt/vumeter_qt.h:37 +msgid "VU Meter" +msgstr "VU metr" + +#: src/waveout/waveout.cc:43 +msgid "Win32 waveOut" +msgstr "Win32 waveOut" + +#: src/waveout/waveout.cc:69 +msgid "" +"Win32 waveOut Plugin for Audacious\n" +"Copyright 2016 John Lindgren" +msgstr "" +"Audacious uchun Win32 waveOut plagini\n" +"Mualliflik huquqi 2016 John Lindgren " + +#: src/wavpack/wavpack.cc:25 +msgid "WavPack Decoder" +msgstr "WavPack dekoder" + +#: src/wavpack/wavpack.cc:217 +msgid "lossy (hybrid)" +msgstr "yo'qotadigan (gibrid)" + +#: src/wavpack/wavpack.cc:219 +msgid "lossy" +msgstr "yo'qotadigan" + +#: src/wavpack/wavpack.cc:259 +msgid "" +"Copyright 2006 William Pitcock \n" +"\n" +"Some of the plugin code was by Miles Egan." +msgstr "" +"Mualliflik huquqi 2006 William Pitcock \n" +"\n" +"Plagin kodlarining ba'zilari Miles Egan tomonidan yaratilgan." + +#: src/xsf/plugin.cc:74 +msgid "2SF Decoder" +msgstr "2SF dekoder" + +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 Gts" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 Gts" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "Kosinus" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "Keskin" + +#: src/xsf/plugin.cc:443 +msgid "XSF Configuration" +msgstr "XSF konfiguratsiyasi" + +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "Odatiy o'chirish vaqti:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "Interpolatsiya rejimi:" + +#: src/xspf/xspf.cc:95 +msgid "XML Shareable Playlists (XSPF)" +msgstr "XML almashish mumkin pleylistlar (XSPF)" diff -Nru audacious-plugins-4.1/po/zh_CN.po audacious-plugins-4.2/po/zh_CN.po --- audacious-plugins-4.1/po/zh_CN.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/zh_CN.po 2022-07-10 01:12:34.000000000 +0000 @@ -16,7 +16,8 @@ # Luke , 2012 # shan dong , 2013 # shan dong , 2013 -# WhiredPlanck , 2020 +# WhiredPlanck , 2020 +# WhiredPlanck , 2022 # yinsigan , 2012 # zhangmin , 2013-2015 # zhangmin , 2013 @@ -28,9 +29,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2021-01-29 07:34+0000\n" -"Last-Translator: 玉堂白鹤 \n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: WhiredPlanck , 2022\n" "Language-Team: Chinese (China) (http://www.transifex.com/audacious/audacious/" "language/zh_CN/)\n" "Language: zh_CN\n" @@ -48,7 +49,7 @@ msgstr "AdPlug (AdLib 播放器)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "连续的" @@ -78,7 +79,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "杂项" @@ -485,6 +486,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "采样率:" @@ -560,6 +562,7 @@ msgstr "* MIDI文件不包含歌词 *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "关闭(_C)" @@ -619,7 +622,7 @@ msgid "Concave Rectangle" msgstr "凹角矩形" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "无" @@ -816,6 +819,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious 播放列表 (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "比特失真器" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "位深度:" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "降采样比率:" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "比特失真器" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "颜色" @@ -1204,7 +1223,7 @@ msgstr "删除" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "取消" @@ -1242,7 +1261,7 @@ msgstr "延迟:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "毫秒" @@ -1262,7 +1281,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg 插件" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1382,77 +1401,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "8 千比特/秒" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "16 千比特/秒" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "32 千比特/秒" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "40 千比特/秒" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "48 千比特/秒" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "56 千比特/秒" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "64 千比特/秒" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "80 千比特/秒" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "96 千比特/秒" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "112 千比特/秒" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "128 千比特/秒" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "160 千比特/秒" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "192 千比特/秒" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "224 千比特/秒" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "256 千比特/秒" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "320 千比特/秒" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1576,7 +1595,7 @@ msgid "Quality (0-1):" msgstr "质量(0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "常规" @@ -1585,11 +1604,11 @@ msgid "FLAC Decoder" msgstr "FLAC 解码器" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "无损的" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2248,8 +2267,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "%d 千比特/秒" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2565,7 +2584,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:121 msgid "Artist is truncated at the start, Title -- at the end" -msgstr "" +msgstr "艺术家名称截断于开头处,标题 -- 于末尾处" #: src/lyricwiki-qt/lyricwiki.cc:122 msgid "Chars to truncate on:" @@ -2573,15 +2592,15 @@ #: src/lyricwiki-qt/lyricwiki.cc:126 msgid "Chars are ORed in RegExp, surrounded by whitespace" -msgstr "" +msgstr "字符以正则表达式表达并进行或运算,由空白字符包围" #: src/lyricwiki-qt/lyricwiki.cc:127 msgid "Chars to split on:" -msgstr "" +msgstr "用以拆分的字符:" #: src/lyricwiki-qt/lyricwiki.cc:128 msgid "Further truncate those on chars" -msgstr "" +msgstr "进一步用字符截断标题" #: src/lyricwiki-qt/lyricwiki.cc:134 msgid "General" @@ -2589,7 +2608,7 @@ #: src/lyricwiki-qt/lyricwiki.cc:135 msgid "Split title into artist and title on chars" -msgstr "" +msgstr "用字符将标题分割为艺术家名称和标题" #: src/lyricwiki-qt/lyricwiki.cc:138 msgid "Internet Sources" @@ -2625,7 +2644,7 @@ msgid "Looking for lyrics ..." msgstr "正在搜索歌词..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "错误" @@ -2810,7 +2829,7 @@ #: src/moonstone/moonstone.cc:39 msgid "Moonstone" -msgstr "" +msgstr "月光石" #: src/moonstone/playlist_header.cc:210 src/qtui/playlist_header.cc:251 msgid "Reset to Defaults" @@ -2984,7 +3003,7 @@ msgid "Interpolation:" msgstr "插值:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "线性" @@ -3069,7 +3088,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF 配置" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "忽略文件长度" @@ -3212,11 +3231,11 @@ #: src/qtui/playlist_model.cc:186 msgid "Q#" -msgstr "" +msgstr "Q#" #: src/qtui/playlist_model.cc:188 msgid "T#" -msgstr "" +msgstr "T#" #: src/qtui/qtui.cc:40 msgid "Qt Interface" @@ -3744,7 +3763,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "服务" @@ -3761,7 +3780,7 @@ msgstr "退出" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "歌曲信息 ..." @@ -3781,7 +3800,7 @@ msgid "Clear A-B Repeat" msgstr "清除 A-B 点重复" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "跳至曲目 ..." @@ -3874,20 +3893,20 @@ msgstr "添加文件 ..." #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "按标题" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "按文件名" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "按文件路径" @@ -3915,104 +3934,104 @@ msgid "Remove Selected" msgstr "删除已选中的" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "搜索/选择" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "反选" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "取消选中" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "选中全部" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "按音轨号码" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "按艺术家" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "按专辑" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "按专辑艺术家" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "按发表日期" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "按照类型" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "按照长度" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "按照自定义标题" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "根据评论" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "打乱列表" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "反转列表" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "排序已选中的" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "排序列表" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "打开包含的文件夹" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "剪切" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "复制" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "粘贴" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "在末尾粘贴" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "加入/移出列表" @@ -4021,7 +4040,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d of %d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious播放列表编辑器" @@ -4037,167 +4056,217 @@ msgid "Add Folder ..." msgstr "添加文件夹 ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "从当前播放列表中搜索条目" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"按部分字段搜索播放列表中的条目。各个字段都可以使用正则表达式,而且是不分大小" +"字的。如果你不知道何为正则表达式,简单的输入部分你想搜索的文字亦可。" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "标题:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "专辑:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "艺术家:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "文件名:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "搜索前清空之前的结果" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "自动为区配条目切换队列" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "用匹配的条目创建新的播放列表" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "搜索" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "播放器:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "选择主界面字体:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "播放列表:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "选择播放列表字体:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "皮肤" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "当聚焦到任意窗口时显示活动的标题栏" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "字体" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "使用点阵字体(仅支持ASCII字符)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "滚动曲目标题" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "来回滚动歌曲标题" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "分析器" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "示波器" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "声纹 / VU 表" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "关闭" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "一般" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "火炎" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "竖线" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "细线" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "柱状" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "最慢" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "慢" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "中速" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "快" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "最快" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "点" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "线" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "色块" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "冷蓝" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "平滑" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "上色:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "风格:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "减退:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "峰值减退速度:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "示波器风格:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "声纹上色:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU 表风格:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "类型" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "可视化类型:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "分析器" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "显示峰值" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "可视化效果" @@ -4209,57 +4278,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "未打包的Winamp 2.x主题" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "从当前播放列表中搜索条目" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "搜索" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"按部分字段搜索播放列表中的条目。各个字段都可以使用正则表达式,而且是不分大小" -"字的。如果你不知道何为正则表达式,简单的输入部分你想搜索的文字亦可。" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "标题:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "专辑:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "艺术家:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "文件名:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "搜索前清空之前的结果" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "自动为区配条目切换队列" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "用匹配的条目创建新的播放列表" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile 插件" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4736,14 +4759,27 @@ "要使用这个生成器,添加一个 URL:tone://frequency1;frequency2;frequency3;...\n" "实例 tone://2000;2005 以播放一个 2000 Hz 以及 2005 Hz 的音调" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(详细信息已隐藏。)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "工作中 ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "信息" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "%s 似乎不是有效的文件夹。" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "人声消除" @@ -4901,14 +4937,38 @@ "\n" "一部分插件代码由 Miles Egan 编写。" -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF 解码器" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "32728 赫兹" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "65456 赫兹" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "余弦" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "尖波" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF 设置" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "默认淡出时间:" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "插值模式:" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "可分享的 XML 播放列表 (XSPF)" diff -Nru audacious-plugins-4.1/po/zh_TW.po audacious-plugins-4.2/po/zh_TW.po --- audacious-plugins-4.1/po/zh_TW.po 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/po/zh_TW.po 2022-07-10 01:12:34.000000000 +0000 @@ -3,7 +3,7 @@ # This file is distributed under the same license as the Audacious Plugins package. # # Translators: -# byStarTW (pan93412) , 2019 +# pan93412 , 2019 # 盧瑞元 , 2014 # Ruei-Yuan Lu , 2011 # 盧瑞元 , 2020 @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: Audacious Plugins\n" "Report-Msgid-Bugs-To: https://redmine.audacious-media-player.org/\n" -"POT-Creation-Date: 2021-02-01 19:27+0100\n" -"PO-Revision-Date: 2020-12-20 23:15+0000\n" -"Last-Translator: Thomas Lange\n" +"POT-Creation-Date: 2022-07-09 23:25+0200\n" +"PO-Revision-Date: 2011-10-10 17:43+0000\n" +"Last-Translator: 盧瑞元 , 2020\n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/audacious/" "audacious/language/zh_TW/)\n" "Language: zh_TW\n" @@ -32,7 +32,7 @@ msgstr "AdPlug (AdLib 播放器)" #: src/adplug/adplug-xmms.cc:167 src/modplug/modplugbmp.cc:321 -#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:106 +#: src/psf/plugin.cc:161 src/vtx/vtx.cc:89 src/xsf/plugin.cc:204 msgid "sequenced" msgstr "編曲機" @@ -62,7 +62,7 @@ #: src/adplug/adplug-xmms.cc:355 src/gtkui/settings.cc:46 #: src/modplug/plugin_main.cc:105 src/qtui/settings.cc:81 -#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:280 +#: src/skins-qt/skins_cfg.cc:302 src/skins/skins_cfg.cc:280 msgid "Miscellaneous" msgstr "其他選項" @@ -469,6 +469,7 @@ #: src/amidiplug/i_configure.cc:153 src/console/plugin.cc:45 #: src/filewriter/filewriter.cc:481 src/sid/xs_config.cc:65 +#: src/xsf/plugin.cc:446 msgid "Sample rate:" msgstr "取樣率:" @@ -544,6 +545,7 @@ msgstr "* 這個 MIDI 檔不包含歌詞資料 *" #: src/amidiplug/i_fileinfo.cc:306 src/ladspa/plugin.cc:417 +#: src/ui-common/dialogs-qt.cc:32 msgid "_Close" msgstr "關閉(_C)" @@ -603,7 +605,7 @@ msgid "Concave Rectangle" msgstr "角落凹陷的矩形" -#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 +#: src/aosd/aosd_style.cc:69 src/openmpt/mptwrap.h:50 src/xsf/plugin.cc:436 msgid "None" msgstr "無" @@ -800,6 +802,22 @@ msgid "Audacious Playlists (audpl)" msgstr "Audacious 播放清單 (audpl)" +#: src/bitcrusher/bitcrusher.cc:33 +msgid "Bitcrusher" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:34 +msgid "Bit Depth:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:37 +msgid "Downsample ratio:" +msgstr "" + +#: src/bitcrusher/bitcrusher.cc:48 +msgid "Bitcrusher" +msgstr "" + #: src/blur_scope/blur_scope.cc:39 src/blur_scope-qt/blur_scope.cc:45 msgid "Color" msgstr "色彩" @@ -1187,7 +1205,7 @@ msgstr "刪除" #: src/delete-files/delete-files.cc:213 src/delete-files/delete-files.cc:234 -#: src/skins/search-select.cc:76 +#: src/skins-qt/search-select.cc:101 src/skins/search-select.cc:77 msgid "Cancel" msgstr "取消" @@ -1225,7 +1243,7 @@ msgstr "延遲:" #: src/echo_plugin/echo.cc:24 src/modplug/plugin_main.cc:72 -#: src/modplug/plugin_main.cc:82 +#: src/modplug/plugin_main.cc:82 src/xsf/plugin.cc:445 msgid "ms" msgstr "毫秒" @@ -1245,7 +1263,7 @@ msgid "FFmpeg Plugin" msgstr "FFmpeg 外掛" -#: src/ffaudio/ffaudio-core.cc:628 +#: src/ffaudio/ffaudio-core.cc:635 msgid "" "Multi-format audio decoding plugin for Audacious using\n" "FFmpeg multimedia framework (http://www.ffmpeg.org/)\n" @@ -1368,77 +1386,77 @@ msgid "32000 Hz" msgstr "32000 Hz" -#: src/filewriter/filewriter.cc:425 +#: src/filewriter/filewriter.cc:425 src/xsf/plugin.cc:430 msgid "44100 Hz" msgstr "44100 Hz" -#: src/filewriter/filewriter.cc:426 +#: src/filewriter/filewriter.cc:426 src/xsf/plugin.cc:431 msgid "48000 Hz" msgstr "48000 Hz" #: src/filewriter/filewriter.cc:430 -msgid "8 kbps" -msgstr "8 kbps" +msgid "8 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:431 -msgid "16 kbps" -msgstr "16 kbps" +msgid "16 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:432 -msgid "32 kbps" -msgstr "32 kbps" +msgid "32 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:433 -msgid "40 kbps" -msgstr "40 kbps" +msgid "40 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:434 -msgid "48 kbps" -msgstr "48 kbps" +msgid "48 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:435 -msgid "56 kbps" -msgstr "56 kbps" +msgid "56 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:436 -msgid "64 kbps" -msgstr "64 kbps" +msgid "64 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:437 -msgid "80 kbps" -msgstr "80 kbps" +msgid "80 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:438 -msgid "96 kbps" -msgstr "96 kbps" +msgid "96 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:439 -msgid "112 kbps" -msgstr "112 kbps" +msgid "112 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:440 -msgid "128 kbps" -msgstr "128 kbps" +msgid "128 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:441 -msgid "160 kbps" -msgstr "160 kbps" +msgid "160 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:442 -msgid "192 kbps" -msgstr "192 kbps" +msgid "192 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:443 -msgid "224 kbps" -msgstr "224 kbps" +msgid "224 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:444 -msgid "256 kbps" -msgstr "256 kbps" +msgid "256 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:445 -msgid "320 kbps" -msgstr "320 kbps" +msgid "320 kbit/s" +msgstr "" #: src/filewriter/filewriter.cc:450 msgid "Joint Stereo" @@ -1562,7 +1580,7 @@ msgid "Quality (0-1):" msgstr "品質 (0-1):" -#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:303 +#: src/filewriter/filewriter.cc:573 src/skins-qt/skins_cfg.cc:307 #: src/skins/skins_cfg.cc:285 msgid "General" msgstr "一般" @@ -1571,11 +1589,11 @@ msgid "FLAC Decoder" msgstr "FLAC 解碼器" -#: src/flac/metadata.cc:274 src/wavpack/wavpack.cc:215 +#: src/flac/metadata.cc:280 src/wavpack/wavpack.cc:215 msgid "lossless" msgstr "無損" -#: src/flac/plugin.cc:169 +#: src/flac/plugin.cc:180 msgid "" "Original code by\n" "Ralf Ertzinger \n" @@ -2234,8 +2252,8 @@ #: src/gtkui/ui_statusbar.cc:81 src/qtui/status_bar.cc:174 #, c-format -msgid "%d kbps" -msgstr "%d kbps" +msgid "%d kbit/s" +msgstr "" #: src/gtkui/ui_statusbar.cc:107 src/skins/main.cc:471 src/skins-qt/main.cc:455 msgid "Single mode." @@ -2614,7 +2632,7 @@ msgid "Looking for lyrics ..." msgstr "尋找歌詞中 ..." -#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:38 +#: src/lyricwiki-qt/lyricwiki.cc:427 src/ui-common/dialogs-qt.cc:62 msgid "Error" msgstr "錯誤" @@ -2970,7 +2988,7 @@ msgid "Interpolation:" msgstr "內插:" -#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 +#: src/openmpt/mptwrap.h:51 src/soxr/sox-resampler.cc:189 src/xsf/plugin.cc:437 msgid "Linear" msgstr "線形" @@ -3055,7 +3073,7 @@ msgid "OpenPSF Configuration" msgstr "OpenPSF 組態" -#: src/psf/plugin.cc:271 src/xsf/plugin.cc:233 +#: src/psf/plugin.cc:271 src/xsf/plugin.cc:444 msgid "Ignore length from file" msgstr "忽略來自檔案的長度資訊" @@ -3711,7 +3729,7 @@ #: src/skins/menus.cc:93 src/skins/menus.cc:161 src/skins/menus.cc:174 #: src/skins/menus.cc:243 src/skins-qt/menus.cc:84 src/skins-qt/menus.cc:156 -#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:237 +#: src/skins-qt/menus.cc:170 src/skins-qt/menus.cc:239 msgid "Services" msgstr "服務" @@ -3728,7 +3746,7 @@ msgstr "離開" #: src/skins/menus.cc:101 src/skins/menus.cc:233 src/skins-qt/menus.cc:92 -#: src/skins-qt/menus.cc:227 +#: src/skins-qt/menus.cc:229 msgid "Song Info ..." msgstr "歌曲資訊 ..." @@ -3748,7 +3766,7 @@ msgid "Clear A-B Repeat" msgstr "清除 A-B 循環" -#: src/skins/menus.cc:120 src/skins-qt/menus.cc:112 +#: src/skins/menus.cc:120 src/skins-qt/menus.cc:111 msgid "Jump to Song ..." msgstr "跳轉到指定歌曲 ..." @@ -3841,20 +3859,20 @@ msgstr "加入檔案 ... " #: src/skins/menus.cc:168 src/skins/menus.cc:196 src/skins/menus.cc:211 -#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:190 -#: src/skins-qt/menus.cc:205 +#: src/skins-qt/menus.cc:164 src/skins-qt/menus.cc:192 +#: src/skins-qt/menus.cc:207 msgid "By Title" msgstr "標題" #: src/skins/menus.cc:169 src/skins/menus.cc:203 src/skins/menus.cc:218 -#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:197 -#: src/skins-qt/menus.cc:212 +#: src/skins-qt/menus.cc:165 src/skins-qt/menus.cc:199 +#: src/skins-qt/menus.cc:214 msgid "By File Name" msgstr "檔案名稱" #: src/skins/menus.cc:170 src/skins/menus.cc:204 src/skins/menus.cc:219 -#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:198 -#: src/skins-qt/menus.cc:213 +#: src/skins-qt/menus.cc:166 src/skins-qt/menus.cc:200 +#: src/skins-qt/menus.cc:215 msgid "By File Path" msgstr "檔案路徑" @@ -3882,104 +3900,104 @@ msgid "Remove Selected" msgstr "移除選擇的項目" -#: src/skins/menus.cc:187 +#: src/skins/menus.cc:187 src/skins-qt/menus.cc:183 msgid "Search and Select" msgstr "搜尋並選擇" -#: src/skins/menus.cc:189 src/skins-qt/menus.cc:183 +#: src/skins/menus.cc:189 src/skins-qt/menus.cc:185 msgid "Invert Selection" msgstr "反向選擇" -#: src/skins/menus.cc:190 src/skins-qt/menus.cc:184 +#: src/skins/menus.cc:190 src/skins-qt/menus.cc:186 msgid "Select None" msgstr "取消選擇" -#: src/skins/menus.cc:191 src/skins-qt/menus.cc:185 +#: src/skins/menus.cc:191 src/skins-qt/menus.cc:187 msgid "Select All" msgstr "選擇全部" -#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:189 -#: src/skins-qt/menus.cc:204 +#: src/skins/menus.cc:195 src/skins/menus.cc:210 src/skins-qt/menus.cc:191 +#: src/skins-qt/menus.cc:206 msgid "By Track Number" msgstr "音軌編號" -#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:191 -#: src/skins-qt/menus.cc:206 +#: src/skins/menus.cc:197 src/skins/menus.cc:212 src/skins-qt/menus.cc:193 +#: src/skins-qt/menus.cc:208 msgid "By Artist" msgstr "藝人" -#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:192 -#: src/skins-qt/menus.cc:207 +#: src/skins/menus.cc:198 src/skins/menus.cc:213 src/skins-qt/menus.cc:194 +#: src/skins-qt/menus.cc:209 msgid "By Album" msgstr "專輯" -#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:193 -#: src/skins-qt/menus.cc:208 +#: src/skins/menus.cc:199 src/skins/menus.cc:214 src/skins-qt/menus.cc:195 +#: src/skins-qt/menus.cc:210 msgid "By Album Artist" msgstr "專輯藝人" -#: src/skins/menus.cc:200 src/skins/menus.cc:216 src/skins-qt/menus.cc:194 -#: src/skins-qt/menus.cc:210 +#: src/skins/menus.cc:200 src/skins/menus.cc:215 src/skins-qt/menus.cc:196 +#: src/skins-qt/menus.cc:211 msgid "By Release Date" msgstr "發行日期" -#: src/skins/menus.cc:201 src/skins/menus.cc:215 src/skins-qt/menus.cc:195 -#: src/skins-qt/menus.cc:209 +#: src/skins/menus.cc:201 src/skins/menus.cc:216 src/skins-qt/menus.cc:197 +#: src/skins-qt/menus.cc:212 msgid "By Genre" msgstr "類型" -#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:196 -#: src/skins-qt/menus.cc:211 +#: src/skins/menus.cc:202 src/skins/menus.cc:217 src/skins-qt/menus.cc:198 +#: src/skins-qt/menus.cc:213 msgid "By Length" msgstr "長度" -#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:199 -#: src/skins-qt/menus.cc:214 +#: src/skins/menus.cc:205 src/skins/menus.cc:220 src/skins-qt/menus.cc:201 +#: src/skins-qt/menus.cc:216 msgid "By Custom Title" msgstr "自訂標題" -#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:200 -#: src/skins-qt/menus.cc:215 +#: src/skins/menus.cc:206 src/skins/menus.cc:221 src/skins-qt/menus.cc:202 +#: src/skins-qt/menus.cc:217 msgid "By Comment" msgstr "備註" -#: src/skins/menus.cc:225 src/skins-qt/menus.cc:219 +#: src/skins/menus.cc:225 src/skins-qt/menus.cc:221 msgid "Randomize List" msgstr "清單隨機排序" -#: src/skins/menus.cc:226 src/skins-qt/menus.cc:220 +#: src/skins/menus.cc:226 src/skins-qt/menus.cc:222 msgid "Reverse List" msgstr "清單反向排序" -#: src/skins/menus.cc:228 src/skins-qt/menus.cc:222 +#: src/skins/menus.cc:228 src/skins-qt/menus.cc:224 msgid "Sort Selected" msgstr "排序選擇的項目" -#: src/skins/menus.cc:229 src/skins-qt/menus.cc:223 +#: src/skins/menus.cc:229 src/skins-qt/menus.cc:225 msgid "Sort List" msgstr "排序清單" -#: src/skins/menus.cc:234 src/skins-qt/menus.cc:228 +#: src/skins/menus.cc:234 src/skins-qt/menus.cc:230 msgid "Open Containing Folder" msgstr "開啟所在的資料夾" -#: src/skins/menus.cc:236 src/skins-qt/menus.cc:230 +#: src/skins/menus.cc:236 src/skins-qt/menus.cc:232 msgid "Cut" msgstr "剪下" -#: src/skins/menus.cc:237 src/skins-qt/menus.cc:231 +#: src/skins/menus.cc:237 src/skins-qt/menus.cc:233 msgid "Copy" msgstr "複製" -#: src/skins/menus.cc:238 src/skins-qt/menus.cc:232 +#: src/skins/menus.cc:238 src/skins-qt/menus.cc:234 msgid "Paste" msgstr "貼上" -#: src/skins/menus.cc:239 src/skins-qt/menus.cc:233 +#: src/skins/menus.cc:239 src/skins-qt/menus.cc:235 msgid "Paste at End" msgstr "貼到最後" -#: src/skins/menus.cc:241 src/skins-qt/menus.cc:235 +#: src/skins/menus.cc:241 src/skins-qt/menus.cc:237 msgid "Queue/Unqueue" msgstr "排入/移出佇列" @@ -3988,7 +4006,7 @@ msgid "%s (%d of %d)" msgstr "%s (%d/%d)" -#: src/skins/playlistwin.cc:492 src/skins-qt/playlistwin.cc:477 +#: src/skins/playlistwin.cc:491 src/skins-qt/playlistwin.cc:476 msgid "Audacious Playlist Editor" msgstr "Audacious 播放清單編輯器" @@ -4004,167 +4022,217 @@ msgid "Add Folder ..." msgstr "加入資料夾 ..." -#: src/skins-qt/skins_cfg.cc:196 src/skins/skins_cfg.cc:180 +#: src/skins-qt/search-select.cc:62 src/skins/search-select.cc:76 +msgid "Search entries in active playlist" +msgstr "在使用中的播放清單裡搜尋播放項目" + +#: src/skins-qt/search-select.cc:69 src/skins/search-select.cc:82 +msgid "" +"Select entries in playlist by filling one or more fields. Fields use regular " +"expressions syntax, case-insensitive. If you don't know how regular " +"expressions work, simply insert a literal portion of what you're searching " +"for." +msgstr "" +"填入一個或多個欄位以選擇播放清單中的項目。欄位使用正規表示法,大小寫視為不同" +"字元。若您不知道如何使用正規表示法,請輸入您想搜尋的部分文字。" + +#: src/skins-qt/search-select.cc:74 src/skins/search-select.cc:90 +msgid "Title:" +msgstr "標題:" + +#: src/skins-qt/search-select.cc:78 src/skins/search-select.cc:96 +msgid "Album:" +msgstr "專輯:" + +#: src/skins-qt/search-select.cc:81 src/skins/search-select.cc:102 +msgid "Artist:" +msgstr "藝人:" + +#: src/skins-qt/search-select.cc:84 src/skins/search-select.cc:108 +msgid "File Name:" +msgstr "檔名:" + +#: src/skins-qt/search-select.cc:87 src/skins/search-select.cc:116 +msgid "Clear previous selection before searching" +msgstr "進行搜尋前清空上次的選擇項目" + +#: src/skins-qt/search-select.cc:88 src/skins/search-select.cc:119 +msgid "Automatically toggle queue for matching entries" +msgstr "自動切換到符合項目的佇列" + +#: src/skins-qt/search-select.cc:89 src/skins/search-select.cc:122 +msgid "Create a new playlist with matching entries" +msgstr "以符合的項目建立新的播放清單" + +#: src/skins-qt/search-select.cc:100 src/skins/search-select.cc:77 +msgid "Search" +msgstr "搜尋" + +#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:180 msgid "Player:" msgstr "播放器:" -#: src/skins-qt/skins_cfg.cc:198 src/skins/skins_cfg.cc:182 +#: src/skins-qt/skins_cfg.cc:200 src/skins/skins_cfg.cc:182 msgid "Select main player window font:" msgstr "選擇播放器主視窗字型:" -#: src/skins-qt/skins_cfg.cc:199 src/skins/skins_cfg.cc:183 +#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:183 msgid "Playlist:" msgstr "播放清單:" -#: src/skins-qt/skins_cfg.cc:201 src/skins/skins_cfg.cc:185 +#: src/skins-qt/skins_cfg.cc:203 src/skins/skins_cfg.cc:185 msgid "Select playlist font:" msgstr "選擇播放清單字型:" -#: src/skins-qt/skins_cfg.cc:205 src/skins/skins_cfg.cc:189 +#: src/skins-qt/skins_cfg.cc:207 src/skins/skins_cfg.cc:189 msgid "Skin" msgstr "面板" -#: src/skins-qt/skins_cfg.cc:209 src/skins/skins_cfg.cc:191 +#: src/skins-qt/skins_cfg.cc:211 +msgid "Display active titlebar when any window is focused" +msgstr "" + +#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:191 msgid "Fonts" msgstr "字型" -#: src/skins-qt/skins_cfg.cc:211 src/skins/skins_cfg.cc:193 +#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:193 msgid "Use bitmap fonts (supports ASCII only)" msgstr "使用點陣字型 (只支援 ASCII)" -#: src/skins-qt/skins_cfg.cc:213 src/skins/skins_cfg.cc:195 +#: src/skins-qt/skins_cfg.cc:217 src/skins/skins_cfg.cc:195 msgid "Scroll song title" msgstr "捲動歌曲標題" -#: src/skins-qt/skins_cfg.cc:215 src/skins/skins_cfg.cc:197 +#: src/skins-qt/skins_cfg.cc:219 src/skins/skins_cfg.cc:197 msgid "Scroll song title in both directions" msgstr "雙向捲動歌曲標題" -#: src/skins-qt/skins_cfg.cc:220 src/skins/skins_cfg.cc:202 +#: src/skins-qt/skins_cfg.cc:224 src/skins/skins_cfg.cc:202 msgid "Analyzer" msgstr "分析儀" -#: src/skins-qt/skins_cfg.cc:221 src/skins/skins_cfg.cc:203 +#: src/skins-qt/skins_cfg.cc:225 src/skins/skins_cfg.cc:203 msgid "Scope" msgstr "示波器" -#: src/skins-qt/skins_cfg.cc:222 src/skins/skins_cfg.cc:204 +#: src/skins-qt/skins_cfg.cc:226 src/skins/skins_cfg.cc:204 msgid "Voiceprint / VU meter" msgstr "聲紋/VU 計" -#: src/skins-qt/skins_cfg.cc:223 src/skins/skins_cfg.cc:205 +#: src/skins-qt/skins_cfg.cc:227 src/skins/skins_cfg.cc:205 msgid "Off" msgstr "關閉" -#: src/skins-qt/skins_cfg.cc:227 src/skins-qt/skins_cfg.cc:252 -#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:209 +#: src/skins-qt/skins_cfg.cc:231 src/skins-qt/skins_cfg.cc:256 +#: src/skins-qt/skins_cfg.cc:262 src/skins/skins_cfg.cc:209 #: src/skins/skins_cfg.cc:234 src/skins/skins_cfg.cc:240 msgid "Normal" msgstr "標準" -#: src/skins-qt/skins_cfg.cc:228 src/skins-qt/skins_cfg.cc:253 +#: src/skins-qt/skins_cfg.cc:232 src/skins-qt/skins_cfg.cc:257 #: src/skins/skins_cfg.cc:210 src/skins/skins_cfg.cc:235 msgid "Fire" msgstr "火焰" -#: src/skins-qt/skins_cfg.cc:229 src/skins/skins_cfg.cc:211 +#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:211 msgid "Vertical lines" msgstr "垂直線條" -#: src/skins-qt/skins_cfg.cc:233 src/skins/skins_cfg.cc:215 +#: src/skins-qt/skins_cfg.cc:237 src/skins/skins_cfg.cc:215 msgid "Lines" msgstr "線條" -#: src/skins-qt/skins_cfg.cc:234 src/skins/skins_cfg.cc:216 +#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:216 msgid "Bars" msgstr "棒狀" -#: src/skins-qt/skins_cfg.cc:238 src/skins/skins_cfg.cc:220 +#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:220 msgid "Slowest" msgstr "最慢" -#: src/skins-qt/skins_cfg.cc:239 src/skins/skins_cfg.cc:221 +#: src/skins-qt/skins_cfg.cc:243 src/skins/skins_cfg.cc:221 msgid "Slow" msgstr "慢" -#: src/skins-qt/skins_cfg.cc:240 src/skins/skins_cfg.cc:222 +#: src/skins-qt/skins_cfg.cc:244 src/skins/skins_cfg.cc:222 #: src/soxr/sox-resampler.cc:180 msgid "Medium" msgstr "中等" -#: src/skins-qt/skins_cfg.cc:241 src/skins/skins_cfg.cc:223 +#: src/skins-qt/skins_cfg.cc:245 src/skins/skins_cfg.cc:223 msgid "Fast" msgstr "快" -#: src/skins-qt/skins_cfg.cc:242 src/skins/skins_cfg.cc:224 +#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:224 msgid "Fastest" msgstr "最快" -#: src/skins-qt/skins_cfg.cc:246 src/skins/skins_cfg.cc:228 +#: src/skins-qt/skins_cfg.cc:250 src/skins/skins_cfg.cc:228 msgid "Dots" msgstr "點狀" -#: src/skins-qt/skins_cfg.cc:247 src/skins/skins_cfg.cc:229 +#: src/skins-qt/skins_cfg.cc:251 src/skins/skins_cfg.cc:229 msgid "Line" msgstr "線條" -#: src/skins-qt/skins_cfg.cc:248 src/skins/skins_cfg.cc:230 +#: src/skins-qt/skins_cfg.cc:252 src/skins/skins_cfg.cc:230 msgid "Solid" msgstr "實心" -#: src/skins-qt/skins_cfg.cc:254 src/skins/skins_cfg.cc:236 +#: src/skins-qt/skins_cfg.cc:258 src/skins/skins_cfg.cc:236 msgid "Ice" msgstr "冰霜" -#: src/skins-qt/skins_cfg.cc:259 src/skins/skins_cfg.cc:241 +#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:241 msgid "Smooth" msgstr "平滑" -#: src/skins-qt/skins_cfg.cc:263 src/skins/skins_cfg.cc:245 +#: src/skins-qt/skins_cfg.cc:267 src/skins/skins_cfg.cc:245 msgid "Coloring:" msgstr "顏色:" -#: src/skins-qt/skins_cfg.cc:266 src/skins/skins_cfg.cc:248 +#: src/skins-qt/skins_cfg.cc:270 src/skins/skins_cfg.cc:248 msgid "Style:" msgstr "樣式:" -#: src/skins-qt/skins_cfg.cc:269 src/skins/skins_cfg.cc:251 +#: src/skins-qt/skins_cfg.cc:273 src/skins/skins_cfg.cc:251 msgid "Falloff:" msgstr "陷落:" -#: src/skins-qt/skins_cfg.cc:272 src/skins/skins_cfg.cc:254 +#: src/skins-qt/skins_cfg.cc:276 src/skins/skins_cfg.cc:254 msgid "Peak falloff:" msgstr "峰值陷落:" -#: src/skins-qt/skins_cfg.cc:278 src/skins/skins_cfg.cc:260 +#: src/skins-qt/skins_cfg.cc:282 src/skins/skins_cfg.cc:260 msgid "Scope Style:" msgstr "示波器樣式:" -#: src/skins-qt/skins_cfg.cc:281 src/skins/skins_cfg.cc:263 +#: src/skins-qt/skins_cfg.cc:285 src/skins/skins_cfg.cc:263 msgid "Voiceprint Coloring:" msgstr "聲紋顏色:" -#: src/skins-qt/skins_cfg.cc:284 src/skins/skins_cfg.cc:266 +#: src/skins-qt/skins_cfg.cc:288 src/skins/skins_cfg.cc:266 msgid "VU Meter Style:" msgstr "VU 計樣式:" -#: src/skins-qt/skins_cfg.cc:290 src/skins/skins_cfg.cc:272 +#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:272 msgid "Type" msgstr "類型" -#: src/skins-qt/skins_cfg.cc:291 src/skins/skins_cfg.cc:273 +#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:273 msgid "Visualization type:" msgstr "視覺特效類型:" -#: src/skins-qt/skins_cfg.cc:294 src/skins/skins_cfg.cc:276 +#: src/skins-qt/skins_cfg.cc:298 src/skins/skins_cfg.cc:276 msgid "Analyzer" msgstr "分析儀" -#: src/skins-qt/skins_cfg.cc:295 src/skins/skins_cfg.cc:277 +#: src/skins-qt/skins_cfg.cc:299 src/skins/skins_cfg.cc:277 msgid "Show peaks" msgstr "顯示峰值標記" -#: src/skins-qt/skins_cfg.cc:304 src/skins/skins_cfg.cc:286 +#: src/skins-qt/skins_cfg.cc:308 src/skins/skins_cfg.cc:286 msgid "Visualization" msgstr "視覺特效" @@ -4176,57 +4244,11 @@ msgid "Unarchived Winamp 2.x skin" msgstr "未壓縮的 Winamp 2.x skin" -#: src/skins/search-select.cc:75 -msgid "Search entries in active playlist" -msgstr "在使用中的播放清單裡搜尋播放項目" - -#: src/skins/search-select.cc:76 -msgid "Search" -msgstr "搜尋" - -#: src/skins/search-select.cc:81 -msgid "" -"Select entries in playlist by filling one or more fields. Fields use regular " -"expressions syntax, case-insensitive. If you don't know how regular " -"expressions work, simply insert a literal portion of what you're searching " -"for." -msgstr "" -"填入一個或多個欄位以選擇播放清單中的項目。欄位使用正規表示法,大小寫視為不同" -"字元。若您不知道如何使用正規表示法,請輸入您想搜尋的部分文字。" - -#: src/skins/search-select.cc:89 -msgid "Title:" -msgstr "標題:" - -#: src/skins/search-select.cc:95 -msgid "Album:" -msgstr "專輯:" - -#: src/skins/search-select.cc:101 -msgid "Artist:" -msgstr "藝人:" - -#: src/skins/search-select.cc:107 -msgid "File Name:" -msgstr "檔名:" - -#: src/skins/search-select.cc:115 -msgid "Clear previous selection before searching" -msgstr "進行搜尋前清空上次的選擇項目" - -#: src/skins/search-select.cc:118 -msgid "Automatically toggle queue for matching entries" -msgstr "自動切換到符合項目的佇列" - -#: src/skins/search-select.cc:121 -msgid "Create a new playlist with matching entries" -msgstr "以符合的項目建立新的播放清單" - #: src/sndfile/plugin.cc:38 msgid "Sndfile Plugin" msgstr "Sndfile 外掛" -#: src/sndfile/plugin.cc:363 +#: src/sndfile/plugin.cc:372 msgid "" "Based on the xmms_sndfile plugin:\n" "Copyright (C) 2000, 2002 Erik de Castro Lopo\n" @@ -4702,14 +4724,27 @@ "用法:加入網址:tone://frequency1;frequency2;frequency3;...\n" "範例:tone://2000;2005 會播放 2000 HZ 和 2005HZ 的正弦波" -#: src/ui-common/dialogs-qt.cc:31 +#: src/ui-common/dialogs-qt.cc:40 +msgid "" +"\n" +"(Further messages have been hidden.)" +msgstr "" +"\n" +"(詳細訊息已被隱藏。)" + +#: src/ui-common/dialogs-qt.cc:52 msgid "Working ..." msgstr "處理中 ..." -#: src/ui-common/dialogs-qt.cc:43 +#: src/ui-common/dialogs-qt.cc:72 msgid "Information" msgstr "資訊" +#: src/ui-common/menu-ops-gtk.cc:132 src/ui-common/menu-ops-qt.cc:113 +#, c-format +msgid "%s does not appear to be a valid folder." +msgstr "" + #: src/voice_removal/voice_removal.cc:28 msgid "Voice Removal" msgstr "人聲移除" @@ -4865,14 +4900,38 @@ "\n" "Some of the plugin code was by Miles Egan." -#: src/xsf/plugin.cc:50 +#: src/xsf/plugin.cc:74 msgid "2SF Decoder" msgstr "2SF 解碼器" -#: src/xsf/plugin.cc:232 +#: src/xsf/plugin.cc:429 +msgid "32728 Hz" +msgstr "" + +#: src/xsf/plugin.cc:432 +msgid "65456 Hz" +msgstr "" + +#: src/xsf/plugin.cc:438 +msgid "Cosine" +msgstr "" + +#: src/xsf/plugin.cc:439 +msgid "Sharp" +msgstr "" + +#: src/xsf/plugin.cc:443 msgid "XSF Configuration" msgstr "XSF 組態" +#: src/xsf/plugin.cc:445 +msgid "Default fade time:" +msgstr "" + +#: src/xsf/plugin.cc:447 +msgid "Interpolation mode:" +msgstr "" + #: src/xspf/xspf.cc:95 msgid "XML Shareable Playlists (XSPF)" msgstr "XML 可分享式播放清單 (XSPF)" diff -Nru audacious-plugins-4.1/src/adplug/meson.build audacious-plugins-4.2/src/adplug/meson.build --- audacious-plugins-4.1/src/adplug/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/adplug/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -3,7 +3,7 @@ if have_adplug - adplug_inc = '-I' + adplug_dep.get_pkgconfig_variable('includedir') + adplug_inc = '-I' + adplug_dep.get_variable(pkgconfig: 'includedir') if cxx.has_header('adplug/nemuopl.h', args: adplug_inc) conf.set10('HAVE_ADPLUG_NEMUOPL_H', true) endif diff -Nru audacious-plugins-4.1/src/amidiplug/backend-fluidsynth/b-fluidsynth.cc audacious-plugins-4.2/src/amidiplug/backend-fluidsynth/b-fluidsynth.cc --- audacious-plugins-4.1/src/amidiplug/backend-fluidsynth/b-fluidsynth.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/amidiplug/backend-fluidsynth/b-fluidsynth.cc 2022-07-10 01:12:34.000000000 +0000 @@ -65,15 +65,11 @@ if (polyphony != -1) fluid_settings_setint (sc.settings, "synth.polyphony", polyphony); - if (reverb == 1) - fluid_settings_setstr (sc.settings, "synth.reverb.active", "yes"); - else if (reverb == 0) - fluid_settings_setstr (sc.settings, "synth.reverb.active", "no"); + if (reverb != -1) + fluid_settings_setint (sc.settings, "synth.reverb.active", reverb); - if (chorus == 1) - fluid_settings_setstr (sc.settings, "synth.chorus.active", "yes"); - else if (chorus == 0) - fluid_settings_setstr (sc.settings, "synth.chorus.active", "no"); + if (chorus != -1) + fluid_settings_setint (sc.settings, "synth.chorus.active", chorus); sc.synth = new_fluid_synth (sc.settings); diff -Nru audacious-plugins-4.1/src/amidiplug/i_configure-fluidsynth.cc audacious-plugins-4.2/src/amidiplug/i_configure-fluidsynth.cc --- audacious-plugins-4.1/src/amidiplug/i_configure-fluidsynth.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/amidiplug/i_configure-fluidsynth.cc 2022-07-10 01:12:34.000000000 +0000 @@ -512,10 +512,10 @@ m_button_sf_up (new QPushButton (m_bbox)), m_button_sf_down (new QPushButton (m_bbox)) { - m_button_sf_add->setIcon (audqt::get_icon ("list-add")); - m_button_sf_del->setIcon (audqt::get_icon ("list-remove")); - m_button_sf_up->setIcon (audqt::get_icon ("go-up")); - m_button_sf_down->setIcon (audqt::get_icon ("go-down")); + m_button_sf_add->setIcon (QIcon::fromTheme ("list-add")); + m_button_sf_del->setIcon (QIcon::fromTheme ("list-remove")); + m_button_sf_up->setIcon (QIcon::fromTheme ("go-up")); + m_button_sf_down->setIcon (QIcon::fromTheme ("go-down")); m_bbox_layout->addWidget (m_button_sf_add); m_bbox_layout->addWidget (m_button_sf_del); diff -Nru audacious-plugins-4.1/src/bitcrusher/bitcrusher.cc audacious-plugins-4.2/src/bitcrusher/bitcrusher.cc --- audacious-plugins-4.1/src/bitcrusher/bitcrusher.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/bitcrusher/bitcrusher.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2021 Ariadne Conill + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice is present in all copies. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include +#include +#include +#include + +static const char * const bitcrusher_defaults[] = { + "depth", "32", + "downsample", "1.0", + nullptr}; + +static const PreferencesWidget bitcrusher_widgets[] = { + WidgetLabel (N_("Bitcrusher")), + WidgetSpin (N_("Bit Depth:"), + WidgetFloat ("bitcrusher", "depth"), + {2, 32, 0.1}), + WidgetSpin (N_("Downsample ratio:"), + WidgetFloat ("bitcrusher", "downsample"), + {0.02, 1.0, 0.02}), +}; + +static const PluginPreferences bitcrusher_prefs = {{bitcrusher_widgets}}; + +class Bitcrusher : public EffectPlugin +{ +public: + static constexpr PluginInfo info = { + N_("Bitcrusher"), + PACKAGE, + nullptr, + & bitcrusher_prefs + }; + + constexpr Bitcrusher () : EffectPlugin (info, 0, true) {} + + bool init (); + void cleanup (); + + void start (int & channels, int & rate); + Index & process (Index & data); + bool flush (bool force); + +private: + float m_accumulator = 0.0; + int m_channels = 0; + Index m_hold; +}; + +EXPORT Bitcrusher aud_plugin_instance; + +bool +Bitcrusher::init () +{ + aud_config_set_defaults ("bitcrusher", bitcrusher_defaults); + return true; +} + +void +Bitcrusher::cleanup () +{ + m_hold.clear (); +} + +void +Bitcrusher::start (int & channels, int & rate) +{ + m_accumulator = 0.0f; + m_channels = channels; + + m_hold.resize (m_channels); + m_hold.erase (0, m_channels); +} + +Index & +Bitcrusher::process (Index & data) +{ + float downsample_ratio = aud_get_double ("bitcrusher", "downsample"); + float bit_depth = aud_get_double ("bitcrusher", "depth"); + + float scale = pow (2., bit_depth) / 2.; + float gain = (33. - bit_depth) / 8.; + + float * f = data.begin (); + float * end = data.end (); + + while (f < end) + { + m_accumulator += downsample_ratio; + + for (int channel = 0; channel < m_channels; channel ++) + { + float current = * f; + + if (m_accumulator >= 1.0) + m_hold [channel] = floorf ((current * gain) * scale + 0.5) / scale / gain; + + * f ++ = m_hold [channel]; + } + + if (m_accumulator >= 1.0) + m_accumulator -= 1.0; + } + + return data; +} + +bool +Bitcrusher::flush (bool force) +{ + m_hold.erase (0, m_channels); + return true; +} diff -Nru audacious-plugins-4.1/src/bitcrusher/Makefile audacious-plugins-4.2/src/bitcrusher/Makefile --- audacious-plugins-4.1/src/bitcrusher/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/bitcrusher/Makefile 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,12 @@ +PLUGIN = bitcrusher${PLUGIN_SUFFIX} + +SRCS = bitcrusher.cc + +include ../../buildsys.mk +include ../../extra.mk + +plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR} + +LD = ${CXX} +CFLAGS += ${PLUGIN_CFLAGS} +CPPFLAGS += ${PLUGIN_CPPFLAGS} -I../.. diff -Nru audacious-plugins-4.1/src/bitcrusher/meson.build audacious-plugins-4.2/src/bitcrusher/meson.build --- audacious-plugins-4.1/src/bitcrusher/meson.build 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/bitcrusher/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,7 @@ +shared_module('bitcrusher', + 'bitcrusher.cc', + dependencies: [audacious_dep], + name_prefix: '', + install: true, + install_dir: effect_plugin_dir +) diff -Nru audacious-plugins-4.1/src/console/Spc_Cpu.cc audacious-plugins-4.2/src/console/Spc_Cpu.cc --- audacious-plugins-4.1/src/console/Spc_Cpu.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/console/Spc_Cpu.cc 2022-07-10 01:12:34.000000000 +0000 @@ -493,11 +493,15 @@ { result = cpu_read_smp_reg( reg + r_t0out, time ); } - else // 1% + else if ( reg + (r_t0out + 0xF0 - 0x10000) < 0x100 ) // 1% { - assert( reg + (r_t0out + 0xF0 - 0x10000) < 0x100 ); result = cpu_read( reg + (r_t0out + 0xF0 - 0x10000), time ); } + else + { + // this branch would cause an assertion failure in the + // original. not really sure what to do here ... + } } } diff -Nru audacious-plugins-4.1/src/delete-files/delete-files.cc audacious-plugins-4.2/src/delete-files/delete-files.cc --- audacious-plugins-4.1/src/delete-files/delete-files.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/delete-files/delete-files.cc 2022-07-10 01:12:34.000000000 +0000 @@ -233,8 +233,8 @@ auto remove = new QPushButton (action, qdialog); auto cancel = new QPushButton (_("Cancel"), qdialog); - remove->setIcon (audqt::get_icon (icon)); - cancel->setIcon (audqt::get_icon ("process-stop")); + remove->setIcon (QIcon::fromTheme (icon)); + cancel->setIcon (QIcon::fromTheme ("process-stop")); qdialog->addButton (remove, QMessageBox::AcceptRole); qdialog->addButton (cancel, QMessageBox::RejectRole); diff -Nru audacious-plugins-4.1/src/ffaudio/ffaudio-core.cc audacious-plugins-4.2/src/ffaudio/ffaudio-core.cc --- audacious-plugins-4.1/src/ffaudio/ffaudio-core.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ffaudio/ffaudio-core.cc 2022-07-10 01:12:34.000000000 +0000 @@ -31,11 +31,11 @@ #include #include -#if CHECK_LIBAVFORMAT_VERSION (57, 33, 100, 57, 5, 0) +#if CHECK_LIBAVFORMAT_VERSION (57, 33, 100) #define ALLOC_CONTEXT 1 #endif -#if CHECK_LIBAVCODEC_VERSION (57, 37, 100, 57, 16, 0) +#if CHECK_LIBAVCODEC_VERSION (57, 37, 100) #define SEND_PACKET 1 #endif @@ -97,42 +97,54 @@ #endif }; -struct ScopedPacket : public AVPacket +struct ScopedPacket { - ScopedPacket () : AVPacket () - { av_init_packet (this); } + AVPacket * ptr; + AVPacket * operator-> () { return ptr; } -#if CHECK_LIBAVCODEC_VERSION (55, 25, 100, 55, 16, 0) - ~ScopedPacket () { av_packet_unref (this); } +#if CHECK_LIBAVCODEC_VERSION(57, 12, 100) + ScopedPacket () { ptr = av_packet_alloc (); } + ~ScopedPacket () { av_packet_free (& ptr); } + + void clear () + { + av_packet_free (& ptr); + ptr = av_packet_alloc (); + } #else - ~ScopedPacket () { av_free_packet (this); } + ScopedPacket () + { + ptr = new AVPacket (); + av_init_packet (ptr); + } + + ~ScopedPacket () + { + av_packet_unref (ptr); + delete ptr; + } + + void clear () + { + av_packet_unref (ptr); + * ptr = AVPacket (); + av_init_packet (ptr); + } #endif }; struct ScopedFrame { -#if CHECK_LIBAVCODEC_VERSION (55, 45, 101, 55, 28, 1) AVFrame * ptr = av_frame_alloc (); -#else - AVFrame * ptr = avcodec_alloc_frame (); -#endif - AVFrame * operator-> () { return ptr; } - -#if CHECK_LIBAVCODEC_VERSION (55, 45, 101, 55, 28, 1) ~ScopedFrame () { av_frame_free (& ptr); } -#elif CHECK_LIBAVCODEC_VERSION (54, 59, 100, 54, 28, 0) - ~ScopedFrame () { avcodec_free_frame (& ptr); } -#else - ~ScopedFrame () { av_free (ptr); } -#endif }; static SimpleHash extension_dict; static void create_extension_dict (); -#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100, 255, 255, 255) +#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100) static int lockmgr (void * * mutexp, enum AVLockOp op) { switch (op) @@ -191,10 +203,10 @@ bool FFaudio::init () { -#if ! CHECK_LIBAVFORMAT_VERSION(58, 9, 100, 255, 255, 255) +#if ! CHECK_LIBAVFORMAT_VERSION(58, 9, 100) av_register_all(); #endif -#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100, 255, 255, 255) +#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100) av_lockmgr_register (lockmgr); #endif @@ -209,7 +221,7 @@ { extension_dict.clear (); -#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100, 255, 255, 255) +#if ! CHECK_LIBAVCODEC_VERSION(58, 9, 100) av_lockmgr_register (nullptr); #endif } @@ -233,7 +245,7 @@ static void create_extension_dict () { AVInputFormat * f; -#if CHECK_LIBAVFORMAT_VERSION(58, 9, 100, 255, 255, 255) +#if CHECK_LIBAVFORMAT_VERSION(58, 9, 100) void * iter = nullptr; while ((f = const_cast (av_demuxer_iterate (& iter)))) #else @@ -288,7 +300,7 @@ AVProbeData d = {name, buf, filled}; score = target; - f = av_probe_input_format2 (& d, true, & score); + f = (AVInputFormat *) av_probe_input_format2 (& d, true, & score); if (f) break; @@ -361,7 +373,7 @@ #endif if (stream && stream->codecpar && stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { - AVCodec * codec = avcodec_find_decoder (stream->codecpar->codec_id); + AVCodec * codec = (AVCodec *) avcodec_find_decoder (stream->codecpar->codec_id); if (codec) { @@ -446,7 +458,6 @@ if (! file.fseek (0, VFS_SEEK_SET)) audtag::read_tag (file, tuple, image); -#if CHECK_LIBAVFORMAT_VERSION (54, 2, 100, 54, 2, 0) if (image && ! image->len ()) { for (unsigned i = 0; i < ic->nb_streams; i ++) @@ -459,7 +470,6 @@ } } } -#endif return true; } @@ -543,12 +553,16 @@ /* Read next frame (or more) of data */ ScopedPacket pkt; - int ret = LOG (av_read_frame, ic.get (), & pkt); + int ret = LOG (av_read_frame, ic.get (), pkt.ptr); if (ret < 0) { if (ret == (int) AVERROR_EOF) + { + /* On EOF, send an empty packet to "flush" the decoder */ + pkt.clear (); eof = true; + } else if (++ errcount > 4) return false; else @@ -559,24 +573,17 @@ errcount = 0; /* Ignore any other substreams */ - if (pkt.stream_index != cinfo.stream_idx) + if (pkt->stream_index != cinfo.stream_idx) continue; } /* Decode and play packet/frame */ - /* On EOF, send an empty packet to "flush" the decoder */ - /* Otherwise, make a mutable (shallow) copy of the real packet */ - AVPacket tmp; - if (eof) { - tmp = AVPacket (); - av_init_packet (& tmp); - } - else - tmp = pkt; - #ifdef SEND_PACKET - if ((ret = LOG (avcodec_send_packet, context.ptr, & tmp)) < 0) + if ((ret = LOG (avcodec_send_packet, context.ptr, pkt.ptr)) < 0) return false; /* defensive, errors not expected here */ +#else + /* Make a mutable (shallow) copy of the real packet */ + AVPacket tmp = * pkt.ptr; #endif while (! check_stop ()) @@ -678,6 +685,9 @@ /* WebM */ "webm", + /* Matroska */ + "mka", "mkv", + /* end of table */ nullptr }; diff -Nru audacious-plugins-4.1/src/ffaudio/ffaudio-io.cc audacious-plugins-4.2/src/ffaudio/ffaudio-io.cc --- audacious-plugins-4.1/src/ffaudio/ffaudio-io.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ffaudio/ffaudio-io.cc 2022-07-10 01:12:34.000000000 +0000 @@ -23,7 +23,8 @@ static int read_cb (void * file, unsigned char * buf, int size) { - return ((VFSFile *) file)->fread (buf, 1, size); + int ret = ((VFSFile *) file)->fread (buf, 1, size); + return (ret > 0) ? ret : AVERROR_EOF; } static int64_t seek_cb (void * file, int64_t offset, int whence) diff -Nru audacious-plugins-4.1/src/ffaudio/ffaudio-stdinc.h audacious-plugins-4.2/src/ffaudio/ffaudio-stdinc.h --- audacious-plugins-4.1/src/ffaudio/ffaudio-stdinc.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ffaudio/ffaudio-stdinc.h 2022-07-10 01:12:34.000000000 +0000 @@ -28,19 +28,9 @@ #include } -/* FFmpeg and libav remain mostly compatible but have different version numbers. - * The first three numbers are the required FFmpeg version; the last three are for libav. */ -#ifdef HAVE_FFMPEG -#define CHECK_LIBAVCODEC_VERSION(a, b, c, a2, b2, c2) (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT (a, b, c)) -#define CHECK_LIBAVFORMAT_VERSION(a, b, c, a2, b2, c2) (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT (a, b, c)) -#define CHECK_LIBAVUTIL_VERSION(a, b, c, a2, b2, c2) (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT (a, b, c)) -#elif defined HAVE_LIBAV -#define CHECK_LIBAVCODEC_VERSION(a, b, c, a2, b2, c2) (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT (a2, b2, c2)) -#define CHECK_LIBAVFORMAT_VERSION(a, b, c, a2, b2, c2) (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT (a2, b2, c2)) -#define CHECK_LIBAVUTIL_VERSION(a, b, c, a2, b2, c2) (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT (a2, b2, c2)) -#else -#error Please define either HAVE_FFMPEG or HAVE_LIBAV -#endif +#define CHECK_LIBAVCODEC_VERSION(a, b, c) (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT (a, b, c)) +#define CHECK_LIBAVFORMAT_VERSION(a, b, c) (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT (a, b, c)) +#define CHECK_LIBAVUTIL_VERSION(a, b, c) (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT (a, b, c)) AVIOContext * io_context_new (VFSFile & file); void io_context_free (AVIOContext * context); diff -Nru audacious-plugins-4.1/src/ffaudio/meson.build audacious-plugins-4.2/src/ffaudio/meson.build --- audacious-plugins-4.1/src/ffaudio/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ffaudio/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,21 +1,6 @@ -if get_option('ffaudio') == 'ffmpeg' - conf.set10('HAVE_FFMPEG', true) - - libavcodec_req = '>= 53.40.0' - libavformat_req = '>= 53.25.0' - libavutil_req = '>= 51.27.0' -else - conf.set10('HAVE_LIBAV', true) - - libavcodec_req = '>= 53.25.0' - libavformat_req = '>= 53.17.0' - libavutil_req = '>= 51.18.0' -endif - - -libavcodec_dep = dependency('libavcodec', version: libavcodec_req, required: false) -libavformat_dep = dependency('libavformat', version: libavformat_req, required: false) -libavutil_dep = dependency('libavutil', version: libavutil_req, required: false) +libavcodec_dep = dependency('libavcodec', version: '>= 56.60.100', required: false) +libavformat_dep = dependency('libavformat', version: '>= 56.40.101', required: false) +libavutil_dep = dependency('libavutil', version: '>= 54.31.100', required: false) have_ffaudio = libavcodec_dep.found() and \ diff -Nru audacious-plugins-4.1/src/filewriter/filewriter.cc audacious-plugins-4.2/src/filewriter/filewriter.cc --- audacious-plugins-4.1/src/filewriter/filewriter.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/filewriter/filewriter.cc 2022-07-10 01:12:34.000000000 +0000 @@ -427,22 +427,22 @@ }; static const ComboItem mp3_bitrates[] = { - ComboItem(N_("8 kbps"), 8), - ComboItem(N_("16 kbps"), 16), - ComboItem(N_("32 kbps"), 32), - ComboItem(N_("40 kbps"), 40), - ComboItem(N_("48 kbps"), 48), - ComboItem(N_("56 kbps"), 56), - ComboItem(N_("64 kbps"), 64), - ComboItem(N_("80 kbps"), 80), - ComboItem(N_("96 kbps"), 96), - ComboItem(N_("112 kbps"), 112), - ComboItem(N_("128 kbps"), 128), - ComboItem(N_("160 kbps"), 160), - ComboItem(N_("192 kbps"), 192), - ComboItem(N_("224 kbps"), 224), - ComboItem(N_("256 kbps"), 256), - ComboItem(N_("320 kbps"), 320) + ComboItem(N_("8 kbit/s"), 8), + ComboItem(N_("16 kbit/s"), 16), + ComboItem(N_("32 kbit/s"), 32), + ComboItem(N_("40 kbit/s"), 40), + ComboItem(N_("48 kbit/s"), 48), + ComboItem(N_("56 kbit/s"), 56), + ComboItem(N_("64 kbit/s"), 64), + ComboItem(N_("80 kbit/s"), 80), + ComboItem(N_("96 kbit/s"), 96), + ComboItem(N_("112 kbit/s"), 112), + ComboItem(N_("128 kbit/s"), 128), + ComboItem(N_("160 kbit/s"), 160), + ComboItem(N_("192 kbit/s"), 192), + ComboItem(N_("224 kbit/s"), 224), + ComboItem(N_("256 kbit/s"), 256), + ComboItem(N_("320 kbit/s"), 320) }; static const ComboItem mp3_modes[] = { diff -Nru audacious-plugins-4.1/src/flac/flacng.h audacious-plugins-4.2/src/flac/flacng.h --- audacious-plugins-4.1/src/flac/flacng.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/flac/flacng.h 2022-07-10 01:12:34.000000000 +0000 @@ -99,6 +99,7 @@ void metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data); /* tools.c */ +bool is_ogg_flac(VFSFile &file); bool read_metadata(FLAC__StreamDecoder* decoder, callback_info* info); #endif diff -Nru audacious-plugins-4.1/src/flac/metadata.cc audacious-plugins-4.2/src/flac/metadata.cc --- audacious-plugins-4.1/src/flac/metadata.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/flac/metadata.cc 2022-07-10 01:12:34.000000000 +0000 @@ -134,6 +134,12 @@ bool FLACng::write_tuple(const char *filename, VFSFile &file, const Tuple &tuple) { + if (is_ogg_flac(file)) + { + AUDERR("Writing Ogg FLAC tags is not currently supported!\n"); + return false; + } + AUDDBG("Update song tuple.\n"); FLAC__Metadata_Iterator *iter; @@ -275,7 +281,11 @@ chain = FLAC__metadata_chain_new(); - if (!FLAC__metadata_chain_read_with_callbacks(chain, &file, io_callbacks)) + auto metadata_chain_read = is_ogg_flac(file) ? + FLAC__metadata_chain_read_ogg_with_callbacks : + FLAC__metadata_chain_read_with_callbacks; + + if (!metadata_chain_read(chain, &file, io_callbacks)) goto ERR; iter = FLAC__metadata_iterator_new(); diff -Nru audacious-plugins-4.1/src/flac/plugin.cc audacious-plugins-4.2/src/flac/plugin.cc --- audacious-plugins-4.1/src/flac/plugin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/flac/plugin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -26,48 +26,49 @@ EXPORT FLACng aud_plugin_instance; -static FLAC__StreamDecoder *decoder; -static callback_info *cinfo; +using StreamDecoderPtr = SmartPtr; +static StreamDecoderPtr s_decoder, s_ogg_decoder; +static callback_info s_cinfo; bool FLACng::init() { - FLAC__StreamDecoderInitStatus ret; - /* Callback structure and decoder for main decoding loop */ + auto flac_decoder = StreamDecoderPtr(FLAC__stream_decoder_new()); + auto ogg_flac_decoder = StreamDecoderPtr(FLAC__stream_decoder_new()); - cinfo = new callback_info; - - if ((decoder = FLAC__stream_decoder_new()) == nullptr) + if (!flac_decoder || !ogg_flac_decoder) { - AUDERR("Could not create the main FLAC decoder instance!\n"); + AUDERR("Could not create the FLAC decoder instances!\n"); return false; } - if (FLAC__STREAM_DECODER_INIT_STATUS_OK != (ret = FLAC__stream_decoder_init_stream( - decoder, - read_callback, - seek_callback, - tell_callback, - length_callback, - eof_callback, - write_callback, - metadata_callback, - error_callback, - cinfo))) + auto ret1 = FLAC__stream_decoder_init_stream(flac_decoder.get(), + read_callback, seek_callback, tell_callback, length_callback, + eof_callback, write_callback, metadata_callback, error_callback, + &s_cinfo); + + auto ret2 = FLAC__stream_decoder_init_ogg_stream(ogg_flac_decoder.get(), + read_callback, seek_callback, tell_callback, length_callback, + eof_callback, write_callback, metadata_callback, error_callback, + &s_cinfo); + + if (ret1 != FLAC__STREAM_DECODER_INIT_STATUS_OK || + ret2 != FLAC__STREAM_DECODER_INIT_STATUS_OK) { - AUDERR("Could not initialize the main FLAC decoder: %s(%d)\n", - FLAC__StreamDecoderInitStatusString[ret], ret); + AUDERR("Could not initialize the FLAC decoders!\n"); return false; } - AUDDBG("Plugin initialized.\n"); + s_decoder = std::move(flac_decoder); + s_ogg_decoder = std::move(ogg_flac_decoder); + return true; } void FLACng::cleanup() { - FLAC__stream_decoder_delete(decoder); - delete cinfo; + s_decoder.clear(); + s_ogg_decoder.clear(); } bool FLACng::is_our_file(const char *filename, VFSFile &file) @@ -115,20 +116,26 @@ { Index play_buffer; bool error = false; + bool stream = (file.fsize() < 0); + auto tuple = stream ? get_playback_tuple() : Tuple(); + auto decoder = is_ogg_flac(file) ? s_ogg_decoder.get() : s_decoder.get(); - cinfo->fd = &file; + s_cinfo.fd = &file; - if (read_metadata(decoder, cinfo) == false) + if (read_metadata(decoder, &s_cinfo) == false) { AUDERR("Could not prepare file for playing!\n"); error = true; - goto ERR_NO_CLOSE; + goto ERR; } play_buffer.resize(BUFFER_SIZE_BYTE); - set_stream_bitrate(cinfo->bitrate); - open_audio(SAMPLE_FMT(cinfo->bits_per_sample), cinfo->sample_rate, cinfo->channels); + if (stream && tuple.fetch_stream_info(file)) + set_playback_tuple(tuple.ref()); + + set_stream_bitrate(s_cinfo.bitrate); + open_audio(SAMPLE_FMT(s_cinfo.bits_per_sample), s_cinfo.sample_rate, s_cinfo.channels); while (FLAC__stream_decoder_get_state(decoder) != FLAC__STREAM_DECODER_END_OF_STREAM) { @@ -138,7 +145,7 @@ int seek_value = check_seek (); if (seek_value >= 0) FLAC__stream_decoder_seek_absolute (decoder, (int64_t) - seek_value * cinfo->sample_rate / 1000); + seek_value * s_cinfo.sample_rate / 1000); /* Try to decode a single frame of audio */ if (FLAC__stream_decoder_process_single(decoder) == false) @@ -148,20 +155,24 @@ break; } - squeeze_audio(cinfo->output_buffer.begin(), play_buffer.begin(), - cinfo->buffer_used, cinfo->bits_per_sample); - write_audio(play_buffer.begin(), cinfo->buffer_used * - SAMPLE_SIZE(cinfo->bits_per_sample)); + if (stream && tuple.fetch_stream_info(file)) + set_playback_tuple(tuple.ref()); + + squeeze_audio(s_cinfo.output_buffer.begin(), play_buffer.begin(), + s_cinfo.buffer_used, s_cinfo.bits_per_sample); + write_audio(play_buffer.begin(), s_cinfo.buffer_used * + SAMPLE_SIZE(s_cinfo.bits_per_sample)); - cinfo->reset(); + s_cinfo.reset(); } -ERR_NO_CLOSE: - cinfo->reset(); +ERR: + s_cinfo.reset(); if (FLAC__stream_decoder_flush(decoder) == false) AUDERR("Could not flush decoder state!\n"); + s_cinfo = callback_info(); return ! error; } @@ -172,4 +183,5 @@ const char *const FLACng::exts[] = { "flac", "fla", nullptr }; -const char *const FLACng::mimes[] = { "audio/flac", "audio/x-flac", nullptr }; +const char *const FLACng::mimes[] = { "audio/flac", "audio/x-flac", "audio/ogg", + "application/ogg", nullptr }; diff -Nru audacious-plugins-4.1/src/flac/tools.cc audacious-plugins-4.2/src/flac/tools.cc --- audacious-plugins-4.1/src/flac/tools.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/flac/tools.cc 2022-07-10 01:12:34.000000000 +0000 @@ -25,6 +25,13 @@ #include "flacng.h" +bool is_ogg_flac(VFSFile &file) +{ + /* TODO: detect Ogg FLAC by content too (not just MIME type) */ + String mime = file.get_metadata("content-type"); + return (mime && strstr(mime, "ogg")); +} + bool read_metadata(FLAC__StreamDecoder *decoder, callback_info *info) { FLAC__StreamDecoderState ret; diff -Nru audacious-plugins-4.1/src/gtkui/ui_statusbar.cc audacious-plugins-4.2/src/gtkui/ui_statusbar.cc --- audacious-plugins-4.1/src/gtkui/ui_statusbar.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/gtkui/ui_statusbar.cc 2022-07-10 01:12:34.000000000 +0000 @@ -78,7 +78,7 @@ } if (bitrate > 0) - str_append_printf (buf, _("%d kbps"), bitrate / 1000); + str_append_printf (buf, _("%d kbit/s"), bitrate / 1000); gtk_label_set_text ((GtkLabel *) label, buf); } diff -Nru audacious-plugins-4.1/src/meson.build audacious-plugins-4.2/src/meson.build --- audacious-plugins-4.1/src/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -28,6 +28,7 @@ # effect plugins +subdir('bitcrusher') subdir('compressor') subdir('crossfade') subdir('crystalizer') @@ -203,7 +204,7 @@ subdir('cdaudio') endif -if get_option('ffaudio') in ['ffmpeg', 'libav'] +if get_option('ffaudio') subdir('ffaudio') endif diff -Nru audacious-plugins-4.1/src/moonstone/main_window.cc audacious-plugins-4.2/src/moonstone/main_window.cc --- audacious-plugins-4.1/src/moonstone/main_window.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/moonstone/main_window.cc 2022-07-10 01:12:34.000000000 +0000 @@ -141,13 +141,13 @@ { if (!aud_drct_get_playing() || aud_drct_get_paused()) { - m_play_pause_action->setIcon(audqt::get_icon("media-playback-start")); + m_play_pause_action->setIcon(QIcon::fromTheme("media-playback-start")); m_play_pause_action->setText(_("Play")); m_play_pause_action->setToolTip(_("Play")); } else { - m_play_pause_action->setIcon(audqt::get_icon("media-playback-pause")); + m_play_pause_action->setIcon(QIcon::fromTheme("media-playback-pause")); m_play_pause_action->setText(_("Pause")); m_play_pause_action->setToolTip(_("Pause")); } diff -Nru audacious-plugins-4.1/src/moonstone/playlist_model.cc audacious-plugins-4.2/src/moonstone/playlist_model.cc --- audacious-plugins-4.1/src/moonstone/playlist_model.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/moonstone/playlist_model.cc 2022-07-10 01:12:34.000000000 +0000 @@ -55,7 +55,7 @@ static inline QPixmap get_icon(const char * name) { - return audqt::get_icon(name).pixmap(audqt::to_native_dpi(ICON_SIZE)); + return QIcon::fromTheme(name).pixmap(audqt::to_native_dpi(ICON_SIZE)); } PlaylistModel::PlaylistModel(QObject * parent, Playlist playlist) @@ -123,7 +123,7 @@ case Length: return QString(str_format_time(val)); case Bitrate: - return QString("%1 kbps").arg(val); + return QString("%1 kbit/s").arg(val); default: return QString("%1").arg(val); } diff -Nru audacious-plugins-4.1/src/moonstone/playlist_tabs.cc audacious-plugins-4.2/src/moonstone/playlist_tabs.cc --- audacious-plugins-4.1/src/moonstone/playlist_tabs.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/moonstone/playlist_tabs.cc 2022-07-10 01:12:34.000000000 +0000 @@ -217,7 +217,7 @@ QIcon icon; int playing = Playlist::playing_playlist().index(); if (playing >= 0) - icon = audqt::get_icon(aud_drct_get_paused() ? "media-playback-pause" + icon = QIcon::fromTheme(aud_drct_get_paused() ? "media-playback-pause" : "media-playback-start"); int tabs = count(); @@ -302,12 +302,12 @@ auto menu = new QMenu(this); auto playlist = Playlist::by_index(idx); - auto play_act = new QAction(audqt::get_icon("media-playback-start"), + auto play_act = new QAction(QIcon::fromTheme("media-playback-start"), audqt::translate_str(N_("_Play")), menu); auto rename_act = - new QAction(audqt::get_icon("insert-text"), + new QAction(QIcon::fromTheme("insert-text"), audqt::translate_str(N_("_Rename ...")), menu); - auto remove_act = new QAction(audqt::get_icon("edit-delete"), + auto remove_act = new QAction(QIcon::fromTheme("edit-delete"), audqt::translate_str(N_("Remo_ve")), menu); QObject::connect(play_act, &QAction::triggered, diff -Nru audacious-plugins-4.1/src/moonstone/tool_bar.cc audacious-plugins-4.2/src/moonstone/tool_bar.cc --- audacious-plugins-4.1/src/moonstone/tool_bar.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/moonstone/tool_bar.cc 2022-07-10 01:12:34.000000000 +0000 @@ -41,7 +41,7 @@ addSeparator(); else if (item.icon_name) { - QAction * a = new QAction(audqt::get_icon(item.icon_name), + QAction * a = new QAction(QIcon::fromTheme(item.icon_name), audqt::translate_str(item.name), this); if (item.tooltip_text) diff -Nru audacious-plugins-4.1/src/oss4/meson.build audacious-plugins-4.2/src/oss4/meson.build --- audacious-plugins-4.1/src/oss4/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/oss4/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -21,7 +21,7 @@ if have_oss4 - cmd = run_command('test', '-d', oss_inc) + cmd = run_command('test', '-d', oss_inc, check: false) if cmd.returncode() == 0 oss_inc_dirs += oss_inc endif diff -Nru audacious-plugins-4.1/src/playlist-manager-qt/playlist-manager-qt.cc audacious-plugins-4.2/src/playlist-manager-qt/playlist-manager-qt.cc --- audacious-plugins-4.1/src/playlist-manager-qt/playlist-manager-qt.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/playlist-manager-qt/playlist-manager-qt.cc 2022-07-10 01:12:34.000000000 +0000 @@ -333,7 +333,7 @@ static QToolButton * new_tool_button(const char * text, const char * icon) { auto button = new QToolButton; - button->setIcon(audqt::get_icon(icon)); + button->setIcon(QIcon::fromTheme(icon)); button->setText(audqt::translate_str(text)); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); return button; diff -Nru audacious-plugins-4.1/src/qtaudio/meson.build audacious-plugins-4.2/src/qtaudio/meson.build --- audacious-plugins-4.1/src/qtaudio/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtaudio/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,4 +1,9 @@ -qt_multimedia_dep = dependency('qt5', version: qt_req, required: false, modules: ['Multimedia']) +if get_option('qt6') + qt_multimedia_dep = dependency('qt6', version: qt_req, required: false, modules: ['Multimedia']) +else + qt_multimedia_dep = dependency('qt5', version: qt_req, required: false, modules: ['Multimedia']) +endif + have_qtaudio = qt_multimedia_dep.found() diff -Nru audacious-plugins-4.1/src/qtglspectrum/meson.build audacious-plugins-4.2/src/qtglspectrum/meson.build --- audacious-plugins-4.1/src/qtglspectrum/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtglspectrum/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,4 +1,9 @@ -qt_opengl_dep = dependency('qt5', version: '>= 5.4', required: false, modules: ['OpenGL']) +if get_option('qt6') + qt_opengl_dep = dependency('qt6', version: qt_req, required: false, modules: ['OpenGL', 'OpenGLWidgets']) +else + qt_opengl_dep = dependency('qt5', version: '>= 5.4', required: false, modules: ['OpenGL']) +endif + have_qtglspectrum = qt_opengl_dep.found() diff -Nru audacious-plugins-4.1/src/qthotkey/gui.cc audacious-plugins-4.2/src/qthotkey/gui.cc --- audacious-plugins-4.1/src/qthotkey/gui.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qthotkey/gui.cc 2022-07-10 01:12:34.000000000 +0000 @@ -168,7 +168,7 @@ group_box_layout(new QGridLayout(group_box)), action_label(new QLabel(_("Action:"), group_box)), key_binding_label(new QLabel(_("Key Binding:"), group_box)), - add_button(new QPushButton(audqt::get_icon("list-add"), + add_button(new QPushButton(QIcon::fromTheme("list-add"), audqt::translate_str(N_("_Add")), this)), add_button_layout(new QHBoxLayout) { @@ -270,7 +270,7 @@ } control->button = new QToolButton(group_box); - control->button->setIcon(audqt::get_icon("edit-delete")); + control->button->setIcon(QIcon::fromTheme("edit-delete")); int row = group_box_layout->rowCount(); diff -Nru audacious-plugins-4.1/src/qthotkey/meson.build audacious-plugins-4.2/src/qthotkey/meson.build --- audacious-plugins-4.1/src/qthotkey/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qthotkey/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,4 +1,9 @@ -qtx11extras_dep = dependency('qt5', version: qt_req, required: false, modules: ['X11Extras']) +if get_option('qt6') + qtx11extras_dep = dependency('qt6', version: qt_req, required: false, modules: ['X11Extras']) +else + qtx11extras_dep = dependency('qt5', version: qt_req, required: false, modules: ['X11Extras']) +endif + have_qthotkey = qtx11extras_dep.found() diff -Nru audacious-plugins-4.1/src/qtui/main_window.cc audacious-plugins-4.2/src/qtui/main_window.cc --- audacious-plugins-4.1/src/qtui/main_window.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/main_window.cc 2022-07-10 01:12:34.000000000 +0000 @@ -117,7 +117,7 @@ static QToolButton * create_menu_button(QWidget * parent, QMenuBar * menubar) { auto button = new QToolButton(parent); - button->setIcon(audqt::get_icon("audacious")); + button->setIcon(QIcon::fromTheme("audacious")); button->setPopupMode(QToolButton::InstantPopup); button->setStyleSheet("QToolButton::menu-indicator { image: none; }"); button->setToolTip(_("Menu")); @@ -342,13 +342,13 @@ { if (!aud_drct_get_playing() || aud_drct_get_paused()) { - m_play_pause_action->setIcon(audqt::get_icon("media-playback-start")); + m_play_pause_action->setIcon(QIcon::fromTheme("media-playback-start")); m_play_pause_action->setText(_("Play")); m_play_pause_action->setToolTip(_("Play")); } else { - m_play_pause_action->setIcon(audqt::get_icon("media-playback-pause")); + m_play_pause_action->setIcon(QIcon::fromTheme("media-playback-pause")); m_play_pause_action->setText(_("Pause")); m_play_pause_action->setToolTip(_("Pause")); } diff -Nru audacious-plugins-4.1/src/qtui/playlist_model.cc audacious-plugins-4.2/src/qtui/playlist_model.cc --- audacious-plugins-4.1/src/qtui/playlist_model.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/playlist_model.cc 2022-07-10 01:12:34.000000000 +0000 @@ -124,7 +124,7 @@ case Length: return QString(str_format_time(val)); case Bitrate: - return QString("%1 kbps").arg(val); + return QString("%1 kbit/s").arg(val); default: return QString("%1").arg(val); } @@ -146,7 +146,7 @@ icon_name = aud_drct_get_paused() ? "media-playback-pause" : "media-playback-start"; - return audqt::get_icon(icon_name); + return QIcon::fromTheme(icon_name); } else if (col == m_playing_col) { diff -Nru audacious-plugins-4.1/src/qtui/playlist_tabs.cc audacious-plugins-4.2/src/qtui/playlist_tabs.cc --- audacious-plugins-4.1/src/qtui/playlist_tabs.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/playlist_tabs.cc 2022-07-10 01:12:34.000000000 +0000 @@ -239,7 +239,7 @@ QIcon icon; int playing = Playlist::playing_playlist().index(); if (playing >= 0) - icon = audqt::get_icon(aud_drct_get_paused() ? "media-playback-pause" + icon = QIcon::fromTheme(aud_drct_get_paused() ? "media-playback-pause" : "media-playback-start"); int tabs = count(); @@ -324,12 +324,12 @@ auto menu = new QMenu(this); auto playlist = Playlist::by_index(idx); - auto play_act = new QAction(audqt::get_icon("media-playback-start"), + auto play_act = new QAction(QIcon::fromTheme("media-playback-start"), audqt::translate_str(N_("_Play")), menu); auto rename_act = - new QAction(audqt::get_icon("insert-text"), + new QAction(QIcon::fromTheme("insert-text"), audqt::translate_str(N_("_Rename ...")), menu); - auto remove_act = new QAction(audqt::get_icon("edit-delete"), + auto remove_act = new QAction(QIcon::fromTheme("edit-delete"), audqt::translate_str(N_("Remo_ve")), menu); QObject::connect(play_act, &QAction::triggered, diff -Nru audacious-plugins-4.1/src/qtui/search_bar.cc audacious-plugins-4.2/src/qtui/search_bar.cc --- audacious-plugins-4.1/src/qtui/search_bar.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/search_bar.cc 2022-07-10 01:12:34.000000000 +0000 @@ -32,7 +32,7 @@ static QPushButton * makeButton(const char * icon, QWidget * parent) { - auto button = new QPushButton(audqt::get_icon(icon), QString(), parent); + auto button = new QPushButton(QIcon::fromTheme(icon), QString(), parent); button->setFlat(true); button->setFocusPolicy(Qt::NoFocus); return button; diff -Nru audacious-plugins-4.1/src/qtui/status_bar.cc audacious-plugins-4.2/src/qtui/status_bar.cc --- audacious-plugins-4.1/src/qtui/status_bar.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/status_bar.cc 2022-07-10 01:12:34.000000000 +0000 @@ -171,7 +171,7 @@ } if (bitrate > 0) - str_append_printf(buf, _("%d kbps"), bitrate / 1000); + str_append_printf(buf, _("%d kbit/s"), bitrate / 1000); codec_label->setText((const char *)buf); codec_label->show(); diff -Nru audacious-plugins-4.1/src/qtui/time_slider.cc audacious-plugins-4.2/src/qtui/time_slider.cc --- audacious-plugins-4.1/src/qtui/time_slider.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/time_slider.cc 2022-07-10 01:12:34.000000000 +0000 @@ -49,9 +49,7 @@ public: TimeSliderStyle() { - // detect and respond to application-wide style change - connect(qApp->style(), &QObject::destroyed, this, - &TimeSliderStyle::resetBaseStyle); + audqt::setup_proxy_style(this); } int styleHint(QStyle::StyleHint hint, const QStyleOption * option = nullptr, @@ -66,14 +64,6 @@ return styleHint; } - -private: - void resetBaseStyle() - { - setBaseStyle(nullptr); - connect(qApp->style(), &QObject::destroyed, this, - &TimeSliderStyle::resetBaseStyle); - } }; TimeSlider::TimeSlider(QWidget * parent) diff -Nru audacious-plugins-4.1/src/qtui/tool_bar.cc audacious-plugins-4.2/src/qtui/tool_bar.cc --- audacious-plugins-4.1/src/qtui/tool_bar.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/qtui/tool_bar.cc 2022-07-10 01:12:34.000000000 +0000 @@ -47,7 +47,7 @@ a = addSeparator(); else if (item.icon_name) { - a = new QAction(audqt::get_icon(item.icon_name), + a = new QAction(QIcon::fromTheme(item.icon_name), audqt::translate_str(item.name), this); if (item.tooltip_text) diff -Nru audacious-plugins-4.1/src/search-tool-qt/search-tool-qt.cc audacious-plugins-4.2/src/search-tool-qt/search-tool-qt.cc --- audacious-plugins-4.1/src/search-tool-qt/search-tool-qt.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/search-tool-qt/search-tool-qt.cc 2022-07-10 01:12:34.000000000 +0000 @@ -193,7 +193,7 @@ m_help_label (_("To import your music library into Audacious, " "choose a folder and then click the \"refresh\" icon.")), m_wait_label (_("Please wait ...")), - m_refresh_btn (audqt::get_icon ("view-refresh"), QString ()), + m_refresh_btn (QIcon::fromTheme ("view-refresh"), QString ()), m_file_entry (audqt::file_entry_new (this, _("Choose Folder"), QFileDialog::Directory, QFileDialog::AcceptOpen)) { @@ -495,11 +495,11 @@ { auto menu = new QMenu (this); - auto play_act = new QAction (audqt::get_icon ("media-playback-start"), + auto play_act = new QAction (QIcon::fromTheme ("media-playback-start"), audqt::translate_str (N_("_Play")), menu); - auto create_act = new QAction (audqt::get_icon ("document-new"), + auto create_act = new QAction (QIcon::fromTheme ("document-new"), audqt::translate_str (N_("_Create Playlist")), menu); - auto add_act = new QAction (audqt::get_icon ("list-add"), + auto add_act = new QAction (QIcon::fromTheme ("list-add"), audqt::translate_str (N_("_Add to Playlist")), menu); QObject::connect (play_act, & QAction::triggered, this, & SearchWidget::action_play); diff -Nru audacious-plugins-4.1/src/skins/main.cc audacious-plugins-4.2/src/skins/main.cc --- audacious-plugins-4.1/src/skins/main.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins/main.cc 2022-07-10 01:12:34.000000000 +0000 @@ -345,7 +345,7 @@ mainwin_monostereo->set_num_channels (channels); if (bitrate > 0) - snprintf (scratch, sizeof scratch, "%d kbps", bitrate / 1000); + snprintf (scratch, sizeof scratch, "%d kbit/s", bitrate / 1000); else scratch[0] = 0; diff -Nru audacious-plugins-4.1/src/skins/menus.cc audacious-plugins-4.2/src/skins/menus.cc --- audacious-plugins-4.1/src/skins/menus.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins/menus.cc 2022-07-10 01:12:34.000000000 +0000 @@ -67,8 +67,8 @@ static void configure_output () { audgui_show_prefs_for_plugin_type (PluginType::Output); } static void configure_visualizations () { audgui_show_prefs_for_plugin_type (PluginType::Vis); } -static void skins_volume_up () { mainwin_set_volume_diff (5); } -static void skins_volume_down () { mainwin_set_volume_diff (-5); } +static void skins_volume_up () { mainwin_set_volume_diff (aud_get_int ("volume_delta")); } +static void skins_volume_down () { mainwin_set_volume_diff (-aud_get_int ("volume_delta")); } static const AudguiMenuItem output_items[] = { MenuCommand (N_("Volume Up"), "audio-volume-high", '+', NO_MOD, skins_volume_up), @@ -212,8 +212,8 @@ MenuCommand (N_("By Artist"), nullptr, NO_KEY, sort_sel_artist), MenuCommand (N_("By Album"), nullptr, NO_KEY, sort_sel_album), MenuCommand (N_("By Album Artist"), nullptr, NO_KEY, sort_sel_album_artist), - MenuCommand (N_("By Genre"), nullptr, NO_KEY, sort_sel_genre), MenuCommand (N_("By Release Date"), nullptr, NO_KEY, sort_sel_date), + MenuCommand (N_("By Genre"), nullptr, NO_KEY, sort_sel_genre), MenuCommand (N_("By Length"), nullptr, NO_KEY, sort_sel_length), MenuCommand (N_("By File Name"), nullptr, NO_KEY, sort_sel_filename), MenuCommand (N_("By File Path"), nullptr, NO_KEY, sort_sel_path), diff -Nru audacious-plugins-4.1/src/skins/playlistwin.cc audacious-plugins-4.2/src/skins/playlistwin.cc --- audacious-plugins-4.1/src/skins/playlistwin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins/playlistwin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -94,7 +94,6 @@ static int resize_base_width, resize_base_height; static int drop_position; -static bool song_changed; static void update_info () { @@ -505,12 +504,6 @@ { playlistwin_list->refresh (); - if (song_changed) - { - playlistwin_list->set_focused (Playlist::active_playlist ().get_position ()); - song_changed = false; - } - update_info (); update_rollup_text (); } @@ -522,10 +515,11 @@ int row = list.get_position (); if (row >= 0) + { list.select_entry (row, true); - - if (list == Playlist::active_playlist ()) - song_changed = true; + if (list == Playlist::active_playlist ()) + playlistwin_list->set_focused (row); + } } void playlistwin_create () @@ -536,8 +530,6 @@ update_info (); update_rollup_text (); - song_changed = false; - hook_associate ("playlist position", follow_cb, nullptr); hook_associate ("playlist activate", update_cb, nullptr); hook_associate ("playlist update", update_cb, nullptr); diff -Nru audacious-plugins-4.1/src/skins/search-select.cc audacious-plugins-4.2/src/skins/search-select.cc --- audacious-plugins-4.1/src/skins/search-select.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins/search-select.cc 2022-07-10 01:12:34.000000000 +0000 @@ -60,7 +60,8 @@ { items.append (playlist.entry_filename (entry), - playlist.entry_tuple (entry, Playlist::NoWait)); + playlist.entry_tuple (entry, Playlist::NoWait), + playlist.entry_decoder (entry, Playlist::NoWait)); } } diff -Nru audacious-plugins-4.1/src/skins-qt/dock.cc audacious-plugins-4.2/src/skins-qt/dock.cc --- audacious-plugins-4.1/src/skins-qt/dock.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/dock.cc 2022-07-10 01:12:34.000000000 +0000 @@ -351,3 +351,23 @@ } } } + +void dock_draw_all () +{ + for (DockWindow & dw : windows) + { + if (dw.window) + dw.window->queue_draw (); + } +} + +bool dock_is_focused () +{ + for (DockWindow & dw : windows) + { + if (dw.window && dw.window->isActiveWindow ()) + return true; + } + + return false; +} diff -Nru audacious-plugins-4.1/src/skins-qt/equalizer.cc audacious-plugins-4.2/src/skins-qt/equalizer.cc --- audacious-plugins-4.1/src/skins-qt/equalizer.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/equalizer.cc 2022-07-10 01:12:34.000000000 +0000 @@ -251,9 +251,9 @@ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 0, 0, 0, 275, is_shaded () ? 14 : 116); if (is_shaded ()) - skin_draw_pixbuf (cr, SKIN_EQ_EX, 0, 0, 0, 0, 275, 14); + skin_draw_pixbuf (cr, SKIN_EQ_EX, 0, is_focused () ? 0 : 15, 0, 0, 275, 14); else - skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 134, 0, 0, 275, 14); + skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, is_focused () ? 134 : 149, 0, 0, 275, 14); } static void equalizerwin_create_window () diff -Nru audacious-plugins-4.1/src/skins-qt/main.cc audacious-plugins-4.2/src/skins-qt/main.cc --- audacious-plugins-4.1/src/skins-qt/main.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/main.cc 2022-07-10 01:12:34.000000000 +0000 @@ -329,7 +329,7 @@ mainwin_monostereo->set_num_channels (channels); if (bitrate > 0) - snprintf (scratch, sizeof scratch, "%d kbps", bitrate / 1000); + snprintf (scratch, sizeof scratch, "%d kbit/s", bitrate / 1000); else scratch[0] = 0; @@ -483,7 +483,7 @@ { m_scroll_delta_y -= 120 * steps_y; int volume_delta = aud_get_int ("volume_delta"); - aud_drct_set_volume_main (aud_drct_get_volume_main () + steps_y * volume_delta); + mainwin_set_volume_diff (steps_y * volume_delta); } return true; @@ -1096,7 +1096,7 @@ int height = is_shaded () ? MAINWIN_SHADED_HEIGHT : skin.hints.mainwin_height; skin_draw_pixbuf (cr, SKIN_MAIN, 0, 0, 0, 0, width, height); - skin_draw_mainwin_titlebar (cr, is_shaded (), true); + skin_draw_mainwin_titlebar (cr, is_shaded (), is_focused ()); } static void mainwin_create_window () diff -Nru audacious-plugins-4.1/src/skins-qt/Makefile audacious-plugins-4.2/src/skins-qt/Makefile --- audacious-plugins-4.1/src/skins-qt/Makefile 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/Makefile 2022-07-10 01:12:34.000000000 +0000 @@ -21,6 +21,7 @@ playstatus.cc \ plugin.cc \ plugin-window.cc \ + search-select.cc \ skin.cc \ skin-ini.cc \ skins_cfg.cc \ diff -Nru audacious-plugins-4.1/src/skins-qt/menus.cc audacious-plugins-4.2/src/skins-qt/menus.cc --- audacious-plugins-4.1/src/skins-qt/menus.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/menus.cc 2022-07-10 01:12:34.000000000 +0000 @@ -57,8 +57,8 @@ static void pl_import () { audqt::fileopener_show (audqt::FileMode::ImportPlaylist); } static void pl_export () { audqt::fileopener_show (audqt::FileMode::ExportPlaylist); } -static void skins_volume_up () { mainwin_set_volume_diff (5); } -static void skins_volume_down () { mainwin_set_volume_diff (-5); } +static void skins_volume_up () { mainwin_set_volume_diff (aud_get_int ("volume_delta")); } +static void skins_volume_down () { mainwin_set_volume_diff (-aud_get_int ("volume_delta")); } static const audqt::MenuItem output_items[] = { audqt::MenuCommand ({N_("Volume Up"), "audio-volume-high", "+"}, skins_volume_up), @@ -107,9 +107,9 @@ audqt::MenuSep (), audqt::MenuCommand ({N_("Set A-B Repeat"), nullptr, "A"}, action_ab_set), audqt::MenuCommand ({N_("Clear A-B Repeat"), nullptr, "Shift+A"}, action_ab_clear), -#if 0 audqt::MenuSep (), - audqt::MenuCommand ({N_("Jump to Song ..."), "go-jump", "J"}, audgui_jump_to_track), + audqt::MenuCommand ({N_("Jump to Song ..."), "go-jump", "J"}, aud_ui_show_jump_to_song), +#if 0 audqt::MenuCommand ({N_("Jump to Time ..."), "go-jump", "Ctrl+J"}, audgui_jump_to_time) #endif }; @@ -180,6 +180,8 @@ }; static const audqt::MenuItem playlist_select_items[] = { + audqt::MenuCommand ({N_("Search and Select"), "edit-find", "Ctrl+F"}, action_playlist_search_and_select), + audqt::MenuSep (), audqt::MenuCommand ({N_("Invert Selection")}, pl_select_invert), audqt::MenuCommand ({N_("Select None"), nullptr, "Shift+Ctrl+A"}, pl_select_none), audqt::MenuCommand ({N_("Select All"), "edit-select-all", "Ctrl+A"}, pl_select_all), @@ -206,8 +208,8 @@ audqt::MenuCommand ({N_("By Artist")}, sort_sel_artist), audqt::MenuCommand ({N_("By Album")}, sort_sel_album), audqt::MenuCommand ({N_("By Album Artist")}, sort_sel_album_artist), - audqt::MenuCommand ({N_("By Genre")}, sort_sel_genre), audqt::MenuCommand ({N_("By Release Date")}, sort_sel_date), + audqt::MenuCommand ({N_("By Genre")}, sort_sel_genre), audqt::MenuCommand ({N_("By Length")}, sort_sel_length), audqt::MenuCommand ({N_("By File Name")}, sort_sel_filename), audqt::MenuCommand ({N_("By File Path")}, sort_sel_path), diff -Nru audacious-plugins-4.1/src/skins-qt/meson.build audacious-plugins-4.2/src/skins-qt/meson.build --- audacious-plugins-4.1/src/skins-qt/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -20,6 +20,7 @@ 'playstatus.cc', 'plugin.cc', 'plugin-window.cc', + 'search-select.cc', 'skin.cc', 'skin-ini.cc', 'skins_cfg.cc', diff -Nru audacious-plugins-4.1/src/skins-qt/playlistwin.cc audacious-plugins-4.2/src/skins-qt/playlistwin.cc --- audacious-plugins-4.1/src/skins-qt/playlistwin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/playlistwin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -90,7 +90,6 @@ static int resize_base_width, resize_base_height; //static int drop_position; -static bool song_changed; static void update_info () { @@ -463,10 +462,10 @@ void PlWindow::draw (QPainter & cr) { if (is_shaded ()) - skin_draw_playlistwin_shaded (cr, config.playlist_width, true); + skin_draw_playlistwin_shaded (cr, config.playlist_width, is_focused ()); else skin_draw_playlistwin_frame (cr, config.playlist_width, - config.playlist_height, true); + config.playlist_height, is_focused ()); } static void playlistwin_create_window () @@ -492,12 +491,6 @@ { playlistwin_list->refresh (); - if (song_changed) - { - playlistwin_list->set_focused (Playlist::active_playlist ().get_position ()); - song_changed = false; - } - update_info (); update_rollup_text (); } @@ -509,10 +502,11 @@ int row = list.get_position (); if (row >= 0) + { list.select_entry (row, true); - - if (list == Playlist::active_playlist ()) - song_changed = true; + if (list == Playlist::active_playlist ()) + playlistwin_list->set_focused (row); + } } void playlistwin_create () @@ -523,8 +517,6 @@ update_info (); update_rollup_text (); - song_changed = false; - hook_associate ("playlist position", follow_cb, nullptr); hook_associate ("playlist activate", update_cb, nullptr); hook_associate ("playlist update", update_cb, nullptr); diff -Nru audacious-plugins-4.1/src/skins-qt/plugin.cc audacious-plugins-4.2/src/skins-qt/plugin.cc --- audacious-plugins-4.1/src/skins-qt/plugin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/plugin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -166,10 +166,16 @@ { skins_cfg_load (); + // At least one 3rd-party QImage plugin will abort() if loaded before + // QGuiApplication, so call audqt::init() before loading the skin! + audqt::init (); + if (! load_initial_skin ()) + { + audqt::cleanup (); return false; + } - audqt::init (); skins_init_main (false); create_plugin_windows (); diff -Nru audacious-plugins-4.1/src/skins-qt/search-select.cc audacious-plugins-4.2/src/skins-qt/search-select.cc --- audacious-plugins-4.1/src/skins-qt/search-select.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/search-select.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,211 @@ +/* Audacious - Cross-platform multimedia player + * Copyright (C) 2005-2011 Audacious development team. + * + * BMP - Cross-platform multimedia player + * Copyright (C) 2003-2004 BMP development team. + * + * Based on XMMS: + * Copyright (C) 1998-2003 XMMS development team. + * + * 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; under version 3 of the License. + * + * 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, see . + * + * The Audacious team does not consider modular code linking to + * Audacious or using our public API to be a derived work. + */ + +#include "actions-playlist.h" +#include "playlistwin.h" +#include "playlist-widget.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class SearchSelectDialog : public QDialog +{ +public: + SearchSelectDialog (QWidget * parent = nullptr); + +private: + void toggle_related_checkbox (QCheckBox * caller, QCheckBox * related); + void copy_selected_to_new (Playlist playlist); + void focus_first_selected_entry (Playlist playlist); + void search (); + + QLineEdit * m_entry_title, * m_entry_album, + * m_entry_artist, * m_entry_file_name; + QCheckBox * m_checkbox_clearprevsel, + * m_checkbox_autoenqueue, + * m_checkbox_newplaylist; +}; + +SearchSelectDialog::SearchSelectDialog (QWidget * parent) : QDialog (parent) +{ + setWindowTitle (_("Search entries in active playlist")); + setContentsMargins (audqt::margins.FourPt); + + auto logo = new QLabel; + int logo_size = audqt::to_native_dpi (48); + logo->setPixmap (QIcon::fromTheme ("edit-find").pixmap (logo_size, logo_size)); + + auto help_text = new QLabel (_("Select entries in playlist by filling one or more " + "fields. Fields use regular expressions syntax, case-insensitive. If you don't know how " + "regular expressions work, simply insert a literal portion of what you're searching for.")); + help_text->setWordWrap (true); + + auto label_title = new QLabel (_("Title:")); + m_entry_title = new QLineEdit; + m_entry_title->setFocus (); + + auto label_album = new QLabel (_("Album:")); + m_entry_album = new QLineEdit; + + auto label_artist = new QLabel (_("Artist:")); + m_entry_artist = new QLineEdit; + + auto label_file_name = new QLabel (_("File Name:")); + m_entry_file_name = new QLineEdit; + + m_checkbox_clearprevsel = new QCheckBox (_("Clear previous selection before searching")); + m_checkbox_autoenqueue = new QCheckBox (_("Automatically toggle queue for matching entries")); + m_checkbox_newplaylist = new QCheckBox (_("Create a new playlist with matching entries")); + m_checkbox_clearprevsel->setCheckState (Qt::Checked); + + QObject::connect (m_checkbox_autoenqueue, & QAbstractButton::toggled, [this] () { + toggle_related_checkbox (m_checkbox_autoenqueue, m_checkbox_newplaylist); + }); + + QObject::connect (m_checkbox_newplaylist, & QAbstractButton::toggled, [this] () { + toggle_related_checkbox (m_checkbox_newplaylist, m_checkbox_autoenqueue); + }); + + auto search = new QPushButton (_("Search")); + auto cancel = new QPushButton (_("Cancel")); + + auto buttonbox = new QDialogButtonBox; + buttonbox->addButton (search, QDialogButtonBox::AcceptRole); + buttonbox->addButton (cancel, QDialogButtonBox::RejectRole); + + QObject::connect (buttonbox, & QDialogButtonBox::accepted, this, & SearchSelectDialog::search); + QObject::connect (buttonbox, & QDialogButtonBox::rejected, this, & QDialog::close); + + auto hbox = audqt::make_hbox (nullptr); + hbox->addWidget (logo); + hbox->addWidget (help_text); + + auto grid = new QGridLayout; + grid->addLayout (hbox, 0, 0, 1, 2, Qt::AlignLeft); + grid->addWidget (label_title, 1, 0, Qt::AlignRight); + grid->addWidget (m_entry_title, 1, 1); + grid->addWidget (label_album, 2, 0, Qt::AlignRight); + grid->addWidget (m_entry_album, 2, 1); + grid->addWidget (label_artist, 3, 0, Qt::AlignRight); + grid->addWidget (m_entry_artist, 3, 1); + grid->addWidget (label_file_name, 4, 0, Qt::AlignRight); + grid->addWidget (m_entry_file_name, 4, 1); + grid->addWidget (m_checkbox_clearprevsel, 5, 0, 1, 2); + grid->addWidget (m_checkbox_autoenqueue, 6, 0, 1, 2); + grid->addWidget (m_checkbox_newplaylist, 7, 0, 1, 2); + + auto vbox = audqt::make_vbox (this); + vbox->addLayout (grid); + vbox->addWidget (buttonbox, 0, Qt::AlignBottom); +} + +void SearchSelectDialog::toggle_related_checkbox (QCheckBox * caller, QCheckBox * related) +{ + if (caller->isChecked ()) + related->setCheckState (Qt::Unchecked); +} + +void SearchSelectDialog::copy_selected_to_new (Playlist playlist) +{ + int entries = playlist.n_entries (); + Index items; + + for (int entry = 0; entry < entries; entry ++) + { + if (playlist.entry_selected (entry)) + { + items.append + (playlist.entry_filename (entry), + playlist.entry_tuple (entry, Playlist::NoWait), + playlist.entry_decoder (entry, Playlist::NoWait)); + } + } + + auto new_list = Playlist::new_playlist (); + new_list.insert_items (0, std::move (items), false); +} + +void SearchSelectDialog::focus_first_selected_entry (Playlist playlist) +{ + int entries = playlist.n_entries (); + for (int i = 0; i < entries; i ++) + { + if (playlist.entry_selected (i)) + { + playlistwin_list->set_focused (i); + return; + } + } +} + +void SearchSelectDialog::search () +{ + auto playlist = Playlist::active_playlist (); + + /* create a tuple with user search data */ + Tuple tuple; + tuple.set_str (Tuple::Title, m_entry_title->text ().toUtf8 ()); + tuple.set_str (Tuple::Album, m_entry_album->text ().toUtf8 ()); + tuple.set_str (Tuple::Artist, m_entry_artist->text ().toUtf8 ()); + tuple.set_str (Tuple::Basename, m_entry_file_name->text ().toUtf8 ()); + + /* check if previous selection should be cleared before searching */ + if (m_checkbox_clearprevsel->isChecked ()) + playlist.select_all (false); + + playlist.select_by_patterns (tuple); + + /* check if a new playlist should be created after searching */ + if (m_checkbox_newplaylist->isChecked ()) + copy_selected_to_new (playlist); + else + { + /* set focus on the first entry found */ + focus_first_selected_entry (playlist); + + /* check if matched entries should be queued */ + if (m_checkbox_autoenqueue->isChecked ()) + playlist.queue_insert_selected (-1); + } + + /* done here :) */ + close (); +} + +void action_playlist_search_and_select () +{ + auto dialog = new SearchSelectDialog; + dialog->setAttribute (Qt::WA_DeleteOnClose); + dialog->show (); +} diff -Nru audacious-plugins-4.1/src/skins-qt/skins_cfg.cc audacious-plugins-4.2/src/skins-qt/skins_cfg.cc --- audacious-plugins-4.1/src/skins-qt/skins_cfg.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/skins_cfg.cc 2022-07-10 01:12:34.000000000 +0000 @@ -60,6 +60,7 @@ "vu_mode", aud::numeric_string::str, /* windows */ + "active_titlebar_any", "TRUE", "always_on_top", "FALSE", "double_size", "FALSE", "equalizer_shaded", "FALSE", @@ -90,6 +91,7 @@ /* general */ {"autoscroll_songname", & config.autoscroll}, {"mainwin_use_bitmapfont", & config.mainwin_use_bitmapfont}, + {"active_titlebar_any", & config.active_titlebar_any}, {"twoway_scroll", & config.twoway_scroll}, /* visualizer */ @@ -206,6 +208,8 @@ WidgetCombo (nullptr, WidgetString (selected_skin, skin_select_cb), {nullptr, skin_combo_fill}), + WidgetCheck (N_("Display active titlebar when any window is focused"), + WidgetBool (config.active_titlebar_any, nullptr)), WidgetLabel (N_("Fonts")), WidgetTable ({{font_table_elements}}), WidgetCheck (N_("Use bitmap fonts (supports ASCII only)"), diff -Nru audacious-plugins-4.1/src/skins-qt/skins_cfg.h audacious-plugins-4.2/src/skins-qt/skins_cfg.h --- audacious-plugins-4.1/src/skins-qt/skins_cfg.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/skins_cfg.h 2022-07-10 01:12:34.000000000 +0000 @@ -39,6 +39,7 @@ int vu_mode; int analyzer_falloff, peaks_falloff; bool mainwin_use_bitmapfont; + bool active_titlebar_any; } skins_cfg_t; extern skins_cfg_t config; diff -Nru audacious-plugins-4.1/src/skins-qt/window.cc audacious-plugins-4.2/src/skins-qt/window.cc --- audacious-plugins-4.1/src/skins-qt/window.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/window.cc 2022-07-10 01:12:34.000000000 +0000 @@ -70,6 +70,17 @@ return true; } +void Window::changeEvent (QEvent * event) +{ + if (event->type () == QEvent::ActivationChange) + { + m_is_focused = isActiveWindow (); + config.active_titlebar_any ? dock_draw_all () : Window::queue_draw (); + } + + QWidget::changeEvent (event); +} + Window::~Window () { dock_remove_window (m_id); @@ -80,7 +91,10 @@ m_is_shaded (shaded) { if (id == WINDOW_MAIN) - setWindowFlags (Qt::Window | Qt::FramelessWindowHint); + // Qt::WindowMinimizeButtonHint is necessary on Windows + // to allow the window to be minimized via the taskbar + setWindowFlags (Qt::Window | Qt::FramelessWindowHint | + Qt::WindowMinimizeButtonHint); else setWindowFlags (Qt::Dialog | Qt::FramelessWindowHint); @@ -159,3 +173,8 @@ { widget->move (x * config.scale, y * config.scale); } + +bool Window::is_focused () +{ + return config.active_titlebar_any ? dock_is_focused () : isActiveWindow (); +} diff -Nru audacious-plugins-4.1/src/skins-qt/window.h audacious-plugins-4.2/src/skins-qt/window.h --- audacious-plugins-4.1/src/skins-qt/window.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/skins-qt/window.h 2022-07-10 01:12:34.000000000 +0000 @@ -42,6 +42,7 @@ void resize (int w, int h); void set_shapes (QRegion * shape, QRegion * sshape); bool is_shaded () { return m_is_shaded; } + bool is_focused (); void set_shaded (bool shaded); void put_widget (bool shaded, Widget * widget, int x, int y); void move_widget (bool shaded, Widget * widget, int x, int y); @@ -58,9 +59,11 @@ private: void apply_shape (); + void changeEvent (QEvent * event); const int m_id; bool m_is_shaded = false; + bool m_is_focused = false; bool m_is_moving = false; QWidget * m_normal = nullptr, * m_shaded = nullptr; SmartPtr m_shape, m_sshape; @@ -72,5 +75,7 @@ void dock_move_start (int id, int x, int y); void dock_move (int x, int y); void dock_change_scale (int old_scale, int new_scale); +void dock_draw_all (); +bool dock_is_focused (); #endif diff -Nru audacious-plugins-4.1/src/sndfile/plugin.cc audacious-plugins-4.2/src/sndfile/plugin.cc --- audacious-plugins-4.1/src/sndfile/plugin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/sndfile/plugin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -219,7 +219,7 @@ format = "Core Audio File"; break; default: - format = "Unknown sndfile"; + format = nullptr; } switch (sfinfo.format & SF_FORMAT_SUBMASK) @@ -294,6 +294,15 @@ subformat = nullptr; } + if (format == nullptr) + { + SF_FORMAT_INFO info = {.format = sfinfo.format & SF_FORMAT_SUBMASK}; + if (sf_command (sndfile, SFC_GET_FORMAT_INFO, & info, sizeof (info)) == 0) + format = info.name; + else + format = "Unknown format"; + } + if (subformat != nullptr) tuple.set_format (str_printf ("%s (%s)", format, subformat), sfinfo.channels, sfinfo.samplerate, 0); diff -Nru audacious-plugins-4.1/src/streamtuner/meson.build audacious-plugins-4.2/src/streamtuner/meson.build --- audacious-plugins-4.1/src/streamtuner/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/streamtuner/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,4 +1,9 @@ -qtnetwork_dep = dependency('qt5', version: qt_req, required: false, modules: ['Network']) +if get_option('qt6') + qtnetwork_dep = dependency('qt6', version: qt_req, required: false, modules: ['Network']) +else + qtnetwork_dep = dependency('qt5', version: qt_req, required: false, modules: ['Network']) +endif + have_streamtuner = qtnetwork_dep.found() diff -Nru audacious-plugins-4.1/src/ui-common/dialogs-qt.cc audacious-plugins-4.2/src/ui-common/dialogs-qt.cc --- audacious-plugins-4.1/src/ui-common/dialogs-qt.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ui-common/dialogs-qt.cc 2022-07-10 01:12:34.000000000 +0000 @@ -21,12 +21,33 @@ #include #include +#include + +static QMessageBox * create_message_box (QMessageBox::Icon icon, + const QString & title, const QString & message, QWidget * parent) +{ + auto msgbox = new QMessageBox (icon, title, message, QMessageBox::Close, parent); + msgbox->setAttribute (Qt::WA_DeleteOnClose); + msgbox->setTextInteractionFlags (Qt::TextSelectableByMouse); + msgbox->button (QMessageBox::Close)->setText (audqt::translate_str (N_("_Close"))); + return msgbox; +} + +static void add_message (QMessageBox * msgbox, QString message) +{ + QString old = msgbox->text (); + if (old.count (QChar::LineFeed) >= 9) + message = _("\n(Further messages have been hidden.)"); + if (! old.contains (message)) + msgbox->setText (old + QChar::LineFeed + message); +} void DialogWindows::create_progress () { if (! m_progress) { m_progress = new QMessageBox (m_parent); + m_progress->setAttribute (Qt::WA_DeleteOnClose); m_progress->setIcon (QMessageBox::Information); m_progress->setWindowTitle (_("Working ...")); m_progress->setWindowModality (Qt::WindowModal); @@ -35,12 +56,22 @@ void DialogWindows::show_error (const char * message) { - audqt::simple_message (_("Error"), message, QMessageBox::Critical); + if (m_error) + add_message (m_error, message); + else + m_error = create_message_box (QMessageBox::Critical, _("Error"), message, m_parent); + + m_error->show (); } void DialogWindows::show_info (const char * message) { - audqt::simple_message (_("Information"), message, QMessageBox::Information); + if (m_info) + add_message (m_info, message); + else + m_info = create_message_box (QMessageBox::Information, _("Information"), message, m_parent); + + m_info->show (); } void DialogWindows::show_progress (const char * message) diff -Nru audacious-plugins-4.1/src/ui-common/dialogs-qt.h audacious-plugins-4.2/src/ui-common/dialogs-qt.h --- audacious-plugins-4.1/src/ui-common/dialogs-qt.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ui-common/dialogs-qt.h 2022-07-10 01:12:34.000000000 +0000 @@ -21,6 +21,7 @@ #define DIALOG_WINDOWS_H #include +#include class QMessageBox; class QWidget; @@ -33,7 +34,7 @@ private: QWidget * m_parent; - QMessageBox * m_progress = nullptr; + QPointer m_progress, m_info, m_error; void create_progress (); void show_error (const char * message); diff -Nru audacious-plugins-4.1/src/ui-common/menu-ops-gtk.cc audacious-plugins-4.2/src/ui-common/menu-ops-gtk.cc --- audacious-plugins-4.1/src/ui-common/menu-ops-gtk.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ui-common/menu-ops-gtk.cc 2022-07-10 01:12:34.000000000 +0000 @@ -23,8 +23,10 @@ #include #include +#include #include #include +#include #include static void uri_get_func (GtkClipboard *, GtkSelectionData * sel, unsigned, void * data) @@ -122,6 +124,15 @@ /* don't trim trailing slash, it may be important */ StringBuf folder = str_copy (filename, slash + 1 - filename); + /* check that it's really a folder so as to prevent opening random + * files from a malicious playlist */ + if (! VFSFile::test_file (folder, VFS_IS_DIR)) + { + aud_ui_show_error (str_printf + (_("%s does not appear to be a valid folder."), & filename[0])); + return; + } + GError * error = nullptr; gtk_show_uri (gdk_screen_get_default (), folder, GDK_CURRENT_TIME, & error); diff -Nru audacious-plugins-4.1/src/ui-common/menu-ops-qt.cc audacious-plugins-4.2/src/ui-common/menu-ops-qt.cc --- audacious-plugins-4.1/src/ui-common/menu-ops-qt.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/ui-common/menu-ops-qt.cc 2022-07-10 01:12:34.000000000 +0000 @@ -26,7 +26,10 @@ #include #include +#include +#include #include +#include #include void pl_copy () @@ -100,5 +103,16 @@ return; /* don't trim trailing slash, it may be important */ - QDesktopServices::openUrl (QString::fromUtf8 (filename, slash + 1 - filename)); + StringBuf folder = str_copy (filename, slash + 1 - filename); + + /* check that it's really a folder so as to prevent opening random + * files from a malicious playlist */ + if (! VFSFile::test_file (folder, VFS_IS_DIR)) + { + aud_ui_show_error (str_printf + (_("%s does not appear to be a valid folder."), & filename[0])); + return; + } + + QDesktopServices::openUrl (QString (folder)); } diff -Nru audacious-plugins-4.1/src/xsf/ao.h audacious-plugins-4.2/src/xsf/ao.h --- audacious-plugins-4.1/src/xsf/ao.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/ao.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -// -// Audio Overload SDK -// -// Fake ao.h to set up the general Audio Overload style environment -// - -#ifndef __AO_H -#define __AO_H - -#include - -#define AO_SUCCESS 1 -#define AO_FAIL 0 -#define AO_FAIL_DECOMPRESSION -1 - -#define MAX_DISP_INFO_LENGTH 256 -#define AUDIO_RATE (44100) - -enum -{ - COMMAND_NONE = 0, - COMMAND_PREV, - COMMAND_NEXT, - COMMAND_RESTART, - COMMAND_HAS_PREV, - COMMAND_HAS_NEXT, - COMMAND_GET_MIN, - COMMAND_GET_MAX, - COMMAND_JUMP -}; - -int ao_get_lib(char *filename, uint8_t **buffer, uint64_t *length); - -#endif // AO_H diff -Nru audacious-plugins-4.1/src/xsf/corlett.cc audacious-plugins-4.2/src/xsf/corlett.cc --- audacious-plugins-4.1/src/xsf/corlett.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/corlett.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,385 +0,0 @@ -/* - - Audio Overload SDK - - Copyright (c) 2007-2008, R. Belmont and Richard Bannister. - - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the names of R. Belmont and Richard Bannister nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// corlett.c - -// Decodes file format designed by Neill Corlett (PSF, QSF, ...) - -/* - - First 3 bytes: ASCII signature: "PSF" (case sensitive) - -- Next 1 byte: Version byte - The version byte is used to determine the type of PSF file. It does NOT - affect the basic structure of the file in any way. - - Currently accepted version bytes are: - 0x01: Playstation (PSF1) - 0x02: Playstation 2 (PSF2) - 0x11: Saturn (SSF) [TENTATIVE] - 0x12: Dreamcast (DSF) [TENTATIVE] - 0x21: Nintendo 64 (USF) [RESERVED] - 0x41: Capcom QSound (QSF) - -- Next 4 bytes: Size of reserved area (R), little-endian unsigned long - -- Next 4 bytes: Compressed program length (N), little-endian unsigned long - This is the length of the program data _after_ compression. - -- Next 4 bytes: Compressed program CRC-32, little-endian unsigned long - This is the CRC-32 of the program data _after_ compression. Filling in - this value is mandatory, as a PSF file may be regarded as corrupt if it - does not match. - -- Next R bytes: Reserved area. - May be empty if R is 0 bytes. - -- Next N bytes: Compressed program, in zlib compress() format. - May be empty if N is 0 bytes. - -The following data is optional and may be omitted: - -- Next 5 bytes: ASCII signature: "[TAG]" (case sensitive) - If these 5 bytes do not match, then the remainder of the file may be - regarded as invalid and discarded. - -- Remainder of file: Uncompressed ASCII tag data. -*/ - -#include -#include -#include - -#include - -#define WANT_AUD_BSWAP -#include -#include - -#include "ao.h" -#include "corlett.h" - -#define LE32(x) FROM_LE32(x) - -#define DECOMP_MAX_SIZE ((32 * 1024 * 1024) + 12) - -int corlett_decode(uint8_t *input, uint32_t input_len, uint8_t **output, uint64_t *size, corlett_t **c) -{ - uint32_t *buf; - uint32_t res_area, comp_crc, actual_crc; - uint8_t *decomp_dat, *tag_dec; - uLongf decomp_length, comp_length; - - // 32-bit pointer to data - buf = (uint32_t *)input; - - // Check we have a PSF format file. - if ((input[0] != 'P') || (input[1] != 'S') || (input[2] != 'F')) - { - return AO_FAIL; - } - - // Get our values - res_area = LE32(buf[1]); - comp_length = LE32(buf[2]); - comp_crc = LE32(buf[3]); - - if (comp_length > 0) - { - // Check length - if (input_len < comp_length + 16) - return AO_FAIL; - - // Check CRC is correct - actual_crc = crc32(0, (unsigned char *)&buf[4+(res_area/4)], comp_length); - if (actual_crc != comp_crc) - return AO_FAIL; - - // Decompress data if any - decomp_dat = (uint8_t *) malloc(DECOMP_MAX_SIZE); - decomp_length = DECOMP_MAX_SIZE; - if (uncompress(decomp_dat, &decomp_length, (unsigned char *)&buf[4+(res_area/4)], comp_length) != Z_OK) - { - free(decomp_dat); - return AO_FAIL; - } - - // Resize memory buffer to what we actually need - decomp_dat = (uint8_t *) realloc(decomp_dat, (size_t)decomp_length + 1); - } - else - { - decomp_dat = nullptr; - decomp_length = 0; - } - - // Make structure - *c = (corlett_t *) malloc(sizeof(corlett_t)); - if (!(*c)) - { - free(decomp_dat); - return AO_FAIL; - } - memset(*c, 0, sizeof(corlett_t)); - strcpy((*c)->inf_title, "n/a"); - strcpy((*c)->inf_copy, "n/a"); - strcpy((*c)->inf_artist, "n/a"); - strcpy((*c)->inf_game, "n/a"); - strcpy((*c)->inf_year, "n/a"); - strcpy((*c)->inf_length, "n/a"); - strcpy((*c)->inf_fade, "n/a"); - - // set reserved section pointer - (*c)->res_section = &buf[4]; - (*c)->res_size = res_area; - - // Return it - if (output != nullptr && size != nullptr) - { - *output = decomp_dat; - *size = decomp_length; - } - else - free(decomp_dat); - - // Next check for tags - input_len -= (comp_length + 16 + res_area); - if (input_len < 5) - return AO_SUCCESS; - -// printf("\n\nNew corlett: input len %d comp length %d res area %d\n", input_len, comp_length, res_area); - - tag_dec = input + (comp_length + res_area + 16); - if ((tag_dec[0] == '[') && (tag_dec[1] == 'T') && (tag_dec[2] == 'A') && (tag_dec[3] == 'G') && (tag_dec[4] == ']')) - { - int l, num_tags, data; - - // Tags found! - tag_dec += 5; - input_len -= 5; - - data = false; - num_tags = 0; - l = 0; - while (input_len && (num_tags < MAX_UNKNOWN_TAGS)) - { - if (data) - { - if ((*tag_dec == 0xA) || (*tag_dec == 0x00)) - { - (*c)->tag_data[num_tags][l] = 0; - data = false; - num_tags++; - l = 0; - } - else - { - (*c)->tag_data[num_tags][l++] = *tag_dec; - } - } - else - { - if (*tag_dec == '=') - { - (*c)->tag_name[num_tags][l] = 0; - l = 0; - data = true; - } - else - { - (*c)->tag_name[num_tags][l++] = *tag_dec; - } - } - - tag_dec++; - input_len--; - } - - - // Now, process that tag array into what we expect - for (num_tags = 0; num_tags < MAX_UNKNOWN_TAGS; num_tags++) - { - // See if tag belongs in one of the special fields we have - if (!strcmp_nocase((*c)->tag_name[num_tags], "_lib")) - { - strcpy((*c)->lib, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib2", 5)) - { - strcpy((*c)->libaux[0], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib3", 5)) - { - strcpy((*c)->libaux[1], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib4", 5)) - { - strcpy((*c)->libaux[2], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib5", 5)) - { - strcpy((*c)->libaux[3], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib6", 5)) - { - strcpy((*c)->libaux[4], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib7", 5)) - { - strcpy((*c)->libaux[5], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib8", 5)) - { - strcpy((*c)->libaux[6], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_lib9", 5)) - { - strcpy((*c)->libaux[7], (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "_refresh", 8)) - { - strcpy((*c)->inf_refresh, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "title", 5)) - { - strcpy((*c)->inf_title, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "copyright", 9)) - { - strcpy((*c)->inf_copy, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "artist", 6)) - { - strcpy((*c)->inf_artist, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "game", 4)) - { - strcpy((*c)->inf_game, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "year", 4)) - { - strcpy((*c)->inf_year, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "length", 6)) - { - strcpy((*c)->inf_length, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - else if (!strncmp((*c)->tag_name[num_tags], "fade", 4)) - { - strcpy((*c)->inf_fade, (*c)->tag_data[num_tags]); - (*c)->tag_data[num_tags][0] = 0; - (*c)->tag_name[num_tags][0] = 0; - } - } - } - - // Bingo - return AO_SUCCESS; -} - -uint32_t psfTimeToMS(char *str) -{ - int x, c=0; - uint32_t acc=0; - char s[100]; - - strncpy(s,str,100); - s[99]=0; - - for (x=strlen(s); x>=0; x--) - { - if (s[x]=='.' || s[x]==',') - { - acc=atoi(s+x+1); - s[x]=0; - } - else if (s[x]==':') - { - if(c==0) - { - acc+=atoi(s+x+1)*10; - } - else if(c==1) - { - acc+=atoi(s+x+(x?1:0))*10*60; - } - - c++; - s[x]=0; - } - else if (x==0) - { - if(c==0) - { - acc+=atoi(s+x)*10; - } - else if(c==1) - { - acc+=atoi(s+x)*10*60; - } - else if(c==2) - { - acc+=atoi(s+x)*10*60*60; - } - } - } - - acc*=100; - return(acc); -} - diff -Nru audacious-plugins-4.1/src/xsf/corlett.h audacious-plugins-4.2/src/xsf/corlett.h --- audacious-plugins-4.1/src/xsf/corlett.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/corlett.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -// -// Audio Overload -// Emulated music player -// -// (C) 2000-2008 Richard F. Bannister -// - -// corlett.h - -#define MAX_UNKNOWN_TAGS 32 - -typedef struct { - char lib[256]; - char libaux[8][256]; - - char inf_title[256]; - char inf_copy[256]; - char inf_artist[256]; - char inf_game[256]; - char inf_year[256]; - char inf_length[256]; - char inf_fade[256]; - - char inf_refresh[256]; - - char tag_name[MAX_UNKNOWN_TAGS][256]; - char tag_data[MAX_UNKNOWN_TAGS][256]; - - uint32_t *res_section; - uint32_t res_size; -} corlett_t; - -int corlett_decode(uint8_t *input, uint32_t input_len, uint8_t **output, uint64_t *size, corlett_t **c); -uint32_t psfTimeToMS(char *str); - diff -Nru audacious-plugins-4.1/src/xsf/desmume/armcpu.cc audacious-plugins-4.2/src/xsf/desmume/armcpu.cc --- audacious-plugins-4.1/src/xsf/desmume/armcpu.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/armcpu.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,187 +1,82 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2009-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#include "arm_instructions.h" -#include "thumb_instructions.h" +#include +#include +#include +#include +#include "types.h" +#include "instructions.h" #include "cp15.h" #include "bios.h" -#include -#include - -const unsigned char arm_cond_table[16*16] = { - /* N=0, Z=0, C=0, V=0 */ - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, - 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x20, - /* N=0, Z=0, C=0, V=1 */ - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x00, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=0, Z=0, C=1, V=0 */ - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF, - 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x20, - /* N=0, Z=0, C=1, V=1 */ - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00, - 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=0, Z=1, C=0, V=0 */ - 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF, - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, - /* N=0, Z=1, C=0, V=1 */ - 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x00, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=0, Z=1, C=1, V=0 */ - 0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0xFF, - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, - /* N=0, Z=1, C=1, V=1 */ - 0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0x00, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=1, Z=0, C=0, V=0 */ - 0x00,0xFF,0x00,0xFF,0xFF,0x00,0x00,0xFF, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=1, Z=0, C=0, V=1 */ - 0x00,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00, - 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x20, - /* N=1, Z=0, C=1, V=0 */ - 0x00,0xFF,0xFF,0x00,0xFF,0x00,0x00,0xFF, - 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=1, Z=0, C=1, V=1 */ - 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00, - 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x20, - /* N=1, Z=1, C=0, V=0 */ - 0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=1, Z=1, C=0, V=1 */ - 0xFF,0x00,0x00,0xFF,0xFF,0x00,0xFF,0x00, - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, - /* N=1, Z=1, C=1, V=0 */ - 0xFF,0x00,0xFF,0x00,0xFF,0x00,0x00,0xFF, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, - /* N=1, Z=1, C=1, V=1 */ - 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, - 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, -}; - -armcpu_t NDS_ARM7; -armcpu_t NDS_ARM9; - -#define SWAP(a, b, c) do \ - { \ - c=a; \ - a=b; \ - b=c; \ - } \ - while(0) - -#ifdef GDB_STUB - -#define STALLED_CYCLE_COUNT 10 - -static void -stall_cpu( void *instance) { - armcpu_t *armcpu = (armcpu_t *)instance; - - armcpu->stalled = 1; -} - -static void -unstall_cpu( void *instance) { - armcpu_t *armcpu = (armcpu_t *)instance; - - armcpu->stalled = 0; -} +#include "NDSSystem.h" +#include "MMU_timing.h" +#ifdef HAVE_LUA +#include "lua-engine.h" +#endif -static void -install_post_exec_fn( void *instance, - void (*ex_fn)( void *, u32 adr, int thumb), - void *fn_data) { - armcpu_t *armcpu = (armcpu_t *)instance; +template static uint32_t armcpu_prefetch(); - armcpu->post_ex_fn = ex_fn; - armcpu->post_ex_fn_data = fn_data; +static inline uint32_t armcpu_prefetch(armcpu_t *armcpu) +{ + if (!armcpu->proc_ID) + return armcpu_prefetch<0>(); + else + return armcpu_prefetch<1>(); } -static void -remove_post_exec_fn( void *instance) { - armcpu_t *armcpu = (armcpu_t *)instance; - - armcpu->post_ex_fn = nullptr; -} -#endif +armcpu_t NDS_ARM7; +armcpu_t NDS_ARM9; -#ifdef GDB_STUB -int armcpu_new( armcpu_t *armcpu, u32 id, - struct armcpu_memory_iface *mem_if, - struct armcpu_ctrl_iface **ctrl_iface_ret) -#else -int armcpu_new( armcpu_t *armcpu, u32 id) -#endif +int armcpu_new(armcpu_t *armcpu, uint32_t id) { armcpu->proc_ID = id; - if(id==0) - armcpu->swi_tab = ARM9_swi_tab; - else - armcpu->swi_tab = ARM7_swi_tab; - -#ifdef GDB_STUB - armcpu->mem_if = mem_if; - - /* populate the control interface */ - armcpu->ctrl_iface.stall = stall_cpu; - armcpu->ctrl_iface.unstall = unstall_cpu; - armcpu->ctrl_iface.read_reg = read_cpu_reg; - armcpu->ctrl_iface.set_reg = set_cpu_reg; - armcpu->ctrl_iface.install_post_ex_fn = install_post_exec_fn; - armcpu->ctrl_iface.remove_post_ex_fn = remove_post_exec_fn; - armcpu->ctrl_iface.data = armcpu; - - *ctrl_iface_ret = &armcpu->ctrl_iface; - armcpu->stalled = 0; - armcpu->post_ex_fn = nullptr; -#endif armcpu_init(armcpu, 0); return 0; } -void armcpu_init(armcpu_t *armcpu, u32 adr) +// call this whenever CPSR is changed (other than CNVZQ or T flags); interrupts may need to be unleashed +void armcpu_t::changeCPSR() { - u32 i; - - armcpu->LDTBit = (armcpu->proc_ID==0); //Si ARM9 utiliser le syte v5 pour le load - armcpu->intVector = 0xFFFF0000 * (armcpu->proc_ID==0); - armcpu->waitIRQ = false; - armcpu->wirq = false; + // but all it does is give them a chance to unleash by forcing an immediate reschedule + // TODO - we could actually set CPSR through here and look for a change in the I bit + // that would be a little optimization as well as a safety measure if we prevented setting CPSR directly + NDS_Reschedule(); +} -#ifdef GDB_STUB - armcpu->irq_flag = 0; +void armcpu_init(armcpu_t *armcpu, uint32_t adr) +{ +#if defined(_M_X64) || defined(__x86_64__) + memcpy(&armcpu->cond_table[0], &arm_cond_table[0], sizeof(arm_cond_table)); #endif - if(armcpu->coproc[15]) free(armcpu->coproc[15]); + armcpu->LDTBit = !armcpu->proc_ID; // Si ARM9 utiliser le syte v5 pour le load + armcpu->intVector = 0xFFFF0000 * !armcpu->proc_ID; + armcpu->waitIRQ = false; + armcpu->halt_IE_and_IF = false; + armcpu->intrWaitARM_state = 0; - for(i = 0; i < 15; ++i) - { + for (int i = 0; i < 16; ++i) armcpu->R[i] = 0; - armcpu->coproc[i] = nullptr; - } armcpu->CPSR.val = armcpu->SPSR.val = SYS; @@ -194,294 +89,272 @@ armcpu->SPSR_svc.val = armcpu->SPSR_abt.val = armcpu->SPSR_und.val = armcpu->SPSR_irq.val = armcpu->SPSR_fiq.val = 0; -#ifdef GDB_STUB - armcpu->instruct_adr = adr; - armcpu->R[15] = adr + 8; -#else - armcpu->R[15] = adr; -#endif - armcpu->next_instruction = adr; - armcpu->coproc[15] = (armcp_t*)armcp15_new(armcpu); - -#ifndef GDB_STUB armcpu_prefetch(armcpu); -#endif } -u32 armcpu_switchMode(armcpu_t *armcpu, u8 mode) +uint32_t armcpu_switchMode(armcpu_t *armcpu, uint8_t mode) { - u32 oldmode = armcpu->CPSR.bits.mode; + uint32_t oldmode = armcpu->CPSR.bits.mode; - switch(oldmode) + switch (oldmode) { - case USR : - case SYS : + case USR: + case SYS: armcpu->R13_usr = armcpu->R[13]; armcpu->R14_usr = armcpu->R[14]; break; - - case FIQ : - { - u32 tmp; - SWAP(armcpu->R[8], armcpu->R8_fiq, tmp); - SWAP(armcpu->R[9], armcpu->R9_fiq, tmp); - SWAP(armcpu->R[10], armcpu->R10_fiq, tmp); - SWAP(armcpu->R[11], armcpu->R11_fiq, tmp); - SWAP(armcpu->R[12], armcpu->R12_fiq, tmp); - armcpu->R13_fiq = armcpu->R[13]; - armcpu->R14_fiq = armcpu->R[14]; - armcpu->SPSR_fiq = armcpu->SPSR; - break; - } - case IRQ : + case FIQ: + std::swap(armcpu->R[8], armcpu->R8_fiq); + std::swap(armcpu->R[9], armcpu->R9_fiq); + std::swap(armcpu->R[10], armcpu->R10_fiq); + std::swap(armcpu->R[11], armcpu->R11_fiq); + std::swap(armcpu->R[12], armcpu->R12_fiq); + armcpu->R13_fiq = armcpu->R[13]; + armcpu->R14_fiq = armcpu->R[14]; + armcpu->SPSR_fiq = armcpu->SPSR; + break; + case IRQ: armcpu->R13_irq = armcpu->R[13]; armcpu->R14_irq = armcpu->R[14]; armcpu->SPSR_irq = armcpu->SPSR; break; - - case SVC : + case SVC: armcpu->R13_svc = armcpu->R[13]; armcpu->R14_svc = armcpu->R[14]; armcpu->SPSR_svc = armcpu->SPSR; break; - - case ABT : + case ABT: armcpu->R13_abt = armcpu->R[13]; armcpu->R14_abt = armcpu->R[14]; armcpu->SPSR_abt = armcpu->SPSR; break; - - case UND : + case UND: armcpu->R13_und = armcpu->R[13]; armcpu->R14_und = armcpu->R[14]; armcpu->SPSR_und = armcpu->SPSR; break; - default : - break; - } - - switch(mode) - { - case USR : - case SYS : - armcpu->R[13] = armcpu->R13_usr; - armcpu->R[14] = armcpu->R14_usr; - //SPSR = CPSR; - break; - - case FIQ : - { - u32 tmp; - SWAP(armcpu->R[8], armcpu->R8_fiq, tmp); - SWAP(armcpu->R[9], armcpu->R9_fiq, tmp); - SWAP(armcpu->R[10], armcpu->R10_fiq, tmp); - SWAP(armcpu->R[11], armcpu->R11_fiq, tmp); - SWAP(armcpu->R[12], armcpu->R12_fiq, tmp); - armcpu->R[13] = armcpu->R13_fiq; - armcpu->R[14] = armcpu->R14_fiq; - armcpu->SPSR = armcpu->SPSR_fiq; - break; - } - - case IRQ : - armcpu->R[13] = armcpu->R13_irq; - armcpu->R[14] = armcpu->R14_irq; - armcpu->SPSR = armcpu->SPSR_irq; - break; - - case SVC : - armcpu->R[13] = armcpu->R13_svc; - armcpu->R[14] = armcpu->R14_svc; - armcpu->SPSR = armcpu->SPSR_svc; - break; - - case ABT : - armcpu->R[13] = armcpu->R13_abt; - armcpu->R[14] = armcpu->R14_abt; - armcpu->SPSR = armcpu->SPSR_abt; - break; - - case UND : - armcpu->R[13] = armcpu->R13_und; - armcpu->R[14] = armcpu->R14_und; - armcpu->SPSR = armcpu->SPSR_und; - break; + default: + fprintf(stderr, "switchMode: WRONG mode %02X\n",mode); + } - default : - break; + switch (mode) + { + case USR: + case SYS: + armcpu->R[13] = armcpu->R13_usr; + armcpu->R[14] = armcpu->R14_usr; + //SPSR = CPSR; + break; + case FIQ: + std::swap(armcpu->R[8], armcpu->R8_fiq); + std::swap(armcpu->R[9], armcpu->R9_fiq); + std::swap(armcpu->R[10], armcpu->R10_fiq); + std::swap(armcpu->R[11], armcpu->R11_fiq); + std::swap(armcpu->R[12], armcpu->R12_fiq); + armcpu->R[13] = armcpu->R13_fiq; + armcpu->R[14] = armcpu->R14_fiq; + armcpu->SPSR = armcpu->SPSR_fiq; + break; + case IRQ: + armcpu->R[13] = armcpu->R13_irq; + armcpu->R[14] = armcpu->R14_irq; + armcpu->SPSR = armcpu->SPSR_irq; + break; + case SVC: + armcpu->R[13] = armcpu->R13_svc; + armcpu->R[14] = armcpu->R14_svc; + armcpu->SPSR = armcpu->SPSR_svc; + break; + case ABT: + armcpu->R[13] = armcpu->R13_abt; + armcpu->R[14] = armcpu->R14_abt; + armcpu->SPSR = armcpu->SPSR_abt; + break; + case UND: + armcpu->R[13] = armcpu->R13_und; + armcpu->R[14] = armcpu->R14_und; + armcpu->SPSR = armcpu->SPSR_und; + break; + default: + break; } armcpu->CPSR.bits.mode = mode & 0x1F; + armcpu->changeCPSR(); return oldmode; } -u32 armcpu_prefetch(armcpu_t *armcpu) +uint32_t armcpu_Wait4IRQ(armcpu_t *cpu) { -#ifdef GDB_STUB - u32 temp_instruction; -#endif + cpu->waitIRQ = true; + cpu->halt_IE_and_IF = true; + return 1; +} - if(armcpu->CPSR.bits.T == 0) - { -#ifdef GDB_STUB - temp_instruction = - armcpu->mem_if->prefetch32( armcpu->mem_if->data, - armcpu->next_instruction); - - if ( !armcpu->stalled) { - armcpu->instruction = temp_instruction; - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction += 4; - armcpu->R[15] = armcpu->next_instruction + 4; - } -#else - armcpu->instruction = MMU_read32_acl(armcpu->proc_ID, armcpu->next_instruction,CP15_ACCESS_EXECUTE); +template static inline uint32_t armcpu_prefetch() +{ + armcpu_t *const armcpu = &ARMPROC; + uint32_t curInstruction = armcpu->next_instruction; - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction += 4; - armcpu->R[15] = armcpu->next_instruction + 4; -#endif + if (!armcpu->CPSR.bits.T) + { + curInstruction &= 0xFFFFFFFC; // please don't change this to 0x0FFFFFFC -- the NDS will happily run on 0xF******* addresses all day long + // please note that we must setup R[15] before reading the instruction since there is a protection + // which prevents PC > 0x3FFF from reading the bios region + armcpu->instruct_adr = curInstruction; + armcpu->next_instruction = curInstruction + 4; + armcpu->R[15] = curInstruction + 8; + armcpu->instruction = _MMU_read32(curInstruction); - return MMU.MMU_WAIT32[armcpu->proc_ID][(armcpu->instruct_adr>>24)&0xF]; + return MMU_codeFetchCycles(curInstruction); } + curInstruction &= 0xFFFFFFFE; // please don't change this to 0x0FFFFFFE -- the NDS will happily run on 0xF******* addresses all day long + // please note that we must setup R[15] before reading the instruction since there is a protection + // which prevents PC > 0x3FFF from reading the bios region + armcpu->instruct_adr = curInstruction; + armcpu->next_instruction = curInstruction + 2; + armcpu->R[15] = curInstruction + 4; + armcpu->instruction = _MMU_read16(curInstruction); -#ifdef GDB_STUB - temp_instruction = - armcpu->mem_if->prefetch16( armcpu->mem_if->data, - armcpu->next_instruction); - - if ( !armcpu->stalled) { - armcpu->instruction = temp_instruction; - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction = armcpu->next_instruction + 2; - armcpu->R[15] = armcpu->next_instruction + 2; + if (!PROCNUM) + { + // arm9 fetches 2 instructions at a time in thumb mode + if (!(curInstruction == armcpu->instruct_adr + 2 && (curInstruction & 2))) + return MMU_codeFetchCycles(curInstruction); + else + return 0; } -#else - armcpu->instruction = MMU_read16_acl(armcpu->proc_ID, armcpu->next_instruction,CP15_ACCESS_EXECUTE); - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction += 2; - armcpu->R[15] = armcpu->next_instruction + 2; -#endif - - return MMU.MMU_WAIT16[armcpu->proc_ID][(armcpu->instruct_adr>>24)&0xF]; + return MMU_codeFetchCycles(curInstruction); } - -BOOL armcpu_irqExeption(armcpu_t *armcpu) +// TODO - merge with armcpu_irqException? +// http://www.ethernut.de/en/documents/arm-exceptions.html +// http://docs.google.com/viewer?a=v&q=cache:V4ht1YkxprMJ:www.cs.nctu.edu.tw/~wjtsai/EmbeddedSystemDesign/Ch3-1.pdf+arm+exception+handling&hl=en&gl=us&pid=bl&srcid=ADGEEShx9VTHbUhWdDOrTVRzLkcCsVfJiijncNDkkgkrlJkLa7D0LCpO8fQ_hhU3DTcgZh9rcZWWQq4TYhhCovJ625h41M0ZUX3WGasyzWQFxYzDCB-VS6bsUmpoJnRxAc-bdkD0qmsu&sig=AHIEtbR9VHvDOCRmZFQDUVwy53iJDjoSPQ +void armcpu_exception(armcpu_t *cpu, uint32_t number) { - Status_Reg tmp; + Mode cpumode = USR; + switch (number) + { + case EXCEPTION_RESET: + cpumode = SVC; + break; + case EXCEPTION_UNDEFINED_INSTRUCTION: + cpumode = UND; + break; + case EXCEPTION_SWI: + cpumode = SVC; + break; + case EXCEPTION_PREFETCH_ABORT: + cpumode = ABT; + break; + case EXCEPTION_DATA_ABORT: + cpumode = ABT; + break; + case EXCEPTION_RESERVED_0x14: + execute = false; + break; + case EXCEPTION_IRQ: + cpumode = IRQ; + break; + case EXCEPTION_FAST_IRQ: + cpumode = FIQ; + } - if(armcpu->CPSR.bits.I) return false; + Status_Reg tmp = cpu->CPSR; + armcpu_switchMode(cpu, cpumode); // enter new mode + cpu->R[14] = cpu->next_instruction; + cpu->SPSR = tmp; // save old CPSR as new SPSR + cpu->CPSR.bits.T = 0; // handle as ARM32 code + cpu->CPSR.bits.I = 1; + cpu->changeCPSR(); + cpu->R[15] = cpu->intVector + number; + cpu->next_instruction = cpu->R[15]; + fprintf(stderr, "armcpu_exception!\n"); -#ifdef GDB_STUB - armcpu->irq_flag = 0; -#endif + // HOW DOES THIS WORTK WITHOUT A PREFETCH, LIKE IRQ BELOW? + // I REALLY WISH WE DIDNT PREFETCH BEFORE EXECUTING +} + +bool armcpu_irqException(armcpu_t *armcpu) +{ + Status_Reg tmp; tmp = armcpu->CPSR; armcpu_switchMode(armcpu, IRQ); -#ifdef GDB_STUB - armcpu->R[14] = armcpu->next_instruction + 4; -#else armcpu->R[14] = armcpu->instruct_adr + 4; -#endif armcpu->SPSR = tmp; armcpu->CPSR.bits.T = 0; armcpu->CPSR.bits.I = 1; armcpu->next_instruction = armcpu->intVector + 0x18; armcpu->waitIRQ = 0; -#ifndef GDB_STUB - armcpu->R[15] = armcpu->next_instruction + 8; + // must retain invariant of having next instruction to be executed prefetched + // (yucky) armcpu_prefetch(armcpu); -#endif return true; } -/* -static BOOL armcpu_prefetchExeption(armcpu_t *armcpu) -{ - Status_Reg tmp; - if(armcpu->CPSR.bits.I) return false; - tmp = armcpu->CPSR; - armcpu_switchMode(armcpu, ABT); - armcpu->R[14] = armcpu->next_instruction + 4; - armcpu->SPSR = tmp; - armcpu->CPSR.bits.T = 0; - armcpu->CPSR.bits.I = 1; - armcpu->next_instruction = armcpu->intVector + 0xC; - armcpu->R[15] = armcpu->next_instruction + 8; - armcpu->waitIRQ = 0; - return true; -} -*/ - -BOOL -armcpu_flagIrq( armcpu_t *armcpu) { - if(armcpu->CPSR.bits.I) return false; - - armcpu->waitIRQ = 0; - -#ifdef GDB_STUB - armcpu->irq_flag = 1; -#endif - return true; +uint32_t TRAPUNDEF(armcpu_t *cpu) +{ + if (!!cpu->intVector ^ (cpu->proc_ID == ARMCPU_ARM9)) + { + armcpu_exception(&NDS_ARM9, EXCEPTION_UNDEFINED_INSTRUCTION); + return 4; + } + else + { + execute = false; + return 4; + } } - -u32 armcpu_exec(armcpu_t *armcpu) +template uint32_t armcpu_exec() { - u32 c = 1; + // Usually, fetching and executing are processed parallelly. + // So this function stores the cycles of each process to + // the variables below, and returns appropriate cycle count. + uint32_t cFetch = 0; + uint32_t cExecute = 0; -#ifdef GDB_STUB - if ( armcpu->stalled) - return STALLED_CYCLE_COUNT; + // this assert is annoying. but sometimes it is handy. + //assert(ARMPROC.instruct_adr!=0x00000000); - /* check for interrupts */ - if ( armcpu->irq_flag) { - armcpu_irqExeption( armcpu); - } + //cFetch = armcpu_prefetch(&ARMPROC); - c = armcpu_prefetch(armcpu); + //fprintf(stderr, "%d: %08X\n",PROCNUM,ARMPROC.instruct_adr); - if ( armcpu->stalled) { - return c; - } -#endif - - if(armcpu->CPSR.bits.T == 0) + if (!ARMPROC.CPSR.bits.T) { -/* if((TEST_COND(CONDITION(armcpu->instruction), armcpu->CPSR)) || ((CONDITION(armcpu->instruction)==0xF)&&(CODE(armcpu->instruction)==0x5)))*/ - if((TEST_COND(CONDITION(armcpu->instruction), CODE(armcpu->instruction), armcpu->CPSR))) + if ( + CONDITION(ARMPROC.instruction) == 0x0E // fast path for unconditional instructions + || (TEST_COND(CONDITION(ARMPROC.instruction), CODE(ARMPROC.instruction), ARMPROC.CPSR)) // handles any condition + ) { - c += arm_instructions_set[INSTRUCTION_INDEX(armcpu->instruction)](armcpu); - } -#ifdef GDB_STUB - if ( armcpu->post_ex_fn != nullptr) { - /* call the external post execute function */ - armcpu->post_ex_fn( armcpu->post_ex_fn_data, - armcpu->instruct_adr, 0); - } -#else - c += armcpu_prefetch(armcpu); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(ARMPROC.instruct_adr, 4, ARMPROC.instruction, LUAMEMHOOK_EXEC); // should report even if condition=false? #endif - return c; + cExecute = arm_instructions_set[PROCNUM][INSTRUCTION_INDEX(ARMPROC.instruction)](ARMPROC.instruction); + } + else + cExecute = 1; // If condition=false: 1S cycle + cFetch = armcpu_prefetch(); + return MMU_fetchExecuteCycles(cExecute, cFetch); } - c += thumb_instructions_set[armcpu->instruction>>6](armcpu); - -#ifdef GDB_STUB - if ( armcpu->post_ex_fn != nullptr) { - /* call the external post execute function */ - armcpu->post_ex_fn( armcpu->post_ex_fn_data, armcpu->instruct_adr, 1); - } -#else - c += armcpu_prefetch(armcpu); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(ARMPROC.instruct_adr, 2, ARMPROC.instruction, LUAMEMHOOK_EXEC); #endif - return c; + cExecute = thumb_instructions_set[PROCNUM][ARMPROC.instruction>>6](ARMPROC.instruction); + + cFetch = armcpu_prefetch(); + return MMU_fetchExecuteCycles(cExecute, cFetch); } +// these templates needed to be instantiated manually +template uint32_t armcpu_exec<0>(); +template uint32_t armcpu_exec<1>(); diff -Nru audacious-plugins-4.1/src/xsf/desmume/armcpu.h audacious-plugins-4.2/src/xsf/desmume/armcpu.h --- audacious-plugins-4.1/src/xsf/desmume/armcpu.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/armcpu.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,92 +1,125 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2006-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#ifndef ARM_CPU -#define ARM_CPU +#pragma once #include "types.h" #include "bits.h" #include "MMU.h" +#include "instructions.h" -#define ARMCPU_ARM7 1 -#define ARMCPU_ARM9 0 +inline uint32_t CODE(uint32_t i) { return (i >> 25) & 0x7; } -#define CODE(i) (((i)>>25)&0X7) -#define OPCODE(i) (((i)>>21)&0xF) -#define SIGNEBIT(i) BIT_N(i,20) - -#define INSTRUCTION_INDEX(i) ((((i)>>16)&0xFF0)|(((i)>>4)&0xF)) - -#define ROR(i, j) ((((u32)(i))>>(j)) | (((u32)(i))<<(32-(j)))) - -#define UNSIGNED_OVERFLOW(a,b,c) ((BIT31(a)&BIT31(b)) | \ - ((BIT31(a)|BIT31(b))&BIT31(~c))) - -#define UNSIGNED_UNDERFLOW(a,b,c) ((BIT31(~a)&BIT31(b)) | \ - ((BIT31(~a)|BIT31(b))&BIT31(c))) - -#define SIGNED_OVERFLOW(a,b,c) ((BIT31(a)&BIT31(b)&BIT31(~c))|\ - (BIT31(~a)&BIT31(~(b))&BIT31(c))) - -#define SIGNED_UNDERFLOW(a,b,c) ((BIT31(a)&BIT31(~(b))&BIT31(~c))|\ - (BIT31(~a)&BIT31(b)&BIT31(c))) - -#define EQ 0x0 -#define NE 0x1 -#define CS 0x2 -#define CC 0x3 -#define MI 0x4 -#define PL 0x5 -#define VS 0x6 -#define VC 0x7 -#define HI 0x8 -#define LS 0x9 -#define GE 0xA -#define LT 0xB -#define GT 0xC -#define LE 0xD -#define AL 0xE +const uint32_t EXCEPTION_RESET = 0x00; +const uint32_t EXCEPTION_UNDEFINED_INSTRUCTION = 0x04; +const uint32_t EXCEPTION_SWI = 0x08; +const uint32_t EXCEPTION_PREFETCH_ABORT = 0x0C; +const uint32_t EXCEPTION_DATA_ABORT = 0x10; +const uint32_t EXCEPTION_RESERVED_0x14 = 0x14; +const uint32_t EXCEPTION_IRQ = 0x18; +const uint32_t EXCEPTION_FAST_IRQ = 0x1C; -/* -#define TEST_COND(cond, CPSR) (((cond)==AL) ||\ - (((cond)==EQ) && ( CPSR.bits.Z))||\ - (((cond)==NE) && (!CPSR.bits.Z))||\ - (((cond)==CS) && ( CPSR.bits.C))||\ - (((cond)==CC) && (!CPSR.bits.C))||\ - (((cond)==MI) && ( CPSR.bits.N))||\ - (((cond)==PL) && (!CPSR.bits.N))||\ - (((cond)==VS) && ( CPSR.bits.V))||\ - (((cond)==VC) && (!CPSR.bits.V))||\ - (((cond)==HI) && (CPSR.bits.C) && (!CPSR.bits.Z))||\ - (((cond)==LS) && ((CPSR.bits.Z) || (!CPSR.bits.C)))||\ - (((cond)==GE) && (CPSR.bits.N==CPSR.bits.V))||\ - (((cond)==LT) && (CPSR.bits.N!=CPSR.bits.V))||\ - (((cond)==GT) && (CPSR.bits.Z==0) && (CPSR.bits.N==CPSR.bits.V))||\ - (((cond)==LE) && ((CPSR.bits.Z) || (CPSR.bits.N!=CPSR.bits.V)))) -*/ +inline uint32_t INSTRUCTION_INDEX(uint32_t i) { return ((i >> 16) & 0xFF0) | ((i >> 4) & 0xF); } + +inline uint32_t ROR(uint32_t i, uint32_t j) { return (i >> j) | (i << (32 - j)); } + +template inline T UNSIGNED_OVERFLOW(T a, T b, T c) { return BIT31((a & b) | ((a | b) & ~c)); } + +template inline T UNSIGNED_UNDERFLOW(T a, T b, T c) { return BIT31((~a & b) | ((~a | b) & c)); } + +template inline T SIGNED_OVERFLOW(T a, T b, T c) { return BIT31((a & b & ~c) | (~a & ~b & c)); } + +template inline T SIGNED_UNDERFLOW(T a, T b, T c) { return BIT31((a & ~b & ~c) | (~a & b & c)); } + +// ============================= CPRS flags funcs +inline bool CarryFrom(int32_t left, int32_t right) +{ + uint32_t res = 0xFFFFFFFFU - static_cast(left); -extern const unsigned char arm_cond_table[16*16]; + return static_cast(right) > res; +} -#define TEST_COND(cond, inst, CPSR) ((arm_cond_table[((CPSR.val >> 24) & 0xf0)+(cond)] >> (inst)) & 1) +inline bool BorrowFrom(int32_t left, int32_t right) +{ + return static_cast(right) > static_cast(left); +} +inline bool OverflowFromADD(int32_t alu_out, int32_t left, int32_t right) +{ + return ((left >= 0 && right >= 0) || (left < 0 && right < 0)) && ((left < 0 && alu_out >= 0) || (left >= 0 && alu_out < 0)); +} + +inline bool OverflowFromSUB(int32_t alu_out, int32_t left, int32_t right) +{ + return ((left < 0 && right >= 0) || (left >= 0 && right < 0)) && ((left < 0 && alu_out >= 0) || (left >= 0 && alu_out < 0)); +} + +const uint8_t arm_cond_table[] = +{ + // N=0, Z=0, C=0, V=0 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, // 0x00 + 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x20, // 0x00 + // N=0, Z=0, C=0, V=1 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x00, // 0x10 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=0, Z=0, C=1, V=0 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF, // 0x20 + 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x20, + // N=0, Z=0, C=1, V=1 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00, // 0x30 + 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=0, Z=1, C=0, V=0 + 0xFF,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF, // 0x40 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, + // N=0, Z=1, C=0, V=1 + 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x00, // 0x50 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=0, Z=1, C=1, V=0 + 0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0xFF, // 0x60 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, + // N=0, Z=1, C=1, V=1 + 0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0x00, // 0x70 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=1, Z=0, C=0, V=0 + 0x00,0xFF,0x00,0xFF,0xFF,0x00,0x00,0xFF, // 0x80 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=1, Z=0, C=0, V=1 + 0x00,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00, // 0x90 + 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x20, + // N=1, Z=0, C=1, V=0 + 0x00,0xFF,0xFF,0x00,0xFF,0x00,0x00,0xFF, // 0xA0 + 0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=1, Z=0, C=1, V=1 + 0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00, // 0xB0 + 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x20, + // N=1, Z=1, C=0, V=0 + 0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF, // 0xC0 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=1, Z=1, C=0, V=1 + 0xFF,0x00,0x00,0xFF,0xFF,0x00,0xFF,0x00, // 0xD0 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20, + // N=1, Z=1, C=1, V=0 + 0xFF,0x00,0xFF,0x00,0xFF,0x00,0x00,0xFF, // 0xE0 + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0x20, + // N=1, Z=1, C=1, V=1 + 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, // 0xF0 + 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x20 +}; enum Mode { @@ -104,7 +137,7 @@ { struct { - u32 N : 1, + uint32_t N : 1, Z : 1, C : 1, V : 1, @@ -113,16 +146,16 @@ I : 1, F : 1, T : 1, - mode : 5; + mode : 5; } bits; - u32 val; + uint32_t val; } Status_Reg; #else typedef union { struct { - u32 mode : 5, + uint32_t mode : 5, T : 1, F : 1, I : 1, @@ -133,147 +166,78 @@ Z : 1, N : 1; } bits; - u32 val; + uint32_t val; } Status_Reg; #endif -/** - * The control interface to a CPU - */ -struct armcpu_ctrl_iface { - /** stall the processor */ - void (*stall)( void *instance); - - /** unstall the processor */ - void (*unstall)( void *instance); - - /** read a register value */ - u32 (*read_reg)( void *instance, u32 reg_num); - - /** set a register value */ - void (*set_reg)( void *instance, u32 reg_num, u32 value); - - /** install the post execute function */ - void (*install_post_ex_fn)( void *instance, - void (*fn)( void *, u32 adr, int thumb), - void *fn_data); - - /** remove the post execute function */ - void (*remove_post_ex_fn)( void *instance); - - /** the private data passed to all interface functions */ - void *data; -}; - +inline uint8_t TEST_COND(uint32_t cond, uint32_t inst, Status_Reg CPSR) { return arm_cond_table[((CPSR.val >> 24) & 0xf0) | cond] & (1 << inst); } -typedef void* armcp_t; +typedef void *armcp_t; -typedef struct armcpu_t +struct armcpu_t { - u32 proc_ID; - u32 instruction; //4 - u32 instruct_adr; //8 - u32 next_instruction; //12 + uint32_t proc_ID; + uint32_t instruction; //4 + uint32_t instruct_adr; //8 + uint32_t next_instruction; //12 - u32 R[16]; //16 + uint32_t R[16]; //16 Status_Reg CPSR; //80 Status_Reg SPSR; - u32 R13_usr, R14_usr; - u32 R13_svc, R14_svc; - u32 R13_abt, R14_abt; - u32 R13_und, R14_und; - u32 R13_irq, R14_irq; - u32 R8_fiq, R9_fiq, R10_fiq, R11_fiq, R12_fiq, R13_fiq, R14_fiq; - Status_Reg SPSR_svc, SPSR_abt, SPSR_und, SPSR_irq, SPSR_fiq; + void changeCPSR(); - armcp_t *coproc[16]; + uint32_t R13_usr, R14_usr; + uint32_t R13_svc, R14_svc; + uint32_t R13_abt, R14_abt; + uint32_t R13_und, R14_und; + uint32_t R13_irq, R14_irq; + uint32_t R8_fiq, R9_fiq, R10_fiq, R11_fiq, R12_fiq, R13_fiq, R14_fiq; + Status_Reg SPSR_svc, SPSR_abt, SPSR_und, SPSR_irq, SPSR_fiq; - u32 intVector; - u8 LDTBit; //1 : ARMv5 style 0 : non ARMv5 - BOOL waitIRQ; - BOOL wIRQ; - BOOL wirq; + uint32_t intVector; + uint8_t LDTBit; // 1 : ARMv5 style 0 : non ARMv5 + bool waitIRQ; + bool halt_IE_and_IF; //the cpu is halted, waiting for IE&IF to signal something + uint8_t intrWaitARM_state; - u32 (* *swi_tab)(struct armcpu_t * cpu); + bool BIOS_loaded; -#ifdef GDB_STUB - /** there is a pending irq for the cpu */ - int irq_flag; + uint32_t (**swi_tab)(); - /** the post executed function (if installed) */ - void (*post_ex_fn)( void *, u32 adr, int thumb); + // flag indicating if the processor is stalled (for debugging) + int stalled; - /** data for the post executed function */ - void *post_ex_fn_data; +#if defined(_M_X64) || defined(__x86_64__) + uint8_t cond_table[16 * 16]; +#endif +}; +int armcpu_new(armcpu_t *armcpu, uint32_t id); +void armcpu_init(armcpu_t *armcpu, uint32_t adr); +uint32_t armcpu_switchMode(armcpu_t *armcpu, uint8_t mode); - /** flag indicating if the processor is stalled */ - int stalled; +bool armcpu_irqException(armcpu_t *armcpu); +void armcpu_exception(armcpu_t *cpu, uint32_t number); +uint32_t TRAPUNDEF(armcpu_t* cpu); +uint32_t armcpu_Wait4IRQ(armcpu_t *cpu); - /** the memory interface */ - struct armcpu_memory_iface *mem_if; +extern armcpu_t NDS_ARM7, NDS_ARM9; - /** the ctrl interface */ - struct armcpu_ctrl_iface ctrl_iface; -#endif -} armcpu_t; +template uint32_t armcpu_exec(); -#ifdef GDB_STUB -int armcpu_new( armcpu_t *armcpu, u32 id, struct armcpu_memory_iface *mem_if, - struct armcpu_ctrl_iface **ctrl_iface_ret); -#else -int armcpu_new( armcpu_t *armcpu, u32 id); -#endif -void armcpu_init(armcpu_t *armcpu, u32 adr); -u32 armcpu_switchMode(armcpu_t *armcpu, u8 mode); -u32 armcpu_prefetch(armcpu_t *armcpu); -u32 armcpu_exec(armcpu_t *armcpu); -BOOL armcpu_irqExeption(armcpu_t *armcpu); -//BOOL armcpu_prefetchExeption(armcpu_t *armcpu); -BOOL -armcpu_flagIrq( armcpu_t *armcpu); - -extern armcpu_t NDS_ARM7; -extern armcpu_t NDS_ARM9; - -static INLINE void NDS_makeARM9Int(u32 num) +inline void setIF(int PROCNUM, uint32_t flag) { - /* flag the interrupt request source */ - MMU.reg_IF[0] |= (1<. */ +// ARM core TODO: +// - Check all the LDM/STM opcodes: quirks when Rb included in Rlist; opcodes +// operating on user registers (LDMXX2/STMXX2) +// - Force User mode memory access for LDRx/STRx opcodes with bit24=0 and bit21=1 +// (has to be done at memory side; once the PU is emulated well enough) +// - Check LDMxx2/STMxx2 (those opcodes that act on User mode registers instead +// of current ones) + #include "cp15.h" -#include "debug.h" #include "MMU.h" +#include "armcpu.h" +#include "NDSSystem.h" +#include "MMU_timing.h" + +#define cpu (&ARMPROC) +#define TEMPLATE template + +// ----------------------------------------------------------------------------- +// Shifting macros +// ----------------------------------------------------------------------------- + +#define LSL_IMM \ + uint32_t shift_op = cpu->R[REG_POS(i, 0)] << ((i >> 7) & 0x1F); + +#define S_LSL_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], 32 - shift_op); \ + shift_op = cpu->R[REG_POS(i, 0)] << shift_op; \ + } +#define LSL_REG \ + uint32_t shift_op = cpu->R[REG_POS(i, 8)] & 0xFF; \ + if (shift_op >= 32) \ + shift_op = 0; \ + else \ + shift_op = cpu->R[REG_POS(i, 0)] << shift_op; + +#define S_LSL_REG \ + uint32_t shift_op = cpu->R[REG_POS(i,8)] & 0xFF; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else if (shift_op < 32) \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], 32 - shift_op); \ + shift_op = cpu->R[REG_POS(i, 0)] << shift_op; \ + } \ + else if (shift_op == 32) \ + { \ + shift_op = 0; \ + c = BIT0(cpu->R[REG_POS(i, 0)]); \ + } \ + else \ + { \ + shift_op = 0; \ + c = 0; \ + } -// Use this macros for reading/writing, so the GDB stub isn't broken -#ifdef GDB_STUB - #define READ32(a,b) cpu->mem_if->read32(a,b) - #define WRITE32(a,b,c) cpu->mem_if->write32(a,b,c) - #define READ16(a,b) cpu->mem_if->read16(a,b) - #define WRITE16(a,b,c) cpu->mem_if->write16(a,b,c) - #define READ8(a,b) cpu->mem_if->read8(a,b) - #define WRITE8(a,b,c) cpu->mem_if->write8(a,b,c) -#else - #define READ32(a,b) MMU_read32(cpu->proc_ID, b) - #define WRITE32(a,b,c) MMU_write32(cpu->proc_ID,b,c) - #define READ16(a,b) MMU_read16(cpu->proc_ID, b) - #define WRITE16(a,b,c) MMU_write16(cpu->proc_ID,b,c) - #define READ8(a,b) MMU_read8(cpu->proc_ID, b) - #define WRITE8(a,b,c) MMU_write8(cpu->proc_ID,b,c) -#endif +#define LSR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + if (shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)] >> shift_op; + +#define S_LSR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + c = BIT31(cpu->R[REG_POS(i, 0)]); \ + else \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = cpu->R[REG_POS(i, 0)]>>shift_op; \ + } + +#define LSR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i,8)] & 0xFF; \ + if (shift_op >= 32) \ + shift_op = 0; \ + else \ + shift_op = cpu->R[REG_POS(i, 0)] >> shift_op; + +#define S_LSR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i,8)] & 0xFF; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i ,0)]; \ + else if (shift_op < 32) \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = cpu->R[REG_POS(i, 0)] >> shift_op; \ + } \ + else if (shift_op == 32) \ + { \ + c = BIT31(cpu->R[REG_POS(i, 0)]); \ + shift_op = 0; \ + } \ + else \ + { \ + c = 0; \ + shift_op = 0; \ + } + +#define ASR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + if (!shift_op) \ + shift_op = BIT31(cpu->R[REG_POS(i, 0)]) * 0xFFFFFFFF; \ + else \ + shift_op = static_cast(static_cast(cpu->R[REG_POS(i, 0)]) >> shift_op); + +#define S_ASR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + { \ + shift_op = BIT31(cpu->R[REG_POS(i, 0)]) * 0xFFFFFFFF; \ + c = BIT31(cpu->R[REG_POS(i, 0)]); \ + } \ + else \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = static_cast(static_cast(cpu->R[REG_POS(i, 0)]) >> shift_op); \ + } + +#define ASR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i,8)] & 0xFF; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else if (shift_op < 32) \ + shift_op = static_cast(static_cast(cpu->R[REG_POS(i, 0)]) >> shift_op); \ + else \ + shift_op = BIT31(cpu->R[REG_POS(i, 0)]) * 0xFFFFFFFF; + +#define S_ASR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i, 8)] & 0xFF; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else if (shift_op < 32) \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = static_cast(static_cast(cpu->R[REG_POS(i, 0)]) >> shift_op); \ + } \ + else \ + { \ + c = BIT31(cpu->R[REG_POS(i, 0)]); \ + shift_op = BIT31(cpu->R[REG_POS(i, 0)]) * 0xFFFFFFFF; \ + } + +#define ROR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + if (!shift_op) \ + shift_op = (static_cast(cpu->CPSR.bits.C) << 31) | (cpu->R[REG_POS(i, 0)] >> 1); \ + else \ + shift_op = ROR(cpu->R[REG_POS(i, 0)], shift_op); + +#define S_ROR_IMM \ + uint32_t shift_op = (i >> 7) & 0x1F; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + { \ + shift_op = (static_cast(cpu->CPSR.bits.C) << 31) | (cpu->R[REG_POS(i, 0)] >> 1); \ + c = BIT0(cpu->R[REG_POS(i, 0)]); \ + } \ + else \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = ROR(cpu->R[REG_POS(i, 0)], shift_op); \ + } +#define ROR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i, 8)] & 0xFF; \ + if (!shift_op || !(shift_op & 0x1F)) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else \ + shift_op = ROR(cpu->R[REG_POS(i, 0)], shift_op & 0x1F); + +#define S_ROR_REG \ + uint32_t shift_op = cpu->R[REG_POS(i, 8)] & 0xFF; \ + uint32_t c = cpu->CPSR.bits.C; \ + if (!shift_op) \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + else \ + { \ + shift_op &= 0x1F; \ + if (!shift_op) \ + { \ + shift_op = cpu->R[REG_POS(i, 0)]; \ + c = BIT31(cpu->R[REG_POS(i, 0)]); \ + } \ + else \ + { \ + c = BIT_N(cpu->R[REG_POS(i, 0)], shift_op - 1); \ + shift_op = ROR(cpu->R[REG_POS(i, 0)], shift_op); \ + } \ + } +#define IMM_VALUE \ + uint32_t shift_op = ROR(i & 0xFF, (i >> 7) & 0x1E); -#define LSL_IMM shift_op = cpu->R[REG_POS(i,0)]<<((i>>7)&0x1F); +#define S_IMM_VALUE \ + uint32_t shift_op = ROR(i & 0xFF, (i >> 7) & 0x1E); \ + uint32_t c = cpu->CPSR.bits.C; \ + if ((i >> 8) & 0xF) \ + c = BIT31(shift_op); -#define S_LSL_IMM u32 shift_op = ((i>>7)&0x1F);\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], 32-shift_op);\ - shift_op = cpu->R[REG_POS(i,0)]<<((i>>7)&0x1F);\ - } - -#define LSL_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - if(shift_op>=32)\ - shift_op=0;\ - else\ - shift_op=cpu->R[REG_POS(i,0)]<R[REG_POS(i,8)])&0xFF;\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - if(shift_op<32)\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], 32-shift_op);\ - shift_op = cpu->R[REG_POS(i,0)]<R[REG_POS(i,0)]);\ - }\ - else\ - {\ - shift_op = 0;\ - c = 0;\ - } - -#define LSR_IMM shift_op = ((i>>7)&0x1F);\ - if(shift_op!=0)\ - shift_op = cpu->R[REG_POS(i,0)]>>shift_op; - -#define S_LSR_IMM u32 shift_op = ((i>>7)&0x1F);\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - {\ - c = BIT31(cpu->R[REG_POS(i,0)]);\ - }\ - else\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = cpu->R[REG_POS(i,0)]>>shift_op;\ - } - -#define LSR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - if(shift_op>=32)\ - shift_op = 0;\ - else\ - shift_op = cpu->R[REG_POS(i,0)]>>shift_op; - -#define S_LSR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - {\ - shift_op = cpu->R[REG_POS(i,0)];\ - }\ - else\ - if(shift_op<32)\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = cpu->R[REG_POS(i,0)]>>shift_op;\ - }\ - else\ - if(shift_op==32)\ - {\ - c = BIT31(cpu->R[REG_POS(i,0)]);\ - shift_op = 0;\ - }\ - else\ - {\ - c = 0;\ - shift_op = 0;\ - } - -#define ASR_IMM shift_op = ((i>>7)&0x1F);\ - if(shift_op==0)\ - shift_op=BIT31(cpu->R[REG_POS(i,0)])*0xFFFFFFFF;\ - else\ - shift_op = (u32)(((s32)(cpu->R[REG_POS(i,0)]))>>shift_op); - -#define S_ASR_IMM u32 shift_op = ((i>>7)&0x1F);\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - {\ - shift_op=BIT31(cpu->R[REG_POS(i,0)])*0xFFFFFFFF;\ - c = BIT31(cpu->R[REG_POS(i,0)]);\ - }\ - else\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = (u32)(((s32)(cpu->R[REG_POS(i,0)]))>>shift_op);\ - } - -#define ASR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - if(shift_op==0)\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - if(shift_op<32)\ - shift_op = (u32)(((s32)(cpu->R[REG_POS(i,0)]))>>shift_op);\ - else\ - shift_op=BIT31(cpu->R[REG_POS(i,0)])*0xFFFFFFFF; - -#define S_ASR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - if(shift_op<32)\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = (u32)(((s32)(cpu->R[REG_POS(i,0)]))>>shift_op);\ - }\ - else\ - {\ - c = BIT31(cpu->R[REG_POS(i,0)]);\ - shift_op=BIT31(cpu->R[REG_POS(i,0)])*0xFFFFFFFF;\ - } - -#define ROR_IMM shift_op = ((i>>7)&0x1F);\ - if(shift_op==0)\ - {\ - u32 tmp = cpu->CPSR.bits.C;\ - shift_op = (tmp<<31)|(cpu->R[REG_POS(i,0)]>>1);\ - }\ - else\ - shift_op = ROR(cpu->R[REG_POS(i,0)],shift_op); - -#define S_ROR_IMM u32 shift_op = ((i>>7)&0x1F);\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - {\ - u32 tmp = cpu->CPSR.bits.C;\ - shift_op = (tmp<<31)|(cpu->R[REG_POS(i,0)]>>1);\ - c = BIT0(cpu->R[REG_POS(i,0)]);\ - }\ - else\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = ROR(cpu->R[REG_POS(i,0)],shift_op);\ - } - -#define ROR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - if((shift_op==0)||((shift_op&0xF)==0))\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - shift_op = ROR(cpu->R[REG_POS(i,0)],(shift_op&0xF)); - -#define S_ROR_REG u32 shift_op = (cpu->R[REG_POS(i,8)])&0xFF;\ - u32 c = cpu->CPSR.bits.C;\ - if(shift_op==0)\ - shift_op=cpu->R[REG_POS(i,0)];\ - else\ - {\ - shift_op&=0xF;\ - if(shift_op==0)\ - {\ - shift_op=cpu->R[REG_POS(i,0)];\ - c = BIT31(cpu->R[REG_POS(i,0)]);\ - }\ - else\ - {\ - c = BIT_N(cpu->R[REG_POS(i,0)], shift_op-1);\ - shift_op = ROR(cpu->R[REG_POS(i,0)],(shift_op&0xF));\ - }\ - } - -#define IMM_VALUE u32 shift_op = ROR((i&0xFF), (i>>7)&0x1E); - -#define S_IMM_VALUE u32 shift_op = ROR((i&0xFF), (i>>7)&0x1E);\ - u32 c = cpu->CPSR.bits.C;\ - if((i>>8)&0xF)\ - c = BIT31(shift_op); - -#define IMM_OFF (((i>>4)&0xF0)+(i&0xF)) +#define IMM_OFF (((i >> 4) & 0xF0) + (i & 0xF)) -#define IMM_OFF_12 ((i)&0xFFF) +#define IMM_OFF_12 ((i) & 0xFFF) -extern BOOL execute; +// ----------------------------------------------------------------------------- +// Undefined instruction +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_UND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_UND(uint32_t) { - LOG("Undefined instruction: %08X\n", cpu->instruction); - execute = false; + TRAPUNDEF(cpu); return 1; } -//-----------------------AND------------------------------------ +// ----------------------------------------------------------------------------- +// AND / ANDS +// Timing: OK +// ----------------------------------------------------------------------------- -#define OP_AND(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] & shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_AND(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] & shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OP_ANDS(a, b)\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR;\ - cpu->R[15] = cpu->R[REG_POS(i,16)] & shift_op;\ - SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] & shift_op;\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - return a; +#define OP_ANDS(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] & shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; -static u32 FASTCALL OP_AND_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_AND(1, 3); + LSL_IMM; + OP_AND(1, 3); } -static u32 FASTCALL OP_AND_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_AND(2, 4); + LSL_REG; + OP_AND(2, 4); } -static u32 FASTCALL OP_AND_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_AND(1, 3); + LSR_IMM; + OP_AND(1, 3); } -static u32 FASTCALL OP_AND_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_AND(2, 4); + LSR_REG; + OP_AND(2, 4); } -static u32 FASTCALL OP_AND_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_AND(1, 3); + ASR_IMM; + OP_AND(1, 3); } -static u32 FASTCALL OP_AND_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_AND(2, 4); + ASR_REG; + OP_AND(2, 4); } -static u32 FASTCALL OP_AND_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_AND(1, 3); + ROR_IMM; + OP_AND(1, 3); } -static u32 FASTCALL OP_AND_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_AND(2, 4); + ROR_REG; + OP_AND(2, 4); } -static u32 FASTCALL OP_AND_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_AND(1, 3); + IMM_VALUE; + OP_AND(1, 3); } -static u32 FASTCALL OP_AND_S_LSL_IMM(armcpu_t *cpu) + +TEMPLATE static uint32_t FASTCALL OP_AND_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OP_ANDS(2, 4); + S_LSL_IMM; + OP_ANDS(1, 3); } -static u32 FASTCALL OP_AND_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OP_ANDS(3, 5); + S_LSL_REG; + OP_ANDS(2, 4); } -static u32 FASTCALL OP_AND_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OP_ANDS(2, 4); + S_LSR_IMM; + OP_ANDS(1, 3); } -static u32 FASTCALL OP_AND_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OP_ANDS(3, 5); + S_LSR_REG; + OP_ANDS(2, 4); } -static u32 FASTCALL OP_AND_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OP_ANDS(2, 4); + S_ASR_IMM; + OP_ANDS(1, 3); } -static u32 FASTCALL OP_AND_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OP_ANDS(3, 5); + S_ASR_REG; + OP_ANDS(2, 4); } -static u32 FASTCALL OP_AND_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OP_ANDS(2, 4); + S_ROR_IMM; + OP_ANDS(1, 3); } -static u32 FASTCALL OP_AND_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OP_ANDS(3, 5); + S_ROR_REG; + OP_ANDS(2, 4); } -static u32 FASTCALL OP_AND_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_AND_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OP_ANDS(2, 4); + S_IMM_VALUE; + OP_ANDS(1, 3); } -//--------------EOR------------------------------ +// ----------------------------------------------------------------------------- +// EOR / EORS +// ----------------------------------------------------------------------------- -#define OP_EOR(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] ^ shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_EOR(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] ^ shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OP_EORS(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] ^ shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - return a; +#define OP_EORS(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] ^ shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; -static u32 FASTCALL OP_EOR_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_EOR(1, 3); + LSL_IMM; + OP_EOR(1, 3); } -static u32 FASTCALL OP_EOR_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_EOR(2, 4); + LSL_REG; + OP_EOR(2, 4); } -static u32 FASTCALL OP_EOR_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_EOR(1, 3); + LSR_IMM; + OP_EOR(1, 3); } -static u32 FASTCALL OP_EOR_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_EOR(2, 4); + LSR_REG; + OP_EOR(2, 4); } -static u32 FASTCALL OP_EOR_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_EOR(1, 3); + ASR_IMM; + OP_EOR(1, 3); } -static u32 FASTCALL OP_EOR_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_EOR(2, 4); + ASR_REG; + OP_EOR(2, 4); } -static u32 FASTCALL OP_EOR_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_EOR(1, 3); + ROR_IMM; + OP_EOR(1, 3); } -static u32 FASTCALL OP_EOR_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_EOR(2, 4); + ROR_REG; + OP_EOR(2, 4); } -static u32 FASTCALL OP_EOR_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_EOR(1, 3); + IMM_VALUE; + OP_EOR(1, 3); } -static u32 FASTCALL OP_EOR_S_LSL_IMM(armcpu_t *cpu) + +TEMPLATE static uint32_t FASTCALL OP_EOR_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OP_EORS(2, 4); + S_LSL_IMM; + OP_EORS(1, 3); } -static u32 FASTCALL OP_EOR_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OP_EORS(3, 5); + S_LSL_REG; + OP_EORS(2, 4); } -static u32 FASTCALL OP_EOR_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OP_EORS(2, 4); + S_LSR_IMM; + OP_EORS(1, 3); } -static u32 FASTCALL OP_EOR_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OP_EORS(3, 5); + S_LSR_REG; + OP_EORS(2, 4); } -static u32 FASTCALL OP_EOR_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OP_EORS(2, 4); + S_ASR_IMM; + OP_EORS(1, 3); } -static u32 FASTCALL OP_EOR_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OP_EORS(3, 5); + S_ASR_REG; + OP_EORS(2, 4); } -static u32 FASTCALL OP_EOR_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OP_EORS(2, 4); + S_ROR_IMM; + OP_EORS(1, 3); } -static u32 FASTCALL OP_EOR_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OP_EORS(3, 5); + S_ROR_REG; + OP_EORS(2, 4); } -static u32 FASTCALL OP_EOR_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_EOR_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OP_EORS(2, 4); + S_IMM_VALUE; + OP_EORS(1, 3); } -//-------------SUB------------------------------------- +// ----------------------------------------------------------------------------- +// SUB / SUBS +// ----------------------------------------------------------------------------- -#define OP_SUB(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] - shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_SUB(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] - shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OPSUBS(a, b) cpu->R[REG_POS(i,12)] = v - shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(v, shift_op, cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(v, shift_op, cpu->R[REG_POS(i,12)]);\ - return a; +#define OP_SUBS(a, b) \ + cpu->R[REG_POS(i, 12)] = v - shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.C = !BorrowFrom(v, shift_op); \ + cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_POS(i,12)], v, shift_op); \ + return a; -static u32 FASTCALL OP_SUB_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_SUB(1, 3); + LSL_IMM; + OP_SUB(1, 3); } -static u32 FASTCALL OP_SUB_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_SUB(2, 4); + LSL_REG; + OP_SUB(2, 4); } -static u32 FASTCALL OP_SUB_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_SUB(1, 3); + LSR_IMM; + OP_SUB(1, 3); } -static u32 FASTCALL OP_SUB_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_SUB(2, 4); + LSR_REG; + OP_SUB(2, 4); } -static u32 FASTCALL OP_SUB_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_SUB(1, 3); + ASR_IMM; + OP_SUB(1, 3); } -static u32 FASTCALL OP_SUB_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_SUB(2, 4); + ASR_REG; + OP_SUB(2, 4); } -static u32 FASTCALL OP_SUB_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_SUB(1, 3); + ROR_IMM; + OP_SUB(1, 3); } -static u32 FASTCALL OP_SUB_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_SUB(2, 4); + ROR_REG; + OP_SUB(2, 4); } -static u32 FASTCALL OP_SUB_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_SUB(1, 3); + IMM_VALUE; + OP_SUB(1, 3); } -static u32 FASTCALL OP_SUB_S_LSL_IMM(armcpu_t *cpu) + +TEMPLATE static uint32_t FASTCALL OP_SUB_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OPSUBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_SUBS(1, 3); } -static u32 FASTCALL OP_SUB_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OPSUBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_SUBS(2, 4); } -static u32 FASTCALL OP_SUB_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OPSUBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_IMM; + OP_SUBS(1, 3); } -static u32 FASTCALL OP_SUB_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OPSUBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_SUBS(2, 4); } -static u32 FASTCALL OP_SUB_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OPSUBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_SUBS(1, 3); } -static u32 FASTCALL OP_SUB_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OPSUBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_REG; + OP_SUBS(2, 4); } -static u32 FASTCALL OP_SUB_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OPSUBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_IMM; + OP_SUBS(1, 3); } -static u32 FASTCALL OP_SUB_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OPSUBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_SUBS(2, 4); } -static u32 FASTCALL OP_SUB_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OPSUBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + IMM_VALUE; + OP_SUBS(1, 3); } -//------------------RSB------------------------ +// ----------------------------------------------------------------------------- +// RSB / RSBS +// ----------------------------------------------------------------------------- -#define OP_RSB(a, b) cpu->R[REG_POS(i,12)] = shift_op - cpu->R[REG_POS(i,16)];\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_RSB(a, b) \ + cpu->R[REG_POS(i, 12)] = shift_op - cpu->R[REG_POS(i, 16)]; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OP_RSBS(a, b) cpu->R[REG_POS(i,12)] = shift_op - v;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(shift_op, v, cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(shift_op, v, cpu->R[REG_POS(i,12)]);\ - return a; +#define OP_RSBS(a, b) \ + cpu->R[REG_POS(i, 12)] = shift_op - v; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.C = !BorrowFrom(shift_op, v); \ + cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_POS(i, 12)], shift_op, v); \ + return a; -static u32 FASTCALL OP_RSB_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_RSB(1, 3); + LSL_IMM; + OP_RSB(1, 3); } -static u32 FASTCALL OP_RSB_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_RSB(2, 4); + LSL_REG; + OP_RSB(2, 4); } -static u32 FASTCALL OP_RSB_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_RSB(1, 3); + LSR_IMM; + OP_RSB(1, 3); } -static u32 FASTCALL OP_RSB_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_RSB(2, 4); + LSR_REG; + OP_RSB(2, 4); } -static u32 FASTCALL OP_RSB_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_RSB(1, 3); + ASR_IMM; + OP_RSB(1, 3); } -static u32 FASTCALL OP_RSB_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_RSB(2, 4); + ASR_REG; + OP_RSB(2, 4); } -static u32 FASTCALL OP_RSB_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_RSB(1, 3); + ROR_IMM; + OP_RSB(1, 3); } -static u32 FASTCALL OP_RSB_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_RSB(2, 4); + ROR_REG; + OP_RSB(2, 4); } -static u32 FASTCALL OP_RSB_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_RSB(1, 3); + IMM_VALUE; + OP_RSB(1, 3); } -static u32 FASTCALL OP_RSB_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OP_RSBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_RSBS(1, 3); } -static u32 FASTCALL OP_RSB_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OP_RSBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_RSBS(2, 4); } -static u32 FASTCALL OP_RSB_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OP_RSBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_IMM; + OP_RSBS(1, 3); } -static u32 FASTCALL OP_RSB_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OP_RSBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_RSBS(2, 4); } -static u32 FASTCALL OP_RSB_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OP_RSBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_RSBS(1, 3); } -static u32 FASTCALL OP_RSB_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OP_RSBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_REG; + OP_RSBS(2, 4); } -static u32 FASTCALL OP_RSB_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OP_RSBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_IMM; + OP_RSBS(1, 3); } -static u32 FASTCALL OP_RSB_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OP_RSBS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_RSBS(2, 4); } -static u32 FASTCALL OP_RSB_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSB_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OP_RSBS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + IMM_VALUE; + OP_RSBS(1, 3); } -//------------------ADD----------------------------------- +// ----------------------------------------------------------------------------- +// ADD / ADDS +// ----------------------------------------------------------------------------- -#define OP_ADD(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] + shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_ADD(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] + shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -static u32 FASTCALL OP_ADD_LSL_IMM(armcpu_t *cpu) +#define OP_ADDS(a, b) \ + cpu->R[REG_POS(i,12)] = v + shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.C = CarryFrom(v, shift_op); \ + cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_POS(i, 12)], v, shift_op); \ + return a; + +TEMPLATE static uint32_t FASTCALL OP_ADD_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_ADD(1, 3); + LSL_IMM; + OP_ADD(1, 3); } -static u32 FASTCALL OP_ADD_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_ADD(2, 4); + LSL_REG; + OP_ADD(2, 4); } -static u32 FASTCALL OP_ADD_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_ADD(1, 3); + LSR_IMM; + OP_ADD(1, 3); } -static u32 FASTCALL OP_ADD_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_ADD(2, 4); + LSR_REG; + OP_ADD(2, 4); } -static u32 FASTCALL OP_ADD_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_ADD(1, 3); + ASR_IMM; + OP_ADD(1, 3); } -static u32 FASTCALL OP_ADD_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_ADD(2, 4); + ASR_REG; + OP_ADD(2, 4); } -static u32 FASTCALL OP_ADD_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_ADD(1, 3); + ROR_IMM; + OP_ADD(1, 3); } -static u32 FASTCALL OP_ADD_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_ADD(2, 4); + ROR_REG; + OP_ADD(2, 4); } -static u32 FASTCALL OP_ADD_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_ADD(1, 3); + IMM_VALUE; + OP_ADD(1, 3); } -#define OP_ADDS(a, b) cpu->R[REG_POS(i,12)] = v + shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(v, shift_op, cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.V = SIGNED_OVERFLOW(v, shift_op, cpu->R[REG_POS(i,12)]);\ - return a; - -static u32 FASTCALL OP_ADD_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OP_ADDS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_ADDS(1, 3); } -static u32 FASTCALL OP_ADD_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OP_ADDS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_ADDS(2, 4); } -static u32 FASTCALL OP_ADD_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OP_ADDS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_IMM; + OP_ADDS(1, 3); } -static u32 FASTCALL OP_ADD_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OP_ADDS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_ADDS(2, 4); } -static u32 FASTCALL OP_ADD_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OP_ADDS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_ADDS(1, 3); } -static u32 FASTCALL OP_ADD_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OP_ADDS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_REG; + OP_ADDS(2, 4); } -static u32 FASTCALL OP_ADD_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OP_ADDS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_IMM; + OP_ADDS(1, 3); } -static u32 FASTCALL OP_ADD_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OP_ADDS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_ADDS(2, 4); } -static u32 FASTCALL OP_ADD_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OP_ADDS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + IMM_VALUE; + OP_ADDS(1, 3); } -//------------------ADC----------------------------------- +// ----------------------------------------------------------------------------- +// ADC / ADCS +// ----------------------------------------------------------------------------- +#define OP_ADC(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] + shift_op + cpu->CPSR.bits.C; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OP_ADC(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] + shift_op + cpu->CPSR.bits.C;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_ADCS(a, b) \ +{ \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->R[REG_POS(i, 12)] = v + shift_op + cpu->CPSR.bits.C; \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + if (!cpu->CPSR.bits.C) \ + { \ + cpu->R[REG_POS(i, 12)] = v + shift_op; \ + cpu->CPSR.bits.C = cpu->R[REG_POS(i, 12)] < v; \ + } \ + else \ + { \ + cpu->R[REG_POS(i, 12)] = v + shift_op + 1; \ + cpu->CPSR.bits.C = cpu->R[REG_POS(i, 12)] <= v; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.V = BIT31((v ^ shift_op ^ -1) & (v ^ cpu->R[REG_POS(i, 12)])); \ + return a; \ +} -static u32 FASTCALL OP_ADC_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_ADC(1, 3); + LSL_IMM; + OP_ADC(1, 3); } -static u32 FASTCALL OP_ADC_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_ADC(2, 4); + LSL_REG; + OP_ADC(2, 4); } -static u32 FASTCALL OP_ADC_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_ADC(1, 3); + LSR_IMM; + OP_ADC(1, 3); } -static u32 FASTCALL OP_ADC_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_ADC(2, 4); + LSR_REG; + OP_ADC(2, 4); } -static u32 FASTCALL OP_ADC_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_ADC(1, 3); + ASR_IMM; + OP_ADC(1, 3); } -static u32 FASTCALL OP_ADC_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_ADC(2, 4); + ASR_REG; + OP_ADC(2, 4); } -static u32 FASTCALL OP_ADC_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_ADC(1, 3); + ROR_IMM; + OP_ADC(1, 3); } -static u32 FASTCALL OP_ADC_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_ADC(2, 4); + ROR_REG; + OP_ADC(2, 4); } -static u32 FASTCALL OP_ADC_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_ADC(1, 3); + IMM_VALUE; + OP_ADC(1, 3); } -#define OP_ADCS(a, b) \ - { \ - u32 tmp = shift_op + cpu->CPSR.bits.C;\ - cpu->R[REG_POS(i,12)] = v + tmp;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(shift_op, cpu->CPSR.bits.C, tmp) | UNSIGNED_OVERFLOW(v, tmp, cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.V = SIGNED_OVERFLOW(shift_op, cpu->CPSR.bits.C, tmp) | SIGNED_OVERFLOW(v, tmp, cpu->R[REG_POS(i,12)]);\ - return a; \ - } -static u32 FASTCALL OP_ADC_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OP_ADCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_ADCS(1, 3); } -static u32 FASTCALL OP_ADC_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OP_ADCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_ADCS(2, 4); } -static u32 FASTCALL OP_ADC_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OP_ADCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_IMM; + OP_ADCS(1, 3); } -static u32 FASTCALL OP_ADC_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OP_ADCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_ADCS(2, 4); } -static u32 FASTCALL OP_ADC_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OP_ADCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_ADCS(1, 3); } -static u32 FASTCALL OP_ADC_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OP_ADCS(3, 5); + uint32_t v = cpu->R[REG_POS(i,16)]; + ASR_REG; + OP_ADCS(2, 4); } -static u32 FASTCALL OP_ADC_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OP_ADCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_IMM; + OP_ADCS(1, 3); } -static u32 FASTCALL OP_ADC_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OP_ADCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_ADCS(2, 4); } -static u32 FASTCALL OP_ADC_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADC_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OP_ADCS(2, 4); + uint32_t v = cpu->R[REG_POS(i,16)]; + IMM_VALUE; + OP_ADCS(1, 3); } -//-------------SBC------------------------------------- +// ----------------------------------------------------------------------------- +// SBC / SBCS +// ----------------------------------------------------------------------------- + +#define OP_SBC(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] - shift_op - !cpu->CPSR.bits.C; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -#define OP_SBC(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] - shift_op - (!cpu->CPSR.bits.C);\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_SBCS(a, b) \ +{ \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->R[REG_POS(i,12)] = v - shift_op - !cpu->CPSR.bits.C; \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + if (!cpu->CPSR.bits.C) \ + { \ + cpu->R[REG_POS(i, 12)] = v - shift_op - 1; \ + cpu->CPSR.bits.C = v > shift_op; \ + } \ + else \ + { \ + cpu->R[REG_POS(i, 12)] = v - shift_op; \ + cpu->CPSR.bits.C = v >= shift_op; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.V = BIT31((v ^ shift_op) & (v ^ cpu->R[REG_POS(i, 12)])); \ + return a; \ +} -static u32 FASTCALL OP_SBC_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_SBC(1, 3); + LSL_IMM; + OP_SBC(1, 3); } -static u32 FASTCALL OP_SBC_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_SBC(2, 4); + LSL_REG; + OP_SBC(2, 4); } -static u32 FASTCALL OP_SBC_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_SBC(1, 3); + LSR_IMM; + OP_SBC(1, 3); } -static u32 FASTCALL OP_SBC_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_SBC(2, 4); + LSR_REG; + OP_SBC(2, 4); } -static u32 FASTCALL OP_SBC_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_SBC(1, 3); + ASR_IMM; + OP_SBC(1, 3); } -static u32 FASTCALL OP_SBC_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_SBC(2, 4); + ASR_REG; + OP_SBC(2, 4); } -static u32 FASTCALL OP_SBC_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_SBC(1, 3); + ROR_IMM; + OP_SBC(1, 3); } -static u32 FASTCALL OP_SBC_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_SBC(2, 4); + ROR_REG; + OP_SBC(2, 4); } -static u32 FASTCALL OP_SBC_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_SBC(1, 3); + IMM_VALUE; + OP_SBC(1, 3); } -#define OP_SBCS(a, b) \ - { \ - u32 tmp = v - (!cpu->CPSR.bits.C);\ - cpu->R[REG_POS(i,12)] = tmp - shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = (!UNSIGNED_UNDERFLOW(v, (int)(!cpu->CPSR.bits.C), tmp)) & (!UNSIGNED_UNDERFLOW(tmp, shift_op, cpu->R[REG_POS(i,12)]));\ - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(v, (int)(!cpu->CPSR.bits.C), tmp) | SIGNED_UNDERFLOW(tmp, shift_op, cpu->R[REG_POS(i,12)]);\ - return a; \ - } -static u32 FASTCALL OP_SBC_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OP_SBCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_SBCS(1, 3); } -static u32 FASTCALL OP_SBC_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OP_SBCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_SBCS(2, 4); } -static u32 FASTCALL OP_SBC_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OP_SBCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_IMM; + OP_SBCS(1, 3); } -static u32 FASTCALL OP_SBC_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OP_SBCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_SBCS(2, 4); } -static u32 FASTCALL OP_SBC_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OP_SBCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_SBCS(1, 3); } -static u32 FASTCALL OP_SBC_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OP_SBCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_REG; + OP_SBCS(2, 4); } -static u32 FASTCALL OP_SBC_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OP_SBCS(2, 4); + uint32_t v = cpu->R[REG_POS(i,16)]; + ROR_IMM; + OP_SBCS(1, 3); } -static u32 FASTCALL OP_SBC_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OP_SBCS(3, 5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_SBCS(2, 4); } -static u32 FASTCALL OP_SBC_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SBC_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OP_SBCS(2, 4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + IMM_VALUE; + OP_SBCS(1, 3); } -//---------------RSC---------------------------------- +// ----------------------------------------------------------------------------- +// RSC / RSCS +// ----------------------------------------------------------------------------- -#define OP_RSC(a, b) cpu->R[REG_POS(i,12)] = shift_op - cpu->R[REG_POS(i,16)] - (!cpu->CPSR.bits.C);\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_RSC(a, b) \ + cpu->R[REG_POS(i, 12)] = shift_op - cpu->R[REG_POS(i, 16)] + cpu->CPSR.bits.C - 1; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -static u32 FASTCALL OP_RSC_LSL_IMM(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_RSC(1, 3); +#define OP_RSCS(a, b) \ +{ \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->R[REG_POS(i, 12)] = shift_op - v - !cpu->CPSR.bits.C; \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + if (!cpu->CPSR.bits.C) \ + { \ + cpu->R[REG_POS(i, 12)] = shift_op - v - 1; \ + cpu->CPSR.bits.C = shift_op > v; \ + } \ + else \ + { \ + cpu->R[REG_POS(i, 12)] = shift_op - v; \ + cpu->CPSR.bits.C = shift_op >= v; \ + } \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + cpu->CPSR.bits.V = BIT31((shift_op ^ v) & (shift_op ^ cpu->R[REG_POS(i, 12)])); \ + return a; \ } -static u32 FASTCALL OP_RSC_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_RSC(2, 4); + LSL_IMM; + OP_RSC(1, 3); } -static u32 FASTCALL OP_RSC_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_RSC(1, 3); + LSL_REG; + OP_RSC(2, 4); } -static u32 FASTCALL OP_RSC_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_RSC(2, 4); + LSR_IMM; + OP_RSC(1, 3); } -static u32 FASTCALL OP_RSC_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_RSC(1, 3); + LSR_REG; + OP_RSC(2, 4); } -static u32 FASTCALL OP_RSC_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_RSC(2, 4); + ASR_IMM; + OP_RSC(1, 3); } -static u32 FASTCALL OP_RSC_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_RSC(1, 3); + ASR_REG; + OP_RSC(2, 4); } -static u32 FASTCALL OP_RSC_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_RSC(2, 4); + ROR_IMM; + OP_RSC(1, 3); } -static u32 FASTCALL OP_RSC_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_RSC(1, 3); + ROR_REG; + OP_RSC(2, 4); } -#define OP_RSCS(a,b) \ - { \ - u32 tmp = shift_op - (!cpu->CPSR.bits.C);\ - cpu->R[REG_POS(i,12)] = tmp - v;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - cpu->CPSR.bits.C = (!UNSIGNED_UNDERFLOW(shift_op, (int)(!cpu->CPSR.bits.C), tmp)) & (!UNSIGNED_UNDERFLOW(tmp, v, cpu->R[REG_POS(i,12)]));\ - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(shift_op, (int)(!cpu->CPSR.bits.C), tmp) | SIGNED_UNDERFLOW(tmp, v, cpu->R[REG_POS(i,12)]);\ - return a; \ - } +TEMPLATE static uint32_t FASTCALL OP_RSC_IMM_VAL(uint32_t i) +{ + IMM_VALUE; + OP_RSC(1, 3); +} -static u32 FASTCALL OP_RSC_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSL_IMM; - OP_RSCS(2,4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_IMM; + OP_RSCS(1,3); } -static u32 FASTCALL OP_RSC_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSL_REG; - OP_RSCS(3,5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSL_REG; + OP_RSCS(2,4); } -static u32 FASTCALL OP_RSC_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - LSR_IMM; - OP_RSCS(2,4); + uint32_t v = cpu->R[REG_POS(i,16)]; + LSR_IMM; + OP_RSCS(1,3); } -static u32 FASTCALL OP_RSC_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - LSR_REG; - OP_RSCS(3,5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + LSR_REG; + OP_RSCS(2,4); } -static u32 FASTCALL OP_RSC_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ASR_IMM; - OP_RSCS(2,4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_IMM; + OP_RSCS(1,3); } -static u32 FASTCALL OP_RSC_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ASR_REG; - OP_RSCS(3,5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ASR_REG; + OP_RSCS(2,4); } -static u32 FASTCALL OP_RSC_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - u32 shift_op; - ROR_IMM; - OP_RSCS(2,4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_IMM; + OP_RSCS(1,3); } -static u32 FASTCALL OP_RSC_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - ROR_REG; - OP_RSCS(3,5); + uint32_t v = cpu->R[REG_POS(i, 16)]; + ROR_REG; + OP_RSCS(2,4); } -static u32 FASTCALL OP_RSC_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_RSC_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,16)]; - IMM_VALUE; - OP_RSCS(2,4); + uint32_t v = cpu->R[REG_POS(i, 16)]; + IMM_VALUE; + OP_RSCS(1,3); } -//-------------------TST---------------------------- +// ----------------------------------------------------------------------------- +// TST +// ----------------------------------------------------------------------------- #define OP_TST(a) \ - { \ - unsigned tmp = cpu->R[REG_POS(i,16)] & shift_op;\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(tmp);\ - cpu->CPSR.bits.Z = (tmp==0);\ - return a; \ - } +{ \ + uint32_t tmp = cpu->R[REG_POS(i, 16)] & shift_op; \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(tmp); \ + cpu->CPSR.bits.Z = !tmp; \ + return a; \ +} -static u32 FASTCALL OP_TST_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OP_TST(1); + S_LSL_IMM; + OP_TST(1); } -static u32 FASTCALL OP_TST_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OP_TST(2); + S_LSL_REG; + OP_TST(2); } -static u32 FASTCALL OP_TST_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OP_TST(1); + S_LSR_IMM; + OP_TST(1); } -static u32 FASTCALL OP_TST_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OP_TST(2); + S_LSR_REG; + OP_TST(2); } -static u32 FASTCALL OP_TST_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OP_TST(1); + S_ASR_IMM; + OP_TST(1); } -static u32 FASTCALL OP_TST_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OP_TST(2); + S_ASR_REG; + OP_TST(2); } -static u32 FASTCALL OP_TST_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OP_TST(1); + S_ROR_IMM; + OP_TST(1); } -static u32 FASTCALL OP_TST_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OP_TST(2); + S_ROR_REG; + OP_TST(2); } -static u32 FASTCALL OP_TST_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TST_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OP_TST(1); + S_IMM_VALUE; + OP_TST(1); } -//-------------------TEQ---------------------------- +// ----------------------------------------------------------------------------- +// TEQ +// ----------------------------------------------------------------------------- #define OP_TEQ(a) \ - { \ - unsigned tmp = cpu->R[REG_POS(i,16)] ^ shift_op;\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(tmp);\ - cpu->CPSR.bits.Z = (tmp==0);\ - return a; \ - } +{ \ + unsigned tmp = cpu->R[REG_POS(i, 16)] ^ shift_op; \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(tmp); \ + cpu->CPSR.bits.Z = !tmp; \ + return a; \ +} -static u32 FASTCALL OP_TEQ_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OP_TEQ(1); + S_LSL_IMM; + OP_TEQ(1); } -static u32 FASTCALL OP_TEQ_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OP_TEQ(2); + S_LSL_REG; + OP_TEQ(2); } -static u32 FASTCALL OP_TEQ_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OP_TEQ(1); + S_LSR_IMM; + OP_TEQ(1); } -static u32 FASTCALL OP_TEQ_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OP_TEQ(2); + S_LSR_REG; + OP_TEQ(2); } -static u32 FASTCALL OP_TEQ_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OP_TEQ(1); + S_ASR_IMM; + OP_TEQ(1); } -static u32 FASTCALL OP_TEQ_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OP_TEQ(2); + S_ASR_REG; + OP_TEQ(2); } -static u32 FASTCALL OP_TEQ_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OP_TEQ(1); + S_ROR_IMM; + OP_TEQ(1); } -static u32 FASTCALL OP_TEQ_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OP_TEQ(2); + S_ROR_REG; + OP_TEQ(2); } -static u32 FASTCALL OP_TEQ_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_TEQ_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OP_TEQ(1); + S_IMM_VALUE; + OP_TEQ(1); } -//-------------CMP------------------------------------- +// ----------------------------------------------------------------------------- +// CMP +// ----------------------------------------------------------------------------- #define OP_CMP(a) \ - { \ - u32 tmp = cpu->R[REG_POS(i,16)] - shift_op;\ - cpu->CPSR.bits.N = BIT31(tmp);\ - cpu->CPSR.bits.Z = (tmp==0);\ - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_POS(i,16)], shift_op, tmp);\ - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_POS(i,16)], shift_op, tmp);\ - return a; \ - } +{ \ + uint32_t tmp = cpu->R[REG_POS(i, 16)] - shift_op; \ + cpu->CPSR.bits.N = BIT31(tmp); \ + cpu->CPSR.bits.Z = !tmp; \ + cpu->CPSR.bits.C = !BorrowFrom(cpu->R[REG_POS(i, 16)], shift_op); \ + cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[REG_POS(i, 16)], shift_op); \ + return a; \ +} -static u32 FASTCALL OP_CMP_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_CMP(1); + LSL_IMM; + OP_CMP(1); } -static u32 FASTCALL OP_CMP_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_CMP(2); + LSL_REG; + OP_CMP(2); } -static u32 FASTCALL OP_CMP_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_CMP(1); + LSR_IMM; + OP_CMP(1); } -static u32 FASTCALL OP_CMP_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_CMP(2); + LSR_REG; + OP_CMP(2); } -static u32 FASTCALL OP_CMP_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_CMP(1); + ASR_IMM; + OP_CMP(1); } -static u32 FASTCALL OP_CMP_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_CMP(2); + ASR_REG; + OP_CMP(2); } -static u32 FASTCALL OP_CMP_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_CMP(1); + ROR_IMM; + OP_CMP(1); } -static u32 FASTCALL OP_CMP_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_CMP(2); + ROR_REG; + OP_CMP(2); } -static u32 FASTCALL OP_CMP_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_CMP(1); + IMM_VALUE; + OP_CMP(1); } -//---------------CMN--------------------------- +// ----------------------------------------------------------------------------- +// CMN +// ----------------------------------------------------------------------------- #define OP_CMN(a) \ - { \ - u32 tmp = cpu->R[REG_POS(i,16)] + shift_op;\ - cpu->CPSR.bits.N = BIT31(tmp);\ - cpu->CPSR.bits.Z = (tmp==0);\ - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(cpu->R[REG_POS(i,16)], shift_op, tmp);\ - cpu->CPSR.bits.V = SIGNED_OVERFLOW(cpu->R[REG_POS(i,16)], shift_op, tmp);\ - return a; \ - } +{ \ + uint32_t tmp = cpu->R[REG_POS(i, 16)] + shift_op; \ + cpu->CPSR.bits.N = BIT31(tmp); \ + cpu->CPSR.bits.Z = !tmp; \ + cpu->CPSR.bits.C = CarryFrom(cpu->R[REG_POS(i, 16)], shift_op); \ + cpu->CPSR.bits.V = OverflowFromADD(tmp, cpu->R[REG_POS(i, 16)], shift_op); \ + return a; \ +} -static u32 FASTCALL OP_CMN_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_CMN(1); + LSL_IMM; + OP_CMN(1); } -static u32 FASTCALL OP_CMN_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_CMN(2); + LSL_REG; + OP_CMN(2); } -static u32 FASTCALL OP_CMN_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_CMN(1); + LSR_IMM; + OP_CMN(1); } -static u32 FASTCALL OP_CMN_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_CMN(2); + LSR_REG; + OP_CMN(2); } -static u32 FASTCALL OP_CMN_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_CMN(1); + ASR_IMM; + OP_CMN(1); } -static u32 FASTCALL OP_CMN_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_CMN(2); + ASR_REG; + OP_CMN(2); } -static u32 FASTCALL OP_CMN_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_CMN(1); + ROR_IMM; + OP_CMN(1); } -static u32 FASTCALL OP_CMN_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_CMN(2); + ROR_REG; + OP_CMN(2); } -static u32 FASTCALL OP_CMN_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMN_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_CMN(1); + IMM_VALUE; + OP_CMN(1); } -//------------------ORR------------------- +// ----------------------------------------------------------------------------- +// ORR / ORRS +// ----------------------------------------------------------------------------- -#define OP_ORR(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +#define OP_ORR(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] | shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -static u32 FASTCALL OP_ORR_LSL_IMM(armcpu_t *cpu) +#define OP_ORRS(a,b) \ +{ \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] | shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; \ +} + +TEMPLATE static uint32_t FASTCALL OP_ORR_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_ORR(1, 3); + LSL_IMM; + OP_ORR(1, 3); } -static u32 FASTCALL OP_ORR_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OP_ORR(2, 4); + LSL_REG; + OP_ORR(2, 4); } -static u32 FASTCALL OP_ORR_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_ORR(1, 3); + LSR_IMM; + OP_ORR(1, 3); } -static u32 FASTCALL OP_ORR_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OP_ORR(2, 4); + LSR_REG; + OP_ORR(2, 4); } -static u32 FASTCALL OP_ORR_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_ORR(1, 3); + ASR_IMM; + OP_ORR(1, 3); } -static u32 FASTCALL OP_ORR_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_ORR(2, 4); + ASR_REG; + OP_ORR(2, 4); } -static u32 FASTCALL OP_ORR_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_ORR(1, 3); + ROR_IMM; + OP_ORR(1, 3); } -static u32 FASTCALL OP_ORR_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_ORR(2, 4); + ROR_REG; + OP_ORR(2, 4); } -static u32 FASTCALL OP_ORR_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_ORR(1, 3); + IMM_VALUE; + OP_ORR(1, 3); } -static u32 FASTCALL OP_ORR_S_LSL_IMM(armcpu_t *cpu) + +TEMPLATE static uint32_t FASTCALL OP_ORR_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 4; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 2; + S_LSL_IMM; + OP_ORRS(1,3); } -static u32 FASTCALL OP_ORR_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 5; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 3; + S_LSL_REG; + OP_ORRS(2,4); } -static u32 FASTCALL OP_ORR_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 4; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 2; + S_LSR_IMM; + OP_ORRS(1,3); } -static u32 FASTCALL OP_ORR_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 5; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 3; + S_LSR_REG; + OP_ORRS(2,4); } -static u32 FASTCALL OP_ORR_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 4; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 2; + S_ASR_IMM; + OP_ORRS(1,3); } -static u32 FASTCALL OP_ORR_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 5; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 3; + S_ASR_REG; + OP_ORRS(2,4); } -static u32 FASTCALL OP_ORR_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 4; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 2; + S_ROR_IMM; + OP_ORRS(1,3); } -static u32 FASTCALL OP_ORR_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 5; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 3; + S_ROR_REG; + OP_ORRS(2,4); } -static u32 FASTCALL OP_ORR_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ORR_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] | shift_op; - if(REG_POS(i,12)==15) - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1)); - cpu->next_instruction = cpu->R[15]; - return 4; - } - cpu->CPSR.bits.C = c; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0); - return 2; + S_IMM_VALUE; + OP_ORRS(1,3); } -//------------------MOV------------------- +// ----------------------------------------------------------------------------- +// MOV / MOVS +// ----------------------------------------------------------------------------- -#define OP_MOV(a, b) cpu->R[REG_POS(i,12)] = shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = shift_op;\ - return b;\ - }\ - return a; +#define OP_MOV(a, b) \ + cpu->R[REG_POS(i, 12)] = shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = shift_op; \ + return b; \ + } \ + return a; -#define OP_MOV_S(a, b) cpu->R[REG_POS(i,12)] = shift_op;\ - if(BIT20(i) && REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - return a;\ +#define OP_MOVS(a, b) \ + cpu->R[REG_POS(i, 12)] = shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; -static u32 FASTCALL OP_MOV_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OP_MOV(1,3); + if (i == 0xE1A00000) // nop: MOV R0, R0 + return 1; + + LSL_IMM; + OP_MOV(1,3); } -static u32 FASTCALL OP_MOV_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - if (REG_POS(i,0) == 15) shift_op += 4; - OP_MOV(2,4); + LSL_REG; + if (REG_POS(i, 0) == 15) + shift_op += 4; + OP_MOV(2,4); } -static u32 FASTCALL OP_MOV_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OP_MOV(1,3); + LSR_IMM; + OP_MOV(1,3); } -static u32 FASTCALL OP_MOV_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - if (REG_POS(i,0) == 15) shift_op += 4; - OP_MOV(2,4); + LSR_REG; + if (REG_POS(i, 0) == 15) + shift_op += 4; + OP_MOV(2,4); } -static u32 FASTCALL OP_MOV_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OP_MOV(1,3); + ASR_IMM; + OP_MOV(1,3); } -static u32 FASTCALL OP_MOV_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OP_MOV(2,4); + ASR_REG; + OP_MOV(2,4); } -static u32 FASTCALL OP_MOV_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OP_MOV(2,4); + ROR_IMM; + OP_MOV(1,3); } -static u32 FASTCALL OP_MOV_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OP_MOV(2,4); + ROR_REG; + OP_MOV(2,4); } -static u32 FASTCALL OP_MOV_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OP_MOV(1,3); + IMM_VALUE; + OP_MOV(1,3); } -static u32 FASTCALL OP_MOV_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OP_MOV_S(2,4); + S_LSL_IMM; + OP_MOVS(1,3); } -static u32 FASTCALL OP_MOV_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - if (REG_POS(i,0) == 15) shift_op += 4; - OP_MOV_S(3,5); + S_LSL_REG; + if (REG_POS(i, 0) == 15) + shift_op += 4; + OP_MOVS(2,4); } -static u32 FASTCALL OP_MOV_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OP_MOV_S(2,4); + S_LSR_IMM; + OP_MOVS(1,3); } -static u32 FASTCALL OP_MOV_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - if (REG_POS(i,0) == 15) shift_op += 4; - OP_MOV_S(3,5); + S_LSR_REG; + if (REG_POS(i, 0) == 15) + shift_op += 4; + OP_MOVS(2,4); } -static u32 FASTCALL OP_MOV_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OP_MOV_S(2,4); + S_ASR_IMM; + OP_MOVS(1,3); } -static u32 FASTCALL OP_MOV_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OP_MOV_S(3,5); + S_ASR_REG; + OP_MOVS(2,4); } -static u32 FASTCALL OP_MOV_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OP_MOV_S(2,4); + S_ROR_IMM; + OP_MOVS(1,3); } -static u32 FASTCALL OP_MOV_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OP_MOV_S(3,5); + S_ROR_REG; + OP_MOVS(2,4); } -static u32 FASTCALL OP_MOV_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OP_MOV_S(2,4); + S_IMM_VALUE; + OP_MOVS(1,3); } -//------------------BIC------------------- -#define OPP_BIC(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] & (~shift_op);\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +// ----------------------------------------------------------------------------- +// BIC / BICS +// ----------------------------------------------------------------------------- -#define OPP_BIC_S(a, b) cpu->R[REG_POS(i,12)] = cpu->R[REG_POS(i,16)] & (~shift_op);\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - return a; +#define OP_BIC(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] & ~shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -static u32 FASTCALL OP_BIC_LSL_IMM(armcpu_t *cpu) +#define OP_BICS(a, b) \ + cpu->R[REG_POS(i, 12)] = cpu->R[REG_POS(i, 16)] & ~shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; + +TEMPLATE static uint32_t FASTCALL OP_BIC_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OPP_BIC(1,3); + LSL_IMM; + OP_BIC(1,3); } -static u32 FASTCALL OP_BIC_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OPP_BIC(2,4); + LSL_REG; + OP_BIC(2,4); } -static u32 FASTCALL OP_BIC_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OPP_BIC(1,3); + LSR_IMM; + OP_BIC(1,3); } -static u32 FASTCALL OP_BIC_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OPP_BIC(2,4); + LSR_REG; + OP_BIC(2,4); } -static u32 FASTCALL OP_BIC_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OPP_BIC(1,3); + ASR_IMM; + OP_BIC(1,3); } -static u32 FASTCALL OP_BIC_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OPP_BIC(2,4); + ASR_REG; + OP_BIC(2,4); } -static u32 FASTCALL OP_BIC_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OPP_BIC(1,3); + ROR_IMM; + OP_BIC(1,3); } -static u32 FASTCALL OP_BIC_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OPP_BIC(2,4); + ROR_REG; + OP_BIC(2,4); } -static u32 FASTCALL OP_BIC_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OPP_BIC(1,3); + IMM_VALUE; + OP_BIC(1,3); } -static u32 FASTCALL OP_BIC_S_LSL_IMM(armcpu_t *cpu) + +TEMPLATE static uint32_t FASTCALL OP_BIC_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OPP_BIC_S(2,4); + S_LSL_IMM; + OP_BICS(1,3); } -static u32 FASTCALL OP_BIC_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OPP_BIC_S(3,5); + S_LSL_REG; + OP_BICS(2,4); } -static u32 FASTCALL OP_BIC_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OPP_BIC_S(2,4); + S_LSR_IMM; + OP_BICS(1,3); } -static u32 FASTCALL OP_BIC_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OPP_BIC_S(3,5); + S_LSR_REG; + OP_BICS(2,4); } -static u32 FASTCALL OP_BIC_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OPP_BIC_S(2,4); + S_ASR_IMM; + OP_BICS(1,3); } -static u32 FASTCALL OP_BIC_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OPP_BIC_S(3,5); + S_ASR_REG; + OP_BICS(2,4); } -static u32 FASTCALL OP_BIC_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OPP_BIC_S(2,4); + S_ROR_IMM; + OP_BICS(1,3); } -static u32 FASTCALL OP_BIC_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OPP_BIC_S(3,5); + S_ROR_REG; + OP_BICS(2,4); } -static u32 FASTCALL OP_BIC_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BIC_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OPP_BIC_S(2,4); + S_IMM_VALUE; + OP_BICS(1,3); } -//------------------MVN------------------- -#define OPP_MVN(a, b) cpu->R[REG_POS(i,12)] = ~shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - return a; +// ----------------------------------------------------------------------------- +// MVN / MVNS +// ----------------------------------------------------------------------------- -#define OPP_MVN_S(a, b) cpu->R[REG_POS(i,12)] = ~shift_op;\ - if(REG_POS(i,12)==15)\ - {\ - Status_Reg SPSR = cpu->SPSR;\ - armcpu_switchMode(cpu, SPSR.bits.mode);\ - cpu->CPSR=SPSR;\ - cpu->R[15] &= (0XFFFFFFFC|(((u32)SPSR.bits.T)<<1));\ - cpu->next_instruction = cpu->R[15];\ - return b;\ - }\ - cpu->CPSR.bits.C = c;\ - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,12)]);\ - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,12)]==0);\ - return a; +#define OP_MVN(a, b) \ + cpu->R[REG_POS(i, 12)] = ~shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + return a; -static u32 FASTCALL OP_MVN_LSL_IMM(armcpu_t *cpu) +#define OP_MVNS(a, b) \ + cpu->R[REG_POS(i, 12)] = ~shift_op; \ + if (REG_POS(i, 12) == 15) \ + { \ + Status_Reg SPSR = cpu->SPSR; \ + armcpu_switchMode(cpu, SPSR.bits.mode); \ + cpu->CPSR = SPSR; \ + cpu->changeCPSR(); \ + cpu->R[15] &= 0xFFFFFFFC | (static_cast(cpu->CPSR.bits.T) << 1); \ + cpu->next_instruction = cpu->R[15]; \ + return b; \ + } \ + cpu->CPSR.bits.C = c; \ + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 12)]); \ + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 12)]; \ + return a; + +TEMPLATE static uint32_t FASTCALL OP_MVN_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSL_IMM; - OPP_MVN(1,3); + LSL_IMM; + OP_MVN(1,3); } -static u32 FASTCALL OP_MVN_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - LSL_REG; - OPP_MVN(2,4); + LSL_REG; + OP_MVN(2,4); } -static u32 FASTCALL OP_MVN_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - LSR_IMM; - OPP_MVN(1,3); + LSR_IMM; + OP_MVN(1,3); } -static u32 FASTCALL OP_MVN_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - LSR_REG; - OPP_MVN(2,4); + LSR_REG; + OP_MVN(2,4); } -static u32 FASTCALL OP_MVN_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ASR_IMM; - OPP_MVN(1,3); + ASR_IMM; + OP_MVN(1,3); } -static u32 FASTCALL OP_MVN_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - ASR_REG; - OPP_MVN(2,4); + ASR_REG; + OP_MVN(2,4); } -static u32 FASTCALL OP_MVN_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - u32 shift_op; - ROR_IMM; - OPP_MVN(1,3); + ROR_IMM; + OP_MVN(1,3); } -static u32 FASTCALL OP_MVN_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - ROR_REG; - OPP_MVN(2,4); + ROR_REG; + OP_MVN(2,4); } -static u32 FASTCALL OP_MVN_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - OPP_MVN(1,3); + IMM_VALUE; + OP_MVN(1,3); } -static u32 FASTCALL OP_MVN_S_LSL_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_LSL_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_IMM; - OPP_MVN_S(2,4); + S_LSL_IMM; + OP_MVNS(1,3); } -static u32 FASTCALL OP_MVN_S_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSL_REG; - OPP_MVN_S(3,5); + S_LSL_REG; + OP_MVNS(2,4); } -static u32 FASTCALL OP_MVN_S_LSR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_LSR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_IMM; - OPP_MVN_S(2,4); + S_LSR_IMM; + OP_MVNS(1,3); } -static u32 FASTCALL OP_MVN_S_LSR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_LSR_REG; - OPP_MVN_S(3,5); + S_LSR_REG; + OP_MVNS(2,4); } -static u32 FASTCALL OP_MVN_S_ASR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_ASR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_IMM; - OPP_MVN_S(2,4); + S_ASR_IMM; + OP_MVNS(1,3); } -static u32 FASTCALL OP_MVN_S_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ASR_REG; - OPP_MVN_S(3,5); + S_ASR_REG; + OP_MVNS(2,4); } -static u32 FASTCALL OP_MVN_S_ROR_IMM(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_ROR_IMM(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_IMM; - OPP_MVN_S(2,4); + S_ROR_IMM; + OP_MVNS(1,3); } -static u32 FASTCALL OP_MVN_S_ROR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - S_ROR_REG; - OPP_MVN_S(3,5); + S_ROR_REG; + OP_MVNS(2,4); } -static u32 FASTCALL OP_MVN_S_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MVN_S_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - S_IMM_VALUE; - OPP_MVN_S(2,4); + S_IMM_VALUE; + OP_MVNS(1,3); } -//-------------MUL------------------------ -#define OPP_M(a,b) v >>= 8;\ - if((v==0)||(v==0xFFFFFF))\ - return b;\ - v >>= 8;\ - if((v==0)||(v==0xFFFF))\ - return b+1;\ - v >>= 8;\ - if((v==0)||(v==0xFF))\ - return b+2;\ - return a;\ +// ----------------------------------------------------------------------------- +// MUL / MULS / MLA / MLAS +// ----------------------------------------------------------------------------- + +#define MUL_Mxx_END(c) \ + v >>= 8; \ + if (!v || v == 0xFFFFFF) \ + return c + 1; \ + v >>= 8; \ + if (!v || v == 0xFFFF) \ + return c + 2; \ + v >>= 8; \ + if (!v || v == 0xFF) \ + return c + 3; \ + return c + 4; -static u32 FASTCALL OP_MUL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MUL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,16)] = cpu->R[REG_POS(i,8)] * v; - OPP_M(5,2); + uint32_t v = cpu->R[REG_POS(i, 8)]; + cpu->R[REG_POS(i, 16)] = cpu->R[REG_POS(i, 0)] * v; + + MUL_Mxx_END(1); } -static u32 FASTCALL OP_MLA(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MLA(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - u32 a = cpu->R[REG_POS(i,8)]; - u32 b = cpu->R[REG_POS(i,12)]; - cpu->R[REG_POS(i,16)] = a * v + b; + uint32_t v = cpu->R[REG_POS(i, 8)]; + cpu->R[REG_POS(i, 16)] = cpu->R[REG_POS(i, 0)] * v + cpu->R[REG_POS(i, 12)]; - OPP_M(6,3); + MUL_Mxx_END(2); } -static u32 FASTCALL OP_MUL_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MUL_S(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,16)] = cpu->R[REG_POS(i,8)] * v; + uint32_t v = cpu->R[REG_POS(i, 8)]; + cpu->R[REG_POS(i, 16)] = cpu->R[REG_POS(i, 0)] * v; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)]; - OPP_M(6,3); + MUL_Mxx_END(1); } -static u32 FASTCALL OP_MLA_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MLA_S(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,16)] = cpu->R[REG_POS(i,8)] * v + cpu->R[REG_POS(i,12)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0); - OPP_M(7,4); + uint32_t v = cpu->R[REG_POS(i, 8)]; + cpu->R[REG_POS(i, 16)] = cpu->R[REG_POS(i, 0)] * v + cpu->R[REG_POS(i, 12)]; + + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)]; + + MUL_Mxx_END(2); } -//----------UMUL-------------------------- +// ----------------------------------------------------------------------------- +// UMULL / UMULLS / UMLAL / UMLALS +// ----------------------------------------------------------------------------- + +#define MUL_UMxxL_END(c) \ + v >>= 8; \ + if (!v) \ + return c + 1; \ + v >>= 8; \ + if (!v) \ + return c + 2; \ + v >>= 8; \ + if (!v) \ + return c + 3; \ + return c + 4; -static u32 FASTCALL OP_UMULL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_UMULL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - u64 res = (u64)v * (u64)cpu->R[REG_POS(i,8)]; + uint32_t v = cpu->R[REG_POS(i, 8)]; + uint64_t res = static_cast(cpu->R[REG_POS(i, 0)]) * static_cast(v); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] = (u32)(res>>32); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32); - OPP_M(6,3); + MUL_UMxxL_END(2); } -static u32 FASTCALL OP_UMLAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_UMLAL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - u64 res = (u64)v * (u64)cpu->R[REG_POS(i,8)] + (u64)cpu->R[REG_POS(i,12)]; + uint32_t v = cpu->R[REG_POS(i, 8)]; + uint64_t res = static_cast(cpu->R[REG_POS(i, 0)]) * static_cast(v); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] += (u32)(res>>32); + // RdLo = (Rm * Rs)[31:0] + RdLo /* Unsigned multiplication */ + // RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo) + uint32_t tmp = static_cast(res); // low + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32) + cpu->R[REG_POS(i, 16)] + CarryFrom(tmp, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 12)] += tmp; - OPP_M(7,4); + MUL_UMxxL_END(3); } -static u32 FASTCALL OP_UMULL_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_UMULL_S(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - u64 res = (u64)v * (u64)cpu->R[REG_POS(i,8)]; + uint32_t v = cpu->R[REG_POS(i, 8)]; + uint64_t res = static_cast(cpu->R[REG_POS(i, 0)]) * static_cast(v); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] = (u32)(res>>32); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0) & (cpu->R[REG_POS(i,12)]==0); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)] && !cpu->R[REG_POS(i, 12)]; - OPP_M(7,4); + MUL_UMxxL_END(2); } -static u32 FASTCALL OP_UMLAL_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_UMLAL_S(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_POS(i,0)]; - u64 res = (u64)v * (u64)cpu->R[REG_POS(i,8)] + (u64)cpu->R[REG_POS(i,12)]; + uint32_t v = cpu->R[REG_POS(i, 8)]; + uint64_t res = static_cast(cpu->R[REG_POS(i, 0)]) * static_cast(v); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] += (u32)(res>>32); + // RdLo = (Rm * Rs)[31:0] + RdLo /* Unsigned multiplication */ + // RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo) + uint32_t tmp = static_cast(res); // low + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32) + cpu->R[REG_POS(i, 16)] + CarryFrom(tmp, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 12)] += tmp; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0) & (cpu->R[REG_POS(i,12)]==0); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)] & !cpu->R[REG_POS(i, 12)]; - OPP_M(8,5); + MUL_UMxxL_END(3); } -//----------SMUL-------------------------- +// ----------------------------------------------------------------------------- +// SMULL / SMULLS / SMLAL / SMLALS +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_SMULL(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - s64 v = (s32)cpu->R[REG_POS(i,0)]; - s64 b = (s32)cpu->R[REG_POS(i,8)]; - s64 res = v * b; +#define MUL_SMxxL_END(c) \ + v &= 0xFFFFFFFF; \ + v >>= 8; \ + if (!v || v == 0xFFFFFF) \ + return c + 1; \ + v >>= 8; \ + if (!v || v == 0xFFFF) \ + return c + 2; \ + v >>= 8; \ + if (!v || v == 0xFF) \ + return c + 3; \ + return c + 4; - cpu->R[REG_POS(i,12)] = (u32)(res&0xFFFFFFFF); - cpu->R[REG_POS(i,16)] = (u32)(res>>32); +TEMPLATE static uint32_t FASTCALL OP_SMULL(uint32_t i) +{ + int64_t v = static_cast(cpu->R[REG_POS(i, 8)]); + int64_t res = v * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - v &= 0xFFFFFFFF; + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32); - OPP_M(6,3); + MUL_SMxxL_END(2); } -static u32 FASTCALL OP_SMLAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL(uint32_t i) { - u32 i = cpu->instruction; - - s64 v = (s32)cpu->R[REG_POS(i,0)]; - s64 b = (s32)cpu->R[REG_POS(i,8)]; - s64 res = v * b + (u64)cpu->R[REG_POS(i,12)]; - - //LOG("%08X * %08X + %08X%08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], cpu->R[REG_POS(i,16)], cpu->R[REG_POS(i,12)]); + int64_t v = static_cast(cpu->R[REG_POS(i, 8)]); + int64_t res = v * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] += (u32)(res>>32); + uint32_t tmp = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32) + cpu->R[REG_POS(i, 16)] + CarryFrom(tmp, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 12)] += tmp; - //LOG("= %08X%08X %08X%08X\r\n", cpu->R[REG_POS(i,16)], cpu->R[REG_POS(i,12)], res); - - v &= 0xFFFFFFFF; - - OPP_M(7,4); + MUL_SMxxL_END(3); } -static u32 FASTCALL OP_SMULL_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMULL_S(uint32_t i) { - u32 i = cpu->instruction; - s64 v = (s32)cpu->R[REG_POS(i,0)]; - s64 b = (s32)cpu->R[REG_POS(i,8)]; - s64 res = v * b; + int64_t v = static_cast(cpu->R[REG_POS(i, 8)]); + int64_t res = v * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] = (u32)(res>>32); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0) & (cpu->R[REG_POS(i,12)]==0); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)] & !cpu->R[REG_POS(i, 12)]; - v &= 0xFFFFFFFF; - - OPP_M(7,4); + MUL_SMxxL_END(2); } -static u32 FASTCALL OP_SMLAL_S(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL_S(uint32_t i) { - u32 i = cpu->instruction; - s64 v = (s32)cpu->R[REG_POS(i,0)]; - s64 b = (s32)cpu->R[REG_POS(i,8)]; - s64 res = v * b + (u64)cpu->R[REG_POS(i,12)]; - - cpu->R[REG_POS(i,12)] = (u32)res; - cpu->R[REG_POS(i,16)] += (u32)(res>>32); + int64_t v = static_cast(cpu->R[REG_POS(i, 8)]); + int64_t res = v * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i,16)]); - cpu->CPSR.bits.Z = (cpu->R[REG_POS(i,16)]==0) & (cpu->R[REG_POS(i,12)]==0); + uint32_t tmp = static_cast(res); + cpu->R[REG_POS(i, 16)] = static_cast(res >> 32) + cpu->R[REG_POS(i, 16)] + CarryFrom(tmp, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 12)] += tmp; - v &= 0xFFFFFFFF; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_POS(i, 16)]); + cpu->CPSR.bits.Z = !cpu->R[REG_POS(i, 16)] & !cpu->R[REG_POS(i, 12)]; - OPP_M(8,5); + MUL_SMxxL_END(3); } -//---------------SWP------------------------------ +// ----------------------------------------------------------------------------- +// SWP / SWPB +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_SWP(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SWP(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u32 tmp = ROR(READ32(cpu->mem_if->data, adr), ((cpu->R[REG_POS(i,16)]&3)<<3)); + uint32_t adr = cpu->R[REG_POS(i, 16)]; + uint32_t tmp = ROR(READ32(cpu->mem_if->data, adr), (adr & 3) << 3); - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,0)]); - cpu->R[REG_POS(i,12)] = tmp; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 0)]); + cpu->R[REG_POS(i, 12)] = tmp; - return 4 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]*2; + uint32_t c = MMU_memAccessCycles(adr); + c += MMU_memAccessCycles(adr); + return MMU_aluMemCycles(4, c); } -static u32 FASTCALL OP_SWPB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SWPB(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u8 tmp = READ8(cpu->mem_if->data, adr); - WRITE8(cpu->mem_if->data, adr, (u8)(cpu->R[REG_POS(i,0)]&0xFF)); - cpu->R[REG_POS(i,12)] = tmp; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + uint8_t tmp = READ8(cpu->mem_if->data, adr); - return 4 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]*2; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 0)] & 0xFF)); + cpu->R[REG_POS(i, 12)] = tmp; + + uint32_t c = MMU_memAccessCycles(adr); + c += MMU_memAccessCycles(adr); + return MMU_aluMemCycles(4, c); } -//------------LDRH----------------------------- +// ----------------------------------------------------------------------------- +// LDRH +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_LDRH_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_PRE_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_PRE_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_PRE_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_PRE_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); - + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_PRE_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_PRE_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] =(u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_PRE_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_PRE_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_POS_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_POS_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] += IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_POS_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_POS_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] -= IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_POS_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_POS_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] += cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_POS_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_POS_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (u32)READ16(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] -= cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -//------------STRH----------------------------- +// ----------------------------------------------------------------------------- +// STRH +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_STRH_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_PRE_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_PRE_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,16)] = adr; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_PRE_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_PRE_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_PRE_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_PRE_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_PRE_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_PRE_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_POS_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_POS_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] += IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] += IMM_OFF; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_POS_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_POS_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] -= IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] -= IMM_OFF; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_POS_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_POS_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] += cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] += cpu->R[REG_POS(i, 0)]; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_POS_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_POS_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] -= cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] -= cpu->R[REG_POS(i, 0)]; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -//----------------LDRSH-------------------------- +// ----------------------------------------------------------------------------- +// LDRSH +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_LDRSH_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_PRE_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_PRE_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_PRE_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_PRE_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_PRE_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_PRE_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_PRE_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_PRE_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_POS_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_POS_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] += IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_POS_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_POS_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] -= IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_POS_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_POS_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] += cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSH_POS_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSH_POS_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] -= cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -//----------------------LDRSB---------------------- +// ----------------------------------------------------------------------------- +// LDRSB +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_LDRSB_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_PRE_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_PRE_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_PRE_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_PRE_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_PRE_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_PRE_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_PRE_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_PRE_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - cpu->R[REG_POS(i,0)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_POS_INDE_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_POS_INDE_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] += IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_POS_INDE_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_POS_INDE_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] -= IMM_OFF; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= IMM_OFF; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_POS_INDE_P_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_POS_INDE_P_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] += cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] += cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRSB_POS_INDE_M_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRSB_POS_INDE_M_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - cpu->R[REG_POS(i,12)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] -= cpu->R[REG_POS(i,0)]; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] -= cpu->R[REG_POS(i, 0)]; + cpu->R[REG_POS(i, 12)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -//--------------MRS-------------------------------- +// ----------------------------------------------------------------------------- +// MRS / MSR +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_MRS_CPSR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MRS_CPSR(uint32_t i) { - cpu->R[REG_POS(cpu->instruction,12)] = cpu->CPSR.val; + cpu->R[REG_POS(i, 12)] = cpu->CPSR.val; - return 1; + return 1; } -static u32 FASTCALL OP_MRS_SPSR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MRS_SPSR(uint32_t i) { - cpu->R[REG_POS(cpu->instruction,12)] = cpu->SPSR.val; + cpu->R[REG_POS(i, 12)] = cpu->SPSR.val; - return 1; + return 1; } -//--------------MSR-------------------------------- +#define OP_MSR_CPSR_(operand) \ + uint32_t byte_mask = cpu->CPSR.bits.mode == USR ? (BIT19(i) ? 0xFF000000 : 0x00000000) : \ + (BIT16(i) ? 0x000000FF : 0x00000000) | (BIT17(i) ? 0x0000FF00:0x00000000) | (BIT18(i) ? 0x00FF0000 : 0x00000000) | (BIT19(i) ? 0xFF000000 : 0x00000000); \ + if (cpu->CPSR.bits.mode != USR && BIT16(i)) \ + armcpu_switchMode(cpu, operand & 0x1F); \ + cpu->CPSR.val = (cpu->CPSR.val & ~byte_mask) | (operand & byte_mask); \ + cpu->changeCPSR(); + +#define OP_MSR_SPSR_(operand) \ + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) \ + return 1; \ + uint32_t byte_mask = (BIT16(i) ? 0x000000FF : 0x00000000) | (BIT17(i) ? 0x0000FF00 : 0x00000000) | (BIT18(i) ? 0x00FF0000 : 0x00000000) | (BIT19(i) ? 0xFF000000 : 0x00000000); \ + cpu->SPSR.val = (cpu->SPSR.val & ~byte_mask) | (operand & byte_mask); \ + cpu->changeCPSR(); + +//#define __NEW_MSR +#ifdef __NEW_MSR +#define v4T_UNALLOC_MASK 0x0FFFFF00 +#define v4T_USER_MASK 0xF0000000 +#define v4T_PRIV_MASK 0x0000000F +#define v4T_STATE_MASK 0x00000020 + +#define v5TE_UNALLOC_MASK 0x07FFFF00 +#define v5TE_USER_MASK 0xF8000000 +#define v5TE_PRIV_MASK 0x0000000F +#define v5TE_STATE_MASK 0x00000020 +#endif -static u32 FASTCALL OP_MSR_CPSR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MSR_CPSR(uint32_t i) { - u32 i = cpu->instruction; - u32 operand = cpu->R[REG_POS(i,0)]; + uint32_t operand = cpu->R[REG_POS(i, 0)]; - if(cpu->CPSR.bits.mode!=USR) - { - if(BIT16(i)) - { - armcpu_switchMode(cpu, operand & 0x1F); - cpu->CPSR.val = (cpu->CPSR.val & 0xFFFFFF00) | (operand & 0xFF); - } - if(BIT17(i)) - cpu->CPSR.val = (cpu->CPSR.val & 0xFFFF00FF) | (operand & 0xFF00); - if(BIT18(i)) - cpu->CPSR.val = (cpu->CPSR.val & 0xFF00FFFF) | (operand & 0xFF0000); - } - if(BIT19(i)) - cpu->CPSR.val = (cpu->CPSR.val & 0x00FFFFFF) | (operand & 0xFF000000); +#ifdef __NEW_MSR + uint32_t mask = 0; + uint32_t byte_mask = (BIT16(i) ? 0x000000FF : 0x00000000) | (BIT17(i) ? 0x0000FF00 : 0x00000000) | (BIT18(i) ? 0x00FF0000 : 0x00000000) | (BIT19(i) ? 0xFF000000 : 0x00000000); + + uint32_t unallocMask = PROCNUM?v4T_UNALLOC_MASK : v5TE_UNALLOC_MASK; + uint32_t userMask = PROCNUM?v4T_USER_MASK : v5TE_USER_MASK; + uint32_t privMask = PROCNUM?v4T_PRIV_MASK : v5TE_PRIV_MASK; + uint32_t stateMask = PROCNUM?v4T_STATE_MASK : v5TE_STATE_MASK; + + if (operand & unallocMask) + fprintf(stderr, "ARM%c: MSR_CPSR_REG UNPREDICTABLE UNALLOC (operand %08X)\n", PROCNUM ? '7' : '9', operand); + if (cpu->CPSR.bits.mode != USR) // Privileged mode + { + if (BIT16(i)) + armcpu_switchMode(cpu, operand & 0x1F); + if (operand & stateMask) + fprintf(stderr, "ARM%c: MSR_CPSR_REG UNPREDICTABLE STATE (operand %08X)\n", PROCNUM ? '7' : '9', operand); + else + mask = byte_mask & (userMask | privMask); + } + else + mask = byte_mask & userMask; - return 1; + u32 new_val = (cpu->CPSR.val & ~mask) | (operand & mask); + cpu->CPSR.val = (cpu->CPSR.val & ~mask) | (operand & mask); + cpu->changeCPSR(); +#else + OP_MSR_CPSR_(operand); +#endif + return 1; } -static u32 FASTCALL OP_MSR_SPSR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MSR_SPSR(uint32_t i) { - u32 i = cpu->instruction; - u32 operand = cpu->R[REG_POS(i,0)]; - - if(cpu->CPSR.bits.mode!=USR) - { - if(BIT16(i)) - { - cpu->SPSR.val = (cpu->SPSR.val & 0xFFFFFF00) | (operand & 0XFF); - } - if(BIT17(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0xFFFF00FF) | (operand & 0XFF00); - if(BIT18(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0xFF00FFFF) | (operand & 0XFF0000); - } - if(BIT19(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0x00FFFFFF) | (operand & 0XFF000000); - - return 1; + //fprintf(stderr, "OP_MSR_SPSR\n"); + uint32_t operand = cpu->R[REG_POS(i, 0)]; + OP_MSR_SPSR_(operand); + return 1; } -static u32 FASTCALL OP_MSR_CPSR_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MSR_CPSR_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - - if(cpu->CPSR.bits.mode!=USR) - { - if(BIT16(i)) - { - armcpu_switchMode(cpu, shift_op & 0x1F); - cpu->CPSR.val = (cpu->CPSR.val & 0xFFFFFF00) | (shift_op & 0XFF); - } - if(BIT17(i)) - cpu->CPSR.val = (cpu->CPSR.val & 0xFFFF00FF) | (shift_op & 0XFF00); - if(BIT18(i)) - cpu->CPSR.val = (cpu->CPSR.val & 0xFF00FFFF) | (shift_op & 0XFF0000); - } - if(BIT19(i)) - { - //cpu->CPSR.val = (cpu->CPSR.val & 0xFF000000) | (shift_op & 0XFF000000); - cpu->CPSR.val = (cpu->CPSR.val & 0x00FFFFFF) | (shift_op & 0xFF000000); - } - - return 1; + //fprintf(stderr, "OP_MSR_CPSR_IMM_VAL\n"); + IMM_VALUE; + OP_MSR_CPSR_(shift_op); + return 1; } -static u32 FASTCALL OP_MSR_SPSR_IMM_VAL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MSR_SPSR_IMM_VAL(uint32_t i) { - u32 i = cpu->instruction; - IMM_VALUE; - - if(cpu->CPSR.bits.mode!=USR) - { - if(BIT16(i)) - { - cpu->SPSR.val = (cpu->SPSR.val & 0xFFFFFF00) | (shift_op & 0XFF); - } - if(BIT17(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0xFFFF00FF) | (shift_op & 0XFF00); - if(BIT18(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0xFF00FFFF) | (shift_op & 0XFF0000); - } - if(BIT19(i)) - cpu->SPSR.val = (cpu->SPSR.val & 0xFF000000) | (shift_op & 0XFF000000); - - return 1; + //fprintf(stderr, "OP_MSR_SPSR_IMM_VAL\n"); + IMM_VALUE; + OP_MSR_SPSR_(shift_op); + return 1; } -//-----------------BRANCH-------------------------- +// ----------------------------------------------------------------------------- +// Branch +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_BX(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BX(uint32_t i) { - u32 tmp = cpu->R[REG_POS(cpu->instruction, 0)]; + uint32_t tmp = cpu->R[REG_POS(i, 0)]; - cpu->CPSR.bits.T = BIT0(tmp); - cpu->R[15] = tmp & 0xFFFFFFFE; - cpu->next_instruction = cpu->R[15]; - return 3; + cpu->CPSR.bits.T = BIT0(tmp); + cpu->R[15] = tmp & (0xFFFFFFFC | (cpu->CPSR.bits.T << 1)); + cpu->next_instruction = cpu->R[15]; + return 3; } -static u32 FASTCALL OP_BLX_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BLX_REG(uint32_t i) { - u32 tmp = cpu->R[REG_POS(cpu->instruction, 0)]; + uint32_t tmp = cpu->R[REG_POS(i, 0)]; - cpu->R[14] = cpu->next_instruction; - cpu->CPSR.bits.T = BIT0(tmp); - cpu->R[15] = tmp & 0xFFFFFFFE; - cpu->next_instruction = cpu->R[15]; - return 3; + cpu->R[14] = cpu->next_instruction; + cpu->CPSR.bits.T = BIT0(tmp); + cpu->R[15] = tmp & (0xFFFFFFFC | (cpu->CPSR.bits.T << 1)); + cpu->next_instruction = cpu->R[15]; + return 3; } -#define SIGNEXTEND_24(i) (((s32)((i)<<8))>>8) +static inline uint32_t SIGNEXTEND_24(uint32_t i) { return static_cast((static_cast(i) << 8) >> 8); } -static u32 FASTCALL OP_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_B(uint32_t i) { - u32 off = SIGNEXTEND_24(cpu->instruction); - if(CONDITION(cpu->instruction)==0xF) + /*static const uint32_t mov_r12_r12 = 0xE1A0C00C; + const uint32_t last = _MMU_read32(cpu->instruct_adr-4); + if(last == mov_r12_r12) + { + const uint32_t next = _MMU_read16(cpu->instruct_adr+4); + if(next == 0x6464) + NocashMessage(cpu, 8); + }*/ + + uint32_t off = SIGNEXTEND_24(i); + if (CONDITION(i) == 0xF) { cpu->R[14] = cpu->next_instruction; cpu->CPSR.bits.T = 1; } - cpu->R[15] += (off<<2); + cpu->R[15] += off << 2; + cpu->R[15] &= 0xFFFFFFFC | (cpu->CPSR.bits.T << 1); cpu->next_instruction = cpu->R[15]; - return 3; + return 3; } -static u32 FASTCALL OP_BL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BL(uint32_t i) { - u32 off = SIGNEXTEND_24(cpu->instruction); - if(CONDITION(cpu->instruction)==0xF) + uint32_t off = SIGNEXTEND_24(i); + if (CONDITION(i) == 0xF) { cpu->CPSR.bits.T = 1; cpu->R[15] += 2; } cpu->R[14] = cpu->next_instruction; - cpu->R[15] += (off<<2); + cpu->R[15] += off << 2; + cpu->R[15] &= 0xFFFFFFFC | (cpu->CPSR.bits.T << 1); cpu->next_instruction = cpu->R[15]; return 3; } -//----------------CLZ------------------------------- - -u8 CLZ_TAB[16]= -{ - 0, // 0000 - 1, // 0001 - 2, 2, // 001X - 3, 3, 3, 3, // 01XX - 4, 4, 4, 4, 4, 4, 4, 4 // 1XXX +// ----------------------------------------------------------------------------- +// CLZ +// ----------------------------------------------------------------------------- + +const uint8_t CLZ_TAB[]= +{ + 0, // 0000 + 1, // 0001 + 2, 2, // 001X + 3, 3, 3, 3, // 01XX + 4, 4, 4, 4, 4, 4, 4, 4 // 1XXX }; -static u32 FASTCALL OP_CLZ(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CLZ(uint32_t i) { - u32 i = cpu->instruction; - u32 Rm = cpu->R[REG_POS(i,0)]; - u32 pos; + uint32_t Rm = cpu->R[REG_POS(i, 0)]; - if(Rm==0) - { - cpu->R[REG_POS(i,12)]=32; - return 2; - } + if (!Rm) + { + cpu->R[REG_POS(i, 12)] = 32; + return 2; + } - Rm |= (Rm >>1); - Rm |= (Rm >>2); - Rm |= (Rm >>4); - Rm |= (Rm >>8); - Rm |= (Rm >>16); + Rm |= Rm >> 1; + Rm |= Rm >> 2; + Rm |= Rm >> 4; + Rm |= Rm >> 8; + Rm |= Rm >> 16; - pos = - CLZ_TAB[Rm&0xF] + - CLZ_TAB[(Rm>>4)&0xF] + - CLZ_TAB[(Rm>>8)&0xF] + - CLZ_TAB[(Rm>>12)&0xF] + - CLZ_TAB[(Rm>>16)&0xF] + - CLZ_TAB[(Rm>>20)&0xF] + - CLZ_TAB[(Rm>>24)&0xF] + - CLZ_TAB[(Rm>>28)&0xF]; + uint32_t pos = CLZ_TAB[Rm & 0xF] + CLZ_TAB[(Rm >> 4) & 0xF] + CLZ_TAB[(Rm >> 8) & 0xF] + CLZ_TAB[(Rm >> 12) & 0xF] + + CLZ_TAB[(Rm >> 16) & 0xF] + CLZ_TAB[(Rm >> 20) & 0xF] + CLZ_TAB[(Rm >> 24) & 0xF] + CLZ_TAB[(Rm >> 28) & 0xF]; - cpu->R[REG_POS(i,12)]=32 - pos; + cpu->R[REG_POS(i, 12)] = 32 - pos; - return 2; + return 2; } -//--------------------QADD--QSUB------------------------------ +// ----------------------------------------------------------------------------- +// QADD / QDADD / QSUB / QDSUB +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_QADD(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_QADD(uint32_t i) { - u32 i = cpu->instruction; - u32 res = cpu->R[REG_POS(i,16)]+cpu->R[REG_POS(i,0)]; + uint32_t res = cpu->R[REG_POS(i, 16)] + cpu->R[REG_POS(i, 0)]; - LOG("spe add\r\n"); - if(SIGNED_OVERFLOW(cpu->R[REG_POS(i,16)],cpu->R[REG_POS(i,0)], res)) + if (SIGNED_OVERFLOW(cpu->R[REG_POS(i, 16)], cpu->R[REG_POS(i, 0)], res)) { - cpu->CPSR.bits.Q=1; - cpu->R[REG_POS(i,12)]=0x80000000-BIT31(res); + cpu->CPSR.bits.Q = 1; + cpu->R[REG_POS(i, 12)] = 0x80000000 - BIT31(res); return 2; } - cpu->R[REG_POS(i,12)]=res; - if(REG_POS(i,12)==15) + cpu->R[REG_POS(i, 12)] = res; + if (REG_POS(i, 12) == 15) { - cpu->R[15] &= 0XFFFFFFFC; - cpu->next_instruction = cpu->R[15]; - return 3; - } - return 2; + cpu->R[15] &= 0xFFFFFFFC; + cpu->next_instruction = cpu->R[15]; + return 3; + } + return 2; } -static u32 FASTCALL OP_QSUB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_QSUB(uint32_t i) { - u32 i = cpu->instruction; - u32 res = cpu->R[REG_POS(i,0)]-cpu->R[REG_POS(i,16)]; + uint32_t res = cpu->R[REG_POS(i, 0)] - cpu->R[REG_POS(i, 16)]; - LOG("spe add\r\n"); - if(SIGNED_UNDERFLOW(cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,16)], res)) + if (SIGNED_UNDERFLOW(cpu->R[REG_POS(i, 0)], cpu->R[REG_POS(i, 16)], res)) { - cpu->CPSR.bits.Q=1; - cpu->R[REG_POS(i,12)]=0x80000000-BIT31(res); + cpu->CPSR.bits.Q = 1; + cpu->R[REG_POS(i, 12)] = 0x80000000 - BIT31(res); return 2; } - cpu->R[REG_POS(i,12)]=res; - if(REG_POS(i,12)==15) + cpu->R[REG_POS(i, 12)] = res; + if (REG_POS(i, 12) == 15) { - cpu->R[15] &= 0XFFFFFFFC; - cpu->next_instruction = cpu->R[15]; - return 3; - } - return 2; + cpu->R[15] &= 0xFFFFFFFC; + cpu->next_instruction = cpu->R[15]; + return 3; + } + return 2; } -static u32 FASTCALL OP_QDADD(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_QDADD(uint32_t i) { - u32 i = cpu->instruction; - u32 mul = cpu->R[REG_POS(i,16)]<<1; - u32 res; - + uint32_t mul = cpu->R[REG_POS(i, 16)] << 1; - LOG("spe add\r\n"); - if(BIT31(cpu->R[REG_POS(i,16)])!=BIT31(mul)) + if (BIT31(cpu->R[REG_POS(i, 16)]) != BIT31(mul)) { - cpu->CPSR.bits.Q=1; - mul = 0x80000000-BIT31(mul); + cpu->CPSR.bits.Q = 1; + mul = 0x80000000 - BIT31(mul); } - res = mul + cpu->R[REG_POS(i,0)]; - if(SIGNED_OVERFLOW(cpu->R[REG_POS(i,0)],mul, res)) + uint32_t res = mul + cpu->R[REG_POS(i, 0)]; + if (SIGNED_OVERFLOW(cpu->R[REG_POS(i, 0)], mul, res)) { - cpu->CPSR.bits.Q=1; - cpu->R[REG_POS(i,12)]=0x80000000-BIT31(res); + cpu->CPSR.bits.Q = 1; + cpu->R[REG_POS(i, 12)] = 0x80000000 - BIT31(res); return 2; } - cpu->R[REG_POS(i,12)]=res; - if(REG_POS(i,12)==15) + cpu->R[REG_POS(i, 12)] = res; + if (REG_POS(i, 12) == 15) { - cpu->R[15] &= 0XFFFFFFFC; - cpu->next_instruction = cpu->R[15]; - return 3; - } - return 2; + cpu->R[15] &= 0xFFFFFFFC; + cpu->next_instruction = cpu->R[15]; + return 3; + } + return 2; } -static u32 FASTCALL OP_QDSUB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_QDSUB(uint32_t i) { - u32 i = cpu->instruction; - u32 mul = cpu->R[REG_POS(i,16)]<<1; - u32 res; - + uint32_t mul = cpu->R[REG_POS(i, 16)] << 1; - LOG("spe add\r\n"); - if(BIT31(cpu->R[REG_POS(i,16)])!=BIT31(mul)) + if (BIT31(cpu->R[REG_POS(i, 16)]) != BIT31(mul)) { - cpu->CPSR.bits.Q=1; - mul = 0x80000000-BIT31(mul); + cpu->CPSR.bits.Q = 1; + mul = 0x80000000 - BIT31(mul); } - res = cpu->R[REG_POS(i,0)] - mul; - if(SIGNED_UNDERFLOW(cpu->R[REG_POS(i,0)], mul, res)) + uint32_t res = cpu->R[REG_POS(i, 0)] - mul; + if (SIGNED_UNDERFLOW(cpu->R[REG_POS(i, 0)], mul, res)) { - cpu->CPSR.bits.Q=1; - cpu->R[REG_POS(i,12)]=0x80000000-BIT31(res); + cpu->CPSR.bits.Q = 1; + cpu->R[REG_POS(i, 12)] = 0x80000000 - BIT31(res); return 2; } - cpu->R[REG_POS(i,12)]=res; - if(REG_POS(i,12)==15) + cpu->R[REG_POS(i, 12)] = res; + if (REG_POS(i, 12) == 15) { - cpu->R[15] &= 0XFFFFFFFC; - cpu->next_instruction = cpu->R[15]; - return 3; - } - return 2; + cpu->R[15] &= 0xFFFFFFFC; + cpu->next_instruction = cpu->R[15]; + return 3; + } + return 2; } -//-----------------SMUL------------------------------- +// ----------------------------------------------------------------------------- +// SMUL +// ----------------------------------------------------------------------------- -#define HWORD(i) ((s32)(((s32)(i))>>16)) -#define LWORD(i) (s32)(((s32)((i)<<16))>>16) +static inline int32_t HWORD(uint32_t i) { return static_cast(static_cast(i) >> 16); } +static inline int32_t LWORD(uint32_t i) { return static_cast(static_cast(i << 16) >> 16); } -static u32 FASTCALL OP_SMUL_B_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMUL_B_B(uint32_t i) { - u32 i = cpu->instruction; - - cpu->R[REG_POS(i,16)] = (u32)(LWORD(cpu->R[REG_POS(i,0)])* LWORD(cpu->R[REG_POS(i,8)])); + // checked + cpu->R[REG_POS(i, 16)] = static_cast(LWORD(cpu->R[REG_POS(i, 0)]) * LWORD(cpu->R[REG_POS(i, 8)])); - return 2; + return 2; } -static u32 FASTCALL OP_SMUL_B_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMUL_B_T(uint32_t i) { - u32 i = cpu->instruction; + cpu->R[REG_POS(i, 16)] = static_cast(LWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); - cpu->R[REG_POS(i,16)] = (u32)(LWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - - return 2; + return 2; } -static u32 FASTCALL OP_SMUL_T_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMUL_T_B(uint32_t i) { - u32 i = cpu->instruction; - - cpu->R[REG_POS(i,16)] = (u32)(HWORD(cpu->R[REG_POS(i,0)])* LWORD(cpu->R[REG_POS(i,8)])); + cpu->R[REG_POS(i, 16)] = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * LWORD(cpu->R[REG_POS(i, 8)])); - return 2; + return 2; } -static u32 FASTCALL OP_SMUL_T_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMUL_T_T(uint32_t i) { - u32 i = cpu->instruction; + cpu->R[REG_POS(i, 16)] = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); - cpu->R[REG_POS(i,16)] = (u32)(HWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - - return 2; + return 2; } -//-----------SMLA---------------------------- +// ----------------------------------------------------------------------------- +// SMLA +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_SMLA_B_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLA_B_B(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = (u32)(LWORD(cpu->R[REG_POS(i,0)])* LWORD(cpu->R[REG_POS(i,8)])); - u32 a = cpu->R[REG_POS(i,12)]; + uint32_t tmp = static_cast(static_cast(cpu->R[REG_POS(i, 0)]) * static_cast(cpu->R[REG_POS(i, 8)])); - //LOG("SMLABB %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, tmp + a); - cpu->R[REG_POS(i,16)] = tmp + a; + cpu->R[REG_POS(i, 16)] = tmp + cpu->R[REG_POS(i, 12)]; - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (OverflowFromADD(cpu->R[REG_POS(i, 16)], tmp, cpu->R[REG_POS(i, 12)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -static u32 FASTCALL OP_SMLA_B_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLA_B_T(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = (u32)(LWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - u32 a = cpu->R[REG_POS(i,12)]; + uint32_t tmp = static_cast(LWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); + uint32_t a = cpu->R[REG_POS(i, 12)]; - //LOG("SMLABT %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, tmp + a); - cpu->R[REG_POS(i,16)] = tmp + a; + cpu->R[REG_POS(i, 16)] = tmp + a; - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i, 16)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -static u32 FASTCALL OP_SMLA_T_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLA_T_B(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = (u32)(HWORD(cpu->R[REG_POS(i,0)])* LWORD(cpu->R[REG_POS(i,8)])); - u32 a = cpu->R[REG_POS(i,12)]; + uint32_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * LWORD(cpu->R[REG_POS(i, 8)])); + uint32_t a = cpu->R[REG_POS(i, 12)]; - //LOG("SMLATB %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, tmp + a); - cpu->R[REG_POS(i,16)] = tmp + a; + cpu->R[REG_POS(i, 16)] = tmp + a; - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i, 16)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -static u32 FASTCALL OP_SMLA_T_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLA_T_T(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = (u32)(HWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - u32 a = cpu->R[REG_POS(i,12)]; + uint32_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); + uint32_t a = cpu->R[REG_POS(i, 12)]; - //LOG("SMLATT %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, tmp + a); - cpu->R[REG_POS(i,16)] = tmp + a; + cpu->R[REG_POS(i, 16)] = tmp + a; - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i, 16)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -//--------------SMLAL--------------------------------------- +// ----------------------------------------------------------------------------- +// SMLAL +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_SMLAL_B_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL_B_B(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)(LWORD(cpu->R[REG_POS(i,0)])* LWORD(cpu->R[REG_POS(i,8)])); - u64 res = (u64)tmp + cpu->R[REG_POS(i,12)]; - - LOG("SMLALBB %08X * %08X + %08X%08X = %08X%08X\r\n", (int)cpu->R[REG_POS(i,0)], (int)cpu->R[REG_POS(i,8)], (int)cpu->R[REG_POS(i,16)], (int)cpu->R[REG_POS(i,12)], (int)(cpu->R[REG_POS(i,16)] + (res + ((tmp<0)*0xFFFFFFFF))), (int)(u32) res); + int64_t tmp = static_cast(LWORD(cpu->R[REG_POS(i, 0)]) * LWORD(cpu->R[REG_POS(i, 8)])); + uint64_t res = static_cast(tmp) + cpu->R[REG_POS(i, 12)]; - cpu->R[REG_POS(i,12)] = (u32) res; - cpu->R[REG_POS(i,16)] += (res + ((tmp<0)*0xFFFFFFFF)); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] += static_cast(res + ((tmp < 0) * 0xFFFFFFFF)); - return 2; + return 2; } -static u32 FASTCALL OP_SMLAL_B_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL_B_T(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)(LWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - u64 res = (u64)tmp + cpu->R[REG_POS(i,12)]; + int64_t tmp = static_cast(LWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); + uint64_t res = static_cast(tmp) + cpu->R[REG_POS(i, 12)]; - LOG("SMLALBT %08X * %08X + %08X%08X = %08X%08X\r\n", (int)cpu->R[REG_POS(i,0)], (int)cpu->R[REG_POS(i,8)], (int)cpu->R[REG_POS(i,16)], (int)cpu->R[REG_POS(i,12)], (int)(cpu->R[REG_POS(i,16)] + res + ((tmp<0)*0xFFFFFFFF)), (int)(u32) res); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] += static_cast(res + ((tmp < 0) * 0xFFFFFFFF)); - cpu->R[REG_POS(i,12)] = (u32) res; - cpu->R[REG_POS(i,16)] += res + ((tmp<0)*0xFFFFFFFF); - - return 2; + return 2; } -static u32 FASTCALL OP_SMLAL_T_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL_T_B(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)(HWORD(cpu->R[REG_POS(i,0)])* (s64)LWORD(cpu->R[REG_POS(i,8)])); - u64 res = (u64)tmp + cpu->R[REG_POS(i,12)]; - - LOG("SMLALTB %08X * %08X + %08X%08X = %08X%08X\r\n", (int)cpu->R[REG_POS(i,0)], (int)cpu->R[REG_POS(i,8)], (int)cpu->R[REG_POS(i,16)], (int)cpu->R[REG_POS(i,12)], (int)(cpu->R[REG_POS(i,16)] + res + ((tmp<0)*0xFFFFFFFF)), (int)(u32) res); + int64_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * static_cast(LWORD(cpu->R[REG_POS(i, 8)]))); + uint64_t res = static_cast(tmp) + cpu->R[REG_POS(i, 12)]; - cpu->R[REG_POS(i,12)] = (u32) res; - cpu->R[REG_POS(i,16)] += res + ((tmp<0)*0xFFFFFFFF); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] += static_cast(res + ((tmp < 0) * 0xFFFFFFFF)); - return 2; + return 2; } -static u32 FASTCALL OP_SMLAL_T_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAL_T_T(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)(HWORD(cpu->R[REG_POS(i,0)])* HWORD(cpu->R[REG_POS(i,8)])); - u64 res = (u64)tmp + cpu->R[REG_POS(i,12)]; + int64_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 0)]) * HWORD(cpu->R[REG_POS(i, 8)])); + uint64_t res = static_cast(tmp) + cpu->R[REG_POS(i, 12)]; - LOG("SMLALTT %08X * %08X + %08X%08X = %08X%08X\r\n", (int)cpu->R[REG_POS(i,0)], (int)cpu->R[REG_POS(i,8)], (int)cpu->R[REG_POS(i,16)], (int)cpu->R[REG_POS(i,12)], (int)(cpu->R[REG_POS(i,16)] + res + ((tmp<0)*0xFFFFFFFF)), (int)(u32) res); + cpu->R[REG_POS(i, 12)] = static_cast(res); + cpu->R[REG_POS(i, 16)] += static_cast(res + ((tmp < 0) * 0xFFFFFFFF)); - cpu->R[REG_POS(i,12)] = (u32) res; - cpu->R[REG_POS(i,16)] += res + ((tmp<0)*0xFFFFFFFF); - - return 2; + return 2; } -//--------------SMULW-------------------- +// ----------------------------------------------------------------------------- +// SMULW +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_SMULW_B(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMULW_B(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)LWORD(cpu->R[REG_POS(i,8)]) * (s64)((s32)cpu->R[REG_POS(i,0)]); - - //LOG("SMULWB %08X * %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], ((tmp>>16)&0xFFFFFFFF); + int64_t tmp = static_cast(LWORD(cpu->R[REG_POS(i, 8)])) * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - cpu->R[REG_POS(i,16)] = ((tmp>>16)&0xFFFFFFFF); + cpu->R[REG_POS(i, 16)] = (tmp >> 16) & 0xFFFFFFFF; - return 2; + return 2; } -static u32 FASTCALL OP_SMULW_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMULW_T(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)HWORD(cpu->R[REG_POS(i,8)]) * (s64)((s32)cpu->R[REG_POS(i,0)]); + int64_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 8)])) * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); - //LOG("SMULWT %08X * %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], ((tmp>>16)&0xFFFFFFFF)); + cpu->R[REG_POS(i, 16)] = (tmp >> 16) & 0xFFFFFFFF; - cpu->R[REG_POS(i,16)] = ((tmp>>16)&0xFFFFFFFF); - - return 2; + return 2; } -//--------------SMLAW------------------- -static u32 FASTCALL OP_SMLAW_B(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - s64 tmp = (s64)LWORD(cpu->R[REG_POS(i,8)]) * (s64)((s32)cpu->R[REG_POS(i,0)]); - u32 a = cpu->R[REG_POS(i,12)]; +// ----------------------------------------------------------------------------- +// SMLAW +// ----------------------------------------------------------------------------- - //LOG("SMLAWB %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, (tmp>>16) + a); +TEMPLATE static uint32_t FASTCALL OP_SMLAW_B(uint32_t i) +{ + int64_t tmp = static_cast(LWORD(cpu->R[REG_POS(i, 8)])) * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); + uint32_t a = cpu->R[REG_POS(i, 12)]; - tmp = (tmp>>16); + tmp >>= 16; - cpu->R[REG_POS(i,16)] = tmp + a; + cpu->R[REG_POS(i, 16)] = static_cast(tmp + a); - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (SIGNED_OVERFLOW(static_cast(tmp), a, cpu->R[REG_POS(i, 16)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -static u32 FASTCALL OP_SMLAW_T(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SMLAW_T(uint32_t i) { - u32 i = cpu->instruction; - s64 tmp = (s64)HWORD(cpu->R[REG_POS(i,8)]) * (s64)((s32)cpu->R[REG_POS(i,0)]); - u32 a = cpu->R[REG_POS(i,12)]; - - //LOG("SMLAWT %08X * %08X + %08X = %08X\r\n", cpu->R[REG_POS(i,0)], cpu->R[REG_POS(i,8)], a, ((tmp>>16)&0xFFFFFFFF) + a); + int64_t tmp = static_cast(HWORD(cpu->R[REG_POS(i, 8)])) * static_cast(static_cast(cpu->R[REG_POS(i, 0)])); + uint32_t a = cpu->R[REG_POS(i, 12)]; - tmp = ((tmp>>16)&0xFFFFFFFF); - cpu->R[REG_POS(i,16)] = tmp + a; + tmp = (tmp >> 16) & 0xFFFFFFFF; + cpu->R[REG_POS(i, 16)] = static_cast(tmp + a); - if(SIGNED_OVERFLOW(tmp, a, cpu->R[REG_POS(i,16)])) - cpu->CPSR.bits.Q = 1; + if (SIGNED_OVERFLOW(static_cast(tmp), a, cpu->R[REG_POS(i, 16)])) + cpu->CPSR.bits.Q = 1; - return 2; + return 2; } -//------------LDR--------------------------- +// ----------------------------------------------------------------------------- +// LDR +// ----------------------------------------------------------------------------- +#define OP_LDR(a, b) \ + cpu->R[REG_POS(i, 12)] = ROR(READ32(cpu->mem_if->data, adr), 8 * (adr & 3)); \ +\ + if (REG_POS(i, 12) == 15) \ + { \ + if (!PROCNUM) \ + { \ + cpu->CPSR.bits.T = BIT0(cpu->R[15]); \ + cpu->R[15] &= 0xFFFFFFFE; \ + } \ + else \ + cpu->R[15] &= 0xFFFFFFFC; \ + cpu->next_instruction = cpu->R[15]; \ + return MMU_aluMemAccessCycles(b, adr); \ + } \ +\ + return MMU_aluMemAccessCycles(a, adr); -static u32 FASTCALL OP_LDR_P_IMM_OFF(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - u32 val = READ32(cpu->mem_if->data, adr); +// PRE +#define OP_LDR_W(a, b) \ + cpu->R[REG_POS(i, 16)] = adr;\ + cpu->R[REG_POS(i, 12)] = ROR(READ32(cpu->mem_if->data, adr), 8 * (adr & 3)); \ +\ + if (REG_POS(i, 12) == 15) \ + { \ + if (!PROCNUM) \ + { \ + cpu->CPSR.bits.T = BIT0(cpu->R[15]); \ + cpu->R[15] &= 0xFFFFFFFE; \ + } \ + else \ + cpu->R[15] &= 0xFFFFFFFC; \ + cpu->next_instruction = cpu->R[15]; \ + return MMU_aluMemAccessCycles(b, adr); \ + } \ +\ + return MMU_aluMemAccessCycles(a, adr); - if(adr&3) - val = ROR(val, 8*(adr&3)); +// POST +#define OP_LDR_W2(a, b, c) \ + uint32_t adr = cpu->R[REG_POS(i, 16)]; \ + cpu->R[REG_POS(i, 16)] = adr + c;\ + cpu->R[REG_POS(i, 12)] = ROR(READ32(cpu->mem_if->data, adr), 8 * (adr & 3)); \ +\ + if (REG_POS(i, 12) == 15) \ + { \ + if (!PROCNUM) \ + { \ + cpu->CPSR.bits.T = BIT0(cpu->R[15]); \ + cpu->R[15] &= 0xFFFFFFFE; \ + } \ + else \ + cpu->R[15] &= 0xFFFFFFFC; \ + cpu->next_instruction = cpu->R[15]; \ + return MMU_aluMemAccessCycles(b, adr); \ + } \ +\ + return MMU_aluMemAccessCycles(a, adr); - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - cpu->R[REG_POS(i,12)] = val; - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; +TEMPLATE static uint32_t FASTCALL OP_LDR_P_IMM_OFF(uint32_t i) +{ + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - u32 val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_P_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_M_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_P_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_M_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_P_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_M_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_P_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_M_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR(3, 5); } -static u32 FASTCALL OP_LDR_P_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - u32 val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_M_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - u32 val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_P_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_M_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_P_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_M_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_P_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_M_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_P_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_M_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + OP_LDR_W(3, 5); } -static u32 FASTCALL OP_LDR_P_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u32 val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + OP_LDR_W2(3, 5, IMM_OFF_12); } -//------------------------------------------------------------ -static u32 FASTCALL OP_LDR_P_IMM_OFF_POSTIND2(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - - u32 adr = cpu->R[REG_POS(i,16)]; - u32 val = READ32(cpu->mem_if->data, adr); - u32 old; - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - old = armcpu_switchMode(cpu, USR); - cpu->R[REG_POS(i,12)] = val; - armcpu_switchMode(cpu, old); - - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + OP_LDR_W2(3, 5, -IMM_OFF_12); } -//------------------------------------------------------------ - -static u32 FASTCALL OP_LDR_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u32 val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + OP_LDR_W2(3, 5, shift_op); } -static u32 FASTCALL OP_LDR_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSL_IMM; + OP_LDR_W2(3, 5, -shift_op); } -static u32 FASTCALL OP_LDR_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr - shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + OP_LDR_W2(3, 5, shift_op); } -static u32 FASTCALL OP_LDR_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + LSR_IMM; + OP_LDR_W2(3, 5, -shift_op); } -static u32 FASTCALL OP_LDR_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr - shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + OP_LDR_W2(3, 5, shift_op); } -static u32 FASTCALL OP_LDR_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ASR_IMM; + OP_LDR_W2(3, 5, -shift_op); } -static u32 FASTCALL OP_LDR_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_P_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr - shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + OP_LDR_W2(3, 5, shift_op); } -static u32 FASTCALL OP_LDR_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_M_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr + shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + ROR_IMM; + OP_LDR_W2(3, 5, -shift_op); } -static u32 FASTCALL OP_LDR_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +// ----------------------------------------------------------------------------- +// LDREX +// ----------------------------------------------------------------------------- +TEMPLATE static uint32_t FASTCALL OP_LDREX(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ32(cpu->mem_if->data, adr); - - if(adr&3) - val = ROR(val, 8*(adr&3)); - - if(REG_POS(i,12)==15) - { - cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); - cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; - cpu->next_instruction = cpu->R[15]; - cpu->R[REG_POS(i,16)] = adr - shift_op; - return 5 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - } - - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + fprintf(stderr, "LDREX\n"); + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 12)] = ROR(READ32(cpu->mem_if->data, adr), 8 * (adr & 3)); + return MMU_aluMemAccessCycles(3, adr); } -//-----------------LDRB------------------------------------------- +// ----------------------------------------------------------------------------- +// LDRB +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_LDRB_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - u32 val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - u32 val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 12)] = READ8(cpu->mem_if->data, adr); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - u32 val = READ8(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - u32 val = READ8(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; - - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr; - cpu->R[REG_POS(i,12)] = val; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u32 val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; - cpu->R[REG_POS(i,12)] = val; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr + IMM_OFF_12; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - u32 val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; - cpu->R[REG_POS(i,12)] = val; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr - IMM_OFF_12; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_P_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr + shift_op; - cpu->R[REG_POS(i,12)] = val; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr + shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_M_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 val; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,16)] = adr - shift_op; - cpu->R[REG_POS(i,12)] = val; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + cpu->R[REG_POS(i, 16)] = adr - shift_op; + cpu->R[REG_POS(i, 12)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -//----------------------STR-------------------------------- +// ----------------------------------------------------------------------------- +// STR +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_STR_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + + return MMU_aluMemAccessCycles(2, adr); +} -// execute = false; +TEMPLATE static uint32_t FASTCALL OP_STR_M_IMM_OFF(uint32_t i) +{ + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr + IMM_OFF_12; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr - IMM_OFF_12; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_P_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_M_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 12)]); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +// ----------------------------------------------------------------------------- +// STREX +// ----------------------------------------------------------------------------- +TEMPLATE static uint32_t FASTCALL OP_STREX(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + fprintf(stderr, "STREX\n"); + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_POS(i, 0)]); + cpu->R[REG_POS(i, 12)] = 0; - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -//-----------------------STRB------------------------------------- +// ----------------------------------------------------------------------------- +// STRB +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_STRB_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSL_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSL_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ASR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ASR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ROR_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ROR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] + IMM_OFF_12; - WRITE8(cpu->mem_if->data, adr, cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] + IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)] - IMM_OFF_12; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + uint32_t adr = cpu->R[REG_POS(i, 16)] - IMM_OFF_12; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSL_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSL_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ASR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ASR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] + shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] + shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ROR_IMM_OFF_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ROR_IMM_OFF_PREIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)] - shift_op; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)] - shift_op; + cpu->R[REG_POS(i, 16)] = adr; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr + IMM_OFF_12; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr - IMM_OFF_12; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSL_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + LSL_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_LSR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + LSR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ASR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + ASR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_P_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr + shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_M_ROR_IMM_OFF_POSTIND(uint32_t i) { - u32 i = cpu->instruction; - u32 adr; - u32 shift_op; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + ROR_IMM; + uint32_t adr = cpu->R[REG_POS(i, 16)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_POS(i, 12)])); + cpu->R[REG_POS(i, 16)] = adr - shift_op; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -//-----------------------LDRBT------------------------------------- - -static u32 FASTCALL OP_LDRBT_P_IMM_OFF_POSTIND(armcpu_t *cpu) -{ - u32 oldmode; - u32 i; - u32 adr; - u32 val; +// ----------------------------------------------------------------------------- +// LDMIA / LDMIB / LDMDA / LDMDB +// ----------------------------------------------------------------------------- - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); +#define OP_L_IA(reg, adr) \ + if (BIT##reg(i)) \ + { \ + registres[reg] = READ32(cpu->mem_if->data, start); \ + c += MMU_memAccessCycles(start); \ + adr += 4; \ + } - i = cpu->instruction; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; +#define OP_L_IB(reg, adr) \ + if (BIT##reg(i)) \ + { \ + adr += 4; \ + registres[reg] = READ32(cpu->mem_if->data, start); \ + c += MMU_memAccessCycles(start); \ + } - armcpu_switchMode(cpu, oldmode); +#define OP_L_DA(reg, adr) \ + if (BIT##reg(i)) \ + { \ + registres[reg] = READ32(cpu->mem_if->data, start); \ + c += MMU_memAccessCycles(start); \ + adr -= 4; \ + } - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; -} +#define OP_L_DB(reg, adr) \ + if (BIT##reg(i)) \ + { \ + adr -= 4; \ + registres[reg] = READ32(cpu->mem_if->data, start); \ + c += MMU_memAccessCycles(start); \ + } -static u32 FASTCALL OP_LDRBT_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIA(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t *registres = cpu->R; - //execute = false; - LOG("Untested opcode: OP_LDRBT_M_IMM_OFF_POSTIND\n"); + OP_L_IA(0, start); + OP_L_IA(1, start); + OP_L_IA(2, start); + OP_L_IA(3, start); + OP_L_IA(4, start); + OP_L_IA(5, start); + OP_L_IA(6, start); + OP_L_IA(7, start); + OP_L_IA(8, start); + OP_L_IA(9, start); + OP_L_IA(10, start); + OP_L_IA(11, start); + OP_L_IA(12, start); + OP_L_IA(13, start); + OP_L_IA(14, start); + if (BIT15(i)) + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + // TODO + // The general-purpose registers loaded can include the PC. If they do, the word loaded for the PC is treated + // as an address and a branch occurs to that address. In ARMv5 and above, bit[0] of the loaded value + // determines whether execution continues after this branch in ARM state or in Thumb state, as though a BX + // (loaded_value) instruction had been executed (but see also The T and J bits on page A2-15 for operation on + // non-T variants of ARMv5). In earlier versions of the architecture, bits[1:0] of the loaded value are ignored + // and execution continues in ARM state, as though the instruction MOV PC,(loaded_value) had been executed. + // + //value = Memory[address,4] + //if (architecture version 5 or above) then + // pc = value AND 0xFFFFFFFE + // T Bit = value[0] + //else + // pc = value AND 0xFFFFFFFC + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; - i = cpu->instruction; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; - - armcpu_switchMode(cpu, oldmode); + //start += 4; + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + } - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIB(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_P_LSL_IMM_OFF_POSTIND"); + uint32_t *registres = cpu->R; + + OP_L_IB(0, start); + OP_L_IB(1, start); + OP_L_IB(2, start); + OP_L_IB(3, start); + OP_L_IB(4, start); + OP_L_IB(5, start); + OP_L_IB(6, start); + OP_L_IB(7, start); + OP_L_IB(8, start); + OP_L_IB(9, start); + OP_L_IB(10, start); + OP_L_IB(11, start); + OP_L_IB(12, start); + OP_L_IB(13, start); + OP_L_IB(14, start); + if (BIT15(i)) + { + start += 4; + c += MMU_memAccessCycles(start); + uint32_t tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + cpu->next_instruction = registres[15]; + return MMU_aluMemCycles(4, c); + } - i = cpu->instruction; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr + shift_op; - - armcpu_switchMode(cpu, oldmode); - - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDA(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_M_LSL_IMM_OFF_POSTIND"); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + c += MMU_memAccessCycles(start); + start -= 4; + cpu->next_instruction = registres[15]; + } - i = cpu->instruction; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr - shift_op; - - armcpu_switchMode(cpu, oldmode); + OP_L_DA(14, start); + OP_L_DA(13, start); + OP_L_DA(12, start); + OP_L_DA(11, start); + OP_L_DA(10, start); + OP_L_DA(9, start); + OP_L_DA(8, start); + OP_L_DA(7, start); + OP_L_DA(6, start); + OP_L_DA(5, start); + OP_L_DA(4, start); + OP_L_DA(3, start); + OP_L_DA(2, start); + OP_L_DA(1, start); + OP_L_DA(0, start); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDB(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_P_LSR_IMM_OFF_POSTIND"); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + start -= 4; + uint32_t tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + } - i = cpu->instruction; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr + shift_op; - - armcpu_switchMode(cpu, oldmode); + OP_L_DB(14, start); + OP_L_DB(13, start); + OP_L_DB(12, start); + OP_L_DB(11, start); + OP_L_DB(10, start); + OP_L_DB(9, start); + OP_L_DB(8, start); + OP_L_DB(7, start); + OP_L_DB(6, start); + OP_L_DB(5, start); + OP_L_DB(4, start); + OP_L_DB(3, start); + OP_L_DB(2, start); + OP_L_DB(1, start); + OP_L_DB(0, start); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIA_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t bitList = (~((2 << REG_POS(i, 16)) - 1)) & 0xFFFF; + + uint32_t *registres = cpu->R; + + OP_L_IA(0, start); + OP_L_IA(1, start); + OP_L_IA(2, start); + OP_L_IA(3, start); + OP_L_IA(4, start); + OP_L_IA(5, start); + OP_L_IA(6, start); + OP_L_IA(7, start); + OP_L_IA(8, start); + OP_L_IA(9, start); + OP_L_IA(10, start); + OP_L_IA(11, start); + OP_L_IA(12, start); + OP_L_IA(13, start); + OP_L_IA(14, start); - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_M_LSR_IMM_OFF_POSTIND"); - - - i = cpu->instruction; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr - shift_op; + if (BIT15(i)) + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + c += MMU_memAccessCycles(start); + start += 4; + cpu->next_instruction = registres[15]; + } - armcpu_switchMode(cpu, oldmode); + if (i & (1 << REG_POS(i, 16))) + { + if (i & bitList) + cpu->R[REG_POS(i, 16)] = start; + } + else + cpu->R[REG_POS(i, 16)] = start; - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(BIT15(i) ? 4 : 2, c); } -static u32 FASTCALL OP_LDRBT_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIB_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t bitList = (~((2 << REG_POS(i, 16)) - 1)) & 0xFFFF; + + uint32_t *registres = cpu->R; + + OP_L_IB(0, start); + OP_L_IB(1, start); + OP_L_IB(2, start); + OP_L_IB(3, start); + OP_L_IB(4, start); + OP_L_IB(5, start); + OP_L_IB(6, start); + OP_L_IB(7, start); + OP_L_IB(8, start); + OP_L_IB(9, start); + OP_L_IB(10, start); + OP_L_IB(11, start); + OP_L_IB(12, start); + OP_L_IB(13, start); + OP_L_IB(14, start); - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_P_ASR_IMM_OFF_POSTIND"); - - - i = cpu->instruction; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr + shift_op; + if (BIT15(i)) + { + uint32_t tmp; + start += 4; + c += MMU_memAccessCycles(start); + tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + cpu->next_instruction = registres[15]; + } - armcpu_switchMode(cpu, oldmode); + if (i & (1 << REG_POS(i, 16))) + { + if (i & bitList) + cpu->R[REG_POS(i, 16)] = start; + } + else + cpu->R[REG_POS(i, 16)] = start; - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(BIT15(i) ? 4 : 2, c); } -static u32 FASTCALL OP_LDRBT_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDA_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t bitList = (~((2 << REG_POS(i, 16)) - 1)) & 0xFFFF; - if(cpu->CPSR.bits.mode==USR) - return 2; - - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_M_ASR_IMM_OFF_POSTIND"); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + c += MMU_memAccessCycles(start); + start -= 4; + cpu->next_instruction = registres[15]; + } - i = cpu->instruction; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr - shift_op; + OP_L_DA(14, start); + OP_L_DA(13, start); + OP_L_DA(12, start); + OP_L_DA(11, start); + OP_L_DA(10, start); + OP_L_DA(9, start); + OP_L_DA(8, start); + OP_L_DA(7, start); + OP_L_DA(6, start); + OP_L_DA(5, start); + OP_L_DA(4, start); + OP_L_DA(3, start); + OP_L_DA(2, start); + OP_L_DA(1, start); + OP_L_DA(0, start); - armcpu_switchMode(cpu, oldmode); + if (i & (1 << REG_POS(i, 16))) + { + if (i & bitList) + cpu->R[REG_POS(i, 16)] = start; + } + else + cpu->R[REG_POS(i, 16)] = start; - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDB_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t bitList = (~((2 << REG_POS(i, 16)) - 1)) & 0xFFFF; - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_P_ROR_IMM_OFF_POSTIND"); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + uint32_t tmp; + start -= 4; + tmp = READ32(cpu->mem_if->data, start); + if (!PROCNUM) + { + cpu->CPSR.bits.T = BIT0(tmp); + registres[15] = tmp & 0xFFFFFFFE; + } + else + registres[15] = tmp & 0xFFFFFFFC; + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + } - i = cpu->instruction; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr + shift_op; + OP_L_DB(14, start); + OP_L_DB(13, start); + OP_L_DB(12, start); + OP_L_DB(11, start); + OP_L_DB(10, start); + OP_L_DB(9, start); + OP_L_DB(8, start); + OP_L_DB(7, start); + OP_L_DB(6, start); + OP_L_DB(5, start); + OP_L_DB(4, start); + OP_L_DB(3, start); + OP_L_DB(2, start); + OP_L_DB(1, start); + OP_L_DB(0, start); - armcpu_switchMode(cpu, oldmode); + if (i & (1 << REG_POS(i, 16))) + { + if (i & bitList) + cpu->R[REG_POS(i, 16)] = start; + } + else + cpu->R[REG_POS(i, 16)] = start; - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_LDRBT_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIA2(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 val; - u32 shift_op; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_LDRBT_M_ROR_IMM_OFF_POSTIND"); + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - i = cpu->instruction; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - val = READ8(cpu->mem_if->data, adr); - cpu->R[REG_POS(i,12)] = val; - cpu->R[REG_POS(i,16)] = adr - shift_op; + uint32_t *registres = cpu->R; - armcpu_switchMode(cpu, oldmode); + OP_L_IA(0, start); + OP_L_IA(1, start); + OP_L_IA(2, start); + OP_L_IA(3, start); + OP_L_IA(4, start); + OP_L_IA(5, start); + OP_L_IA(6, start); + OP_L_IA(7, start); + OP_L_IA(8, start); + OP_L_IA(9, start); + OP_L_IA(10, start); + OP_L_IA(11, start); + OP_L_IA(12, start); + OP_L_IA(13, start); + OP_L_IA(14, start); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + if (!BIT15(i)) + armcpu_switchMode(cpu, static_cast(oldmode)); + else + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + Status_Reg SPSR; + cpu->R[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + //start += 4; + cpu->next_instruction = cpu->R[15]; + c += MMU_memAccessCycles(start); + } + return MMU_aluMemCycles(2, c); } -//----------------------STRBT---------------------------- - -static u32 FASTCALL OP_STRBT_P_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIB2(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - i = cpu->instruction; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; + uint32_t *registres = cpu->R; - armcpu_switchMode(cpu, oldmode); + OP_L_IB(0, start); + OP_L_IB(1, start); + OP_L_IB(2, start); + OP_L_IB(3, start); + OP_L_IB(4, start); + OP_L_IB(5, start); + OP_L_IB(6, start); + OP_L_IB(7, start); + OP_L_IB(8, start); + OP_L_IB(9, start); + OP_L_IB(10, start); + OP_L_IB(11, start); + OP_L_IB(12, start); + OP_L_IB(13, start); + OP_L_IB(14, start); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + if (!BIT15(i)) + armcpu_switchMode(cpu, static_cast(oldmode)); + else + { + Status_Reg SPSR; + start += 4; + uint32_t tmp = READ32(cpu->mem_if->data, start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + } + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_M_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDA2(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i,16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + uint32_t tmp = READ32(cpu->mem_if->data, start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + cpu->CPSR = cpu->SPSR; + cpu->changeCPSR(); + c += MMU_memAccessCycles(start); + start -= 4; + cpu->next_instruction = registres[15]; + } - i = cpu->instruction; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - IMM_OFF_12; + OP_L_DA(14, start); + OP_L_DA(13, start); + OP_L_DA(12, start); + OP_L_DA(11, start); + OP_L_DA(10, start); + OP_L_DA(9, start); + OP_L_DA(8, start); + OP_L_DA(7, start); + OP_L_DA(6, start); + OP_L_DA(5, start); + OP_L_DA(4, start); + OP_L_DA(3, start); + OP_L_DA(2, start); + OP_L_DA(1, start); + OP_L_DA(0, start); - armcpu_switchMode(cpu, oldmode); + if (!BIT15(i)) + armcpu_switchMode(cpu, static_cast(oldmode)); + else + { + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_P_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDB2(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i,16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + uint32_t tmp; + start -= 4; + tmp = READ32(cpu->mem_if->data, start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + cpu->CPSR = cpu->SPSR; + cpu->changeCPSR(); + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + } - i = cpu->instruction; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + OP_L_DB(14, start); + OP_L_DB(13, start); + OP_L_DB(12, start); + OP_L_DB(11, start); + OP_L_DB(10, start); + OP_L_DB(9, start); + OP_L_DB(8, start); + OP_L_DB(7, start); + OP_L_DB(6, start); + OP_L_DB(5, start); + OP_L_DB(4, start); + OP_L_DB(3, start); + OP_L_DB(2, start); + OP_L_DB(1, start); + OP_L_DB(0, start); - armcpu_switchMode(cpu, oldmode); + if (!BIT15(i)) + armcpu_switchMode(cpu, static_cast(oldmode)); + else + { + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_M_LSL_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIA2_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i,16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; - - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } + uint32_t *registres = cpu->R; - i = cpu->instruction; - LSL_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + OP_L_IA(0, start); + OP_L_IA(1, start); + OP_L_IA(2, start); + OP_L_IA(3, start); + OP_L_IA(4, start); + OP_L_IA(5, start); + OP_L_IA(6, start); + OP_L_IA(7, start); + OP_L_IA(8, start); + OP_L_IA(9, start); + OP_L_IA(10, start); + OP_L_IA(11, start); + OP_L_IA(12, start); + OP_L_IA(13, start); + OP_L_IA(14, start); - armcpu_switchMode(cpu, oldmode); + if (!BIT15(i)) + { + if (!BIT_N(i, REG_POS(i, 16))) + registres[REG_POS(i, 16)] = start; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(2, c); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + if (!BIT_N(i, REG_POS(i, 16))) + registres[REG_POS(i, 16)] = start + 4; + uint32_t tmp = READ32(cpu->mem_if->data, start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + cpu->next_instruction = registres[15]; + c += MMU_memAccessCycles(start); + + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_P_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIB2_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t *registres = cpu->R; + OP_L_IB(0, start); + OP_L_IB(1, start); + OP_L_IB(2, start); + OP_L_IB(3, start); + OP_L_IB(4, start); + OP_L_IB(5, start); + OP_L_IB(6, start); + OP_L_IB(7, start); + OP_L_IB(8, start); + OP_L_IB(9, start); + OP_L_IB(10, start); + OP_L_IB(11, start); + OP_L_IB(12, start); + OP_L_IB(13, start); + OP_L_IB(14, start); - i = cpu->instruction; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + if (!BIT15(i)) + { + if (!BIT_N(i, REG_POS(i, 16))) + registres[REG_POS(i, 16)] = start; + armcpu_switchMode(cpu, static_cast(oldmode)); - armcpu_switchMode(cpu, oldmode); + return MMU_aluMemCycles(2, c); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + if (!BIT_N(i, REG_POS(i,16))) + registres[REG_POS(i,16)] = start + 4; + uint32_t tmp = READ32(cpu->mem_if->data, start + 4); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + cpu->CPSR = cpu->SPSR; + cpu->changeCPSR(); + cpu->next_instruction = registres[15]; + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + c += MMU_memAccessCycles(start); + + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_M_LSR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDA2_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i,16)]; + + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t *registres = cpu->R; - oldmode = armcpu_switchMode(cpu, SYS); + if (BIT15(i)) + { + if (BIT_N(i, REG_POS(i, 16))) + fprintf(stderr, "error1_1\n"); + uint32_t tmp = READ32(cpu->mem_if->data, start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + c += MMU_memAccessCycles(start); + start -= 4; + cpu->next_instruction = registres[15]; + } + OP_L_DA(14, start); + OP_L_DA(13, start); + OP_L_DA(12, start); + OP_L_DA(11, start); + OP_L_DA(10, start); + OP_L_DA(9, start); + OP_L_DA(8, start); + OP_L_DA(7, start); + OP_L_DA(6, start); + OP_L_DA(5, start); + OP_L_DA(4, start); + OP_L_DA(3, start); + OP_L_DA(2, start); + OP_L_DA(1, start); + OP_L_DA(0, start); - i = cpu->instruction; - LSR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + if (!BIT_N(i, REG_POS(i, 16))) + registres[REG_POS(i, 16)] = start; - armcpu_switchMode(cpu, oldmode); + if (!BIT15(i)) + { + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(2, c); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_P_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMDB2_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; + uint32_t oldmode = 0; + if (!BIT15(i)) + { + if (cpu->CPSR.bits.mode == USR || cpu->CPSR.bits.mode == SYS) + { + fprintf(stderr, "ERROR1\n"); + return 1; + } + oldmode = armcpu_switchMode(cpu, SYS); + } - oldmode = armcpu_switchMode(cpu, SYS); + uint32_t *registres = cpu->R; + if (BIT15(i)) + { + if (BIT_N(i, REG_POS(i, 16))) + fprintf(stderr, "error1_2\n"); + start -= 4; + uint32_t tmp = READ32(cpu->mem_if->data, start); + c += MMU_memAccessCycles(start); + registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp) << 1)); + cpu->CPSR = cpu->SPSR; + cpu->changeCPSR(); + cpu->next_instruction = registres[15]; + } + + OP_L_DB(14, start); + OP_L_DB(13, start); + OP_L_DB(12, start); + OP_L_DB(11, start); + OP_L_DB(10, start); + OP_L_DB(9, start); + OP_L_DB(8, start); + OP_L_DB(7, start); + OP_L_DB(6, start); + OP_L_DB(5, start); + OP_L_DB(4, start); + OP_L_DB(3, start); + OP_L_DB(2, start); + OP_L_DB(1, start); + OP_L_DB(0, start); - i = cpu->instruction; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + if (!BIT_N(i, REG_POS(i, 16))) + registres[REG_POS(i, 16)] = start; - armcpu_switchMode(cpu, oldmode); + if (!BIT15(i)) + { + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(2, c); + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + Status_Reg SPSR = cpu->SPSR; + armcpu_switchMode(cpu, SPSR.bits.mode); + cpu->CPSR = SPSR; + cpu->changeCPSR(); + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_STRBT_M_ASR_IMM_OFF_POSTIND(armcpu_t *cpu) -{ - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; +// ----------------------------------------------------------------------------- +// STMIA / STMIB / STMDA / STMDB +// ----------------------------------------------------------------------------- - if(cpu->CPSR.bits.mode==USR) - return 2; +TEMPLATE static uint32_t FASTCALL OP_STMIA(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - oldmode = armcpu_switchMode(cpu, SYS); + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + start += 4; + } + } + return MMU_aluMemCycles(1, c); +} +TEMPLATE static uint32_t FASTCALL OP_STMIB(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - i = cpu->instruction; - ASR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + start += 4; + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + } + } + return MMU_aluMemCycles(1, c); +} - armcpu_switchMode(cpu, oldmode); +TEMPLATE static uint32_t FASTCALL OP_STMDA(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + start -= 4; + } + } + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_STRBT_P_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDB(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + start -= 4; + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + } + } + return MMU_aluMemCycles(1, c); +} - oldmode = armcpu_switchMode(cpu, SYS); +TEMPLATE static uint32_t FASTCALL OP_STMIA_W(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + start += 4; + } + } - i = cpu->instruction; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr + shift_op; + cpu->R[REG_POS(i, 16)] = start; + return MMU_aluMemCycles(1, c); +} - armcpu_switchMode(cpu, oldmode); +TEMPLATE static uint32_t FASTCALL OP_STMIB_W(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + start += 4; + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + } + } + cpu->R[REG_POS(i, 16)] = start; + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_STRBT_M_ROR_IMM_OFF_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDA_W(uint32_t i) { - u32 oldmode; - u32 i; - u32 adr; - u32 shift_op; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - if(cpu->CPSR.bits.mode==USR) - return 2; - - oldmode = armcpu_switchMode(cpu, SYS); + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + start -= 4; + } + } + cpu->R[REG_POS(i, 16)] = start; + return MMU_aluMemCycles(1, c); +} - i = cpu->instruction; - ROR_IMM; - adr = cpu->R[REG_POS(i,16)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_POS(i,12)]); - cpu->R[REG_POS(i,16)] = adr - shift_op; +TEMPLATE static uint32_t FASTCALL OP_STMDB_W(uint32_t i) +{ + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; - armcpu_switchMode(cpu, oldmode); + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + start -= 4; + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + } + } - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + cpu->R[REG_POS(i, 16)] = start; + return MMU_aluMemCycles(1, c); } -//---------------------LDM----------------------------- - -#define OP_L_IA(reg, adr) if(BIT##reg(i))\ - {\ - registres[reg] = READ32(cpu->mem_if->data, start);\ - c += waitState[(start>>24)&0xF];\ - adr += 4;\ - } +TEMPLATE static uint32_t FASTCALL OP_STMIA2(uint32_t i) +{ + if (cpu->CPSR.bits.mode == USR) + return 2; -#define OP_L_IB(reg, adr) if(BIT##reg(i))\ - {\ - adr += 4;\ - registres[reg] = READ32(cpu->mem_if->data, start);\ - c += waitState[(start>>24)&0xF];\ - } + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); -#define OP_L_DA(reg, adr) if(BIT##reg(i))\ - {\ - registres[reg] = READ32(cpu->mem_if->data, start);\ - c += waitState[(start>>24)&0xF];\ - adr -= 4;\ - } + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + start += 4; + } + } -#define OP_L_DB(reg, adr) if(BIT##reg(i))\ - {\ - adr -= 4;\ - registres[reg] = READ32(cpu->mem_if->data, start);\ - c += waitState[(start>>24)&0xF];\ - } + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); +} -static u32 FASTCALL OP_LDMIA(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMIB2(uint32_t i) { - u32 i = cpu->instruction; - u32 c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + if (cpu->CPSR.bits.mode == USR) + return 2; - OP_L_IA(0, start); - OP_L_IA(1, start); - OP_L_IA(2, start); - OP_L_IA(3, start); - OP_L_IA(4, start); - OP_L_IA(5, start); - OP_L_IA(6, start); - OP_L_IA(7, start); - OP_L_IA(8, start); - OP_L_IA(9, start); - OP_L_IA(10, start); - OP_L_IA(11, start); - OP_L_IA(12, start); - OP_L_IA(13, start); - OP_L_IA(14, start); + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - //start += 4; - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; - } + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + start += 4; + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + } + } - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMIB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDA2(uint32_t i) { - u32 i = cpu->instruction; - u32 c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + if (cpu->CPSR.bits.mode == USR) + return 2; - OP_L_IB(0, start); - OP_L_IB(1, start); - OP_L_IB(2, start); - OP_L_IB(3, start); - OP_L_IB(4, start); - OP_L_IB(5, start); - OP_L_IB(6, start); - OP_L_IB(7, start); - OP_L_IB(8, start); - OP_L_IB(9, start); - OP_L_IB(10, start); - OP_L_IB(11, start); - OP_L_IB(12, start); - OP_L_IB(13, start); - OP_L_IB(14, start); + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(BIT15(i)) - { - u32 tmp; - start += 4; - c += waitState[(start>>24)&0xF]; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - cpu->next_instruction = registres[15]; - c += 2 + (c==0); - } + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + start -= 4; + } + } - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMDA(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDB2(uint32_t i) { - u32 i = cpu->instruction; - u32 c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + if (cpu->CPSR.bits.mode == USR) + return 2; - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - c += waitState[(start>>24)&0xF]; - start -= 4; - cpu->next_instruction = registres[15]; - } + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - OP_L_DA(14, start); - OP_L_DA(13, start); - OP_L_DA(12, start); - OP_L_DA(11, start); - OP_L_DA(10, start); - OP_L_DA(9, start); - OP_L_DA(8, start); - OP_L_DA(7, start); - OP_L_DA(6, start); - OP_L_DA(5, start); - OP_L_DA(4, start); - OP_L_DA(3, start); - OP_L_DA(2, start); - OP_L_DA(1, start); - OP_L_DA(0, start); + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, 15 - b)) + { + start -= 4; + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + } + } - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMDB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMIA2_W(uint32_t i) { - u32 i = cpu->instruction; - u32 c = 0; - u32 start = cpu->R[REG_POS(i,16)]; + if (cpu->CPSR.bits.mode == USR) + return 2; - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(BIT15(i)) - { - u32 tmp; - start -= 4; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; - } + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + start += 4; + } + } - OP_L_DB(14, start); - OP_L_DB(13, start); - OP_L_DB(12, start); - OP_L_DB(11, start); - OP_L_DB(10, start); - OP_L_DB(9, start); - OP_L_DB(8, start); - OP_L_DB(7, start); - OP_L_DB(6, start); - OP_L_DB(5, start); - OP_L_DB(4, start); - OP_L_DB(3, start); - OP_L_DB(2, start); - OP_L_DB(1, start); - OP_L_DB(0, start); + cpu->R[REG_POS(i, 16)] = start; - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMIA_W(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMIB2_W(uint32_t i) { - u32 i = cpu->instruction, c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 bitList = (~((2 << REG_POS(i,16))-1)) & 0xFFFF; - - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IA(0, start); - OP_L_IA(1, start); - OP_L_IA(2, start); - OP_L_IA(3, start); - OP_L_IA(4, start); - OP_L_IA(5, start); - OP_L_IA(6, start); - OP_L_IA(7, start); - OP_L_IA(8, start); - OP_L_IA(9, start); - OP_L_IA(10, start); - OP_L_IA(11, start); - OP_L_IA(12, start); - OP_L_IA(13, start); - OP_L_IA(14, start); + if (cpu->CPSR.bits.mode == USR) + return 2; - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - c += waitState[(start>>24)&0xF]; - start += 4; - cpu->next_instruction = registres[15]; - } + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(i & (1 << REG_POS(i,16))) { - if(i & bitList) - cpu->R[REG_POS(i,16)] = start; + for (uint32_t b = 0; b < 16; ++b) + { + if (BIT_N(i, b)) + { + start += 4; + WRITE32(cpu->mem_if->data, start, cpu->R[b]); + c += MMU_memAccessCycles(start); + } } - else - cpu->R[REG_POS(i,16)] = start; - return c + 2; -} + armcpu_switchMode(cpu, static_cast(oldmode)); + cpu->R[REG_POS(i, 16)] = start; -static u32 FASTCALL OP_LDMIB_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 bitList = (~((2 << REG_POS(i,16))-1)) & 0xFFFF; - - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IB(0, start); - OP_L_IB(1, start); - OP_L_IB(2, start); - OP_L_IB(3, start); - OP_L_IB(4, start); - OP_L_IB(5, start); - OP_L_IB(6, start); - OP_L_IB(7, start); - OP_L_IB(8, start); - OP_L_IB(9, start); - OP_L_IB(10, start); - OP_L_IB(11, start); - OP_L_IB(12, start); - OP_L_IB(13, start); - OP_L_IB(14, start); - - if(BIT15(i)) - { - u32 tmp; - start += 4; - c += waitState[(start>>24)&0xF]; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - cpu->next_instruction = registres[15]; - c += 2 + (c==0); - } - - if(i & (1 << REG_POS(i,16))) { - if(i & bitList) - cpu->R[REG_POS(i,16)] = start; - } - else - cpu->R[REG_POS(i,16)] = start; - - return c + 2; + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMDA_W(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDA2_W(uint32_t i) { - u32 i = cpu->instruction, c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 bitList = (~((2 << REG_POS(i,16))-1)) & 0xFFFF; + if (cpu->CPSR.bits.mode == USR) + return 2; - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(BIT15(i)) + for (uint32_t b = 0; b < 16; ++b) { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - c += waitState[(start>>24)&0xF]; - start -= 4; - cpu->next_instruction = registres[15]; + if (BIT_N(i, 15 - b)) + { + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + start -= 4; + } } - OP_L_DA(14, start); - OP_L_DA(13, start); - OP_L_DA(12, start); - OP_L_DA(11, start); - OP_L_DA(10, start); - OP_L_DA(9, start); - OP_L_DA(8, start); - OP_L_DA(7, start); - OP_L_DA(6, start); - OP_L_DA(5, start); - OP_L_DA(4, start); - OP_L_DA(3, start); - OP_L_DA(2, start); - OP_L_DA(1, start); - OP_L_DA(0, start); - - if(i & (1 << REG_POS(i,16))) { - if(i & bitList) - cpu->R[REG_POS(i,16)] = start; - } - else - cpu->R[REG_POS(i,16)] = start; + cpu->R[REG_POS(i, 16)] = start; - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMDB_W(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STMDB2_W(uint32_t i) { - u32 i = cpu->instruction, c = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 bitList = (~((2 << REG_POS(i,16))-1)) & 0xFFFF; - u32 * registres = cpu->R; - u32 * waitState = MMU.MMU_WAIT32[cpu->proc_ID]; + if (cpu->CPSR.bits.mode == USR) + return 2; + + uint32_t c = 0; + uint32_t start = cpu->R[REG_POS(i, 16)]; + uint32_t oldmode = armcpu_switchMode(cpu, SYS); - if(BIT15(i)) + for (uint32_t b = 0; b < 16; ++b) { - u32 tmp; - start -= 4; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR.bits.T = BIT0(tmp); - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; + if (BIT_N(i, 15 - b)) + { + start -= 4; + WRITE32(cpu->mem_if->data, start, cpu->R[15 - b]); + c += MMU_memAccessCycles(start); + } } - OP_L_DB(14, start); - OP_L_DB(13, start); - OP_L_DB(12, start); - OP_L_DB(11, start); - OP_L_DB(10, start); - OP_L_DB(9, start); - OP_L_DB(8, start); - OP_L_DB(7, start); - OP_L_DB(6, start); - OP_L_DB(5, start); - OP_L_DB(4, start); - OP_L_DB(3, start); - OP_L_DB(2, start); - OP_L_DB(1, start); - OP_L_DB(0, start); + cpu->R[REG_POS(i, 16)] = start; - if(i & (1 << REG_POS(i,16))) { - if(i & bitList) - cpu->R[REG_POS(i,16)] = start; - } - else - cpu->R[REG_POS(i,16)] = start; - - return c + 2; + armcpu_switchMode(cpu, static_cast(oldmode)); + return MMU_aluMemCycles(1, c); } -static u32 FASTCALL OP_LDMIA2(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 oldmode = 0; - - u32 c = 0; - - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 1; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IA(0, start); - OP_L_IA(1, start); - OP_L_IA(2, start); - OP_L_IA(3, start); - OP_L_IA(4, start); - OP_L_IA(5, start); - OP_L_IA(6, start); - OP_L_IA(7, start); - OP_L_IA(8, start); - OP_L_IA(9, start); - OP_L_IA(10, start); - OP_L_IA(11, start); - OP_L_IA(12, start); - OP_L_IA(13, start); - OP_L_IA(14, start); - - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - Status_Reg SPSR; - cpu->R[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - //start += 4; - cpu->next_instruction = cpu->R[15]; - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - else - { - armcpu_switchMode(cpu, oldmode); - } - return c + 2; -} - -static u32 FASTCALL OP_LDMIB2(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 oldmode = 0; - u32 c = 0; - - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - //execute = false; - LOG("Untested opcode: OP_LDMIB2"); - - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IB(0, start); - OP_L_IB(1, start); - OP_L_IB(2, start); - OP_L_IB(3, start); - OP_L_IB(4, start); - OP_L_IB(5, start); - OP_L_IB(6, start); - OP_L_IB(7, start); - OP_L_IB(8, start); - OP_L_IB(9, start); - OP_L_IB(10, start); - OP_L_IB(11, start); - OP_L_IB(12, start); - OP_L_IB(13, start); - OP_L_IB(14, start); - - if(BIT15(i)) - { - u32 tmp; - Status_Reg SPSR; - start += 4; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; - } - else - { - armcpu_switchMode(cpu, oldmode); - } - return c + 2; -} - -static u32 FASTCALL OP_LDMDA2(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - - u32 oldmode = 0; - u32 c = 0; - u32 * registres; - u32 * waitState; - - u32 start = cpu->R[REG_POS(i,16)]; - //execute = false; - LOG("Untested opcode: OP_LDMDA2"); - - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR = cpu->SPSR; - c += waitState[(start>>24)&0xF]; - start -= 4; - cpu->next_instruction = registres[15]; - } - - OP_L_DA(14, start); - OP_L_DA(13, start); - OP_L_DA(12, start); - OP_L_DA(11, start); - OP_L_DA(10, start); - OP_L_DA(9, start); - OP_L_DA(8, start); - OP_L_DA(7, start); - OP_L_DA(6, start); - OP_L_DA(5, start); - OP_L_DA(4, start); - OP_L_DA(3, start); - OP_L_DA(2, start); - OP_L_DA(1, start); - OP_L_DA(0, start); - - if(BIT15(i)==0) - { - armcpu_switchMode(cpu, oldmode); - } - else - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - } - - return c + 2; -} - -static u32 FASTCALL OP_LDMDB2(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - - u32 oldmode = 0; - u32 c = 0; - u32 * registres; - u32 * waitState; - - u32 start = cpu->R[REG_POS(i,16)]; - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - if(BIT15(i)) - { - u32 tmp; - start -= 4; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR = cpu->SPSR; - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; - } - - OP_L_DB(14, start); - OP_L_DB(13, start); - OP_L_DB(12, start); - OP_L_DB(11, start); - OP_L_DB(10, start); - OP_L_DB(9, start); - OP_L_DB(8, start); - OP_L_DB(7, start); - OP_L_DB(6, start); - OP_L_DB(5, start); - OP_L_DB(4, start); - OP_L_DB(3, start); - OP_L_DB(2, start); - OP_L_DB(1, start); - OP_L_DB(0, start); - - if(BIT15(i)==0) - { - armcpu_switchMode(cpu, oldmode); - } - else - { - Status_Reg SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - } - - return 2 + c; -} - -static u32 FASTCALL OP_LDMIA2_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 c = 0; - - u32 oldmode = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - u32 tmp; - Status_Reg SPSR; -// execute = false; - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IA(0, start); - OP_L_IA(1, start); - OP_L_IA(2, start); - OP_L_IA(3, start); - OP_L_IA(4, start); - OP_L_IA(5, start); - OP_L_IA(6, start); - OP_L_IA(7, start); - OP_L_IA(8, start); - OP_L_IA(9, start); - OP_L_IA(10, start); - OP_L_IA(11, start); - OP_L_IA(12, start); - OP_L_IA(13, start); - OP_L_IA(14, start); - - if(BIT15(i)==0) - { - registres[REG_POS(i,16)] = start; - armcpu_switchMode(cpu, oldmode); - return c + 2; - } - - registres[REG_POS(i,16)] = start + 4; - tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - cpu->next_instruction = registres[15]; - c += waitState[(start>>24)&0xF]; - - return c + 2; -} - -static u32 FASTCALL OP_LDMIB2_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 c = 0; - - u32 oldmode = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - u32 tmp; - Status_Reg SPSR; - - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - OP_L_IB(0, start); - OP_L_IB(1, start); - OP_L_IB(2, start); - OP_L_IB(3, start); - OP_L_IB(4, start); - OP_L_IB(5, start); - OP_L_IB(6, start); - OP_L_IB(7, start); - OP_L_IB(8, start); - OP_L_IB(9, start); - OP_L_IB(10, start); - OP_L_IB(11, start); - OP_L_IB(12, start); - OP_L_IB(13, start); - OP_L_IB(14, start); - - if(BIT15(i)==0) - { - armcpu_switchMode(cpu, oldmode); - registres[REG_POS(i,16)] = start; - - return c + 2; - } - - registres[REG_POS(i,16)] = start + 4; - tmp = READ32(cpu->mem_if->data, start + 4); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR = cpu->SPSR; - cpu->next_instruction = registres[15]; - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - c += waitState[(start>>24)&0xF]; - - return c + 2; -} - -static u32 FASTCALL OP_LDMDA2_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 c = 0; - - u32 oldmode = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - Status_Reg SPSR; -// execute = false; - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - if(BIT15(i)) - { - u32 tmp = READ32(cpu->mem_if->data, start); - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - c += waitState[(start>>24)&0xF]; - start -= 4; - cpu->next_instruction = registres[15]; - } - - OP_L_DA(14, start); - OP_L_DA(13, start); - OP_L_DA(12, start); - OP_L_DA(11, start); - OP_L_DA(10, start); - OP_L_DA(9, start); - OP_L_DA(8, start); - OP_L_DA(7, start); - OP_L_DA(6, start); - OP_L_DA(5, start); - OP_L_DA(4, start); - OP_L_DA(3, start); - OP_L_DA(2, start); - OP_L_DA(1, start); - OP_L_DA(0, start); - - registres[REG_POS(i,16)] = start; - - if(BIT15(i)==0) - { - armcpu_switchMode(cpu, oldmode); - return c + 2; - } - - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - return c + 2; -} - -static u32 FASTCALL OP_LDMDB2_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 c = 0; - - u32 oldmode = 0; - u32 start = cpu->R[REG_POS(i,16)]; - u32 * registres; - u32 * waitState; - Status_Reg SPSR; -// execute = false; - if(BIT15(i)==0) - { - if(cpu->CPSR.bits.mode==USR) - return 2; - oldmode = armcpu_switchMode(cpu, SYS); - } - - registres = cpu->R; - waitState = MMU.MMU_WAIT32[cpu->proc_ID]; - - if(BIT15(i)) - { - u32 tmp; - start -= 4; - tmp = READ32(cpu->mem_if->data, start); - c += waitState[(start>>24)&0xF]; - registres[15] = tmp & (0XFFFFFFFC | (BIT0(tmp)<<1)); - cpu->CPSR = cpu->SPSR; - cpu->next_instruction = registres[15]; - } - - OP_L_DB(14, start); - OP_L_DB(13, start); - OP_L_DB(12, start); - OP_L_DB(11, start); - OP_L_DB(10, start); - OP_L_DB(9, start); - OP_L_DB(8, start); - OP_L_DB(7, start); - OP_L_DB(6, start); - OP_L_DB(5, start); - OP_L_DB(4, start); - OP_L_DB(3, start); - OP_L_DB(2, start); - OP_L_DB(1, start); - OP_L_DB(0, start); - - registres[REG_POS(i,16)] = start; - - if(BIT15(i)==0) - { - armcpu_switchMode(cpu, oldmode); - return c + 2; - } - - SPSR = cpu->SPSR; - armcpu_switchMode(cpu, SPSR.bits.mode); - cpu->CPSR=SPSR; - return c + 2; -} - -//------------------------------STM---------------------------------- - -static u32 FASTCALL OP_STMIA(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start += 4; - } - } - return c + 1; -} - -static u32 FASTCALL OP_STMIB(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - start += 4; - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - return c + 1; -} - -static u32 FASTCALL OP_STMDA(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start -= 4; - } - } - return c + 1; -} - -static u32 FASTCALL OP_STMDB(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - start -= 4; - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - return c + 1; -} - -static u32 FASTCALL OP_STMIA_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start += 4; - } - } - - cpu->R[REG_POS(i,16)] = start; - return c + 1; -} - -static u32 FASTCALL OP_STMIB_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - start += 4; - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - cpu->R[REG_POS(i,16)] = start; - return c + 1; -} - -static u32 FASTCALL OP_STMDA_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start -= 4; - } - } - - cpu->R[REG_POS(i,16)] = start; - return c + 1; -} - -static u32 FASTCALL OP_STMDB_W(armcpu_t *cpu) -{ - u32 i = cpu->instruction, c = 0, b; - u32 start = cpu->R[REG_POS(i,16)]; - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - start -= 4; - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - - cpu->R[REG_POS(i,16)] = start; - return c + 1; -} - -static u32 FASTCALL OP_STMIA2(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c = 0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - //execute = false; - LOG("Untested opcode: OP_STMIA2"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start += 4; - } - } - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMIB2(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c = 0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - //execute = false; - LOG("Untested opcode: OP_STMIB2"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - start += 4; - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMDA2(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c = 0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - //execute = false; - LOG("Untested opcode: OP_STMDA2"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start -= 4; - } - } - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMDB2(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - i = cpu->instruction; - c=0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - start -= 4; - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMIA2_W(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c=0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - //execute = false; - LOG("Untested opcode: OP_STMIA2_W"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start += 4; - } - } - - cpu->R[REG_POS(i,16)] = start; - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMIB2_W(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - i = cpu->instruction; - c=0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, b)) - { - start += 4; - WRITE32(cpu->mem_if->data, start, cpu->R[b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - armcpu_switchMode(cpu, oldmode); - cpu->R[REG_POS(i,16)] = start; - - return c + 1; -} - -static u32 FASTCALL OP_STMDA2_W(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c = 0; - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - //execute = false; - LOG("Untested opcode: OP_STMDA2_W"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - start -= 4; - } - } - - cpu->R[REG_POS(i,16)] = start; - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} - -static u32 FASTCALL OP_STMDB2_W(armcpu_t *cpu) -{ - u32 i, c, b; - u32 start; - u32 oldmode; - - if(cpu->CPSR.bits.mode==USR) - return 2; - - i = cpu->instruction; - c = 0; - - start = cpu->R[REG_POS(i,16)]; - oldmode = armcpu_switchMode(cpu, SYS); - - //execute = false; - LOG("Untested opcode: OP_STMDB2_W"); - - for(b=0; b<16; ++b) - { - if(BIT_N(i, 15-b)) - { - start -= 4; - WRITE32(cpu->mem_if->data, start, cpu->R[15-b]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(start>>24)&0xF]; - } - } - - cpu->R[REG_POS(i,16)] = start; - - armcpu_switchMode(cpu, oldmode); - return c + 1; -} +// ----------------------------------------------------------------------------- +// LDRD / STRD +// ----------------------------------------------------------------------------- -/* - * - * The Enhanced DSP Extension LDRD and STRD instructions. - * - */ -static u32 FASTCALL -OP_LDRD_STRD_POST_INDEX( armcpu_t *cpu) { - u32 i = cpu->instruction; - u32 Rd_num = REG_POS( i, 12); - u32 addr = cpu->R[REG_POS(i,16)]; - u32 index; +TEMPLATE static uint32_t FASTCALL OP_LDRD_STRD_POST_INDEX(uint32_t i) +{ + uint32_t Rd_num = REG_POS(i, 12); + uint32_t addr = cpu->R[REG_POS(i, 16)]; + uint32_t index; - /* I bit - immediate or register */ - if ( BIT22(i)) - index = IMM_OFF; - else - index = cpu->R[REG_POS(i,0)]; + //fprintf(stderr, "%s POST\n", BIT5(i)?"STRD":"LDRD"); + /* I bit - immediate or register */ + if (BIT22(i)) + index = IMM_OFF; + else + index = cpu->R[REG_POS(i, 0)]; - /* U bit - add or subtract */ - if ( BIT23(i)) - cpu->R[REG_POS(i,16)] += index; - else - cpu->R[REG_POS(i,16)] -= index; + // U bit - add or subtract + if (BIT23(i)) + cpu->R[REG_POS(i, 16)] += index; + else + cpu->R[REG_POS(i, 16)] -= index; - if ( !(Rd_num & 0x1)) { - /* Store/Load */ - if ( BIT5(i)) { - WRITE32(cpu->mem_if->data, addr, cpu->R[Rd_num]); - WRITE32(cpu->mem_if->data, addr + 4, cpu->R[Rd_num + 1]); - } - else { - cpu->R[Rd_num] = READ32(cpu->mem_if->data, addr); - cpu->R[Rd_num + 1] = READ32(cpu->mem_if->data, addr + 4); - } - } + uint32_t c = 0; + if (!(Rd_num & 0x1)) + { + // Store/Load + if (BIT5(i)) + { + WRITE32(cpu->mem_if->data, addr, cpu->R[Rd_num]); + WRITE32(cpu->mem_if->data, addr + 4, cpu->R[Rd_num + 1]); + c += MMU_memAccessCycles(addr); + c += MMU_memAccessCycles(addr + 4); + } + else + { + cpu->R[Rd_num] = READ32(cpu->mem_if->data, addr); + cpu->R[Rd_num + 1] = READ32(cpu->mem_if->data, addr + 4); + c += MMU_memAccessCycles(addr); + c += MMU_memAccessCycles(addr + 4); + } + } - return 3 + (MMU.MMU_WAIT32[cpu->proc_ID][(addr>>24)&0xF] * 2); + return MMU_aluMemCycles(3, c); } -static u32 FASTCALL -OP_LDRD_STRD_OFFSET_PRE_INDEX( armcpu_t *cpu) { - u32 i = cpu->instruction; - u32 Rd_num = REG_POS( i, 12); - u32 addr = cpu->R[REG_POS(i,16)]; - u32 index; - - /* I bit - immediate or register */ - if ( BIT22(i)) - index = IMM_OFF; - else - index = cpu->R[REG_POS(i,0)]; - - /* U bit - add or subtract */ - if ( BIT23(i)) { - addr += index; +TEMPLATE static uint32_t FASTCALL OP_LDRD_STRD_OFFSET_PRE_INDEX(uint32_t i) +{ + uint32_t Rd_num = REG_POS(i, 12); + uint32_t addr = cpu->R[REG_POS(i, 16)]; + uint32_t index; - /* W bit - writeback */ - if ( BIT21(i)) - cpu->R[REG_POS(i,16)] = addr; - } - else { - addr -= index; + //fprintf(stderr, "%s PRE\n", BIT5(i)?"STRD":"LDRD"); + // I bit - immediate or register + if (BIT22(i)) + index = IMM_OFF; + else + index = cpu->R[REG_POS(i, 0)]; - /* W bit - writeback */ - if ( BIT21(i)) - cpu->R[REG_POS(i,16)] = addr; - } + // U bit - add or subtract + if (BIT23(i)) + addr += index; + else + addr -= index; - if ( !(Rd_num & 0x1)) { - /* Store/Load */ - if ( BIT5(i)) { - WRITE32(cpu->mem_if->data, addr, cpu->R[Rd_num]); - WRITE32(cpu->mem_if->data, addr + 4, cpu->R[Rd_num + 1]); - } - else { - cpu->R[Rd_num] = READ32(cpu->mem_if->data, addr); - cpu->R[Rd_num + 1] = READ32(cpu->mem_if->data, addr + 4); - } - } + uint32_t c = 0; + if (!(Rd_num & 0x1)) + { + // Store/Load + if (BIT5(i)) + { + WRITE32(cpu->mem_if->data, addr, cpu->R[Rd_num]); + WRITE32(cpu->mem_if->data, addr + 4, cpu->R[Rd_num + 1]); + c += MMU_memAccessCycles(addr); + c += MMU_memAccessCycles(addr + 4); + // W bit - writeback + if (BIT21(i)) + cpu->R[REG_POS(i, 16)] = addr; + } + else + { + // W bit - writeback + if (BIT21(i)) + cpu->R[REG_POS(i, 16)] = addr; + cpu->R[Rd_num] = READ32(cpu->mem_if->data, addr); + cpu->R[Rd_num + 1] = READ32(cpu->mem_if->data, addr + 4); + c += MMU_memAccessCycles(addr); + c += MMU_memAccessCycles(addr + 4); + } + } - return 3 + (MMU.MMU_WAIT32[cpu->proc_ID][(addr>>24)&0xF] * 2); + return MMU_aluMemCycles(3, c); } +// ----------------------------------------------------------------------------- +// STC +// the NDS has no coproc that responses to a STC, no feedback is given to the arm +// ----------------------------------------------------------------------------- - -//---------------------STC---------------------------------- - -static u32 FASTCALL OP_STC_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_P_IMM_OFF(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_P_IMM_OFF\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_M_IMM_OFF(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_M_IMM_OFF\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_P_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_P_PREIND(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_P_PREIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_M_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_M_PREIND(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_M_PREIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_P_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_P_POSTIND(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_P_POSTIND: cp_num %i\n", (i>>8)&0x0F); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_M_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_M_POSTIND(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_M_POSTIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_STC_OPTION(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STC_OPTION(uint32_t) { - { - /* the NDS has no coproc that responses to a STC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_STC_OPTION\n"); + return TRAPUNDEF(cpu); } -//---------------------LDC---------------------------------- +// ----------------------------------------------------------------------------- +// LDC +// the NDS has no coproc that responses to a LDC, no feedback is given to the arm +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_LDC_P_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_P_IMM_OFF(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_P_IMM_OFF\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_M_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_M_IMM_OFF(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_M_IMM_OFF\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_P_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_P_PREIND(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_P_PREIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_M_PREIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_M_PREIND(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_M_PREIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_P_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_P_POSTIND(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_P_POSTIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_M_POSTIND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_M_POSTIND(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_M_POSTIND\n"); + return TRAPUNDEF(cpu); } -static u32 FASTCALL OP_LDC_OPTION(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDC_OPTION(uint32_t) { - { - /* the NDS has no coproc that responses to a LDC, no feedback is given to the arm */ - return 2; - } + //INFO("OP_LDC_OPTION\n"); + return TRAPUNDEF(cpu); } -//----------------MCR----------------------- +// ----------------------------------------------------------------------------- +// MCR / MRC +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_MCR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MCR(uint32_t i) { - u32 i = cpu->instruction; - u32 cpnum = REG_POS(i, 8); + uint32_t cpnum = REG_POS(i, 8); - if(!cpu->coproc[cpnum]) - { - execute = false; - return 2; - } + if (cpnum != 15) + return 2; - armcp15_moveARM2CP((armcp15_t*)cpu->coproc[cpnum], cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i>>21)&7, (i>>5)&7); - //cpu->coproc[cpnum]->moveARM2CP(cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i>>21)&7, (i>>5)&7); - return 2; -} + cp15.moveARM2CP(cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i >> 21) & 0x7, (i >> 5) & 0x7); -//----------------MRC----------------------- + return 2; +} -static u32 FASTCALL OP_MRC(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MRC(uint32_t i) { - u32 i = cpu->instruction; - u32 cpnum = REG_POS(i, 8); + //if (PROCNUM != 0) return 1; + + uint32_t cpnum = REG_POS(i, 8); - if(!cpu->coproc[cpnum]) - { - execute = false; - return 2; - } + if (cpnum != 15) + return 2; - armcp15_moveCP2ARM((armcp15_t*)cpu->coproc[cpnum], &cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i>>21)&7, (i>>5)&7); - //cpu->coproc[cpnum]->moveCP2ARM(&cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i>>21)&7, (i>>5)&7); - return 4; + // ARM REF: + //data = value from Coprocessor[cp_num] + //if Rd is R15 then + // N flag = data[31] + // Z flag = data[30] + // C flag = data[29] + // V flag = data[28] + //else /* Rd is not R15 */ + // Rd = data + + uint32_t data = 0; + cp15.moveCP2ARM(&data, REG_POS(i, 16), REG_POS(i, 0), (i >> 21) & 0x7, (i >> 5) & 0x7); + if (REG_POS(i, 12) == 15) + { + cpu->CPSR.bits.N = BIT31(data); + cpu->CPSR.bits.Z = BIT30(data); + cpu->CPSR.bits.C = BIT29(data); + cpu->CPSR.bits.V = BIT28(data); + } + else + cpu->R[REG_POS(i, 12)] = data; + //cpu->coproc[cpnum]->moveCP2ARM(&cpu->R[REG_POS(i, 12)], REG_POS(i, 16), REG_POS(i, 0), (i>>21)&7, (i>>5)&7); + return 4; } -//--------------SWI------------------------------- -static u32 FASTCALL OP_SWI(armcpu_t *cpu) +// ----------------------------------------------------------------------------- +// SWI +// ----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_SWI(uint32_t i) { - if (((cpu->intVector != 0) ^ (cpu->proc_ID == ARMCPU_ARM9))) - { - /* TODO (#1#): translocated SWI vectors */ - /* we use an irq thats not in the irq tab, as - it was replaced duie to a changed intVector */ - Status_Reg tmp = cpu->CPSR; - armcpu_switchMode(cpu, SVC); /* enter svc mode */ - cpu->R[14] = cpu->R[15] - 4; /* jump to swi Vector */ - cpu->SPSR = tmp; /* save old CPSR as new SPSR */ - cpu->CPSR.bits.T = 0; /* handle as ARM32 code */ - cpu->CPSR.bits.I = cpu->SPSR.bits.I; /* keep int disable flag */ - cpu->R[15] = cpu->intVector + 0x08; - cpu->next_instruction = cpu->R[15]; - return 4; - } - else - { - u32 swinum = (cpu->instruction>>16)&0x1F; - return cpu->swi_tab[swinum](cpu) + 3; - } + uint32_t swinum = (i >> 16) & 0xFF; + + // ideas-style debug prints (execute this SWI with the null terminated string address in R0) + if (swinum == 0xFC) + return 0; + + // if the user has changed the intVector to point away from the nds bioses, + // then it doesn't really make any sense to use the builtin SWI's since + // the bios ones aren't getting called anyway + bool bypassBuiltinSWI = (cpu->intVector == 0x00000000 && !PROCNUM) || (cpu->intVector == 0xFFFF0000 && PROCNUM == 1); + + if (cpu->swi_tab && !bypassBuiltinSWI) + { + swinum &= 0x1F; + //fprintf(stderr, "%d ARM SWI %d \n",PROCNUM,swinum); + return cpu->swi_tab[swinum]() + 3; + } + else + { + /* TODO (#1#): translocated SWI vectors */ + /* we use an irq thats not in the irq tab, as + it was replaced duie to a changed intVector */ + Status_Reg tmp = cpu->CPSR; + armcpu_switchMode(cpu, SVC); /* enter svc mode */ + cpu->R[14] = cpu->next_instruction; + cpu->SPSR = tmp; /* save old CPSR as new SPSR */ + cpu->CPSR.bits.T = 0; /* handle as ARM32 code */ + cpu->CPSR.bits.I = 1; + cpu->changeCPSR(); + cpu->R[15] = cpu->intVector + 0x08; + cpu->next_instruction = cpu->R[15]; + return 3; + } } -//----------------BKPT------------------------- -static u32 FASTCALL OP_BKPT(armcpu_t *cpu) -{ - execute = false; - return 4; +// ----------------------------------------------------------------------------- +// BKPT +// ----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_BKPT(uint32_t /*i*/) +{ + /* ARM-ref + if (not overridden by debug hardware) + R14_abt = address of BKPT instruction + 4 + SPSR_abt = CPSR + CPSR[4:0] = 0b10111 // Enter Abort mode + CPSR[5] = 0 // Execute in ARM state + // CPSR[6] is unchanged + CPSR[7] = 1 // Disable normal interrupts + CPSR[8] = 1 // Disable imprecise aborts - v6 only + CPSR[9] = CP15_reg1_EEbit + if high vectors configured then + PC = 0xFFFF000C + else + PC = 0x0000000C + */ + + /* + static uint32_t last_bkpt = 0xFFFFFFFF; + if(i != last_bkpt) + fprintf(stderr, "ARM OP_BKPT triggered\n"); + last_bkpt = i; + + //this is not 100% correctly emulated, but it does the job + cpu->next_instruction = cpu->instruct_adr; + return 4; + */ + + fprintf(stderr, "ARM OP_BKPT triggered\n"); + Status_Reg tmp = cpu->CPSR; + armcpu_switchMode(cpu, ABT); // enter abt mode + cpu->R[14] = cpu->instruct_adr + 4; + cpu->SPSR = tmp; // save old CPSR as new SPSR + cpu->CPSR.bits.T = 0; // handle as ARM32 code + cpu->CPSR.bits.I = 1; + cpu->changeCPSR(); + cpu->R[15] = cpu->intVector + 0x0C; + cpu->next_instruction = cpu->R[15]; + return 4; } -//----------------CDP----------------------- +// ----------------------------------------------------------------------------- +// CDP +// ----------------------------------------------------------------------------- -static u32 FASTCALL OP_CDP(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CDP(uint32_t) { - execute = false; - return 4; + //INFO("Stopped (OP_CDP) \n"); + return TRAPUNDEF(cpu); } -#define TYPE_RETOUR u32 -#define PARAMETRES armcpu_t *cpu -#define CALLTYPE FASTCALL -#define NOM_TAB arm_instructions_set +//----------------------------------------------------------------------------- +// The End +//----------------------------------------------------------------------------- +const OpFunc arm_instructions_set[2][4096] = +{ + { +#define TABDECL(x) x<0> +#include "instruction_tabdef.inc" +#undef TABDECL + }, + { +#define TABDECL(x) x<1> #include "instruction_tabdef.inc" +#undef TABDECL + } +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/bios.cc audacious-plugins-4.2/src/xsf/desmume/bios.cc --- audacious-plugins-4.1/src/xsf/desmume/bios.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/bios.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,1073 +1,1152 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2008-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ +#include #include "cp15.h" -#include #include "MMU.h" -#include "SPU.h" -#include "debug.h" - -extern BOOL execute; +#include "NDSSystem.h" -static u16 getsinetbl[] = { -0x0000, 0x0324, 0x0648, 0x096A, 0x0C8C, 0x0FAB, 0x12C8, 0x15E2, -0x18F9, 0x1C0B, 0x1F1A, 0x2223, 0x2528, 0x2826, 0x2B1F, 0x2E11, -0x30FB, 0x33DF, 0x36BA, 0x398C, 0x3C56, 0x3F17, 0x41CE, 0x447A, -0x471C, 0x49B4, 0x4C3F, 0x4EBF, 0x5133, 0x539B, 0x55F5, 0x5842, -0x5A82, 0x5CB3, 0x5ED7, 0x60EB, 0x62F1, 0x64E8, 0x66CF, 0x68A6, -0x6A6D, 0x6C23, 0x6DC9, 0x6F5E, 0x70E2, 0x7254, 0x73B5, 0x7504, -0x7641, 0x776B, 0x7884, 0x7989, 0x7A7C, 0x7B5C, 0x7C29, 0x7CE3, -0x7D89, 0x7E1D, 0x7E9C, 0x7F09, 0x7F61, 0x7FA6, 0x7FD8, 0x7FF5 -}; - -static u16 getpitchtbl[] = { -0x0000, 0x003B, 0x0076, 0x00B2, 0x00ED, 0x0128, 0x0164, 0x019F, -0x01DB, 0x0217, 0x0252, 0x028E, 0x02CA, 0x0305, 0x0341, 0x037D, -0x03B9, 0x03F5, 0x0431, 0x046E, 0x04AA, 0x04E6, 0x0522, 0x055F, -0x059B, 0x05D8, 0x0614, 0x0651, 0x068D, 0x06CA, 0x0707, 0x0743, -0x0780, 0x07BD, 0x07FA, 0x0837, 0x0874, 0x08B1, 0x08EF, 0x092C, -0x0969, 0x09A7, 0x09E4, 0x0A21, 0x0A5F, 0x0A9C, 0x0ADA, 0x0B18, -0x0B56, 0x0B93, 0x0BD1, 0x0C0F, 0x0C4D, 0x0C8B, 0x0CC9, 0x0D07, -0x0D45, 0x0D84, 0x0DC2, 0x0E00, 0x0E3F, 0x0E7D, 0x0EBC, 0x0EFA, -0x0F39, 0x0F78, 0x0FB6, 0x0FF5, 0x1034, 0x1073, 0x10B2, 0x10F1, -0x1130, 0x116F, 0x11AE, 0x11EE, 0x122D, 0x126C, 0x12AC, 0x12EB, -0x132B, 0x136B, 0x13AA, 0x13EA, 0x142A, 0x146A, 0x14A9, 0x14E9, -0x1529, 0x1569, 0x15AA, 0x15EA, 0x162A, 0x166A, 0x16AB, 0x16EB, -0x172C, 0x176C, 0x17AD, 0x17ED, 0x182E, 0x186F, 0x18B0, 0x18F0, -0x1931, 0x1972, 0x19B3, 0x19F5, 0x1A36, 0x1A77, 0x1AB8, 0x1AFA, -0x1B3B, 0x1B7D, 0x1BBE, 0x1C00, 0x1C41, 0x1C83, 0x1CC5, 0x1D07, -0x1D48, 0x1D8A, 0x1DCC, 0x1E0E, 0x1E51, 0x1E93, 0x1ED5, 0x1F17, -0x1F5A, 0x1F9C, 0x1FDF, 0x2021, 0x2064, 0x20A6, 0x20E9, 0x212C, -0x216F, 0x21B2, 0x21F5, 0x2238, 0x227B, 0x22BE, 0x2301, 0x2344, -0x2388, 0x23CB, 0x240E, 0x2452, 0x2496, 0x24D9, 0x251D, 0x2561, -0x25A4, 0x25E8, 0x262C, 0x2670, 0x26B4, 0x26F8, 0x273D, 0x2781, -0x27C5, 0x280A, 0x284E, 0x2892, 0x28D7, 0x291C, 0x2960, 0x29A5, -0x29EA, 0x2A2F, 0x2A74, 0x2AB9, 0x2AFE, 0x2B43, 0x2B88, 0x2BCD, -0x2C13, 0x2C58, 0x2C9D, 0x2CE3, 0x2D28, 0x2D6E, 0x2DB4, 0x2DF9, -0x2E3F, 0x2E85, 0x2ECB, 0x2F11, 0x2F57, 0x2F9D, 0x2FE3, 0x302A, -0x3070, 0x30B6, 0x30FD, 0x3143, 0x318A, 0x31D0, 0x3217, 0x325E, -0x32A5, 0x32EC, 0x3332, 0x3379, 0x33C1, 0x3408, 0x344F, 0x3496, -0x34DD, 0x3525, 0x356C, 0x35B4, 0x35FB, 0x3643, 0x368B, 0x36D3, -0x371A, 0x3762, 0x37AA, 0x37F2, 0x383A, 0x3883, 0x38CB, 0x3913, -0x395C, 0x39A4, 0x39ED, 0x3A35, 0x3A7E, 0x3AC6, 0x3B0F, 0x3B58, -0x3BA1, 0x3BEA, 0x3C33, 0x3C7C, 0x3CC5, 0x3D0E, 0x3D58, 0x3DA1, -0x3DEA, 0x3E34, 0x3E7D, 0x3EC7, 0x3F11, 0x3F5A, 0x3FA4, 0x3FEE, -0x4038, 0x4082, 0x40CC, 0x4116, 0x4161, 0x41AB, 0x41F5, 0x4240, -0x428A, 0x42D5, 0x431F, 0x436A, 0x43B5, 0x4400, 0x444B, 0x4495, -0x44E1, 0x452C, 0x4577, 0x45C2, 0x460D, 0x4659, 0x46A4, 0x46F0, -0x473B, 0x4787, 0x47D3, 0x481E, 0x486A, 0x48B6, 0x4902, 0x494E, -0x499A, 0x49E6, 0x4A33, 0x4A7F, 0x4ACB, 0x4B18, 0x4B64, 0x4BB1, -0x4BFE, 0x4C4A, 0x4C97, 0x4CE4, 0x4D31, 0x4D7E, 0x4DCB, 0x4E18, -0x4E66, 0x4EB3, 0x4F00, 0x4F4E, 0x4F9B, 0x4FE9, 0x5036, 0x5084, -0x50D2, 0x5120, 0x516E, 0x51BC, 0x520A, 0x5258, 0x52A6, 0x52F4, -0x5343, 0x5391, 0x53E0, 0x542E, 0x547D, 0x54CC, 0x551A, 0x5569, -0x55B8, 0x5607, 0x5656, 0x56A5, 0x56F4, 0x5744, 0x5793, 0x57E2, -0x5832, 0x5882, 0x58D1, 0x5921, 0x5971, 0x59C1, 0x5A10, 0x5A60, -0x5AB0, 0x5B01, 0x5B51, 0x5BA1, 0x5BF1, 0x5C42, 0x5C92, 0x5CE3, -0x5D34, 0x5D84, 0x5DD5, 0x5E26, 0x5E77, 0x5EC8, 0x5F19, 0x5F6A, -0x5FBB, 0x600D, 0x605E, 0x60B0, 0x6101, 0x6153, 0x61A4, 0x61F6, -0x6248, 0x629A, 0x62EC, 0x633E, 0x6390, 0x63E2, 0x6434, 0x6487, -0x64D9, 0x652C, 0x657E, 0x65D1, 0x6624, 0x6676, 0x66C9, 0x671C, -0x676F, 0x67C2, 0x6815, 0x6869, 0x68BC, 0x690F, 0x6963, 0x69B6, -0x6A0A, 0x6A5E, 0x6AB1, 0x6B05, 0x6B59, 0x6BAD, 0x6C01, 0x6C55, -0x6CAA, 0x6CFE, 0x6D52, 0x6DA7, 0x6DFB, 0x6E50, 0x6EA4, 0x6EF9, -0x6F4E, 0x6FA3, 0x6FF8, 0x704D, 0x70A2, 0x70F7, 0x714D, 0x71A2, -0x71F7, 0x724D, 0x72A2, 0x72F8, 0x734E, 0x73A4, 0x73FA, 0x7450, -0x74A6, 0x74FC, 0x7552, 0x75A8, 0x75FF, 0x7655, 0x76AC, 0x7702, -0x7759, 0x77B0, 0x7807, 0x785E, 0x78B4, 0x790C, 0x7963, 0x79BA, -0x7A11, 0x7A69, 0x7AC0, 0x7B18, 0x7B6F, 0x7BC7, 0x7C1F, 0x7C77, -0x7CCF, 0x7D27, 0x7D7F, 0x7DD7, 0x7E2F, 0x7E88, 0x7EE0, 0x7F38, -0x7F91, 0x7FEA, 0x8042, 0x809B, 0x80F4, 0x814D, 0x81A6, 0x81FF, -0x8259, 0x82B2, 0x830B, 0x8365, 0x83BE, 0x8418, 0x8472, 0x84CB, -0x8525, 0x857F, 0x85D9, 0x8633, 0x868E, 0x86E8, 0x8742, 0x879D, -0x87F7, 0x8852, 0x88AC, 0x8907, 0x8962, 0x89BD, 0x8A18, 0x8A73, -0x8ACE, 0x8B2A, 0x8B85, 0x8BE0, 0x8C3C, 0x8C97, 0x8CF3, 0x8D4F, -0x8DAB, 0x8E07, 0x8E63, 0x8EBF, 0x8F1B, 0x8F77, 0x8FD4, 0x9030, -0x908C, 0x90E9, 0x9146, 0x91A2, 0x91FF, 0x925C, 0x92B9, 0x9316, -0x9373, 0x93D1, 0x942E, 0x948C, 0x94E9, 0x9547, 0x95A4, 0x9602, -0x9660, 0x96BE, 0x971C, 0x977A, 0x97D8, 0x9836, 0x9895, 0x98F3, -0x9952, 0x99B0, 0x9A0F, 0x9A6E, 0x9ACD, 0x9B2C, 0x9B8B, 0x9BEA, -0x9C49, 0x9CA8, 0x9D08, 0x9D67, 0x9DC7, 0x9E26, 0x9E86, 0x9EE6, -0x9F46, 0x9FA6, 0xA006, 0xA066, 0xA0C6, 0xA127, 0xA187, 0xA1E8, -0xA248, 0xA2A9, 0xA30A, 0xA36B, 0xA3CC, 0xA42D, 0xA48E, 0xA4EF, -0xA550, 0xA5B2, 0xA613, 0xA675, 0xA6D6, 0xA738, 0xA79A, 0xA7FC, -0xA85E, 0xA8C0, 0xA922, 0xA984, 0xA9E7, 0xAA49, 0xAAAC, 0xAB0E, -0xAB71, 0xABD4, 0xAC37, 0xAC9A, 0xACFD, 0xAD60, 0xADC3, 0xAE27, -0xAE8A, 0xAEED, 0xAF51, 0xAFB5, 0xB019, 0xB07C, 0xB0E0, 0xB145, -0xB1A9, 0xB20D, 0xB271, 0xB2D6, 0xB33A, 0xB39F, 0xB403, 0xB468, -0xB4CD, 0xB532, 0xB597, 0xB5FC, 0xB662, 0xB6C7, 0xB72C, 0xB792, -0xB7F7, 0xB85D, 0xB8C3, 0xB929, 0xB98F, 0xB9F5, 0xBA5B, 0xBAC1, -0xBB28, 0xBB8E, 0xBBF5, 0xBC5B, 0xBCC2, 0xBD29, 0xBD90, 0xBDF7, -0xBE5E, 0xBEC5, 0xBF2C, 0xBF94, 0xBFFB, 0xC063, 0xC0CA, 0xC132, -0xC19A, 0xC202, 0xC26A, 0xC2D2, 0xC33A, 0xC3A2, 0xC40B, 0xC473, -0xC4DC, 0xC544, 0xC5AD, 0xC616, 0xC67F, 0xC6E8, 0xC751, 0xC7BB, -0xC824, 0xC88D, 0xC8F7, 0xC960, 0xC9CA, 0xCA34, 0xCA9E, 0xCB08, -0xCB72, 0xCBDC, 0xCC47, 0xCCB1, 0xCD1B, 0xCD86, 0xCDF1, 0xCE5B, -0xCEC6, 0xCF31, 0xCF9C, 0xD008, 0xD073, 0xD0DE, 0xD14A, 0xD1B5, -0xD221, 0xD28D, 0xD2F8, 0xD364, 0xD3D0, 0xD43D, 0xD4A9, 0xD515, -0xD582, 0xD5EE, 0xD65B, 0xD6C7, 0xD734, 0xD7A1, 0xD80E, 0xD87B, -0xD8E9, 0xD956, 0xD9C3, 0xDA31, 0xDA9E, 0xDB0C, 0xDB7A, 0xDBE8, -0xDC56, 0xDCC4, 0xDD32, 0xDDA0, 0xDE0F, 0xDE7D, 0xDEEC, 0xDF5B, -0xDFC9, 0xE038, 0xE0A7, 0xE116, 0xE186, 0xE1F5, 0xE264, 0xE2D4, -0xE343, 0xE3B3, 0xE423, 0xE493, 0xE503, 0xE573, 0xE5E3, 0xE654, -0xE6C4, 0xE735, 0xE7A5, 0xE816, 0xE887, 0xE8F8, 0xE969, 0xE9DA, -0xEA4B, 0xEABC, 0xEB2E, 0xEB9F, 0xEC11, 0xEC83, 0xECF5, 0xED66, -0xEDD9, 0xEE4B, 0xEEBD, 0xEF2F, 0xEFA2, 0xF014, 0xF087, 0xF0FA, -0xF16D, 0xF1E0, 0xF253, 0xF2C6, 0xF339, 0xF3AD, 0xF420, 0xF494, -0xF507, 0xF57B, 0xF5EF, 0xF663, 0xF6D7, 0xF74C, 0xF7C0, 0xF834, -0xF8A9, 0xF91E, 0xF992, 0xFA07, 0xFA7C, 0xFAF1, 0xFB66, 0xFBDC, -0xFC51, 0xFCC7, 0xFD3C, 0xFDB2, 0xFE28, 0xFE9E, 0xFF14, 0xFF8A -}; +#define cpu (&ARMPROC) +#define TEMPLATE template -static u8 getvoltbl[] = { -0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, -0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, -0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, -0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, -0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, -0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, -0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, -0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, -0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, -0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, -0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, -0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x14, -0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x18, -0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, -0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, -0x22, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x29, -0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, 0x31, 0x31, -0x32, 0x32, 0x33, 0x33, 0x34, 0x35, 0x35, 0x36, 0x36, 0x37, 0x38, 0x38, 0x39, 0x3A, 0x3A, 0x3B, -0x3C, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F, 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45, 0x46, 0x47, -0x48, 0x49, 0x4A, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x52, 0x53, 0x54, 0x55, -0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67, -0x68, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, 0x7B, -0x7D, 0x7E, 0x7F, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, -0x26, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, -0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x32, 0x33, 0x33, 0x34, 0x34, 0x35, 0x36, -0x36, 0x37, 0x37, 0x38, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E, 0x3F, 0x40, 0x40, -0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4D, -0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, -0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6F, 0x70, -0x71, 0x73, 0x74, 0x75, 0x77, 0x78, 0x79, 0x7B, 0x7C, 0x7E, 0x7E, 0x40, 0x41, 0x42, 0x43, 0x43, -0x44, 0x45, 0x46, 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, -0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, -0x62, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72, 0x74, 0x75, -0x76, 0x78, 0x79, 0x7B, 0x7C, 0x7D, 0x7E, 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x45, 0x46, 0x46, -0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, -0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x65, 0x66, -0x67, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, -0x7C, 0x7D, 0x7E, 0x7F +struct CompressionHeader +{ +public: + CompressionHeader(u32 _value) : value(_value) {} + u32 DataSize() const { return value&15; } + u32 Type() const { return (value>>4)&15; } + u32 DecompressedSize() const { return value>>24; } +private: + u32 value; }; -u32 bios_nop(armcpu_t * cpu) +static const uint16_t getsinetbl[] = { - if (cpu->proc_ID == ARMCPU_ARM9) - { - LOG("Unimplemented bios function %02X(ARM9) was used. R0:%08X\n", (cpu->instruction)&0x1F, cpu->R[0]); - } - else - { - LOG("Unimplemented bios function %02X(ARM7) was used. R0:%08X\n", (cpu->instruction)&0x1F, cpu->R[0]); - } - return 3; -} - -u32 delayLoop(armcpu_t * cpu) -{ - return cpu->R[0] * 4; -} - -//u32 oldmode[2]; - -u32 intrWaitARM(armcpu_t * cpu) -{ - u32 intrFlagAdr;// = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8; - u32 intr; - u32 intrFlag = 0; - - //execute = false; - if(cpu->proc_ID) - { - intrFlagAdr = 0x380FFF8; - } else { - intrFlagAdr = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8; - } - intr = MMU_read32(cpu->proc_ID, intrFlagAdr); - intrFlag = cpu->R[1] & intr; - - if(intrFlag) - { - // si une(ou plusieurs) des interruptions que l'on attend s'est(se sont) produite(s) - // on efface son(les) occurence(s). - intr ^= intrFlag; - MMU_write32(cpu->proc_ID, intrFlagAdr, intr); - //cpu->switchMode(oldmode[cpu->proc_ID]); - return 1; - } - - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - cpu->waitIRQ = 1; - //oldmode[cpu->proc_ID] = cpu->switchMode(SVC); - - return 1; -} - -u32 waitVBlankARM(armcpu_t * cpu) -{ - u32 intrFlagAdr;// = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8; - u32 intr; - u32 intrFlag = 0; - - //execute = false; - if(cpu->proc_ID) - { - intrFlagAdr = 0x380FFF8; - } else { - intrFlagAdr = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8; - } - intr = MMU_read32(cpu->proc_ID, intrFlagAdr); - intrFlag = 1 & intr; - - if(intrFlag) - { - // si une(ou plusieurs) des interruptions que l'on attend s'est(se sont) produite(s) - // on efface son(les) occurence(s). - intr ^= intrFlag; - MMU_write32(cpu->proc_ID, intrFlagAdr, intr); - //cpu->switchMode(oldmode[cpu->proc_ID]); - return 1; - } - - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - cpu->waitIRQ = 1; - //oldmode[cpu->proc_ID] = cpu->switchMode(SVC); - - return 1; -} - -u32 wait4IRQ(armcpu_t* cpu) -{ - //execute= false; - if(cpu->wirq) - { - if(!cpu->waitIRQ) - { - cpu->waitIRQ = 0; - cpu->wirq = 0; - //cpu->switchMode(oldmode[cpu->proc_ID]); - return 1; - } - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - return 1; - } - cpu->waitIRQ = 1; - cpu->wirq = 1; - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - //oldmode[cpu->proc_ID] = cpu->switchMode(SVC); - return 1; -} - -u32 devide(armcpu_t* cpu) -{ - s32 num = (s32)cpu->R[0]; - s32 dnum = (s32)cpu->R[1]; - - if(dnum==0) return 0; - - cpu->R[0] = (u32)(num / dnum); - cpu->R[1] = (u32)(num % dnum); - cpu->R[3] = (u32) (((s32)cpu->R[0])<0 ? -cpu->R[0] : cpu->R[0]); - - return 6; -} - -u32 copy(armcpu_t* cpu) -{ - u32 src = cpu->R[0]; - u32 dst = cpu->R[1]; - u32 cnt = cpu->R[2]; - - switch(BIT26(cnt)) - { - case 0: - src &= 0xFFFFFFFE; - dst &= 0xFFFFFFFE; - switch(BIT24(cnt)) - { - case 0: - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write16(cpu->proc_ID, dst, MMU_read16(cpu->proc_ID, src)); - cnt--; - dst+=2; - src+=2; - } - break; - case 1: - { - u32 val = MMU_read16(cpu->proc_ID, src); - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write16(cpu->proc_ID, dst, val); - cnt--; - dst+=2; - } - } - break; - } - break; - case 1: - src &= 0xFFFFFFFC; - dst &= 0xFFFFFFFC; - switch(BIT24(cnt)) - { - case 0: - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write32(cpu->proc_ID, dst, MMU_read32(cpu->proc_ID, src)); - cnt--; - dst+=4; - src+=4; - } - break; - case 1: - { - u32 val = MMU_read32(cpu->proc_ID, src); - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write32(cpu->proc_ID, dst, val); - cnt--; - dst+=4; - } - } - break; - } - break; - } - return 1; -} - -u32 fastCopy(armcpu_t* cpu) -{ - u32 src = cpu->R[0] & 0xFFFFFFFC; - u32 dst = cpu->R[1] & 0xFFFFFFFC; - u32 cnt = cpu->R[2]; - - switch(BIT24(cnt)) - { - case 0: - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write32(cpu->proc_ID, dst, MMU_read32(cpu->proc_ID, src)); - cnt--; - dst+=4; - src+=4; - } - break; - case 1: - { - u32 val = MMU_read32(cpu->proc_ID, src); - cnt &= 0x1FFFFF; - while(cnt) - { - MMU_write32(cpu->proc_ID, dst, val); - cnt--; - dst+=4; - } - } - break; - } - return 1; -} - -u32 LZ77UnCompVram(armcpu_t* cpu) -{ - int i1, i2; - int byteCount; - int byteShift; - u32 writeValue; - int len; - u32 source = cpu->R[0]; - u32 dest = cpu->R[1]; - u32 header = MMU_read32(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - byteCount = 0; - byteShift = 0; - writeValue = 0; - - len = header >> 8; - - while(len > 0) { - u8 d = MMU_read8(cpu->proc_ID, source++); - - if(d) { - for(i1 = 0; i1 < 8; i1++) { - if(d & 0x80) { - int length; - int offset; - u32 windowOffset; - u16 data = MMU_read8(cpu->proc_ID, source++) << 8; - data |= MMU_read8(cpu->proc_ID, source++); - length = (data >> 12) + 3; - offset = (data & 0x0FFF); - windowOffset = dest + byteCount - offset - 1; - for(i2 = 0; i2 < length; i2++) { - writeValue |= (MMU_read8(cpu->proc_ID, windowOffset++) << byteShift); - byteShift += 8; - byteCount++; - - if(byteCount == 2) { - MMU_write16(cpu->proc_ID, dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return 0; - } - } else { - writeValue |= (MMU_read8(cpu->proc_ID, source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - MMU_write16(cpu->proc_ID, dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return 0; - } - d <<= 1; - } - } else { - for(i1 = 0; i1 < 8; i1++) { - writeValue |= (MMU_read8(cpu->proc_ID, source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - MMU_write16(cpu->proc_ID, dest, writeValue); - dest += 2; - byteShift = 0; - byteCount = 0; - writeValue = 0; - } - len--; - if(len == 0) - return 0; - } - } - } - return 1; -} + 0x0000, 0x0324, 0x0648, 0x096A, 0x0C8C, 0x0FAB, 0x12C8, 0x15E2, + 0x18F9, 0x1C0B, 0x1F1A, 0x2223, 0x2528, 0x2826, 0x2B1F, 0x2E11, + 0x30FB, 0x33DF, 0x36BA, 0x398C, 0x3C56, 0x3F17, 0x41CE, 0x447A, + 0x471C, 0x49B4, 0x4C3F, 0x4EBF, 0x5133, 0x539B, 0x55F5, 0x5842, + 0x5A82, 0x5CB3, 0x5ED7, 0x60EB, 0x62F1, 0x64E8, 0x66CF, 0x68A6, + 0x6A6D, 0x6C23, 0x6DC9, 0x6F5E, 0x70E2, 0x7254, 0x73B5, 0x7504, + 0x7641, 0x776B, 0x7884, 0x7989, 0x7A7C, 0x7B5C, 0x7C29, 0x7CE3, + 0x7D89, 0x7E1D, 0x7E9C, 0x7F09, 0x7F61, 0x7FA6, 0x7FD8, 0x7FF5 +}; -u32 LZ77UnCompWram(armcpu_t* cpu) +static const uint16_t getpitchtbl[] = { - int i1, i2; - int len; - u32 source = cpu->R[0]; - u32 dest = cpu->R[1]; - - u32 header = MMU_read32(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - len = header >> 8; - - while(len > 0) { - u8 d = MMU_read8(cpu->proc_ID, source++); - - if(d) { - for(i1 = 0; i1 < 8; i1++) { - if(d & 0x80) { - int length; - int offset; - u32 windowOffset; - u16 data = MMU_read8(cpu->proc_ID, source++) << 8; - data |= MMU_read8(cpu->proc_ID, source++); - length = (data >> 12) + 3; - offset = (data & 0x0FFF); - windowOffset = dest - offset - 1; - for(i2 = 0; i2 < length; i2++) { - MMU_write8(cpu->proc_ID, dest++, MMU_read8(cpu->proc_ID, windowOffset++)); - len--; - if(len == 0) - return 0; - } - } else { - MMU_write8(cpu->proc_ID, dest++, MMU_read8(cpu->proc_ID, source++)); - len--; - if(len == 0) - return 0; - } - d <<= 1; - } - } else { - for(i1 = 0; i1 < 8; i1++) { - MMU_write8(cpu->proc_ID, dest++, MMU_read8(cpu->proc_ID, source++)); - len--; - if(len == 0) - return 0; - } - } - } - return 1; -} + 0x0000, 0x003B, 0x0076, 0x00B2, 0x00ED, 0x0128, 0x0164, 0x019F, + 0x01DB, 0x0217, 0x0252, 0x028E, 0x02CA, 0x0305, 0x0341, 0x037D, + 0x03B9, 0x03F5, 0x0431, 0x046E, 0x04AA, 0x04E6, 0x0522, 0x055F, + 0x059B, 0x05D8, 0x0614, 0x0651, 0x068D, 0x06CA, 0x0707, 0x0743, + 0x0780, 0x07BD, 0x07FA, 0x0837, 0x0874, 0x08B1, 0x08EF, 0x092C, + 0x0969, 0x09A7, 0x09E4, 0x0A21, 0x0A5F, 0x0A9C, 0x0ADA, 0x0B18, + 0x0B56, 0x0B93, 0x0BD1, 0x0C0F, 0x0C4D, 0x0C8B, 0x0CC9, 0x0D07, + 0x0D45, 0x0D84, 0x0DC2, 0x0E00, 0x0E3F, 0x0E7D, 0x0EBC, 0x0EFA, + 0x0F39, 0x0F78, 0x0FB6, 0x0FF5, 0x1034, 0x1073, 0x10B2, 0x10F1, + 0x1130, 0x116F, 0x11AE, 0x11EE, 0x122D, 0x126C, 0x12AC, 0x12EB, + 0x132B, 0x136B, 0x13AA, 0x13EA, 0x142A, 0x146A, 0x14A9, 0x14E9, + 0x1529, 0x1569, 0x15AA, 0x15EA, 0x162A, 0x166A, 0x16AB, 0x16EB, + 0x172C, 0x176C, 0x17AD, 0x17ED, 0x182E, 0x186F, 0x18B0, 0x18F0, + 0x1931, 0x1972, 0x19B3, 0x19F5, 0x1A36, 0x1A77, 0x1AB8, 0x1AFA, + 0x1B3B, 0x1B7D, 0x1BBE, 0x1C00, 0x1C41, 0x1C83, 0x1CC5, 0x1D07, + 0x1D48, 0x1D8A, 0x1DCC, 0x1E0E, 0x1E51, 0x1E93, 0x1ED5, 0x1F17, + 0x1F5A, 0x1F9C, 0x1FDF, 0x2021, 0x2064, 0x20A6, 0x20E9, 0x212C, + 0x216F, 0x21B2, 0x21F5, 0x2238, 0x227B, 0x22BE, 0x2301, 0x2344, + 0x2388, 0x23CB, 0x240E, 0x2452, 0x2496, 0x24D9, 0x251D, 0x2561, + 0x25A4, 0x25E8, 0x262C, 0x2670, 0x26B4, 0x26F8, 0x273D, 0x2781, + 0x27C5, 0x280A, 0x284E, 0x2892, 0x28D7, 0x291C, 0x2960, 0x29A5, + 0x29EA, 0x2A2F, 0x2A74, 0x2AB9, 0x2AFE, 0x2B43, 0x2B88, 0x2BCD, + 0x2C13, 0x2C58, 0x2C9D, 0x2CE3, 0x2D28, 0x2D6E, 0x2DB4, 0x2DF9, + 0x2E3F, 0x2E85, 0x2ECB, 0x2F11, 0x2F57, 0x2F9D, 0x2FE3, 0x302A, + 0x3070, 0x30B6, 0x30FD, 0x3143, 0x318A, 0x31D0, 0x3217, 0x325E, + 0x32A5, 0x32EC, 0x3332, 0x3379, 0x33C1, 0x3408, 0x344F, 0x3496, + 0x34DD, 0x3525, 0x356C, 0x35B4, 0x35FB, 0x3643, 0x368B, 0x36D3, + 0x371A, 0x3762, 0x37AA, 0x37F2, 0x383A, 0x3883, 0x38CB, 0x3913, + 0x395C, 0x39A4, 0x39ED, 0x3A35, 0x3A7E, 0x3AC6, 0x3B0F, 0x3B58, + 0x3BA1, 0x3BEA, 0x3C33, 0x3C7C, 0x3CC5, 0x3D0E, 0x3D58, 0x3DA1, + 0x3DEA, 0x3E34, 0x3E7D, 0x3EC7, 0x3F11, 0x3F5A, 0x3FA4, 0x3FEE, + 0x4038, 0x4082, 0x40CC, 0x4116, 0x4161, 0x41AB, 0x41F5, 0x4240, + 0x428A, 0x42D5, 0x431F, 0x436A, 0x43B5, 0x4400, 0x444B, 0x4495, + 0x44E1, 0x452C, 0x4577, 0x45C2, 0x460D, 0x4659, 0x46A4, 0x46F0, + 0x473B, 0x4787, 0x47D3, 0x481E, 0x486A, 0x48B6, 0x4902, 0x494E, + 0x499A, 0x49E6, 0x4A33, 0x4A7F, 0x4ACB, 0x4B18, 0x4B64, 0x4BB1, + 0x4BFE, 0x4C4A, 0x4C97, 0x4CE4, 0x4D31, 0x4D7E, 0x4DCB, 0x4E18, + 0x4E66, 0x4EB3, 0x4F00, 0x4F4E, 0x4F9B, 0x4FE9, 0x5036, 0x5084, + 0x50D2, 0x5120, 0x516E, 0x51BC, 0x520A, 0x5258, 0x52A6, 0x52F4, + 0x5343, 0x5391, 0x53E0, 0x542E, 0x547D, 0x54CC, 0x551A, 0x5569, + 0x55B8, 0x5607, 0x5656, 0x56A5, 0x56F4, 0x5744, 0x5793, 0x57E2, + 0x5832, 0x5882, 0x58D1, 0x5921, 0x5971, 0x59C1, 0x5A10, 0x5A60, + 0x5AB0, 0x5B01, 0x5B51, 0x5BA1, 0x5BF1, 0x5C42, 0x5C92, 0x5CE3, + 0x5D34, 0x5D84, 0x5DD5, 0x5E26, 0x5E77, 0x5EC8, 0x5F19, 0x5F6A, + 0x5FBB, 0x600D, 0x605E, 0x60B0, 0x6101, 0x6153, 0x61A4, 0x61F6, + 0x6248, 0x629A, 0x62EC, 0x633E, 0x6390, 0x63E2, 0x6434, 0x6487, + 0x64D9, 0x652C, 0x657E, 0x65D1, 0x6624, 0x6676, 0x66C9, 0x671C, + 0x676F, 0x67C2, 0x6815, 0x6869, 0x68BC, 0x690F, 0x6963, 0x69B6, + 0x6A0A, 0x6A5E, 0x6AB1, 0x6B05, 0x6B59, 0x6BAD, 0x6C01, 0x6C55, + 0x6CAA, 0x6CFE, 0x6D52, 0x6DA7, 0x6DFB, 0x6E50, 0x6EA4, 0x6EF9, + 0x6F4E, 0x6FA3, 0x6FF8, 0x704D, 0x70A2, 0x70F7, 0x714D, 0x71A2, + 0x71F7, 0x724D, 0x72A2, 0x72F8, 0x734E, 0x73A4, 0x73FA, 0x7450, + 0x74A6, 0x74FC, 0x7552, 0x75A8, 0x75FF, 0x7655, 0x76AC, 0x7702, + 0x7759, 0x77B0, 0x7807, 0x785E, 0x78B4, 0x790C, 0x7963, 0x79BA, + 0x7A11, 0x7A69, 0x7AC0, 0x7B18, 0x7B6F, 0x7BC7, 0x7C1F, 0x7C77, + 0x7CCF, 0x7D27, 0x7D7F, 0x7DD7, 0x7E2F, 0x7E88, 0x7EE0, 0x7F38, + 0x7F91, 0x7FEA, 0x8042, 0x809B, 0x80F4, 0x814D, 0x81A6, 0x81FF, + 0x8259, 0x82B2, 0x830B, 0x8365, 0x83BE, 0x8418, 0x8472, 0x84CB, + 0x8525, 0x857F, 0x85D9, 0x8633, 0x868E, 0x86E8, 0x8742, 0x879D, + 0x87F7, 0x8852, 0x88AC, 0x8907, 0x8962, 0x89BD, 0x8A18, 0x8A73, + 0x8ACE, 0x8B2A, 0x8B85, 0x8BE0, 0x8C3C, 0x8C97, 0x8CF3, 0x8D4F, + 0x8DAB, 0x8E07, 0x8E63, 0x8EBF, 0x8F1B, 0x8F77, 0x8FD4, 0x9030, + 0x908C, 0x90E9, 0x9146, 0x91A2, 0x91FF, 0x925C, 0x92B9, 0x9316, + 0x9373, 0x93D1, 0x942E, 0x948C, 0x94E9, 0x9547, 0x95A4, 0x9602, + 0x9660, 0x96BE, 0x971C, 0x977A, 0x97D8, 0x9836, 0x9895, 0x98F3, + 0x9952, 0x99B0, 0x9A0F, 0x9A6E, 0x9ACD, 0x9B2C, 0x9B8B, 0x9BEA, + 0x9C49, 0x9CA8, 0x9D08, 0x9D67, 0x9DC7, 0x9E26, 0x9E86, 0x9EE6, + 0x9F46, 0x9FA6, 0xA006, 0xA066, 0xA0C6, 0xA127, 0xA187, 0xA1E8, + 0xA248, 0xA2A9, 0xA30A, 0xA36B, 0xA3CC, 0xA42D, 0xA48E, 0xA4EF, + 0xA550, 0xA5B2, 0xA613, 0xA675, 0xA6D6, 0xA738, 0xA79A, 0xA7FC, + 0xA85E, 0xA8C0, 0xA922, 0xA984, 0xA9E7, 0xAA49, 0xAAAC, 0xAB0E, + 0xAB71, 0xABD4, 0xAC37, 0xAC9A, 0xACFD, 0xAD60, 0xADC3, 0xAE27, + 0xAE8A, 0xAEED, 0xAF51, 0xAFB5, 0xB019, 0xB07C, 0xB0E0, 0xB145, + 0xB1A9, 0xB20D, 0xB271, 0xB2D6, 0xB33A, 0xB39F, 0xB403, 0xB468, + 0xB4CD, 0xB532, 0xB597, 0xB5FC, 0xB662, 0xB6C7, 0xB72C, 0xB792, + 0xB7F7, 0xB85D, 0xB8C3, 0xB929, 0xB98F, 0xB9F5, 0xBA5B, 0xBAC1, + 0xBB28, 0xBB8E, 0xBBF5, 0xBC5B, 0xBCC2, 0xBD29, 0xBD90, 0xBDF7, + 0xBE5E, 0xBEC5, 0xBF2C, 0xBF94, 0xBFFB, 0xC063, 0xC0CA, 0xC132, + 0xC19A, 0xC202, 0xC26A, 0xC2D2, 0xC33A, 0xC3A2, 0xC40B, 0xC473, + 0xC4DC, 0xC544, 0xC5AD, 0xC616, 0xC67F, 0xC6E8, 0xC751, 0xC7BB, + 0xC824, 0xC88D, 0xC8F7, 0xC960, 0xC9CA, 0xCA34, 0xCA9E, 0xCB08, + 0xCB72, 0xCBDC, 0xCC47, 0xCCB1, 0xCD1B, 0xCD86, 0xCDF1, 0xCE5B, + 0xCEC6, 0xCF31, 0xCF9C, 0xD008, 0xD073, 0xD0DE, 0xD14A, 0xD1B5, + 0xD221, 0xD28D, 0xD2F8, 0xD364, 0xD3D0, 0xD43D, 0xD4A9, 0xD515, + 0xD582, 0xD5EE, 0xD65B, 0xD6C7, 0xD734, 0xD7A1, 0xD80E, 0xD87B, + 0xD8E9, 0xD956, 0xD9C3, 0xDA31, 0xDA9E, 0xDB0C, 0xDB7A, 0xDBE8, + 0xDC56, 0xDCC4, 0xDD32, 0xDDA0, 0xDE0F, 0xDE7D, 0xDEEC, 0xDF5B, + 0xDFC9, 0xE038, 0xE0A7, 0xE116, 0xE186, 0xE1F5, 0xE264, 0xE2D4, + 0xE343, 0xE3B3, 0xE423, 0xE493, 0xE503, 0xE573, 0xE5E3, 0xE654, + 0xE6C4, 0xE735, 0xE7A5, 0xE816, 0xE887, 0xE8F8, 0xE969, 0xE9DA, + 0xEA4B, 0xEABC, 0xEB2E, 0xEB9F, 0xEC11, 0xEC83, 0xECF5, 0xED66, + 0xEDD9, 0xEE4B, 0xEEBD, 0xEF2F, 0xEFA2, 0xF014, 0xF087, 0xF0FA, + 0xF16D, 0xF1E0, 0xF253, 0xF2C6, 0xF339, 0xF3AD, 0xF420, 0xF494, + 0xF507, 0xF57B, 0xF5EF, 0xF663, 0xF6D7, 0xF74C, 0xF7C0, 0xF834, + 0xF8A9, 0xF91E, 0xF992, 0xFA07, 0xFA7C, 0xFAF1, 0xFB66, 0xFBDC, + 0xFC51, 0xFCC7, 0xFD3C, 0xFDB2, 0xFE28, 0xFE9E, 0xFF14, 0xFF8A +}; -u32 RLUnCompVram(armcpu_t* cpu) +static const uint8_t getvoltbl[] = { - int i; - int len; - int byteCount; - int byteShift; - u32 writeValue; - u32 source = cpu->R[0]; - u32 dest = cpu->R[1]; - - u32 header = MMU_read32(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - len = header >> 8; - byteCount = 0; - byteShift = 0; - writeValue = 0; - - while(len > 0) { - u8 d = MMU_read8(cpu->proc_ID, source++); - int l = d & 0x7F; - if(d & 0x80) { - u8 data = MMU_read8(cpu->proc_ID, source++); - l += 3; - for(i = 0;i < l; i++) { - writeValue |= (data << byteShift); - byteShift += 8; - byteCount++; - - if(byteCount == 2) { - MMU_write16(cpu->proc_ID, dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return 0; - } - } else { - l++; - for(i = 0; i < l; i++) { - writeValue |= (MMU_read8(cpu->proc_ID, source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - MMU_write16(cpu->proc_ID, dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return 0; - } - } - } - return 1; -} + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, + 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, + 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x14, + 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x18, + 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, + 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, + 0x22, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x29, + 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, 0x31, 0x31, + 0x32, 0x32, 0x33, 0x33, 0x34, 0x35, 0x35, 0x36, 0x36, 0x37, 0x38, 0x38, 0x39, 0x3A, 0x3A, 0x3B, + 0x3C, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F, 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, 0x7B, + 0x7D, 0x7E, 0x7F, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, + 0x26, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, + 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x32, 0x33, 0x33, 0x34, 0x34, 0x35, 0x36, + 0x36, 0x37, 0x37, 0x38, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E, 0x3F, 0x40, 0x40, + 0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4D, + 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, + 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6F, 0x70, + 0x71, 0x73, 0x74, 0x75, 0x77, 0x78, 0x79, 0x7B, 0x7C, 0x7E, 0x7E, 0x40, 0x41, 0x42, 0x43, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, + 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, + 0x62, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x72, 0x74, 0x75, + 0x76, 0x78, 0x79, 0x7B, 0x7C, 0x7D, 0x7E, 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x45, 0x46, 0x46, + 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, + 0x7C, 0x7D, 0x7E, 0x7F +}; -u32 RLUnCompWram(armcpu_t* cpu) +TEMPLATE static uint32_t bios_nop() { - int i; - int len; - u32 source = cpu->R[0]; - u32 dest = cpu->R[1]; - - u32 header = MMU_read32(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - len = header >> 8; - - while(len > 0) { - u8 d = MMU_read8(cpu->proc_ID, source++); - int l = d & 0x7F; - if(d & 0x80) { - u8 data = MMU_read8(cpu->proc_ID, source++); - l += 3; - for(i = 0;i < l; i++) { - MMU_write8(cpu->proc_ID, dest++, data); - len--; - if(len == 0) - return 0; - } - } else { - l++; - for(i = 0; i < l; i++) { - MMU_write8(cpu->proc_ID, dest++, MMU_read8(cpu->proc_ID, source++)); - len--; - if(len == 0) - return 0; - } - } - } - return 1; + return 3; } -u32 UnCompHuffman(armcpu_t* cpu) +TEMPLATE static uint32_t WaitByLoop() { - u32 source, dest, writeValue, header, treeStart, mask; - u32 data; - u8 treeSize, currentNode, rootNode; - int byteCount, byteShift, len, pos; - int writeData; - - source = cpu->R[0]; - dest = cpu->R[1]; - - header = MMU_read8(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - treeSize = MMU_read8(cpu->proc_ID, source++); - - treeStart = source; - - source += ((treeSize+1)<<1)-1; // minus because we already skipped one byte - - len = header >> 8; - - mask = 0x80000000; - data = MMU_read8(cpu->proc_ID, source); - source += 4; - - pos = 0; - rootNode = MMU_read8(cpu->proc_ID, treeStart); - currentNode = rootNode; - writeData = 0; - byteShift = 0; - byteCount = 0; - writeValue = 0; - - if((header & 0x0F) == 8) { - while(len > 0) { - // take left - if(pos == 0) - pos++; - else - pos += (((currentNode & 0x3F)+1)<<1); - - if(data & mask) { - // right - if(currentNode & 0x40) - writeData = 1; - currentNode = MMU_read8(cpu->proc_ID, treeStart+pos+1); - } else { - // left - if(currentNode & 0x80) - writeData = 1; - currentNode = MMU_read8(cpu->proc_ID, treeStart+pos); - } + uint32_t elapsed; - if(writeData) { - writeValue |= (currentNode << byteShift); - byteCount++; - byteShift += 8; - - pos = 0; - currentNode = rootNode; - writeData = 0; - - if(byteCount == 4) { - byteCount = 0; - byteShift = 0; - MMU_write8(cpu->proc_ID, dest, writeValue); - writeValue = 0; - dest += 4; - len -= 4; - } - } - mask >>= 1; - if(mask == 0) { - mask = 0x80000000; - data = MMU_read8(cpu->proc_ID, source); - source += 4; - } - } - } else { - int halfLen = 0; - int value = 0; - while(len > 0) { - // take left - if(pos == 0) - pos++; - else - pos += (((currentNode & 0x3F)+1)<<1); - - if((data & mask)) { - // right - if(currentNode & 0x40) - writeData = 1; - currentNode = MMU_read8(cpu->proc_ID, treeStart+pos+1); - } else { - // left - if(currentNode & 0x80) - writeData = 1; - currentNode = MMU_read8(cpu->proc_ID, treeStart+pos); - } - - if(writeData) { - if(halfLen == 0) - value |= currentNode; - else - value |= (currentNode<<4); - - halfLen += 4; - if(halfLen == 8) { - writeValue |= (value << byteShift); - byteCount++; - byteShift += 8; - - halfLen = 0; - value = 0; - - if(byteCount == 4) { - byteCount = 0; - byteShift = 0; - MMU_write8(cpu->proc_ID, dest, writeValue); - dest += 4; - writeValue = 0; - len -= 4; - } - } - pos = 0; - currentNode = rootNode; - writeData = 0; - } - mask >>= 1; - if(mask == 0) { - mask = 0x80000000; - data = MMU_read8(cpu->proc_ID, source); - source += 4; - } - } - } - return 1; -} - -u32 BitUnPack(armcpu_t* cpu) -{ - u32 source,dest,header,base,d,temp; - int len,bits,revbits,dataSize,data,bitwritecount,mask,bitcount,addBase; - u8 b; - - source = cpu->R[0]; - dest = cpu->R[1]; - header = cpu->R[2]; - - len = MMU_read16(cpu->proc_ID, header); - // check address - bits = MMU_read8(cpu->proc_ID, header+2); - revbits = 8 - bits; - // u32 value = 0; - base = MMU_read8(cpu->proc_ID, header+4); - addBase = (base & 0x80000000) ? 1 : 0; - base &= 0x7fffffff; - dataSize = MMU_read8(cpu->proc_ID, header+3); - - data = 0; - bitwritecount = 0; - while(1) { - len -= 1; - if(len < 0) - break; - mask = 0xff >> revbits; - b = MMU_read8(cpu->proc_ID, source); - source++; - bitcount = 0; - while(1) { - if(bitcount >= 8) - break; - d = b & mask; - temp = d >> bitcount; - if(!temp && addBase) { + if (PROCNUM == ARMCPU_ARM9) + { + if (cp15.ctrl & ((1 << 16) | (1 << 18))) // DTCM or ITCM is on (cache) + elapsed = cpu->R[0] * 2; + else + elapsed = cpu->R[0] * 8; + } + else + elapsed = cpu->R[0] * 4; + cpu->R[0] = 0; + return elapsed; +} + +TEMPLATE static uint32_t wait4IRQ() +{ + cpu->waitIRQ = true; + cpu->halt_IE_and_IF = true; + return 1; +} + +TEMPLATE static uint32_t intrWaitARM() +{ + // TODO - account for differences between arm7 and arm9 (according to gbatek, the "bug doesn't work") + + const uint32_t intrFlagAdr = PROCNUM == ARMCPU_ARM7 ? 0x380FFF8 : (cp15.DTCMRegion & 0xFFFFF000) + 0x3FF8; + + // set IME=1 + // without this, no irq handlers can happen (even though IF&IE waits can happily happen) + // and so no bits in the OS irq flag variable can get set by the handlers + _MMU_write32(0x04000208, 1); + + // analyze the OS irq flag variable + uint32_t intr = _MMU_read32(intrFlagAdr); + uint32_t intrFlag = cpu->R[1] & intr; + + // if the user requested us to discard flags, then clear the flag(s) we're going to be waiting on. + // (be sure to only do this only on the first run through. use a little state machine to control that) + if (!cpu->intrWaitARM_state && cpu->R[0] == 1) + { + intr ^= intrFlag; + _MMU_write32(intrFlagAdr, intr); + + // we want to make sure we wait at least once below + intrFlag = 0; + } + + cpu->intrWaitARM_state = 1; + + // now, if the condition is satisfied (and it won't be the first time through, no matter what, due to cares taken above) + if (intrFlag) + { + // write back the OS irq flags with the ones we were waiting for cleared + intr ^= intrFlag; + _MMU_write32(intrFlagAdr, intr); + + cpu->intrWaitARM_state = 0; + return 1; + } + + // the condition wasn't satisfied. this means that we need to halt, wait for some enabled interrupt, + // and then ensure that we return to this opcode again to check the condition again + cpu->waitIRQ = true; + cpu->halt_IE_and_IF = true; + + // (rewire PC to jump back to this opcode) + uint32_t instructAddr = cpu->instruct_adr; + cpu->R[15] = instructAddr; + cpu->next_instruction = instructAddr; + return 1; +} + +TEMPLATE static uint32_t waitVBlankARM() +{ + cpu->R[0] = 1; + cpu->R[1] = 1; + return intrWaitARM(); +} + +TEMPLATE static uint32_t sleep() +{ + _MMU_write08(0x04000301, 0xC0); + return 1; +} + +TEMPLATE static uint32_t divide() +{ + int32_t num = cpu->R[0]; + int32_t dnum = cpu->R[1]; + + if (!dnum) + return 0; + + int32_t res = num / dnum; + cpu->R[0] = res; + cpu->R[1] = num % dnum; + cpu->R[3] = std::abs(res); + + return 6; +} + +TEMPLATE static uint32_t copy() +{ + uint32_t src = cpu->R[0]; + uint32_t dst = cpu->R[1]; + uint32_t cnt = cpu->R[2]; + + switch (BIT26(cnt)) + { + case 0: + src &= 0xFFFFFFFE; + dst &= 0xFFFFFFFE; + switch (BIT24(cnt)) + { + case 0: + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write16(dst, _MMU_read16(src)); + --cnt; + dst += 2; + src += 2; + } + break; + case 1: + { + uint16_t val = _MMU_read16(src); + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write16(dst, val); + --cnt; + dst += 2; + } + break; + } + } + break; + case 1: + src &= 0xFFFFFFFC; + dst &= 0xFFFFFFFC; + switch (BIT24(cnt)) + { + case 0: + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write32(dst, _MMU_read32(src)); + --cnt; + dst += 4; + src += 4; + } + break; + case 1: + { + uint32_t val = _MMU_read32(src); + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write32(dst, val); + --cnt; + dst += 4; + } + break; + } + } + break; + } + return 1; +} + +TEMPLATE static uint32_t fastCopy() +{ + uint32_t src = cpu->R[0] & 0xFFFFFFFC; + uint32_t dst = cpu->R[1] & 0xFFFFFFFC; + uint32_t cnt = cpu->R[2]; + + switch (BIT24(cnt)) + { + case 0: + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write32(dst, _MMU_read32(src)); + --cnt; + dst += 4; + src += 4; + } + break; + case 1: + { + uint32_t val = _MMU_read32(src); + cnt &= 0x1FFFFF; + while (cnt) + { + _MMU_write32(dst, val); + --cnt; + dst += 4; + } + break; + } + } + return 1; +} + +TEMPLATE static uint32_t LZ77UnCompVram() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = _MMU_read32(source); + source += 4; + + if (!(source & 0xe000000) || !((source + ((header >> 8) & 0x1fffff)) & 0xe000000)) + return 0; + + int byteCount = 0; + int byteShift = 0; + uint32_t writeValue = 0; + + int len = header >> 8; + + while (len > 0) + { + uint8_t d = _MMU_read08(source++); + + int i1, i2; + if (d) + { + for (i1 = 0; i1 < 8; ++i1) + { + if (d & 0x80) + { + uint16_t data = _MMU_read08(source++) << 8; + data |= _MMU_read08(source++); + int length = (data >> 12) + 3; + int offset = data & 0x0FFF; + uint32_t windowOffset = dest + byteCount - offset - 1; + for (i2 = 0; i2 < length; ++i2) + { + writeValue |= _MMU_read08(windowOffset++) << byteShift; + byteShift += 8; + ++byteCount; + + if (byteCount == 2) + { + _MMU_write16(dest, writeValue & 0xFFFF); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + --len; + if (!len) + return 0; + } + } + else + { + writeValue |= _MMU_read08(source++) << byteShift; + byteShift += 8; + ++byteCount; + if (byteCount == 2) + { + _MMU_write16(dest, writeValue & 0xFFFF); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + --len; + if (!len) + return 0; + } + d <<= 1; + } + } + else + { + for (i1 = 0; i1 < 8; ++i1) + { + writeValue |= _MMU_read08(source++) << byteShift; + byteShift += 8; + ++byteCount; + if (byteCount == 2) + { + _MMU_write16(dest, writeValue & 0xFFFF); + dest += 2; + byteShift = 0; + byteCount = 0; + writeValue = 0; + } + --len; + if (!len) + return 0; + } + } + } + return 1; +} + +TEMPLATE static uint32_t LZ77UnCompWram() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = _MMU_read32(source); + source += 4; + + if (!(source & 0xe000000) || !((source + ((header >> 8) & 0x1fffff)) & 0xe000000)) + return 0; + + int len = header >> 8; + + while (len > 0) + { + uint8_t d = _MMU_read08(source++); + + int i1, i2; + if (d) + { + for (i1 = 0; i1 < 8; ++i1) + { + if (d & 0x80) + { + uint16_t data = _MMU_read08(source++) << 8; + data |= _MMU_read08(source++); + int length = (data >> 12) + 3; + int offset = data & 0x0FFF; + uint32_t windowOffset = dest - offset - 1; + for (i2 = 0; i2 < length; ++i2) + { + _MMU_write08(dest++, _MMU_read08(windowOffset++)); + --len; + if (!len) + return 0; + } + } + else + { + _MMU_write08(dest++, _MMU_read08(source++)); + --len; + if (!len) + return 0; + } + d <<= 1; + } + } + else + { + for (i1 = 0; i1 < 8; ++i1) + { + _MMU_write08(dest++, _MMU_read08(source++)); + --len; + if (!len) + return 0; + } + } + } + return 1; +} + +TEMPLATE static uint32_t RLUnCompVram() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = _MMU_read32(source); + source += 4; + + if (!(source & 0xe000000) || !((source + ((header >> 8) & 0x1fffff)) & 0xe000000)) + return 0; + + int len = header >> 8; + int byteCount = 0; + int byteShift = 0; + uint32_t writeValue = 0; + + while (len > 0) + { + uint8_t d = _MMU_read08(source++); + int l = d & 0x7F; + + int i; + if (d & 0x80) + { + uint8_t data = _MMU_read08(source++); + l += 3; + for (i = 0; i < l; ++i) + { + writeValue |= data << byteShift; + byteShift += 8; + ++byteCount; + + if (byteCount == 2) + { + _MMU_write16(dest, writeValue & 0xFFFF); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + --len; + if (!len) + return 0; + } + } + else + { + ++l; + for (i = 0; i < l; ++i) + { + writeValue |= _MMU_read08(source++) << byteShift; + byteShift += 8; + ++byteCount; + + if (byteCount == 2) + { + _MMU_write16(dest, writeValue & 0xFFFF); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + --len; + if (!len) + return 0; + } + } + } + return 1; +} + +TEMPLATE static uint32_t RLUnCompWram() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = _MMU_read32(source); + source += 4; + + if (!(source & 0xe000000) || !((source + ((header >> 8) & 0x1fffff)) & 0xe000000)) + return 0; + + int len = header >> 8; + + while (len > 0) + { + uint8_t d = _MMU_read08(source++); + int l = d & 0x7F; + + int i; + if (d & 0x80) + { + uint8_t data = _MMU_read08(source++); + l += 3; + for (i = 0; i < l; ++i) + { + _MMU_write08(dest++, data); + --len; + if (!len) + return 0; + } + } + else + { + ++l; + for (i = 0; i < l; ++i) + { + _MMU_write08(dest++, _MMU_read08(source++)); + --len; + if (!len) + return 0; + } + } + } + return 1; +} + +TEMPLATE static uint32_t UnCompHuffman() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = _MMU_read32(source); + source += 4; + + if (!(source & 0xe000000) || !((source + ((header >> 8) & 0x1fffff)) & 0xe000000)) + return 0; + + uint8_t treeSize = _MMU_read08(source++); + + uint32_t treeStart = source; + + source += ((treeSize + 1) << 1) - 1; // minus because we already skipped one byte + + int len = header >> 8; + + uint32_t mask = 0x80000000; + uint32_t data = _MMU_read32(source); + source += 4; + + int pos = 0; + uint8_t rootNode = _MMU_read08(treeStart); + uint8_t currentNode = rootNode; + int writeData = 0; + int byteShift = 0; + int byteCount = 0; + uint32_t writeValue = 0; + + if ((header & 0x0F) == 8) + { + while (len > 0) + { + // take left + if (!pos) + ++pos; + else + pos += ((currentNode & 0x3F) + 1) << 1; + + if (data & mask) + { + // right + if (currentNode & 0x40) + writeData = 1; + currentNode = _MMU_read08(treeStart + pos + 1); + } + else + { + // left + if (currentNode & 0x80) + writeData = 1; + currentNode = _MMU_read08(treeStart + pos); + } + + if (writeData) + { + writeValue |= currentNode << byteShift; + ++byteCount; + byteShift += 8; + + pos = 0; + currentNode = rootNode; + writeData = 0; + + if (byteCount == 4) + { + byteCount = 0; + byteShift = 0; + _MMU_write32(dest, writeValue); + writeValue = 0; + dest += 4; + len -= 4; + } + } + mask >>= 1; + if (!mask) + { + mask = 0x80000000; + data = _MMU_read32(source); + source += 4; + } + } + } + else + { + int halfLen = 0; + int value = 0; + while (len > 0) + { + // take left + if (!pos) + ++pos; + else + pos += ((currentNode & 0x3F) + 1) << 1; + + if (data & mask) + { + // right + if (currentNode & 0x40) + writeData = 1; + currentNode = _MMU_read08(treeStart + pos + 1); + } + else + { + // left + if (currentNode & 0x80) + writeData = 1; + currentNode = _MMU_read08(treeStart + pos); + } + + if (writeData) + { + if (!halfLen) + value |= currentNode; + else + value |= currentNode << 4; + + halfLen += 4; + if (halfLen == 8) + { + writeValue |= value << byteShift; + ++byteCount; + byteShift += 8; + + halfLen = 0; + value = 0; + + if (byteCount == 4) + { + byteCount = 0; + byteShift = 0; + _MMU_write32(dest, writeValue); + dest += 4; + writeValue = 0; + len -= 4; + } + } + pos = 0; + currentNode = rootNode; + writeData = 0; + } + mask >>= 1; + if (!mask) + { + mask = 0x80000000; + data = _MMU_read32(source); + source += 4; + } + } + } + return 1; +} + +TEMPLATE static uint32_t BitUnPack() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + uint32_t header = cpu->R[2]; + + int len = _MMU_read16(header); + int bits = _MMU_read08(header + 2); + switch (bits) + { + case 1: + case 2: + case 4: + case 8: + break; + default: + return 0; // error + } + int dataSize = _MMU_read08(header + 3); + switch (dataSize) + { + case 1: + case 2: + case 4: + case 8: + case 16: + case 32: + break; + default: + return 0; // error + } + + int revbits = 8 - bits; + uint32_t base = _MMU_read32(header + 4); + int addBase = base & 0x80000000 ? 1 : 0; + base &= 0x7fffffff; + + int data = 0; + int bitwritecount = 0; + while (1) + { + len -= 1; + if (len < 0) + break; + int mask = 0xff >> revbits; + uint8_t b = _MMU_read08(source); + ++source; + int bitcount = 0; + while (1) + { + if (bitcount >= 8) + break; + uint32_t temp = b & mask; + if (temp || addBase) { temp += base; } - data |= temp << bitwritecount; - bitwritecount += dataSize; - if(bitwritecount >= 32) { - MMU_write8(cpu->proc_ID, dest, data); - dest += 4; - data = 0; - bitwritecount = 0; - } - mask <<= bits; - bitcount += bits; - } + data |= temp << bitwritecount; + bitwritecount += dataSize; + if (bitwritecount >= 32) + { + _MMU_write32(dest, data); + dest += 4; + data = 0; + bitwritecount = 0; + } + bitcount += bits; + b >>= bits; + } + } + return 1; +} + +TEMPLATE static uint32_t Diff8bitUnFilterWram() +{ + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + CompressionHeader header(_MMU_read32(source)); + source += 4; + + int len = header.DecompressedSize(); + + if (PROCNUM == ARMCPU_ARM7) { + if (!(source & 0xe000000) || !((source + (len & 0x1fffff)) & 0xe000000)) + return 0; } - return 1; -} - -u32 Diff8bitUnFilterWram(armcpu_t* cpu) -{ - u32 source,dest,header; - u8 data,diff; - int len; - source = cpu->R[0]; - dest = cpu->R[1]; + uint8_t data = _MMU_read08(source++); + _MMU_write08(dest++, data); + --len; - header = MMU_read8(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - (( (source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0)) - return 0; - - len = header >> 8; - - data = MMU_read8(cpu->proc_ID, source++); - MMU_write8(cpu->proc_ID, dest++, data); - len--; - - while(len > 0) { - diff = MMU_read8(cpu->proc_ID, source++); - data += diff; - MMU_write8(cpu->proc_ID, dest++, data); - len--; - } - return 1; + while (len > 0) + { + uint8_t diff = _MMU_read08(source++); + data += diff; + _MMU_write08(dest++, data); + --len; + } + return 1; } -u32 Diff16bitUnFilter(armcpu_t* cpu) +TEMPLATE static uint32_t Diff16bitUnFilter() { - u32 source,dest,header; - u16 data; - int len; - - source = cpu->R[0]; - dest = cpu->R[1]; - - header = MMU_read8(cpu->proc_ID, source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return 0; - - len = header >> 8; - - data = MMU_read16(cpu->proc_ID, source); - source += 2; - MMU_write16(cpu->proc_ID, dest, data); - dest += 2; - len -= 2; - - while(len >= 2) { - u16 diff = MMU_read16(cpu->proc_ID, source); - source += 2; - data += diff; - MMU_write16(cpu->proc_ID, dest, data); - dest += 2; - len -= 2; - } - return 1; -} + uint32_t source = cpu->R[0]; + uint32_t dest = cpu->R[1]; + CompressionHeader header(_MMU_read32(source)); + source += 4; -u32 bios_sqrt(armcpu_t* cpu) -{ - cpu->R[0] = (u32)sqrt((double)(cpu->R[0])); - return 1; -} + int len = header.DecompressedSize(); -u32 setHaltCR(armcpu_t* cpu) -{ - MMU_write8(cpu->proc_ID, 0x4000300+cpu->proc_ID, cpu->R[0]); - return 1; -} + uint16_t data = _MMU_read16(source); + source += 2; + _MMU_write16(dest, data); + dest += 2; + len -= 2; -u32 getSineTab(armcpu_t* cpu) -{ - cpu->R[0] = getsinetbl[cpu->R[0]]; - return 1; + while (len >= 2) + { + uint16_t diff = _MMU_read16(source); + source += 2; + data += diff; + _MMU_write16(dest, data); + dest += 2; + len -= 2; + } + return 1; } -u32 getPitchTab(armcpu_t* cpu) +TEMPLATE static uint32_t bios_sqrt() { - cpu->R[0] = getpitchtbl[cpu->R[0]]; - return 1; + cpu->R[0] = static_cast(std::sqrt(static_cast(cpu->R[0]))); + return 1; } -u32 getVolumeTab(armcpu_t* cpu) +TEMPLATE static uint32_t CustomPost() { - cpu->R[0] = getvoltbl[cpu->R[0]]; - return 1; + _MMU_write08(REG_POSTFLG, cpu->R[0]); + return 1; } -u32 getCRC16(armcpu_t* cpu) +TEMPLATE static uint32_t CustomHalt() { - unsigned int i,j; - - u32 crc = cpu->R[0]; - u32 datap = cpu->R[1]; - u32 size = cpu->R[2]; - - static u16 val[] = { 0xC0C1,0xC181,0xC301,0xC601,0xCC01,0xD801,0xF001,0xA001 }; - for(i = 0; i < size; i++) - { - crc = crc ^ MMU_read8( cpu->proc_ID, datap + i); - - for(j = 0; j < 8; j++) { - int do_bit = 0; - - if ( crc & 0x1) - do_bit = 1; - - crc = crc >> 1; - - if ( do_bit) { - crc = crc ^ (val[j] << (7-j)); - } - } - } - cpu->R[0] = crc; - return 1; + _MMU_write08(REG_HALTCNT, cpu->R[2]); + return 1; } -u32 SoundBias(armcpu_t* cpu) +TEMPLATE static uint32_t getSineTab() { - u32 current = SPU_ReadLong(0x4000504); - if (cpu->R[0] > current) - SPU_WriteLong(0x4000504, current + 0x1); - else - SPU_WriteLong(0x4000504, current - 0x1); - return cpu->R[1]; -} - -u32 (* ARM9_swi_tab[32])(armcpu_t* cpu)={ - bios_nop, // 0x00 - bios_nop, // 0x01 - bios_nop, // 0x02 - delayLoop, // 0x03 - intrWaitARM, // 0x04 - waitVBlankARM, // 0x05 - wait4IRQ, // 0x06 - bios_nop, // 0x07 - bios_nop, // 0x08 - devide, // 0x09 - bios_nop, // 0x0A - copy, // 0x0B - fastCopy, // 0x0C - bios_sqrt, // 0x0D - getCRC16, // 0x0E - bios_nop, // 0x0F - BitUnPack, // 0x10 - LZ77UnCompWram, // 0x11 - LZ77UnCompVram, // 0x12 - UnCompHuffman, // 0x13 - RLUnCompWram, // 0x14 - RLUnCompVram, // 0x15 - Diff8bitUnFilterWram, // 0x16 - bios_nop, // 0x17 - Diff16bitUnFilter, // 0x18 - bios_nop, // 0x19 - bios_nop, // 0x1A - bios_nop, // 0x1B - bios_nop, // 0x1C - bios_nop, // 0x1D - bios_nop, // 0x1E - setHaltCR, // 0x1F -}; - -u32 (* ARM7_swi_tab[32])(armcpu_t* cpu)={ - bios_nop, // 0x00 - bios_nop, // 0x01 - bios_nop, // 0x02 - delayLoop, // 0x03 - intrWaitARM, // 0x04 - waitVBlankARM, // 0x05 - wait4IRQ, // 0x06 - wait4IRQ, // 0x07 - SoundBias, // 0x08 - devide, // 0x09 - bios_nop, // 0x0A - copy, // 0x0B - fastCopy, // 0x0C - bios_sqrt, // 0x0D - getCRC16, // 0x0E - bios_nop, // 0x0F - BitUnPack, // 0x10 - LZ77UnCompWram, // 0x11 - LZ77UnCompVram, // 0x12 - UnCompHuffman, // 0x13 - RLUnCompWram, // 0x14 - RLUnCompVram, // 0x15 - Diff8bitUnFilterWram, // 0x16 - bios_nop, // 0x17 - bios_nop, // 0x18 - bios_nop, // 0x19 - getSineTab, // 0x1A - getPitchTab, // 0x1B - getVolumeTab, // 0x1C - bios_nop, // 0x1D - bios_nop, // 0x1E - setHaltCR, // 0x1F + // ds returns garbage according to gbatek, but we must protect ourselves + if (cpu->R[0] >= ARRAY_SIZE(getsinetbl)) + { + fprintf(stderr, "Invalid SWI getSineTab: %08X\n", cpu->R[0]); + return 1; + } + + cpu->R[0] = getsinetbl[cpu->R[0]]; + return 1; +} + +TEMPLATE static uint32_t getPitchTab() +{ + // ds returns garbage according to gbatek, but we must protect ourselves + if (cpu->R[0] >= ARRAY_SIZE(getpitchtbl)) + { + fprintf(stderr, "Invalid SWI getPitchTab: %08X\n", cpu->R[0]); + return 1; + } + + cpu->R[0] = getpitchtbl[cpu->R[0]]; + return 1; +} + +TEMPLATE static uint32_t getVolumeTab() +{ + // ds returns garbage according to gbatek, but we must protect ourselves + if (cpu->R[0] >= ARRAY_SIZE(getvoltbl)) + { + fprintf(stderr, "Invalid SWI getVolumeTab: %08X\n", cpu->R[0]); + return 1; + } + + cpu->R[0] = getvoltbl[cpu->R[0]]; + return 1; +} + +TEMPLATE static uint32_t getCRC16() +{ + // gbatek is wrong. + + // dawn of sorrow uses this to checksum its save data; + // if this implementation is wrong, then it won't match what the real bios returns, + // and savefiles created with a bios will be invalid when loaded with non-bios (and vice-versa) + + uint16_t crc = cpu->R[0] & 0xFFFF; + uint32_t datap = cpu->R[1]; + uint32_t size = cpu->R[2] >> 1; + uint16_t currVal = 0; + + const uint16_t val[] = { 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 }; + + for (uint32_t i = 0; i < size; ++i) + { + currVal = _MMU_read16(datap + i * 2); + + for (int j = 0; j < 4; ++j) + { + uint16_t tabVal = val[crc & 0xF]; + crc >>= 4; + crc ^= tabVal; + + uint16_t tempVal = currVal >> (4 * j); + tabVal = val[tempVal & 0xF]; + crc ^= tabVal; + } + } + + // R3 contains the last processed halfword + cpu->R[3] = currVal; + return 1; +} + +TEMPLATE static uint32_t isDebugger() +{ + // gbatek has additional specifications which are not emulated here + cpu->R[0] = 0; + return 1; +} + +TEMPLATE static uint32_t SoundBias() +{ + uint32_t curBias = _MMU_read32(0x04000504); + uint32_t newBias = !curBias ? 0x000:0x200; + uint32_t delay = newBias > curBias ? newBias - curBias : curBias - newBias; + + _MMU_write32(0x04000504, newBias); + return cpu->R[1] * delay; +} + +TEMPLATE static uint32_t getBootProcs() +{ + cpu->R[0] = 0x00000A2E; + cpu->R[1] = 0x00002C3C; + cpu->R[3] = 0x000005FF; + return 1; +} + +uint32_t (*ARM_swi_tab[][32])() = +{ + { + bios_nop, // 0x00 + bios_nop, // 0x01 + bios_nop, // 0x02 + WaitByLoop, // 0x03 + intrWaitARM, // 0x04 + waitVBlankARM, // 0x05 + wait4IRQ, // 0x06 + bios_nop, // 0x07 + bios_nop, // 0x08 + divide, // 0x09 + bios_nop, // 0x0A + copy, // 0x0B + fastCopy, // 0x0C + bios_sqrt, // 0x0D + getCRC16, // 0x0E + isDebugger, // 0x0F + BitUnPack, // 0x10 + LZ77UnCompWram, // 0x11 + LZ77UnCompVram, // 0x12 + UnCompHuffman, // 0x13 + RLUnCompWram, // 0x14 + RLUnCompVram, // 0x15 + Diff8bitUnFilterWram, // 0x16 + bios_nop, // 0x17 + Diff16bitUnFilter, // 0x18 + bios_nop, // 0x19 + bios_nop, // 0x1A + bios_nop, // 0x1B + bios_nop, // 0x1C + bios_nop, // 0x1D + bios_nop, // 0x1E + CustomPost, // 0x1F + }, + { + bios_nop, // 0x00 + bios_nop, // 0x01 + bios_nop, // 0x02 + WaitByLoop, // 0x03 + intrWaitARM, // 0x04 + waitVBlankARM, // 0x05 + wait4IRQ, // 0x06 + sleep, // 0x07 + SoundBias, // 0x08 + divide, // 0x09 + bios_nop, // 0x0A + copy, // 0x0B + fastCopy, // 0x0C + bios_sqrt, // 0x0D + getCRC16, // 0x0E + isDebugger, // 0x0F + BitUnPack, // 0x10 + LZ77UnCompWram, // 0x11 + LZ77UnCompVram, // 0x12 + UnCompHuffman, // 0x13 + RLUnCompWram, // 0x14 + RLUnCompVram, // 0x15 + bios_nop, // 0x16 + bios_nop, // 0x17 + bios_nop, // 0x18 + bios_nop, // 0x19 + getSineTab, // 0x1A + getPitchTab, // 0x1B + getVolumeTab, // 0x1C + getBootProcs, // 0x1D + bios_nop, // 0x1E + CustomHalt, // 0x1F + } }; diff -Nru audacious-plugins-4.1/src/xsf/desmume/bios.h audacious-plugins-4.2/src/xsf/desmume/bios.h --- audacious-plugins-4.1/src/xsf/desmume/bios.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/bios.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,32 +1,23 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2006-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#ifndef BIOS_H -#define BIOS_H +#pragma once #include "armcpu.h" -extern u32 (* ARM9_swi_tab[32])(armcpu_t * cpu); -extern u32 (* ARM7_swi_tab[32])(armcpu_t * cpu); -extern u32 wait4IRQ(armcpu_t * cpu); - -#endif - +extern uint32_t (*ARM_swi_tab[2][32])(); diff -Nru audacious-plugins-4.1/src/xsf/desmume/bits.h audacious-plugins-4.2/src/xsf/desmume/bits.h --- audacious-plugins-4.1/src/xsf/desmume/bits.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/bits.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,44 +1,41 @@ -#ifndef BITS_H -#define BITS_H +#pragma once -#define BIT(n) (1<<(n)) +inline uint32_t BIT(uint32_t n) { return 1 << n; } -#define BIT_N(i,n) (((i)>>(n))&1) -#define BIT0(i) ((i)&1) -#define BIT1(i) BIT_N(i,1) -#define BIT2(i) BIT_N(i,2) -#define BIT3(i) BIT_N(i,3) -#define BIT4(i) BIT_N(i,4) -#define BIT5(i) BIT_N(i,5) -#define BIT6(i) BIT_N(i,6) -#define BIT7(i) BIT_N(i,7) -#define BIT8(i) BIT_N(i,8) -#define BIT9(i) BIT_N(i,9) -#define BIT10(i) BIT_N(i,10) -#define BIT11(i) BIT_N(i,11) -#define BIT12(i) BIT_N(i,12) -#define BIT13(i) BIT_N(i,13) -#define BIT14(i) BIT_N(i,14) -#define BIT15(i) BIT_N(i,15) -#define BIT16(i) BIT_N(i,16) -#define BIT17(i) BIT_N(i,17) -#define BIT18(i) BIT_N(i,18) -#define BIT19(i) BIT_N(i,19) -#define BIT20(i) BIT_N(i,20) -#define BIT21(i) BIT_N(i,21) -#define BIT22(i) BIT_N(i,22) -#define BIT23(i) BIT_N(i,23) -#define BIT24(i) BIT_N(i,24) -#define BIT25(i) BIT_N(i,25) -#define BIT26(i) BIT_N(i,26) -#define BIT27(i) BIT_N(i,27) -#define BIT28(i) BIT_N(i,28) -#define BIT29(i) BIT_N(i,29) -#define BIT30(i) BIT_N(i,30) -#define BIT31(i) ((i)>>31) +inline uint32_t BIT_N(uint32_t i, uint32_t n) { return (i >> n) & 1; } +inline uint32_t BIT0(uint32_t i) { return i & 1; } +inline uint32_t BIT1(uint32_t i) { return BIT_N(i, 1); } +inline uint32_t BIT2(uint32_t i) { return BIT_N(i, 2); } +inline uint32_t BIT3(uint32_t i) { return BIT_N(i, 3); } +inline uint32_t BIT4(uint32_t i) { return BIT_N(i, 4); } +inline uint32_t BIT5(uint32_t i) { return BIT_N(i, 5); } +inline uint32_t BIT6(uint32_t i) { return BIT_N(i, 6); } +inline uint32_t BIT7(uint32_t i) { return BIT_N(i, 7); } +inline uint32_t BIT8(uint32_t i) { return BIT_N(i, 8); } +inline uint32_t BIT9(uint32_t i) { return BIT_N(i, 9); } +inline uint32_t BIT10(uint32_t i) { return BIT_N(i, 10); } +inline uint32_t BIT11(uint32_t i) { return BIT_N(i, 11); } +inline uint32_t BIT12(uint32_t i) { return BIT_N(i, 12); } +inline uint32_t BIT13(uint32_t i) { return BIT_N(i, 13); } +inline uint32_t BIT14(uint32_t i) { return BIT_N(i, 14); } +inline uint32_t BIT15(uint32_t i) { return BIT_N(i, 15); } +inline uint32_t BIT16(uint32_t i) { return BIT_N(i, 16); } +inline uint32_t BIT17(uint32_t i) { return BIT_N(i, 17); } +inline uint32_t BIT18(uint32_t i) { return BIT_N(i, 18); } +inline uint32_t BIT19(uint32_t i) { return BIT_N(i, 19); } +inline uint32_t BIT20(uint32_t i) { return BIT_N(i, 20); } +inline uint32_t BIT21(uint32_t i) { return BIT_N(i, 21); } +inline uint32_t BIT22(uint32_t i) { return BIT_N(i, 22); } +inline uint32_t BIT23(uint32_t i) { return BIT_N(i, 23); } +inline uint32_t BIT24(uint32_t i) { return BIT_N(i, 24); } +inline uint32_t BIT25(uint32_t i) { return BIT_N(i, 25); } +inline uint32_t BIT26(uint32_t i) { return BIT_N(i, 26); } +inline uint32_t BIT27(uint32_t i) { return BIT_N(i, 27); } +inline uint32_t BIT28(uint32_t i) { return BIT_N(i, 28); } +inline uint32_t BIT29(uint32_t i) { return BIT_N(i, 29); } +inline uint32_t BIT30(uint32_t i) { return BIT_N(i, 30); } +inline uint32_t BIT31(uint32_t i) { return i >> 31; } -#define CONDITION(i) (i)>>28 +inline uint32_t CONDITION(uint32_t i) { return i >> 28; } -#define REG_POS(i,n) (((i)>>n)&0xF) - -#endif +inline uint32_t REG_POS(uint32_t i, uint32_t n) { return (i >> n) & 0xF; } diff -Nru audacious-plugins-4.1/src/xsf/desmume/cp15.cc audacious-plugins-4.2/src/xsf/desmume/cp15.cc --- audacious-plugins-4.1/src/xsf/desmume/cp15.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/cp15.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,90 +1,91 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ +/* + Copyright (C) 2006 yopyop + Copyright (C) 2006-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. -#include + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ +#include #include "cp15.h" -#include "debug.h" #include "MMU.h" -armcp15_t *armcp15_new(armcpu_t * c) +armcp15_t cp15; + +bool armcp15_t::reset(armcpu_t *c) { - int i; - armcp15_t *armcp15 = (armcp15_t*)malloc(sizeof(armcp15_t)); - if(!armcp15) return nullptr; - - armcp15->cpu = c; - armcp15->IDCode = 0x41049460; - armcp15->cacheType = 0x0F0D2112; - armcp15->TCMSize = 0x00140140; - armcp15->ctrl = 0x00000000; - armcp15->DCConfig = 0x0; - armcp15->ICConfig = 0x0; - armcp15->writeBuffCtrl = 0x0; - armcp15->und = 0x0; - armcp15->DaccessPerm = 0x22222222; - armcp15->IaccessPerm = 0x22222222; - armcp15->protectBaseSize0 = 0x0; - armcp15->protectBaseSize1 = 0x0; - armcp15->protectBaseSize2 = 0x0; - armcp15->protectBaseSize3 = 0x0; - armcp15->protectBaseSize4 = 0x0; - armcp15->protectBaseSize5 = 0x0; - armcp15->protectBaseSize6 = 0x0; - armcp15->protectBaseSize7 = 0x0; - armcp15->cacheOp = 0x0; - armcp15->DcacheLock = 0x0; - armcp15->IcacheLock = 0x0; - armcp15->ITCMRegion = 0x0C; - armcp15->DTCMRegion = 0x0080000A; - armcp15->processID = 0; - - /* preset calculated regionmasks */ - for (i=0;i<8;i++) { - armcp15->regionWriteMask_USR[i] = 0 ; - armcp15->regionWriteMask_SYS[i] = 0 ; - armcp15->regionReadMask_USR[i] = 0 ; - armcp15->regionReadMask_SYS[i] = 0 ; - armcp15->regionExecuteMask_USR[i] = 0 ; - armcp15->regionExecuteMask_SYS[i] = 0 ; - armcp15->regionWriteSet_USR[i] = 0 ; - armcp15->regionWriteSet_SYS[i] = 0 ; - armcp15->regionReadSet_USR[i] = 0 ; - armcp15->regionReadSet_SYS[i] = 0 ; - armcp15->regionExecuteSet_USR[i] = 0 ; - armcp15->regionExecuteSet_SYS[i] = 0 ; - } ; + //fprintf(stderr, "CP15 Reset\n"); + this->cpu = c; + this->IDCode = 0x41059461; + this->cacheType = 0x0F0D2112; + this->TCMSize = 0x00140180; + this->ctrl = 0x00012078; + this->DCConfig = 0x0; + this->ICConfig = 0x0; + this->writeBuffCtrl = 0x0; + this->und = 0x0; + this->DaccessPerm = 0x22222222; + this->IaccessPerm = 0x22222222; + this->protectBaseSize0 = 0x0; + this->protectBaseSize1 = 0x0; + this->protectBaseSize2 = 0x0; + this->protectBaseSize3 = 0x0; + this->protectBaseSize4 = 0x0; + this->protectBaseSize5 = 0x0; + this->protectBaseSize6 = 0x0; + this->protectBaseSize7 = 0x0; + this->cacheOp = 0x0; + this->DcacheLock = 0x0; + this->IcacheLock = 0x0; + this->ITCMRegion = 0x0C; + this->DTCMRegion = 0x0080000A; + this->processID = 0; + + MMU.ARM9_RW_MODE = BIT7(this->ctrl); + this->cpu->intVector = 0xFFFF0000 * BIT13(this->ctrl); + this->cpu->LDTBit = !BIT15(this->ctrl); // TBit + + /* preset calculated regionmasks */ + for (uint8_t i = 0; i < 8; ++i) + { + this->regionWriteMask_USR[i] = 0; + this->regionWriteMask_SYS[i] = 0; + this->regionReadMask_USR[i] = 0; + this->regionReadMask_SYS[i] = 0; + this->regionExecuteMask_USR[i] = 0; + this->regionExecuteMask_SYS[i] = 0; + this->regionWriteSet_USR[i] = 0; + this->regionWriteSet_SYS[i] = 0; + this->regionReadSet_USR[i] = 0; + this->regionReadSet_SYS[i] = 0; + this->regionExecuteSet_USR[i] = 0; + this->regionExecuteSet_SYS[i] = 0; + } - return armcp15; + return true; } -#define ACCESSTYPE(val,n) (((val) >> (4*n)) & 0x0F) -#define SIZEIDENTIFIER(val) ((((val) >> 1) & 0x1F)) -#define SIZEBINARY(val) (1 << (SIZEIDENTIFIER(val)+1)) -#define MASKFROMREG(val) (~((SIZEBINARY(val)-1) | 0x3F)) -#define SETFROMREG(val) ((val) & MASKFROMREG(val)) +static inline uint32_t ACCESSTYPE(uint32_t val, unsigned char n) { return (val >> (4 * n)) & 0x0F; } +static inline uint32_t SIZEIDENTIFIER(uint32_t val) { return (val >> 1) & 0x1F; } +static inline uint32_t SIZEBINARY(uint32_t val) { return 1 << (SIZEIDENTIFIER(val) + 1); } +static inline uint32_t MASKFROMREG(uint32_t val) { return ~((SIZEBINARY(val) - 1) | 0x3F); } +static inline uint32_t SETFROMREG(uint32_t val) { return val & MASKFROMREG(val); } /* sets the precalculated regions to mask,set for the affected accesstypes */ -void armcp15_setSingleRegionAccess(armcp15_t *armcp15,unsigned long dAccess,unsigned long iAccess,unsigned char num, unsigned long mask,unsigned long set) { +void armcp15_t::setSingleRegionAccess(uint32_t dAccess, uint32_t iAccess, unsigned char num, uint32_t mask, uint32_t set) +{ - switch (ACCESSTYPE(dAccess,num)) { + switch (ACCESSTYPE(dAccess, num)) + { case 4: /* UNP */ case 7: /* UNP */ case 8: /* UNP */ @@ -96,67 +97,67 @@ case 14: /* UNP */ case 15: /* UNP */ case 0: /* no access at all */ - armcp15->regionWriteMask_USR[num] = 0 ; - armcp15->regionWriteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_USR[num] = 0 ; - armcp15->regionReadSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionWriteMask_SYS[num] = 0 ; - armcp15->regionWriteSet_SYS[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_SYS[num] = 0 ; - armcp15->regionReadSet_SYS[num] = 0xFFFFFFFF ; - break ; + this->regionWriteMask_USR[num] = 0; + this->regionWriteSet_USR[num] = 0xFFFFFFFF; + this->regionReadMask_USR[num] = 0; + this->regionReadSet_USR[num] = 0xFFFFFFFF; + this->regionWriteMask_SYS[num] = 0; + this->regionWriteSet_SYS[num] = 0xFFFFFFFF; + this->regionReadMask_SYS[num] = 0; + this->regionReadSet_SYS[num] = 0xFFFFFFFF; + break; case 1: /* no access at USR, all to sys */ - armcp15->regionWriteMask_USR[num] = 0 ; - armcp15->regionWriteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_USR[num] = 0 ; - armcp15->regionReadSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionWriteMask_SYS[num] = mask ; - armcp15->regionWriteSet_SYS[num] = set ; - armcp15->regionReadMask_SYS[num] = mask ; - armcp15->regionReadSet_SYS[num] = set ; - break ; + this->regionWriteMask_USR[num] = 0; + this->regionWriteSet_USR[num] = 0xFFFFFFFF; + this->regionReadMask_USR[num] = 0; + this->regionReadSet_USR[num] = 0xFFFFFFFF; + this->regionWriteMask_SYS[num] = mask; + this->regionWriteSet_SYS[num] = set; + this->regionReadMask_SYS[num] = mask; + this->regionReadSet_SYS[num] = set; + break; case 2: /* read at USR, all to sys */ - armcp15->regionWriteMask_USR[num] = 0 ; - armcp15->regionWriteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_USR[num] = mask ; - armcp15->regionReadSet_USR[num] = set ; - armcp15->regionWriteMask_SYS[num] = mask ; - armcp15->regionWriteSet_SYS[num] = set ; - armcp15->regionReadMask_SYS[num] = mask ; - armcp15->regionReadSet_SYS[num] = set ; - break ; + this->regionWriteMask_USR[num] = 0; + this->regionWriteSet_USR[num] = 0xFFFFFFFF; + this->regionReadMask_USR[num] = mask; + this->regionReadSet_USR[num] = set; + this->regionWriteMask_SYS[num] = mask; + this->regionWriteSet_SYS[num] = set; + this->regionReadMask_SYS[num] = mask; + this->regionReadSet_SYS[num] = set; + break; case 3: /* all to USR, all to sys */ - armcp15->regionWriteMask_USR[num] = mask ; - armcp15->regionWriteSet_USR[num] = set ; - armcp15->regionReadMask_USR[num] = mask ; - armcp15->regionReadSet_USR[num] = set ; - armcp15->regionWriteMask_SYS[num] = mask ; - armcp15->regionWriteSet_SYS[num] = set ; - armcp15->regionReadMask_SYS[num] = mask ; - armcp15->regionReadSet_SYS[num] = set ; - break ; + this->regionWriteMask_USR[num] = mask; + this->regionWriteSet_USR[num] = set; + this->regionReadMask_USR[num] = mask; + this->regionReadSet_USR[num] = set; + this->regionWriteMask_SYS[num] = mask; + this->regionWriteSet_SYS[num] = set; + this->regionReadMask_SYS[num] = mask; + this->regionReadSet_SYS[num] = set; + break; case 5: /* no access at USR, read to sys */ - armcp15->regionWriteMask_USR[num] = 0 ; - armcp15->regionWriteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_USR[num] = 0 ; - armcp15->regionReadSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionWriteMask_SYS[num] = 0 ; - armcp15->regionWriteSet_SYS[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_SYS[num] = mask ; - armcp15->regionReadSet_SYS[num] = set ; - break ; + this->regionWriteMask_USR[num] = 0; + this->regionWriteSet_USR[num] = 0xFFFFFFFF; + this->regionReadMask_USR[num] = 0; + this->regionReadSet_USR[num] = 0xFFFFFFFF; + this->regionWriteMask_SYS[num] = 0; + this->regionWriteSet_SYS[num] = 0xFFFFFFFF; + this->regionReadMask_SYS[num] = mask; + this->regionReadSet_SYS[num] = set; + break; case 6: /* read at USR, read to sys */ - armcp15->regionWriteMask_USR[num] = 0 ; - armcp15->regionWriteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_USR[num] = mask ; - armcp15->regionReadSet_USR[num] = set ; - armcp15->regionWriteMask_SYS[num] = 0 ; - armcp15->regionWriteSet_SYS[num] = 0xFFFFFFFF ; - armcp15->regionReadMask_SYS[num] = mask ; - armcp15->regionReadSet_SYS[num] = set ; - break ; + this->regionWriteMask_USR[num] = 0; + this->regionWriteSet_USR[num] = 0xFFFFFFFF; + this->regionReadMask_USR[num] = mask; + this->regionReadSet_USR[num] = set; + this->regionWriteMask_SYS[num] = 0; + this->regionWriteSet_SYS[num] = 0xFFFFFFFF; + this->regionReadMask_SYS[num] = mask; + this->regionReadSet_SYS[num] = set; } - switch (ACCESSTYPE(iAccess,num)) { + switch (ACCESSTYPE(iAccess, num)) + { case 4: /* UNP */ case 7: /* UNP */ case 8: /* UNP */ @@ -168,423 +169,386 @@ case 14: /* UNP */ case 15: /* UNP */ case 0: /* no access at all */ - armcp15->regionExecuteMask_USR[num] = 0 ; - armcp15->regionExecuteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionExecuteMask_SYS[num] = 0 ; - armcp15->regionExecuteSet_SYS[num] = 0xFFFFFFFF ; - break ; + this->regionExecuteMask_USR[num] = 0; + this->regionExecuteSet_USR[num] = 0xFFFFFFFF; + this->regionExecuteMask_SYS[num] = 0; + this->regionExecuteSet_SYS[num] = 0xFFFFFFFF; + break; case 1: - armcp15->regionExecuteMask_USR[num] = 0 ; - armcp15->regionExecuteSet_USR[num] = 0xFFFFFFFF ; - armcp15->regionExecuteMask_SYS[num] = mask ; - armcp15->regionExecuteSet_SYS[num] = set ; - break ; + this->regionExecuteMask_USR[num] = 0; + this->regionExecuteSet_USR[num] = 0xFFFFFFFF; + this->regionExecuteMask_SYS[num] = mask; + this->regionExecuteSet_SYS[num] = set; + break; case 2: case 3: case 6: - armcp15->regionExecuteMask_USR[num] = mask ; - armcp15->regionExecuteSet_USR[num] = set ; - armcp15->regionExecuteMask_SYS[num] = mask ; - armcp15->regionExecuteSet_SYS[num] = set ; - break ; + this->regionExecuteMask_USR[num] = mask; + this->regionExecuteSet_USR[num] = set; + this->regionExecuteMask_SYS[num] = mask; + this->regionExecuteSet_SYS[num] = set; } } /* precalculate region masks/sets from cp15 register */ -void armcp15_maskPrecalc(armcp15_t *armcp15) +void armcp15_t::maskPrecalc() { - #define precalc(num) { \ - u32 mask = 0, set = 0xFFFFFFFF ; /* (x & 0) == 0xFF..FF is allways false (disabled) */ \ - if (BIT_N(armcp15->protectBaseSize##num,0)) /* if region is enabled */ \ - { /* reason for this define: naming includes var */ \ - mask = MASKFROMREG(armcp15->protectBaseSize##num) ; \ - set = SETFROMREG(armcp15->protectBaseSize##num) ; \ - if (SIZEIDENTIFIER(armcp15->protectBaseSize##num)==0x1F) \ - { /* for the 4GB region, u32 suffers wraparound */ \ - mask = 0 ; set = 0 ; /* (x & 0) == 0 is allways true (enabled) */ \ +#define precalc(num) \ +{ \ + uint32_t mask = 0, set = 0xFFFFFFFF; /* (x & 0) == 0xFF..FF is allways false (disabled) */ \ + if (BIT_N(this->protectBaseSize##num, 0)) /* if region is enabled */ \ + { \ + /* reason for this define: naming includes var */ \ + mask = MASKFROMREG(this->protectBaseSize##num); \ + set = SETFROMREG(this->protectBaseSize##num); \ + if (SIZEIDENTIFIER(this->protectBaseSize##num) == 0x1F) \ + { \ + /* for the 4GB region, u32 suffers wraparound */ \ + mask = 0; \ + set = 0; /* (x & 0) == 0 is allways true (enabled) */ \ } \ - } \ - armcp15_setSingleRegionAccess(armcp15,armcp15->DaccessPerm,armcp15->IaccessPerm,num,mask,set) ; \ - } - precalc(0) ; - precalc(1) ; - precalc(2) ; - precalc(3) ; - precalc(4) ; - precalc(5) ; - precalc(6) ; - precalc(7) ; -} - -INLINE BOOL armcp15_isAccessAllowed(armcp15_t *armcp15,u32 address,u32 access) -{ - int i ; - if (!(armcp15->ctrl & 1)) return true ; /* protection checking is not enabled */ - for (i=0;i<8;i++) { - switch (access) { - case CP15_ACCESS_WRITEUSR: - if ((address & armcp15->regionWriteMask_USR[i]) == armcp15->regionWriteSet_USR[i]) return true ; - break ; - case CP15_ACCESS_WRITESYS: - if ((address & armcp15->regionWriteMask_SYS[i]) == armcp15->regionWriteSet_SYS[i]) return true ; - break ; - case CP15_ACCESS_READUSR: - if ((address & armcp15->regionReadMask_USR[i]) == armcp15->regionReadSet_USR[i]) return true ; - break ; - case CP15_ACCESS_READSYS: - if ((address & armcp15->regionReadMask_SYS[i]) == armcp15->regionReadSet_SYS[i]) return true ; - break ; - case CP15_ACCESS_EXECUSR: - if ((address & armcp15->regionExecuteMask_USR[i]) == armcp15->regionExecuteSet_USR[i]) return true ; - break ; - case CP15_ACCESS_EXECSYS: - if ((address & armcp15->regionExecuteMask_SYS[i]) == armcp15->regionExecuteSet_SYS[i]) return true ; - break ; - } - } - /* when protections are enabled, but no region allows access, deny access */ - return false ; + } \ + this->setSingleRegionAccess(this->DaccessPerm, this->IaccessPerm, num, mask, set); \ } - -BOOL armcp15_dataProcess(armcp15_t *armcp15, u8 CRd, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2) -{ - return false; + precalc(0); + precalc(1); + precalc(2); + precalc(3); + precalc(4); + precalc(5); + precalc(6); + precalc(7); +#undef precalc } -BOOL armcp15_load(armcp15_t *armcp15, u8 CRd, u8 adr) +bool armcp15_t::moveCP2ARM(uint32_t *R, uint8_t CRn, uint8_t CRm, uint8_t opcode1, uint8_t opcode2) { - return false; -} - -BOOL armcp15_store(armcp15_t *armcp15, u8 CRd, u8 adr) -{ - return false; -} - -BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2) -{ - if(armcp15->cpu->CPSR.bits.mode == USR) return false; + if (!this->cpu) + { + fprintf(stderr, "ERROR: cp15 don\'t allocated\n"); + return false; + } + if (this->cpu->CPSR.bits.mode == USR) + return false; - switch(CRn) + switch (CRn) { - case 0 : - if((opcode1 == 0)&&(CRm==0)) + case 0: + if (!opcode1 && !CRm) { - switch(opcode2) - { - case 1 : - *R = armcp15->cacheType; - return true; - case 2 : - *R = armcp15->TCMSize; - return true; - default : - *R = armcp15->IDCode; - return true; - } + switch (opcode2) + { + case 1: + *R = this->cacheType; + return true; + case 2: + *R = this->TCMSize; + return true; + default: + *R = this->IDCode; + return true; + } } return false; - case 1 : - if((opcode1==0) && (opcode2==0) && (CRm==0)) + case 1: + if (!opcode1 && !opcode2 && !CRm) { - *R = armcp15->ctrl; + *R = this->ctrl; return true; } return false; - - case 2 : - if((opcode1==0) && (CRm==0)) + case 2: + if (!opcode1 && !CRm) { - switch(opcode2) + switch (opcode2) { - case 0 : - *R = armcp15->DCConfig; - return true; - case 1 : - *R = armcp15->ICConfig; - return true; - default : - return false; + case 0: + *R = this->DCConfig; + return true; + case 1: + *R = this->ICConfig; + return true; + default: + return false; } } return false; - case 3 : - if((opcode1==0) && (opcode2==0) && (CRm==0)) + case 3: + if (!opcode1 && ~static_cast(opcode2) && !CRm) { - *R = armcp15->writeBuffCtrl; + *R = this->writeBuffCtrl; return true; } return false; - case 5 : - if((opcode1==0) && (CRm==0)) + case 5: + if (!opcode1 && !CRm) { - switch(opcode2) + switch (opcode2) { - case 2 : - *R = armcp15->DaccessPerm; - return true; - case 3 : - *R = armcp15->IaccessPerm; - return true; - default : - return false; + case 2: + *R = this->DaccessPerm; + return true; + case 3: + *R = this->IaccessPerm; + return true; + default: + return false; } } return false; - case 6 : - if((opcode1==0) && (opcode2==0)) + case 6: + if (!opcode1 && !opcode2) { - switch(CRm) + switch (CRm) { - case 0 : - *R = armcp15->protectBaseSize0; - return true; - case 1 : - *R = armcp15->protectBaseSize1; - return true; - case 2 : - *R = armcp15->protectBaseSize2; - return true; - case 3 : - *R = armcp15->protectBaseSize3; - return true; - case 4 : - *R = armcp15->protectBaseSize4; - return true; - case 5 : - *R = armcp15->protectBaseSize5; - return true; - case 6 : - *R = armcp15->protectBaseSize6; - return true; - case 7 : - *R = armcp15->protectBaseSize7; - return true; - default : - return false; + case 0: + *R = this->protectBaseSize0; + return true; + case 1: + *R = this->protectBaseSize1; + return true; + case 2: + *R = this->protectBaseSize2; + return true; + case 3: + *R = this->protectBaseSize3; + return true; + case 4: + *R = this->protectBaseSize4; + return true; + case 5: + *R = this->protectBaseSize5; + return true; + case 6: + *R = this->protectBaseSize6; + return true; + case 7: + *R = this->protectBaseSize7; + return true; + default: + return false; } } return false; - case 9 : - if(opcode1==0) + case 9: + if (!opcode1) { - switch(CRm) + switch (CRm) { - case 0 : - switch(opcode2) + case 0: + switch (opcode2) { - case 0 : - *R = armcp15->DcacheLock; - return true; - case 1 : - *R = armcp15->IcacheLock; - return true; - default : + case 0: + *R = this->DcacheLock; + return true; + case 1: + *R = this->IcacheLock; + return true; + default: return false; } - case 1 : - switch(opcode2) + case 1: + switch (opcode2) { - case 0 : - *R = armcp15->DTCMRegion; - return true; - case 1 : - *R = armcp15->ITCMRegion; - return true; - default : - return false; + case 0: + *R = this->DTCMRegion; + return true; + case 1: + *R = this->ITCMRegion; + return true; + default: + return false; } } } - return false; - default : + return false; + default: return false; } } - -u32 CP15wait4IRQ(armcpu_t *cpu) +bool armcp15_t::moveARM2CP(uint32_t val, uint8_t CRn, uint8_t CRm, uint8_t opcode1, uint8_t opcode2) { - /* on the first call, wirq is not set */ - if(cpu->wirq) + if (!this->cpu) { - /* check wether an irq was issued */ - if(!cpu->waitIRQ) - { - cpu->waitIRQ = 0; - cpu->wirq = 0; - return 1; /* return execution */ - } - /* otherwise, repeat this instruction */ - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - return 1; + fprintf(stderr, "ERROR: cp15 don\'t allocated\n"); + return false; } - /* first run, set us into waiting state */ - cpu->waitIRQ = 1; - cpu->wirq = 1; - /* and set next instruction to repeat this */ - cpu->R[15] = cpu->instruct_adr; - cpu->next_instruction = cpu->R[15]; - /* CHECKME: IME shouldn't be modified (?) */ - MMU.reg_IME[0] = 1; - return 1; -} - -BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2) -{ - if(armcp15->cpu->CPSR.bits.mode == USR) return false; + if (this->cpu->CPSR.bits.mode == USR) + return false; - switch(CRn) + switch (CRn) { - case 1 : - if((opcode1==0) && (opcode2==0) && (CRm==0)) - { - armcp15->ctrl = val; - MMU.ARM9_RW_MODE = BIT7(val); - armcp15->cpu->intVector = 0x0FFF0000 * (BIT13(val)); - armcp15->cpu->LDTBit = !BIT15(val); //TBit - /*if(BIT17(val)) - { - log::ajouter("outch !!!!!!!"); - } - if(BIT19(val)) - { - log::ajouter("outch !!!!!!!"); - }*/ - return true; - } - return false; - case 2 : - if((opcode1==0) && (CRm==0)) - { - switch(opcode2) - { - case 0 : - armcp15->DCConfig = val; - return true; - case 1 : - armcp15->ICConfig = val; - return true; - default : - return false; + case 1: + if (!opcode1 && !opcode2 && !CRm) + { + // On the NDS bit0,2,7,12..19 are R/W, Bit3..6 are always set, all other bits are always zero. + this->ctrl = (val & 0x000FF085) | 0x00000078; + MMU.ARM9_RW_MODE = BIT7(val); + // zero 31-jan-2010: change from 0x0FFF0000 to 0xFFFF0000 per gbatek + this->cpu->intVector = 0xFFFF0000 * BIT13(val); + this->cpu->LDTBit = !BIT15(val); // TBit + return true; } - } - return false; - case 3 : - if((opcode1==0) && (opcode2==0) && (CRm==0)) - { - armcp15->writeBuffCtrl = val; - return true; - } - return false; - if((opcode1==0) && (CRm==0)) - { - switch(opcode2) - { - case 2 : - armcp15->DaccessPerm = val; - armcp15_maskPrecalc(armcp15); - return true; - case 3 : - armcp15->IaccessPerm = val; - armcp15_maskPrecalc(armcp15); - return true; - default : - return false; + return false; + case 2: + if (!opcode1 && !CRm) + { + switch (opcode2) + { + case 0: + this->DCConfig = val; + return true; + case 1: + this->ICConfig = val; + return true; + default: + return false; + } } - } - return false; - case 6 : - if((opcode1==0) && (opcode2==0)) - { - switch(CRm) - { - case 0 : - armcp15->protectBaseSize0 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 1 : - armcp15->protectBaseSize1 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 2 : - armcp15->protectBaseSize2 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 3 : - armcp15->protectBaseSize3 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 4 : - armcp15->protectBaseSize4 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 5 : - armcp15->protectBaseSize5 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 6 : - armcp15->protectBaseSize6 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - case 7 : - armcp15->protectBaseSize7 = val; - armcp15_maskPrecalc(armcp15) ; - return true; - default : - return false; + return false; + case 3: + if (!opcode1 && !opcode2 && !CRm) + { + this->writeBuffCtrl = val; + return true; } - } - return false; - case 7 : - if((CRm==0)&&(opcode1==0)&&((opcode2==4))) - { - CP15wait4IRQ(armcp15->cpu); - return true; - } - return false; - case 9 : - if(opcode1==0) - { - switch(CRm) + return false; + case 5: + if (!opcode1 && !CRm) { - case 0 : - switch(opcode2) + switch (opcode2) { - case 0 : - armcp15->DcacheLock = val; + case 2: + this->DaccessPerm = val; + this->maskPrecalc(); return true; - case 1 : - armcp15->IcacheLock = val; + case 3: + this->IaccessPerm = val; + this->maskPrecalc(); return true; - default : + default: return false; + } } - case 1 : - switch(opcode2) + return false; + case 6: + if (!opcode1 && !opcode2) { - case 0 : - armcp15->DTCMRegion = val; - MMU.DTCMRegion = val & 0x0FFFFFFC0; - /*sprintf(logbuf, "%08X", val); - log::ajouter(logbuf);*/ - return true; - case 1 : - armcp15->ITCMRegion = val; - /* ITCM base is not writeable! */ - MMU.ITCMRegion = 0; - return true; - default : - return false; + switch (CRm) + { + case 0: + this->protectBaseSize0 = val; + this->maskPrecalc(); + return true; + case 1: + this->protectBaseSize1 = val; + this->maskPrecalc(); + return true; + case 2: + this->protectBaseSize2 = val; + this->maskPrecalc(); + return true; + case 3: + this->protectBaseSize3 = val; + this->maskPrecalc(); + return true; + case 4: + this->protectBaseSize4 = val; + this->maskPrecalc(); + return true; + case 5: + this->protectBaseSize5 = val; + this->maskPrecalc(); + return true; + case 6: + this->protectBaseSize6 = val; + this->maskPrecalc(); + return true; + case 7: + this->protectBaseSize7 = val; + this->maskPrecalc(); + return true; + default: + return false; + } + } + return false; + case 7: + if (!CRm && !opcode1 && opcode2 == 4) + { + this->cpu->waitIRQ = true; + this->cpu->halt_IE_and_IF = true; + // IME set deliberately omitted: only SWI sets IME to 1 + return true; + } + return false; + case 9: + if (!opcode1) + { + switch (CRm) + { + case 0: + switch (opcode2) + { + case 0: + this->DcacheLock = val; + return true; + case 1: + this->IcacheLock = val; + return true; + default: + return false; + } + case 1: + switch (opcode2) + { + case 0: + MMU.DTCMRegion = this->DTCMRegion = val & 0x0FFFF000; + return true; + case 1: + this->ITCMRegion = val; + // ITCM base is not writeable! + MMU.ITCMRegion = 0; + return true; + default: + return false; + } } } - } - return false; - default : + return false; + default: return false; } } - - +/* precalculate region masks/sets from cp15 register ----- JIT */ +void maskPrecalc() +{ +#define precalc(num) \ +{ \ + uint32_t mask = 0, set = 0xFFFFFFFF; /* (x & 0) == 0xFF..FF is allways false (disabled) */ \ + if (BIT_N(cp15.protectBaseSize##num, 0)) /* if region is enabled */ \ + { \ + /* reason for this define: naming includes var */ \ + mask = MASKFROMREG(cp15.protectBaseSize##num); \ + set = SETFROMREG(cp15.protectBaseSize##num); \ + if (SIZEIDENTIFIER(cp15.protectBaseSize##num) == 0x1F) \ + { \ + /* for the 4GB region, u32 suffers wraparound */ \ + mask = 0; \ + set = 0; /* (x & 0) == 0 is allways true (enabled) */ \ + } \ + } \ + cp15.setSingleRegionAccess(cp15.DaccessPerm, cp15.IaccessPerm, num, mask, set); \ +} + precalc(0); + precalc(1); + precalc(2); + precalc(3); + precalc(4); + precalc(5); + precalc(6); + precalc(7); +#undef precalc +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/cp15.h audacious-plugins-4.2/src/xsf/desmume/cp15.h --- audacious-plugins-4.1/src/xsf/desmume/cp15.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/cp15.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,93 +1,111 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2006-2010 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#ifndef __CP15_H__ -#define __CP15_H__ +#pragma once #include "armcpu.h" -typedef struct +const uint32_t CP15_ACCESS_WRITE = 0; +const uint32_t CP15_ACCESS_READ = 2; +const uint32_t CP15_ACCESS_EXECUTE = 4; +const uint32_t CP15_ACCESS_WRITEUSR = CP15_ACCESS_WRITE; +const uint32_t CP15_ACCESS_WRITESYS = 1; +const uint32_t CP15_ACCESS_READUSR = CP15_ACCESS_READ; +const uint32_t CP15_ACCESS_READSYS = 3; +const uint32_t CP15_ACCESS_EXECUSR = CP15_ACCESS_EXECUTE; +const uint32_t CP15_ACCESS_EXECSYS = 5; + +struct armcp15_t { - u32 IDCode; - u32 cacheType; - u32 TCMSize; - u32 ctrl; - u32 DCConfig; - u32 ICConfig; - u32 writeBuffCtrl; - u32 und; - u32 DaccessPerm; - u32 IaccessPerm; - u32 protectBaseSize0; - u32 protectBaseSize1; - u32 protectBaseSize2; - u32 protectBaseSize3; - u32 protectBaseSize4; - u32 protectBaseSize5; - u32 protectBaseSize6; - u32 protectBaseSize7; - u32 cacheOp; - u32 DcacheLock; - u32 IcacheLock; - u32 ITCMRegion; - u32 DTCMRegion; - u32 processID; - u32 RAM_TAG; - u32 testState; - u32 cacheDbg; - /* calculated bitmasks for the regions to decide rights uppon */ - /* calculation is done in the MCR instead of on mem access for performance */ - u32 regionWriteMask_USR[8] ; - u32 regionWriteMask_SYS[8] ; - u32 regionReadMask_USR[8] ; - u32 regionReadMask_SYS[8] ; - u32 regionExecuteMask_USR[8] ; - u32 regionExecuteMask_SYS[8] ; - u32 regionWriteSet_USR[8] ; - u32 regionWriteSet_SYS[8] ; - u32 regionReadSet_USR[8] ; - u32 regionReadSet_SYS[8] ; - u32 regionExecuteSet_USR[8] ; - u32 regionExecuteSet_SYS[8] ; - - armcpu_t * cpu; - -} armcp15_t; - -armcp15_t *armcp15_new(armcpu_t *c); -BOOL armcp15_dataProcess(armcp15_t *armcp15, u8 CRd, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2); -BOOL armcp15_load(armcp15_t *armcp15, u8 CRd, u8 adr); -BOOL armcp15_store(armcp15_t *armcp15, u8 CRd, u8 adr); -BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2); -BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2); -BOOL armcp15_isAccessAllowed(armcp15_t *armcp15, u32 address, u32 access); - -#define CP15_ACCESS_WRITE 0 -#define CP15_ACCESS_READ 2 -#define CP15_ACCESS_EXECUTE 4 -#define CP15_ACCESS_WRITEUSR CP15_ACCESS_WRITE -#define CP15_ACCESS_WRITESYS 1 -#define CP15_ACCESS_READUSR CP15_ACCESS_READ -#define CP15_ACCESS_READSYS 3 -#define CP15_ACCESS_EXECUSR CP15_ACCESS_EXECUTE -#define CP15_ACCESS_EXECSYS 5 +public: + uint32_t IDCode; + uint32_t cacheType; + uint32_t TCMSize; + uint32_t ctrl; + uint32_t DCConfig; + uint32_t ICConfig; + uint32_t writeBuffCtrl; + uint32_t und; + uint32_t DaccessPerm; + uint32_t IaccessPerm; + uint32_t protectBaseSize0; + uint32_t protectBaseSize1; + uint32_t protectBaseSize2; + uint32_t protectBaseSize3; + uint32_t protectBaseSize4; + uint32_t protectBaseSize5; + uint32_t protectBaseSize6; + uint32_t protectBaseSize7; + uint32_t cacheOp; + uint32_t DcacheLock; + uint32_t IcacheLock; + uint32_t ITCMRegion; + uint32_t DTCMRegion; + uint32_t processID; + uint32_t RAM_TAG; + uint32_t testState; + uint32_t cacheDbg; + /* calculated bitmasks for the regions to decide rights uppon */ + /* calculation is done in the MCR instead of on mem access for performance */ + uint32_t regionWriteMask_USR[8]; + uint32_t regionWriteMask_SYS[8]; + uint32_t regionReadMask_USR[8]; + uint32_t regionReadMask_SYS[8]; + uint32_t regionExecuteMask_USR[8]; + uint32_t regionExecuteMask_SYS[8]; + uint32_t regionWriteSet_USR[8]; + uint32_t regionWriteSet_SYS[8]; + uint32_t regionReadSet_USR[8]; + uint32_t regionReadSet_SYS[8]; + uint32_t regionExecuteSet_USR[8]; + uint32_t regionExecuteSet_SYS[8]; + + armcpu_t *cpu; + + void setSingleRegionAccess(uint32_t dAccess, uint32_t iAccess, unsigned char num, uint32_t mask, uint32_t set); + void maskPrecalc(); + +public: + armcp15_t() : IDCode(0), cacheType(0), TCMSize(0), ctrl(0), DCConfig(0), ICConfig(0), writeBuffCtrl(0), und(0), DaccessPerm(0), IaccessPerm(0), protectBaseSize0(0), protectBaseSize1(0), protectBaseSize2(0), + protectBaseSize3(0), protectBaseSize4(0), protectBaseSize5(0), protectBaseSize6(0), protectBaseSize7(0), cacheOp(0), DcacheLock(0), IcacheLock(0), ITCMRegion(0), DTCMRegion(0), processID(0), RAM_TAG(0), + testState(0), cacheDbg(0), cpu(nullptr) + { + memset(&this->regionWriteMask_USR[0], 0, sizeof(this->regionWriteMask_USR)); + memset(&this->regionWriteMask_SYS[0], 0, sizeof(this->regionWriteMask_SYS)); + memset(&this->regionReadMask_USR[0], 0, sizeof(this->regionReadMask_USR)); + memset(&this->regionReadMask_SYS[0], 0, sizeof(this->regionReadMask_SYS)); + memset(&this->regionExecuteMask_USR[0], 0, sizeof(this->regionExecuteMask_USR)); + memset(&this->regionExecuteMask_SYS[0], 0, sizeof(this->regionExecuteMask_SYS)); + memset(&this->regionWriteSet_USR[0], 0, sizeof(this->regionWriteSet_USR)); + memset(&this->regionWriteSet_SYS[0], 0, sizeof(this->regionWriteSet_SYS)); + memset(&this->regionReadSet_USR[0], 0, sizeof(this->regionReadSet_USR)); + memset(&this->regionReadSet_SYS[0], 0, sizeof(this->regionReadSet_SYS)); + memset(&this->regionExecuteSet_USR[0], 0, sizeof(this->regionExecuteSet_USR)); + memset(&this->regionExecuteSet_SYS[0], 0, sizeof(this->regionExecuteSet_SYS)); + } + bool reset(armcpu_t *c); + bool dataProcess(uint8_t CRd, uint8_t CRn, uint8_t CRm, uint8_t opcode1, uint8_t opcode2); + bool load(uint8_t CRd, uint8_t adr); + bool store(uint8_t CRd, uint8_t adr); + bool moveCP2ARM(uint32_t *R, uint8_t CRn, uint8_t CRm, uint8_t opcode1, uint8_t opcode2); + bool moveARM2CP(uint32_t val, uint8_t CRn, uint8_t CRm, uint8_t opcode1, uint8_t opcode2); + bool isAccessAllowed(uint32_t address,uint32_t access); +}; -#endif /* __CP15_H__*/ +extern armcp15_t cp15; +void maskPrecalc(); diff -Nru audacious-plugins-4.1/src/xsf/desmume/emufile.cc audacious-plugins-4.2/src/xsf/desmume/emufile.cc --- audacious-plugins-4.1/src/xsf/desmume/emufile.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/emufile.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,49 @@ +/* +The MIT License + +Copyright (C) 2009-2010 DeSmuME team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "emufile.h" + +size_t EMUFILE_MEMORY::_fread(void *ptr, size_t bytes) +{ + uint32_t remain = this->len - this->pos; + uint32_t todo = std::min(remain, bytes); + if (!len) + { + this->failbit = true; + return 0; + } + if (todo <= 4) + { + uint8_t *src = this->buf() + this->pos; + uint8_t *dst = static_cast(ptr); + for (uint32_t i = 0; i < todo; ++i) + *dst++ = *src++; + } + else + memcpy(ptr, this->buf() + this->pos, todo); + this->pos += todo; + if (todo < bytes) + this->failbit = true; + return todo; +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/emufile.h audacious-plugins-4.2/src/xsf/desmume/emufile.h --- audacious-plugins-4.1/src/xsf/desmume/emufile.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/emufile.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,208 @@ +/* +The MIT License + +Copyright (C) 2009-2012 DeSmuME team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// don't use emufile for files bigger than 2GB! you have been warned! some day this will be fixed. + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include "types.h" + +#if defined(_MSC_VER) || defined(__MINGW32__) +# include +#else +# include +#endif + +class EMUFILE +{ +protected: + bool failbit; + +public: + EMUFILE() : failbit(false) { } + virtual ~EMUFILE() { } + + bool fail(bool unset = false) + { + bool ret = failbit; + if (unset) + unfail(); + return ret; + } + void unfail() { failbit = false; } + + size_t fread(void *ptr, size_t bytes) + { + return _fread(ptr, bytes); + } + + // virtuals + virtual size_t _fread(void *ptr, size_t bytes) = 0; + + virtual int fseek(int offset, int origin) = 0; + + virtual size_t ftell() = 0; + virtual size_t size() = 0; +}; + +// todo - handle read-only specially? +class EMUFILE_MEMORY : public EMUFILE +{ +protected: + std::vector *vec; + bool ownvec; + int32_t pos, len; + + void reserve(uint32_t amt) + { + if (this->vec->size() < amt) + this->vec->resize(amt); + } +public: + EMUFILE_MEMORY(std::vector *underlying) : vec(underlying), ownvec(false), pos(0), len(underlying->size()) { } + EMUFILE_MEMORY(uint32_t preallocate) : vec(new std::vector()), ownvec(true), pos(0), len(0) + { + this->vec->resize(preallocate); + this->len = preallocate; + } + EMUFILE_MEMORY() : vec(new std::vector()), ownvec(true), pos(0), len(0) + { + this->vec->reserve(1024); + } + EMUFILE_MEMORY(void *Buf, int32_t Size) : vec(new std::vector()), ownvec(true), pos(0), len(Size) + { + this->vec->resize(Size); + if (Size) + memcpy(&(*this->vec)[0], Buf, Size); + } + + ~EMUFILE_MEMORY() + { + if (this->ownvec) + delete this->vec; + } + + uint8_t *buf() + { + if (!this->size()) + this->reserve(1); + return &(*this->vec)[0]; + } + + virtual size_t _fread(void *ptr, size_t bytes); + + virtual int fseek(int offset, int origin) + { + // work differently for read-only...? + switch (origin) + { + case SEEK_SET: + this->pos = offset; + break; + case SEEK_CUR: + this->pos += offset; + break; + case SEEK_END: + this->pos = this->size() + offset; + break; + default: + assert(false); + } + this->reserve(pos); + return 0; + } + + virtual size_t ftell() + { + return this->pos; + } + + virtual size_t size() + { + return this->len; + } +}; + +class EMUFILE_FILE : public EMUFILE +{ +protected: + FILE *fp; + std::string fname; + char mode[16]; +private: + void open(const char *fn, const char *Mode) + { + this->fp = fopen(fn, Mode); + if (!this->fp) + this->failbit = true; + this->fname = fn; + strcpy(this->mode, Mode); + } +public: + EMUFILE_FILE(const std::string &fn, const char *Mode) + { + this->open(fn.c_str(), Mode); + } + + virtual ~EMUFILE_FILE() + { + if (this->fp) + fclose(this->fp); + } + + virtual size_t _fread(void *ptr, size_t bytes) + { + size_t ret = ::fread(ptr, 1, bytes, this->fp); + if (ret < bytes) + this->failbit = true; + return ret; + } + + virtual int fseek(int offset, int origin) + { + return ::fseek(this->fp, offset, origin); + } + + virtual size_t ftell() + { + return ::ftell(this->fp); + } + + virtual size_t size() + { + int oldpos = this->ftell(); + this->fseek(0, SEEK_END); + int len = this->ftell(); + this->fseek(oldpos, SEEK_SET); + return len; + } +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/FIFO.cc audacious-plugins-4.2/src/xsf/desmume/FIFO.cc --- audacious-plugins-4.1/src/xsf/desmume/FIFO.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/FIFO.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,65 +1,157 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - Copyright (C) 2007 shash - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright 2006 yopyop + Copyright 2007 shash + Copyright 2007-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ +#include #include "FIFO.h" +#include "armcpu.h" +#include "mem.h" +#include "MMU.h" +#include "NDSSystem.h" + +// ========================================================= IPC FIFO +IPC_FIFO ipc_fifo[2]; // 0 - ARM9, 1 - ARM7 + +void IPC_FIFOinit(uint8_t proc) +{ + memset(&ipc_fifo[proc], 0, sizeof(IPC_FIFO)); + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, 0x00000101); +} -void FIFOInit(FIFO * fifo) +void IPC_FIFOsend(uint8_t proc, uint32_t val) { - u32 i; + uint16_t cnt_l = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184); + if (!(cnt_l & IPCFIFOCNT_FIFOENABLE)) + return; // FIFO disabled + uint8_t proc_remote = proc ^ 1; + + if (ipc_fifo[proc].size > 15) + { + cnt_l |= IPCFIFOCNT_FIFOERROR; + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, cnt_l); + return; + } + + uint16_t cnt_r = T1ReadWord(MMU.MMU_MEM[proc_remote][0x40], 0x184); + + cnt_l &= 0xBFFC; // clear send empty bit & full + cnt_r &= 0xBCFF; // set recv empty bit & full + ipc_fifo[proc].buf[ipc_fifo[proc].tail] = val; + ++ipc_fifo[proc].tail; + ++ipc_fifo[proc].size; + if (ipc_fifo[proc].tail > 15) + ipc_fifo[proc].tail = 0; + + if (ipc_fifo[proc].size > 15) + { + cnt_l |= IPCFIFOCNT_SENDFULL; // set send full bit + cnt_r |= IPCFIFOCNT_RECVFULL; // set recv full bit + } + + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, cnt_l); + T1WriteWord(MMU.MMU_MEM[proc_remote][0x40], 0x184, cnt_r); - fifo->begin = 0; - fifo->end = 0; - for(i = 0; i<0x8000; ++i) - fifo->data[i] = 0; - fifo->full = false; - fifo->empty = true; - fifo->error = false; + if (cnt_r & IPCFIFOCNT_RECVIRQEN) + NDS_makeIrq(proc_remote, IRQ_BIT_IPCFIFO_RECVNONEMPTY); + + NDS_Reschedule(); } -void FIFOAdd(FIFO * fifo, u32 v) +uint32_t IPC_FIFOrecv(uint8_t proc) { - if(fifo->full) - { - fifo->error = true; - return; - } - fifo->data[fifo->end] = v; - fifo->end = (fifo->end + 1)& 0x7FFF; - fifo->full = (fifo->end == fifo->begin); - fifo->empty = false; + uint16_t cnt_l = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184); + if (!(cnt_l & IPCFIFOCNT_FIFOENABLE)) + return 0; // FIFO disabled + uint8_t proc_remote = proc ^ 1; + + uint32_t val = 0; + + if (!ipc_fifo[proc_remote].size) // remote FIFO error + { + cnt_l |= IPCFIFOCNT_FIFOERROR; + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, cnt_l); + return 0; + } + + uint16_t cnt_r = T1ReadWord(MMU.MMU_MEM[proc_remote][0x40], 0x184); + + cnt_l &= 0xBCFF; // clear send full bit & empty + cnt_r &= 0xBFFC; // set recv full bit & empty + + val = ipc_fifo[proc_remote].buf[ipc_fifo[proc_remote].head]; + ++ipc_fifo[proc_remote].head; + --ipc_fifo[proc_remote].size; + if (ipc_fifo[proc_remote].head > 15) + ipc_fifo[proc_remote].head = 0; + + if (!ipc_fifo[proc_remote].size) // FIFO empty + { + cnt_l |= IPCFIFOCNT_RECVEMPTY; + cnt_r |= IPCFIFOCNT_SENDEMPTY; + + if (cnt_r & IPCFIFOCNT_SENDIRQEN) + NDS_makeIrq(proc_remote, IRQ_BIT_IPCFIFO_SENDEMPTY); + } + + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, cnt_l); + T1WriteWord(MMU.MMU_MEM[proc_remote][0x40], 0x184, cnt_r); + + NDS_Reschedule(); + + return val; } -u32 FIFOValue(FIFO * fifo) +void IPC_FIFOcnt(uint8_t proc, uint16_t val) { - u32 v; + uint16_t cnt_l = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184); + uint16_t cnt_r = T1ReadWord(MMU.MMU_MEM[proc^1][0x40], 0x184); + + if (val & IPCFIFOCNT_FIFOERROR) + // at least SPP uses this, maybe every retail game + cnt_l &= ~IPCFIFOCNT_FIFOERROR; + + if (val & IPCFIFOCNT_SENDCLEAR) + { + ipc_fifo[proc].head = 0; + ipc_fifo[proc].tail = 0; + ipc_fifo[proc].size = 0; + + cnt_l |= IPCFIFOCNT_SENDEMPTY; + cnt_r |= IPCFIFOCNT_RECVEMPTY; + + cnt_l &= ~IPCFIFOCNT_SENDFULL; + cnt_r &= ~IPCFIFOCNT_RECVFULL; + } + + cnt_l &= ~IPCFIFOCNT_WRITEABLE; + cnt_l |= val & IPCFIFOCNT_WRITEABLE; + + // IPCFIFOCNT_SENDIRQEN may have been set (and/or the fifo may have been cleared) so we may need to trigger this irq + // (this approach is used by libnds fifo system on occasion in fifoInternalSend, and began happening frequently for value32 with r4326) + if ((cnt_l & IPCFIFOCNT_SENDIRQEN) && (cnt_l & IPCFIFOCNT_SENDEMPTY)) + NDS_makeIrq(proc, IRQ_BIT_IPCFIFO_SENDEMPTY); + + // IPCFIFOCNT_RECVIRQEN may have been set so we may need to trigger this irq + if ((cnt_l & IPCFIFOCNT_RECVIRQEN) && !(cnt_l & IPCFIFOCNT_RECVEMPTY)) + NDS_makeIrq(proc, IRQ_BIT_IPCFIFO_RECVNONEMPTY); + + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, cnt_l); + T1WriteWord(MMU.MMU_MEM[proc^1][0x40], 0x184, cnt_r); - if(fifo->empty) - { - fifo->error = true; - return 0; - } - v = fifo->data[fifo->begin]; - fifo->begin = (fifo->begin + 1)& 0x7FFF; - fifo->empty = (fifo->begin == fifo->end); - return v; + NDS_Reschedule(); } diff -Nru audacious-plugins-4.1/src/xsf/desmume/FIFO.h audacious-plugins-4.2/src/xsf/desmume/FIFO.h --- audacious-plugins-4.1/src/xsf/desmume/FIFO.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/FIFO.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,43 +1,38 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - Copyright (C) 2007 shash - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright 2006 yopyop + Copyright 2007 shash + Copyright 2007-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#ifndef FIFO_H -#define FIFO_H +#pragma once #include "types.h" -typedef struct +//=================================================== IPC FIFO +struct IPC_FIFO { - u32 data[0x8000]; - u32 begin; - u32 end; - BOOL full; - BOOL empty; - BOOL error; -} FIFO; - -void FIFOInit(FIFO * fifo); -void FIFOAdd(FIFO * fifo, u32 v); -u32 FIFOValue(FIFO * fifo); + uint32_t buf[16]; -#endif + uint8_t head; + uint8_t tail; + uint8_t size; +}; + +extern IPC_FIFO ipc_fifo[2]; +extern void IPC_FIFOinit(uint8_t proc); +extern void IPC_FIFOsend(uint8_t proc, uint32_t val); +extern uint32_t IPC_FIFOrecv(uint8_t proc); +extern void IPC_FIFOcnt(uint8_t proc, uint16_t val); diff -Nru audacious-plugins-4.1/src/xsf/desmume/firmware.cc audacious-plugins-4.2/src/xsf/desmume/firmware.cc --- audacious-plugins-4.1/src/xsf/desmume/firmware.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/firmware.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,627 @@ +/* + Copyright (C) 2009-2011 DeSmuME Team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#include "firmware.h" +#include "NDSSystem.h" + +#define WANT_AUD_BSWAP +#include + +static inline uint32_t DWNUM(uint32_t i) { return i >> 2; } + +bool CFIRMWARE::getKeyBuf() +{ + FILE *file = fopen(CommonSettings.ARM7BIOS, "rb"); + if (!file) + return false; + + fseek(file, 0x30, SEEK_SET); + size_t res = fread(this->keyBuf, 4, 0x412, file); + fclose(file); + return res == 0x412; +} + +void CFIRMWARE::crypt64BitUp(uint32_t *ptr) +{ + uint32_t Y = ptr[0]; + uint32_t X = ptr[1]; + + for (uint32_t i = 0x00; i <= 0x0F; ++i) + { + uint32_t Z = this->keyBuf[i] ^ X; + X = this->keyBuf[DWNUM(0x048 + (((Z >> 24) & 0xFF) << 2))]; + X = this->keyBuf[DWNUM(0x448 + (((Z >> 16) & 0xFF) << 2))] + X; + X = this->keyBuf[DWNUM(0x848 + (((Z >> 8) & 0xFF) << 2))] ^ X; + X = this->keyBuf[DWNUM(0xC48 + ((Z & 0xFF) << 2))] + X; + X = Y ^ X; + Y = Z; + } + + ptr[0] = X ^ this->keyBuf[DWNUM(0x40)]; + ptr[1] = Y ^ this->keyBuf[DWNUM(0x44)]; +} + +void CFIRMWARE::crypt64BitDown(uint32_t *ptr) +{ + uint32_t Y = ptr[0]; + uint32_t X = ptr[1]; + + for (uint32_t i = 0x11; i >= 0x02; --i) + { + uint32_t Z = this->keyBuf[i] ^ X; + X = this->keyBuf[DWNUM(0x048 + (((Z >> 24) & 0xFF) << 2))]; + X = this->keyBuf[DWNUM(0x448 + (((Z >> 16) & 0xFF) << 2))] + X; + X = this->keyBuf[DWNUM(0x848 + (((Z >> 8) & 0xFF) << 2))] ^ X; + X = this->keyBuf[DWNUM(0xC48 + ((Z & 0xFF) << 2))] + X; + X = Y ^ X; + Y = Z; + } + + ptr[0] = X ^ this->keyBuf[DWNUM(0x04)]; + ptr[1] = Y ^ this->keyBuf[DWNUM(0x00)]; +} + +void CFIRMWARE::applyKeycode(uint32_t modulo) +{ + this->crypt64BitUp(&this->keyCode[1]); + this->crypt64BitUp(&this->keyCode[0]); + + uint32_t scratch[] = { 0x00000000, 0x00000000 }; + + for (uint32_t i = 0; i <= 0x44; i += 4) + this->keyBuf[DWNUM(i)] = this->keyBuf[DWNUM(i)] ^ bswap32(this->keyCode[DWNUM(i % modulo)]); + + for (uint32_t i = 0; i <= 0x1040; i += 8) + { + this->crypt64BitUp(scratch); + this->keyBuf[DWNUM(i)] = scratch[1]; + this->keyBuf[DWNUM(i + 4)] = scratch[0]; + } +} + +bool CFIRMWARE::initKeycode(uint32_t idCode, int level, uint32_t modulo) +{ + if (!this->getKeyBuf()) + return false; + + this->keyCode[0] = idCode; + this->keyCode[1] = idCode >> 1; + this->keyCode[2] = idCode << 1; + + if (level >= 1) + this->applyKeycode(modulo); + if (level >= 2) + this->applyKeycode(modulo); + + this->keyCode[1] <<= 1; + this->keyCode[2] >>= 1; + + if (level >= 3) + this->applyKeycode(modulo); + + return true; +} + +uint16_t CFIRMWARE::getBootCodeCRC16() +{ + uint32_t crc = 0xFFFF; + const uint16_t val[] = { 0xC0C1, 0xC181, 0xC301, 0xC601, 0xCC01, 0xD801, 0xF001, 0xA001 }; + + unsigned i, j; + for (i = 0; i < this->size9; ++i) + { + crc ^= this->tmp_data9[i]; + + for (j = 0; j < 8; ++j) + { + if (crc & 0x0001) + crc = (crc >> 1) ^ (val[j] << (7 - j)); + else + crc >>= 1; + } + } + + for (i = 0; i < this->size7; ++i) + { + crc ^= this->tmp_data7[i]; + + for (j = 0; j < 8; ++j) + { + if (crc & 0x0001) + crc = (crc >> 1) ^ (val[j] << (7 - j)); + else + crc >>= 1; + } + } + + return crc & 0xFFFF; +} + +uint32_t CFIRMWARE::decrypt(const uint8_t *in, std::unique_ptr &out) +{ + uint32_t curBlock[2] = { 0 }; + + uint32_t xIn = 4, xOut = 0; + + memcpy(curBlock, in, 8); + this->crypt64BitDown(curBlock); + uint32_t blockSize = curBlock[0] >> 8; + + if (!blockSize) + return 0; + + out.reset(new uint8_t[blockSize]); + if (!out) + return 0; + memset(&out[0], 0xFF, blockSize); + + uint32_t xLen = blockSize; + while (xLen > 0) + { + uint8_t d = T1ReadByte(reinterpret_cast(curBlock), xIn % 8); + ++xIn; + if (!(xIn % 8)) + { + memcpy(curBlock, in + xIn, 8); + this->crypt64BitDown(curBlock); + } + + for (uint32_t i = 0; i < 8; ++i) + { + if (d & 0x80) + { + uint16_t data = T1ReadByte(reinterpret_cast(curBlock), xIn % 8) << 8; + ++xIn; + if (!(xIn % 8)) + { + memcpy(curBlock, in + xIn, 8); + this->crypt64BitDown(curBlock); + } + data |= T1ReadByte(reinterpret_cast(curBlock), xIn % 8); + ++xIn; + if (!(xIn % 8)) + { + memcpy(curBlock, in + xIn, 8); + this->crypt64BitDown(curBlock); + } + + uint32_t len = (data >> 12) + 3; + uint32_t offset = data & 0xFFF; + uint32_t windowOffset = xOut - offset - 1; + + for (uint32_t j = 0; j < len; ++j) + { + T1WriteByte(&out[0], xOut, T1ReadByte(&out[0], windowOffset)); + ++xOut; + ++windowOffset; + + --xLen; + if (!xLen) + return blockSize; + } + } + else + { + T1WriteByte(&out[0], xOut, T1ReadByte(reinterpret_cast(curBlock), xIn % 8)); + ++xOut; + ++xIn; + if (!(xIn % 8)) + { + memcpy(curBlock, in + xIn, 8); + this->crypt64BitDown(curBlock); + } + + --xLen; + if (!xLen) + return blockSize; + } + + d = (d << 1) & 0xFF; + } + } + + return blockSize; +} + +uint32_t CFIRMWARE::decompress(const uint8_t *in, std::unique_ptr &out) +{ + uint32_t curBlock[2] = { 0 }; + + uint32_t xIn = 4, xOut = 0; + + memcpy(curBlock, in, 8); + uint32_t blockSize = curBlock[0] >> 8; + + if (!blockSize) + return 0; + + out.reset(new uint8_t[blockSize]); + if (!out) + return 0; + memset(&out[0], 0xFF, blockSize); + + uint32_t xLen = blockSize; + while (xLen > 0) + { + uint8_t d = T1ReadByte(reinterpret_cast(curBlock), xIn % 8); + ++xIn; + if (!(xIn % 8)) + memcpy(curBlock, in + xIn, 8); + + for (uint32_t i = 0; i < 8; ++i) + { + if (d & 0x80) + { + uint16_t data = T1ReadByte(reinterpret_cast(curBlock), xIn % 8) << 8; + ++xIn; + if (!(xIn % 8)) + memcpy(curBlock, in + xIn, 8); + data |= T1ReadByte(reinterpret_cast(curBlock), xIn % 8); + ++xIn; + if (!(xIn % 8)) + memcpy(curBlock, in + xIn, 8); + + uint32_t len = (data >> 12) + 3; + uint32_t offset = data & 0xFFF; + uint32_t windowOffset = xOut - offset - 1; + + for (uint32_t j = 0; j < len; ++j) + { + T1WriteByte(&out[0], xOut, T1ReadByte(&out[0], windowOffset)); + ++xOut; + ++windowOffset; + + --xLen; + if (!xLen) + return blockSize; + } + } + else + { + T1WriteByte(&out[0], xOut, T1ReadByte(reinterpret_cast(curBlock), xIn % 8)); + ++xOut; + ++xIn; + if (!(xIn % 8)) + memcpy(curBlock, in + xIn, 8); + + --xLen; + if (!xLen) + return blockSize; + } + + d = (d << 1) & 0xFF; + } + } + + return blockSize; +} + +// ================================================================================ +bool CFIRMWARE::load() +{ + if (!CommonSettings.UseExtFirmware) + return false; + if (!strlen(CommonSettings.Firmware)) + return false; + + FILE *fp = fopen(CommonSettings.Firmware, "rb"); + if (!fp) + return false; + fseek(fp, 0, SEEK_END); + uint32_t size = ftell(fp); + fseek(fp, 0, SEEK_SET); + if (size != 262144 && size != 524288) + { + fclose(fp); + return false; + } + +#if 1 + if (size == 524288) + { + fclose(fp); + return false; + } +#endif + + auto data = std::unique_ptr(new uint8_t[size]); + if (!data) + { + fclose(fp); + return false; + } + + if (fread(&data[0], 1, size, fp) != size) + { + fclose(fp); + return false; + } + + memcpy(&header, &data[0], sizeof(header)); + if (header.fw_identifier[0] != 'M' || header.fw_identifier[1] != 'A' || header.fw_identifier[2] != 'C') + { + fclose(fp); + return false; + } + + uint16_t shift1 = header.shift_amounts & 0x07; + uint16_t shift2 = (header.shift_amounts >> 3) & 0x07; + uint16_t shift3 = (header.shift_amounts >> 6) & 0x07; + uint16_t shift4 = (header.shift_amounts >> 9) & 0x07; + + // todo - add support for 512Kb + uint32_t part1addr = header.part1_rom_boot9_addr << (2 + shift1); + uint32_t part1ram = 0x02800000 - (header.part1_ram_boot9_addr << (2 + shift2)); + uint32_t part2addr = header.part2_rom_boot7_addr << (2 + shift3); + uint32_t part2ram = 0x03810000 - (header.part2_ram_boot7_addr << (2 + shift4)); + + this->ARM9bootAddr = part1ram; + this->ARM7bootAddr = part2ram; + + if (!this->initKeycode(T1ReadLong(&data[0], 0x08), 1, 0xC)) + { + fclose(fp); + return false; + } + +#if 0 + this->crypt64BitDown(reinterpret_cast(&data[0x18])); +#else + // fix touch coords + data[0x18] = 0x00; + data[0x19] = 0x00; + data[0x1A] = 0x00; + data[0x1B] = 0x00; + + data[0x1C] = 0x00; + data[0x1D] = 0xFF; + data[0x1E] = 0x00; + data[0x1F] = 0x00; +#endif + + if (!this->initKeycode(T1ReadLong(&data[0], 0x08), 2, 0xC)) + { + fclose(fp); + return false; + } + + this->size9 = this->decrypt(&data[part1addr], this->tmp_data9); + if (!this->tmp_data9) + { + fclose(fp); + return false; + } + + this->size7 = this->decrypt(&data[part2addr], this->tmp_data7); + if (!this->tmp_data7) + { + this->tmp_data9.reset(); + fclose(fp); + return false; + } + + uint16_t crc16_mine = this->getBootCodeCRC16(); + + if (crc16_mine != header.part12_boot_crc16) + { + this->tmp_data9.reset(); + this->tmp_data7.reset(); + fclose(fp); + return false; + } + + // Copy firmware boot codes to their respective locations + uint32_t src = 0; + for (uint32_t i = 0; i < (this->size9 >> 2); ++i) + { + _MMU_write32(part1ram, T1ReadLong(&this->tmp_data9[0], src)); + src += 4; + part1ram += 4; + } + + src = 0; + for (uint32_t i = 0; i < (this->size7 >> 2); ++i) + { + _MMU_write32(part2ram, T1ReadLong(&this->tmp_data7[0], src)); + src += 4; + part2ram += 4; + } + this->tmp_data7.reset(); + this->tmp_data9.reset(); + + this->patched = false; + if (data[0x17C] != 0xFF) + this->patched = true; + + if (this->patched) + { + uint32_t patch_offset = 0x3FC80; + if (data[0x17C] > 1) + patch_offset = 0x3F680; + + memcpy(&header, &data[patch_offset], sizeof(header)); + + shift1 = header.shift_amounts & 0x07; + shift2 = (header.shift_amounts >> 3) & 0x07; + shift3 = (header.shift_amounts >> 6) & 0x07; + shift4 = (header.shift_amounts >> 9) & 0x07; + + // todo - add support for 512Kb + part1addr = header.part1_rom_boot9_addr << (2 + shift1); + part1ram = 0x02800000 - (header.part1_ram_boot9_addr << (2 + shift2)); + part2addr = header.part2_rom_boot7_addr << (2 + shift3); + part2ram = 0x03810000 - (header.part2_ram_boot7_addr << (2 + shift4)); + + this->ARM9bootAddr = part1ram; + this->ARM7bootAddr = part2ram; + + this->size9 = this->decompress(&data[part1addr], this->tmp_data9); + if (!this->tmp_data9) + { + fclose(fp); + return false; + } + + this->size7 = this->decompress(&data[part2addr], this->tmp_data7); + if (!this->tmp_data7) + { + this->tmp_data9.reset(); + fclose(fp); + return false; + }; + // Copy firmware boot codes to their respective locations + src = 0; + for (uint32_t i = 0; i < (this->size9 >> 2); ++i) + { + _MMU_write32(part1ram, T1ReadLong(&this->tmp_data9[0], src)); + src += 4; + part1ram += 4; + } + + src = 0; + for (uint32_t i = 0; i < (this->size7 >> 2); ++i) + { + _MMU_write32(part2ram, T1ReadLong(&this->tmp_data7[0], src)); + src += 4; + part2ram += 4; + } + this->tmp_data7.reset(); + this->tmp_data9.reset(); + } + + // TODO: add 512Kb support + memcpy(&MMU.fw.data[0], &data[0], 262144); + MMU.fw.fp = nullptr; + + return true; +} + +// ===================================================================================================== +static uint32_t calc_CRC16(uint32_t start, const uint8_t *data, int count) +{ + uint32_t crc = start & 0xffff; + const uint16_t val[] = { 0xC0C1, 0xC181, 0xC301, 0xC601, 0xCC01, 0xD801, 0xF001, 0xA001 }; + for (int i = 0; i < count; ++i) + { + crc ^= data[i]; + + for (int j = 0; j < 8; ++j) + { + bool do_bit = false; + + if (crc & 0x1) + do_bit = true; + + crc >>= 1; + + if (do_bit) + crc ^= val[j] << (7 - j); + } + } + return crc; +} + +int copy_firmware_user_data(uint8_t *dest_buffer, const uint8_t *fw_data) +{ + /* + * Determine which of the two user settings in the firmware is the current + * and valid one and then copy this into the destination buffer. + * + * The current setting will have a greater count. + * Settings are only valid if its CRC16 is correct. + */ + int copy_good = 0; + + uint32_t user_settings_offset = fw_data[0x20]; + user_settings_offset |= fw_data[0x21] << 8; + user_settings_offset <<= 3; + + if (user_settings_offset <= 0x3FE00) + { + int32_t copy_settings_offset = -1; + + uint32_t crc = calc_CRC16(0xffff, &fw_data[user_settings_offset], NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); + uint32_t fw_crc = fw_data[user_settings_offset + 0x72]; + fw_crc |= fw_data[user_settings_offset + 0x73] << 8; + bool user1_valid = crc == fw_crc; + + crc = calc_CRC16(0xffff, &fw_data[user_settings_offset + 0x100], NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); + fw_crc = fw_data[user_settings_offset + 0x100 + 0x72]; + fw_crc |= fw_data[user_settings_offset + 0x100 + 0x73] << 8; + bool user2_valid = crc == fw_crc; + + if (user1_valid) + { + if (user2_valid) + { + uint16_t count1, count2; + + count1 = fw_data[user_settings_offset + 0x70]; + count1 |= fw_data[user_settings_offset + 0x71] << 8; + + count2 = fw_data[user_settings_offset + 0x100 + 0x70]; + count2 |= fw_data[user_settings_offset + 0x100 + 0x71] << 8; + + if (count2 > count1) + copy_settings_offset = user_settings_offset + 0x100; + else + copy_settings_offset = user_settings_offset; + } + else + copy_settings_offset = user_settings_offset; + } + else if (user2_valid) + /* copy the second user settings */ + copy_settings_offset = user_settings_offset + 0x100; + + if (copy_settings_offset > 0) + { + memcpy(dest_buffer, &fw_data[copy_settings_offset], NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); + copy_good = 1; + } + } + + return copy_good; +} + +void NDS_FillDefaultFirmwareConfigData(NDS_fw_config_data *fw_config) +{ + const char *default_nickname = "DeSmuME"; + const char *default_message = "DeSmuME makes you happy!"; + + memset(fw_config, 0, sizeof(struct NDS_fw_config_data)); + fw_config->ds_type = NDS_CONSOLE_TYPE_FAT; + + fw_config->fav_colour = 7; + + fw_config->birth_day = 23; + fw_config->birth_month = 6; + + int str_length = strlen(default_nickname); + int i; + for (i = 0; i < str_length; ++i) + fw_config->nickname[i] = default_nickname[i]; + fw_config->nickname_len = str_length; + + str_length = strlen(default_message); + for (i = 0; i < str_length; ++i) + fw_config->message[i] = default_message[i]; + fw_config->message_len = str_length; + + /* default to English */ + fw_config->language = 1; +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/firmware.h audacious-plugins-4.2/src/xsf/desmume/firmware.h --- audacious-plugins-4.1/src/xsf/desmume/firmware.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/firmware.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,81 @@ +/* + Copyright (C) 2009-2011 DeSmuME Team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +#include +#include "types.h" + +// the count of bytes copied from the firmware into memory +const int NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT = 0x70; + +#define FW_CONFIG_FILE_EXT "dfc" + +class CFIRMWARE +{ +private: + std::unique_ptr tmp_data9; + std::unique_ptr tmp_data7; + uint32_t size9, size7; + + uint32_t keyBuf[0x412]; + uint32_t keyCode[3]; + + bool getKeyBuf(); + void crypt64BitUp(uint32_t *ptr); + void crypt64BitDown(uint32_t *ptr); + void applyKeycode(uint32_t modulo); + bool initKeycode(uint32_t idCode, int level, uint32_t modulo); + uint16_t getBootCodeCRC16(); + uint32_t decrypt(const uint8_t *in, std::unique_ptr &out); + uint32_t decompress(const uint8_t *in, std::unique_ptr &out); +public: + CFIRMWARE(): size9(0), size7(0), ARM9bootAddr(0), ARM7bootAddr(0), patched(0) { } + + bool load(); + + struct HEADER + { + uint16_t part3_rom_gui9_addr; // 000h + uint16_t part4_rom_wifi7_addr; // 002h + uint16_t part34_gui_wifi_crc16; // 004h + uint16_t part12_boot_crc16; // 006h + uint8_t fw_identifier[4]; // 008h + uint16_t part1_rom_boot9_addr; // 00Ch + uint16_t part1_ram_boot9_addr; // 00Eh + uint16_t part2_rom_boot7_addr; // 010h + uint16_t part2_ram_boot7_addr; // 012h + uint16_t shift_amounts; // 014h + uint16_t part5_data_gfx_addr; // 016h + + uint8_t fw_timestamp[5]; // 018h + uint8_t console_type; // 01Dh + uint16_t unused1; // 01Eh + uint16_t user_settings_offset; // 020h + uint16_t unknown1; // 022h + uint16_t unknown2; // 024h + uint16_t part5_crc16; // 026h + uint16_t unused2; // 028h - FFh filled + } header; + + uint32_t ARM9bootAddr; + uint32_t ARM7bootAddr; + bool patched; +}; + +int copy_firmware_user_data(uint8_t *dest_buffer, const uint8_t *fw_data); +void NDS_FillDefaultFirmwareConfigData(struct NDS_fw_config_data *fw_config); diff -Nru audacious-plugins-4.1/src/xsf/desmume/GPU.cc audacious-plugins-4.2/src/xsf/desmume/GPU.cc --- audacious-plugins-4.1/src/xsf/desmume/GPU.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/GPU.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - Copyright (C) 2006-2007 Theo Berkau - Copyright (C) 2007 shash - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// CONTENTS -// INITIALIZATION -// ENABLING / DISABLING LAYERS -// PARAMETERS OF BACKGROUNDS -// PARAMETERS OF ROTOSCALE -// PARAMETERS OF EFFECTS -// PARAMETERS OF WINDOWS -// ROUTINES FOR INSIDE / OUTSIDE WINDOW CHECKS -// PIXEL RENDERING -// BACKGROUND RENDERING -TEXT- -// BACKGROUND RENDERING -ROTOSCALE- -// BACKGROUND RENDERING -HELPER FUNCTIONS- -// SPRITE RENDERING -HELPER FUNCTIONS- -// SPRITE RENDERING -// SCREEN FUNCTIONS -// GRAPHICS CORE -// GPU_ligne - -#include -#include -#include -#include "MMU.h" -#include "GPU.h" - -ARM9_struct ARM9Mem; - -NDS_Screen MainScreen; -NDS_Screen SubScreen; - -//#define DEBUG_TRI - -/*****************************************************************************/ -// INITIALIZATION -/*****************************************************************************/ - -GPU * GPU_Init(u8 l) -{ - GPU * g; - - if ((g = (GPU *) malloc(sizeof(GPU))) == nullptr) - return nullptr; - - GPU_Reset(g, l); - return g; -} - -void GPU_Reset(GPU *g, u8 l) -{ - memset(g, 0, sizeof(GPU)); -} - -void GPU_DeInit(GPU * gpu) -{ - if (gpu) free(gpu); -} - - -int Screen_Init(int coreid) { - MainScreen.gpu = GPU_Init(0); - SubScreen.gpu = GPU_Init(1); - - return 0; -} - -void Screen_Reset(void) { - GPU_Reset(MainScreen.gpu, 0); - GPU_Reset(SubScreen.gpu, 1); -} - -void Screen_DeInit(void) { - GPU_DeInit(MainScreen.gpu); - GPU_DeInit(SubScreen.gpu); - -} diff -Nru audacious-plugins-4.1/src/xsf/desmume/GPU.h audacious-plugins-4.2/src/xsf/desmume/GPU.h --- audacious-plugins-4.1/src/xsf/desmume/GPU.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/GPU.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,805 +0,0 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - Copyright (C) 2006-2007 Theo Berkau - Copyright (C) 2007 shash - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef GPU_H -#define GPU_H - -#include "ARM9.h" -#include -#include "mem.h" -#include "registers.h" -#include "FIFO.h" -#include "MMU.h" - -/******************************************************************************* - this structure is for display control, - it holds flags for general display -*******************************************************************************/ - -#ifdef WORDS_BIGENDIAN -struct _DISPCNT -{ -/* 7*/ u8 ForceBlank:1; // A+B: -/* 6*/ u8 OBJ_BMP_mapping:1; // A+B: 0=2D (128KB), 1=1D (128..256KB) -/* 5*/ u8 OBJ_BMP_2D_dim:1; // A+B: 0=128x512, 1=256x256 pixels -/* 4*/ u8 OBJ_Tile_1D:1; // A+B: 0=2D (32KB), 1=1D (32..256KB) -/* 3*/ u8 BG0_3D:1; // A : 0=2D, 1=3D -/* 0*/ u8 BG_Mode:3; // A+B: -/*15*/ u8 WinOBJ_Enable:1; // A+B: 0=disable, 1=Enable -/*14*/ u8 Win1_Enable:1; // A+B: 0=disable, 1=Enable -/*13*/ u8 Win0_Enable:1; // A+B: 0=disable, 1=Enable -/*12*/ u8 OBJ_Enable:1; // A+B: 0=disable, 1=Enable -/*11*/ u8 BG3_Enable:1; // A+B: 0=disable, 1=Enable -/*10*/ u8 BG2_Enable:1; // A+B: 0=disable, 1=Enable -/* 9*/ u8 BG1_Enable:1; // A+B: 0=disable, 1=Enable -/* 8*/ u8 BG0_Enable:1; // A+B: 0=disable, 1=Enable -/*23*/ u8 OBJ_HBlank_process:1; // A+B: OBJ processed during HBlank (GBA bit5) -/*22*/ u8 OBJ_BMP_1D_Bound:1; // A : -/*20*/ u8 OBJ_Tile_1D_Bound:2; // A+B: -/*18*/ u8 VRAM_Block:2; // A : VRAM block (0..3=A..D) - -/*16*/ u8 DisplayMode:2; // A+B: coreA(0..3) coreB(0..1) GBA(Green Swap) - // 0=off (white screen) - // 1=on (normal BG & OBJ layers) - // 2=VRAM display (coreA only) - // 3=RAM display (coreA only, DMA transfers) - -/*31*/ u8 ExOBJPalette_Enable:1; // A+B: 0=disable, 1=Enable OBJ extended Palette -/*30*/ u8 ExBGxPalette_Enable:1; // A+B: 0=disable, 1=Enable BG extended Palette -/*27*/ u8 ScreenBase_Block:3; // A : Screen Base (64K step) -/*24*/ u8 CharacBase_Block:3; // A : Character Base (64K step) -}; -#else -struct _DISPCNT -{ -/* 0*/ u8 BG_Mode:3; // A+B: -/* 3*/ u8 BG0_3D:1; // A : 0=2D, 1=3D -/* 4*/ u8 OBJ_Tile_1D:1; // A+B: 0=2D (32KB), 1=1D (32..256KB) -/* 5*/ u8 OBJ_BMP_2D_dim:1; // A+B: 0=128x512, 1=256x256 pixels -/* 6*/ u8 OBJ_BMP_mapping:1; // A+B: 0=2D (128KB), 1=1D (128..256KB) - - // 7-15 same as GBA -/* 7*/ u8 ForceBlank:1; // A+B: -/* 8*/ u8 BG0_Enable:1; // A+B: 0=disable, 1=Enable -/* 9*/ u8 BG1_Enable:1; // A+B: 0=disable, 1=Enable -/*10*/ u8 BG2_Enable:1; // A+B: 0=disable, 1=Enable -/*11*/ u8 BG3_Enable:1; // A+B: 0=disable, 1=Enable -/*12*/ u8 OBJ_Enable:1; // A+B: 0=disable, 1=Enable -/*13*/ u8 Win0_Enable:1; // A+B: 0=disable, 1=Enable -/*14*/ u8 Win1_Enable:1; // A+B: 0=disable, 1=Enable -/*15*/ u8 WinOBJ_Enable:1; // A+B: 0=disable, 1=Enable - -/*16*/ u8 DisplayMode:2; // A+B: coreA(0..3) coreB(0..1) GBA(Green Swap) - // 0=off (white screen) - // 1=on (normal BG & OBJ layers) - // 2=VRAM display (coreA only) - // 3=RAM display (coreA only, DMA transfers) - -/*18*/ u8 VRAM_Block:2; // A : VRAM block (0..3=A..D) -/*20*/ u8 OBJ_Tile_1D_Bound:2; // A+B: -/*22*/ u8 OBJ_BMP_1D_Bound:1; // A : -/*23*/ u8 OBJ_HBlank_process:1; // A+B: OBJ processed during HBlank (GBA bit5) -/*24*/ u8 CharacBase_Block:3; // A : Character Base (64K step) -/*27*/ u8 ScreenBase_Block:3; // A : Screen Base (64K step) -/*30*/ u8 ExBGxPalette_Enable:1; // A+B: 0=disable, 1=Enable BG extended Palette -/*31*/ u8 ExOBJPalette_Enable:1; // A+B: 0=disable, 1=Enable OBJ extended Palette -}; -#endif - -typedef union -{ - struct _DISPCNT bits; - u32 val; -} DISPCNT; -#define BGxENABLED(cnt,num) ((num<8)? ((cnt.val>>8) & num):0) - - - - -/******************************************************************************* - this structure is for display control of a specific layer, - there are 4 background layers - their priority indicate which one to draw on top of the other - some flags indicate special drawing mode, size, FX -*******************************************************************************/ - -#ifdef WORDS_BIGENDIAN -struct _BGxCNT -{ -/* 7*/ u8 Palette_256:1; // 0=16x16, 1=1*256 palette -/* 6*/ u8 Mosaic_Enable:1; // 0=disable, 1=Enable mosaic -/* 2*/ u8 CharacBase_Block:4; // individual character base offset (n*16KB) -/* 0*/ u8 Priority:2; // 0..3=high..low -/*14*/ u8 ScreenSize:2; // text : 256x256 512x256 256x512 512x512 - // x/rot/s : 128x128 256x256 512x512 1024x1024 - // bmp : 128x128 256x256 512x256 512x512 - // large : 512x1024 1024x512 - - -/*13*/ u8 PaletteSet_Wrap:1; // BG0 extended palette set 0=set0, 1=set2 - // BG1 extended palette set 0=set1, 1=set3 - // BG2 overflow area wraparound 0=off, 1=wrap - // BG3 overflow area wraparound 0=off, 1=wrap -/* 8*/ u8 ScreenBase_Block:5; // individual screen base offset (text n*2KB, BMP n*16KB) -}; -#else -struct _BGxCNT -{ -/* 0*/ u8 Priority:2; // 0..3=high..low -/* 2*/ u8 CharacBase_Block:4; // individual character base offset (n*16KB) -/* 6*/ u8 Mosaic_Enable:1; // 0=disable, 1=Enable mosaic -/* 7*/ u8 Palette_256:1; // 0=16x16, 1=1*256 palette -/* 8*/ u8 ScreenBase_Block:5; // individual screen base offset (text n*2KB, BMP n*16KB) -/*13*/ u8 PaletteSet_Wrap:1; // BG0 extended palette set 0=set0, 1=set2 - // BG1 extended palette set 0=set1, 1=set3 - // BG2 overflow area wraparound 0=off, 1=wrap - // BG3 overflow area wraparound 0=off, 1=wrap -/*14*/ u8 ScreenSize:2; // text : 256x256 512x256 256x512 512x512 - // x/rot/s : 128x128 256x256 512x512 1024x1024 - // bmp : 128x128 256x256 512x256 512x512 - // large : 512x1024 1024x512 - - -}; -#endif - - -typedef union -{ - struct _BGxCNT bits; - u16 val; -} BGxCNT; - -/******************************************************************************* - this structure is for background offset -*******************************************************************************/ - -typedef struct { - u16 BGxHOFS; - u16 BGxVOFS; -} BGxOFS; - -/******************************************************************************* - this structure is for rotoscale parameters -*******************************************************************************/ - -typedef struct { - s16 BGxPA; - s16 BGxPB; - s16 BGxPC; - s16 BGxPD; - s32 BGxX; - s32 BGxY; -} BGxPARMS; - - -/******************************************************************************* - these structures are for window description, - windows are square regions and can "subclass" - background layers or object layers (i.e window controls the layers) - - screen - | - +-- Window0/Window1/OBJwindow/OutOfWindows - | - +-- BG0/BG1/BG2/BG3/OBJ -*******************************************************************************/ - -typedef union { - struct { - u8 end:8; - u8 start:8; - } bits ; - u16 val; -} WINxDIM; - -#ifdef WORDS_BIGENDIAN -typedef struct { -/* 6*/ u8 :2; -/* 5*/ u8 WINx_Effect_Enable:1; -/* 4*/ u8 WINx_OBJ_Enable:1; -/* 3*/ u8 WINx_BG3_Enable:1; -/* 2*/ u8 WINx_BG2_Enable:1; -/* 1*/ u8 WINx_BG1_Enable:1; -/* 0*/ u8 WINx_BG0_Enable:1; -} WINxBIT; -#else -typedef struct { -/* 0*/ u8 WINx_BG0_Enable:1; -/* 1*/ u8 WINx_BG1_Enable:1; -/* 2*/ u8 WINx_BG2_Enable:1; -/* 3*/ u8 WINx_BG3_Enable:1; -/* 4*/ u8 WINx_OBJ_Enable:1; -/* 5*/ u8 WINx_Effect_Enable:1; -/* 6*/ u8 :2; -} WINxBIT; -#endif - -#ifdef WORDS_BIGENDIAN -typedef union { - struct { - WINxBIT win0; - WINxBIT win1; - } bits; - struct { - u8 :3; - u8 win0_en:5; - u8 :3; - u8 win1_en:5; - } packed_bits; - struct { - u8 low; - u8 high; - } bytes; - u16 val ; -} WINxCNT ; -#else -typedef union { - struct { - WINxBIT win0; - WINxBIT win1; - } bits; - struct { - u8 win0_en:5; - u8 :3; - u8 win1_en:5; - u8 :3; - } packed_bits; - struct { - u8 low; - u8 high; - } bytes; - u16 val ; -} WINxCNT ; -#endif - -/* -typedef struct { - WINxDIM WIN0H; - WINxDIM WIN1H; - WINxDIM WIN0V; - WINxDIM WIN1V; - WINxCNT WININ; - WINxCNT WINOUT; -} WINCNT; -*/ - -/******************************************************************************* - this structure is for miscellanous settings - //TODO: needs further description -*******************************************************************************/ - -typedef struct { - u16 MOSAIC; - u16 unused1; - u16 unused2;//BLDCNT; - u16 unused3;//BLDALPHA; - u16 unused4;//BLDY; - u16 unused5; - /* - u16 unused6; - u16 unused7; - u16 unused8; - u16 unused9; - */ -} MISCCNT; - - -/******************************************************************************* - this structure is for 3D settings -*******************************************************************************/ - -struct _DISP3DCNT -{ -/* 0*/ u8 EnableTexMapping:1; // -/* 1*/ u8 PolygonShading:1; // 0=Toon Shading, 1=Highlight Shading -/* 2*/ u8 EnableAlphaTest:1; // see ALPHA_TEST_REF -/* 3*/ u8 EnableAlphaBlending:1; // see various Alpha values -/* 4*/ u8 EnableAntiAliasing:1; // -/* 5*/ u8 EnableEdgeMarking:1; // see EDGE_COLOR -/* 6*/ u8 FogOnlyAlpha:1; // 0=Alpha and Color, 1=Only Alpha (see FOG_COLOR) -/* 7*/ u8 EnableFog:1; // Fog Master Enable -/* 8*/ u8 FogShiftSHR:4; // 0..10 SHR-Divider (see FOG_OFFSET) -/*12*/ u8 AckColorBufferUnderflow:1; // Color Buffer RDLINES Underflow (0=None, 1=Underflow/Acknowledge) -/*13*/ u8 AckVertexRAMOverflow:1; // Polygon/Vertex RAM Overflow (0=None, 1=Overflow/Acknowledge) -/*14*/ u8 RearPlaneMode:1; // 0=Blank, 1=Bitmap -/*15*/ u8 :1; -/*16*/ u16 :16; -}; - -typedef union -{ - struct _DISP3DCNT bits; - u32 val; -} DISP3DCNT; - -/******************************************************************************* - this structure is for capture control (core A only) - - source: - http://nocash.emubase.de/gbatek.htm#dsvideocaptureandmainmemorydisplaymode -*******************************************************************************/ - -struct _DISPCAPCNT -{ -/* 0*/ u8 BlendFactor_A:5; // 0..16 = Blending Factor for Source A -/* 5*/ u8 :3; // -/* 8*/ u8 BlendFactor_B:5; // 0..16 = Blending Factor for Source B -/*13*/ u8 :3; // -/*16*/ u8 VRAM_Write_Block:2; // 0..3 = VRAM A..D -/*18*/ u8 VRAM_Write_Offset:2; // n x 0x08000 -/*20*/ u8 Capture_Size:2; // 0=128x128, 1=256x64, 2=256x128, 3=256x192 dots -/*22*/ u8 :2; // -/*24*/ u8 Source_A:1; // 0=Graphics Screen BG+3D+OBJ, 1=3D Screen -/*25*/ u8 Source_B:1; // 0=VRAM, 1=Main Memory Display FIFO -/*26*/ u8 VRAM_Read_Offset:2; // n x 0x08000 -/*28*/ u8 :1; // -/*29*/ u8 Capture_Source:2; // 0=Source A, 1=Source B, 2/3=Sources A+B blended -/*31*/ u8 Capture_Enable:1; // 0=Disable/Ready, 1=Enable/Busy -}; - -typedef union -{ - struct _DISPCAPCNT bits; - u32 val; -} DISPCAPCNT; - - -/******************************************************************************* - this structure holds everything and should be mapped to - * core A : 0x04000000 - * core B : 0x04001000 -*******************************************************************************/ - -typedef struct _reg_dispx { - DISPCNT dispx_DISPCNT; // 0x0400x000 - u16 dispA_DISPSTAT; // 0x04000004 - u16 dispx_VCOUNT; // 0x0400x006 - BGxCNT dispx_BGxCNT[4]; // 0x0400x008 - BGxOFS dispx_BGxOFS[4]; // 0x0400x010 - BGxPARMS dispx_BG2PARMS; // 0x0400x020 - BGxPARMS dispx_BG3PARMS; // 0x0400x030 - u8 filler[12]; // 0x0400x040 - MISCCNT dispx_MISC; // 0x0400x04C - DISP3DCNT dispA_DISP3DCNT; // 0x04000060 - DISPCAPCNT dispA_DISPCAPCNT; // 0x04000064 - u32 dispA_DISPMMEMFIFO; // 0x04000068 -} REG_DISPx ; - - - - - - - -#ifndef __cplusplus -#ifndef min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif - -#ifndef max -#define max(a,b) (((a)>(b))?(a):(b)) -#endif -#endif - -typedef BOOL (*fun_gl_Begin) (int screen); -typedef void (*fun_gl_End) (int screen); -// the GUI should use this function prior to all gl calls -// if call to beg succeeds opengl draw -void register_gl_fun(fun_gl_Begin beg,fun_gl_End end); - -#define GPU_MAIN 0 -#define GPU_SUB 1 - -/* human readable bitmask names */ -#define ADDRESS_STEP_512B 0x00200 -#define ADDRESS_STEP_1KB 0x00400 -#define ADDRESS_STEP_2KB 0x00800 -#define ADDRESS_STEP_4KB 0x01000 -#define ADDRESS_STEP_8KB 0x02000 -#define ADDRESS_STEP_16KB 0x04000 -#define ADDRESS_STEP_32KB 0x08000 -#define ADDRESS_STEP_64kB 0x10000 - -#ifdef WORDS_BIGENDIAN -struct _TILEENTRY -{ -/*14*/ unsigned Palette:4; -/*13*/ unsigned VFlip:1; // VERTICAL FLIP (top<-->bottom) -/*12*/ unsigned HFlip:1; // HORIZONTAL FLIP (left<-->right) -/* 0*/ unsigned TileNum:10; -}; -#else -struct _TILEENTRY -{ -/* 0*/ unsigned TileNum:10; -/*12*/ unsigned HFlip:1; // HORIZONTAL FLIP (left<-->right) -/*13*/ unsigned VFlip:1; // VERTICAL FLIP (top<-->bottom) -/*14*/ unsigned Palette:4; -}; -#endif -typedef union -{ - struct _TILEENTRY bits; - u16 val; -} TILEENTRY; - -struct _ROTOCOORD -{ -/* 0*/ unsigned Fraction:8; -/* 8*/ signed Integer:24; -// /*28*/ unsigned :4; -}; -typedef union -{ - struct _ROTOCOORD bits; - s32 val; -} ROTOCOORD; - - -/* - this structure is for color representation, - it holds 5 meaningful bits per color channel (red,green,blue) - and 1 meaningful bit for alpha representation - this bit can be unused or used for special FX -*/ - -struct _COLOR { // abgr x555 -#ifdef WORDS_BIGENDIAN - unsigned alpha:1; // sometimes it is unused (pad) - unsigned blue:5; - unsigned green:5; - unsigned red:5; -#else - unsigned red:5; - unsigned green:5; - unsigned blue:5; - unsigned alpha:1; // sometimes it is unused (pad) -#endif -}; -struct _COLORx { // abgr x555 - unsigned bgr:15; - unsigned alpha:1; // sometimes it is unused (pad) -}; - -typedef union -{ - struct _COLOR bits; - struct _COLORx bitx; - u16 val; -} COLOR; - -struct _COLOR32 { // ARGB - unsigned :3; - unsigned blue:5; - unsigned :3; - unsigned green:5; - unsigned :3; - unsigned red:5; - unsigned :7; - unsigned alpha:1; // sometimes it is unused (pad) -}; - -typedef union -{ - struct _COLOR32 bits; - u32 val; -} COLOR32; - -#define COLOR_16_32(w,i) \ - /* doesnt matter who's 16bit who's 32bit */ \ - i.bits.red = w.bits.red; \ - i.bits.green = w.bits.green; \ - i.bits.blue = w.bits.blue; \ - i.bits.alpha = w.bits.alpha; - - - - - - -/* - this structure is for Sprite description, - it holds flags & transformations for 1 sprite - (max 128 OBJs / screen) -ref: http://www.bottledlight.com/ds/index.php/Video/Sprites -*/ - -typedef struct -{ -#ifdef WORDS_BIGENDIAN -// attr0 -/* 0*/ unsigned Y:8; -/*14*/ unsigned Shape:2; // (00: Square, 01: Wide, 10: Tall, 11: Illegal) -/*13*/ unsigned Depth:1; // (0: 16, 1: 256) -/*12*/ unsigned Mosaic:1; // (1: Enabled) -/*10*/ unsigned Mode:2; // (00: Normal, 01: Transparent, 10: Object window, 11: Bitmap) -/* 8*/ unsigned RotScale:2; // (00: Normal, 01: Rot/scale, 10: Disabled, 11: Double-size rot/scale) -// attr1 -/* 0*/ signed X:9; -/*14*/ unsigned Size:2; -/*13*/ unsigned VFlip:1; -/*12*/ unsigned HFlip:1; -/* 9*/ unsigned RotScalIndex:3; // Rot/scale matrix index -// attr2 -/* 0*/ unsigned TileIndex:10; -/*12*/ unsigned PaletteIndex:4; -/*10*/ unsigned Priority:2; -// attr3 -unsigned attr3:16; -#else -// attr0 -/* 0*/ unsigned Y:8; -/* 8*/ unsigned RotScale:2; // (00: Normal, 01: Rot/scale, 10: Disabled, 11: Double-size rot/scale) -/*10*/ unsigned Mode:2; // (00: Normal, 01: Transparent, 10: Object window, 11: Bitmap) -/*12*/ unsigned Mosaic:1; // (1: Enabled) -/*13*/ unsigned Depth:1; // (0: 16, 1: 256) -/*14*/ unsigned Shape:2; // (00: Square, 01: Wide, 10: Tall, 11: Illegal) -// attr1 -/* 0*/ signed X:9; -/* 9*/ unsigned RotScalIndex:3; // Rot/scale matrix index -/*12*/ unsigned HFlip:1; -/*13*/ unsigned VFlip:1; -/*14*/ unsigned Size:2; -// attr2 -/* 0*/ unsigned TileIndex:10; -/*10*/ unsigned Priority:2; -/*12*/ unsigned PaletteIndex:4; -// attr3 - unsigned attr3:16; -#endif -} _OAM_; - -typedef struct -{ - u16 attr0; - u16 attr1; - u16 attr2; - u16 attr3; -} OAM; - - - -typedef struct -{ - s16 x; - s16 y; -} size; - - - - -/* - this structure holds information - for rendering. -*/ - -#define NB_PRIORITIES 4 -#define NB_BG 4 -typedef struct -{ - u8 BGs[NB_BG], nbBGs; - u8 PixelsX[256]; - // doh ! yoda says : 256 pixels we can have... - u16 nbPixelsX; -} itemsForPriority_t; - - -typedef struct _GPU GPU; - -struct _GPU -{ - // some structs are becoming redundant - // some functions too (no need to recopy some vars as it is done by MMU) - REG_DISPx * dispx_st; - - DISPCAPCNT dispCapCnt; - BOOL LayersEnable[5]; - itemsForPriority_t itemsForPriority[NB_PRIORITIES]; - u8 sprWin[256][256]; - -#define BGBmpBB BG_bmp_ram -#define BGChBB BG_tile_ram - - u8 * BG_bmp_ram[4]; - u8 * BG_tile_ram[4]; - u8 * BG_map_ram[4]; - - u8 BGExtPalSlot[4]; - u32 BGSize[4][2]; - - u8 lcd; - u8 core; - - u8 dispMode; - u8 vramBlock; - - BOOL dispBG[4]; - BOOL dispOBJ; - - OAM * oam; - u8 * sprMem; - u8 sprBoundary; - u8 sprBMPBoundary; - u8 sprBMPMode; - u32 sprEnable; - - u8 WIN0H0; - u8 WIN0H1; - u8 WIN0V0; - u8 WIN0V1; - - u8 WIN1H0; - u8 WIN1H1; - u8 WIN1V0; - u8 WIN1V1; - - u8 WININ0; - u8 WININ0_SPECIAL; - u8 WININ1; - u8 WININ1_SPECIAL; - - u8 WINOUT; - u8 WINOUT_SPECIAL; - u8 WINOBJ; - u8 WINOBJ_SPECIAL; - - u8 WIN0_ENABLED; - u8 WIN1_ENABLED; - u8 WINOBJ_ENABLED; - - u16 BLDCNT; - u8 BLDALPHA_EVA; - u8 BLDALPHA_EVB; - u8 BLDY_EVY; - - u8 MasterBrightMode; - u32 MasterBrightFactor; - - BOOL (*setFinalColorSpr)(const GPU *gpu, u32 passing, u8 bgnum, u8 *dst, u16 color, u16 x, u16 y); - BOOL (*setFinalColorBck)(const GPU *gpu, u32 passing, u8 bgnum, u8 *dst, u16 color, u16 x, u16 y); - void (*spriteRender) (GPU * gpu, u16 l, u8 * dst, u8 * prioTab); -}; -/* -// normally should have same addresses -static void REG_DISPx_pack_test(GPU * gpu) -{ - REG_DISPx * r = gpu->dispx_st; - printf ("%08x %02x\n", r, (long)(&r->dispx_DISPCNT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispA_DISPSTAT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_VCOUNT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_BGxCNT[0]) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_BGxOFS[0]) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_BG2PARMS) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_BG3PARMS) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_WINCNT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispx_MISC) - (long)r); - printf ("\t%02x\n", (long)(&r->dispA_DISP3DCNT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispA_DISPCAPCNT) - (long)r); - printf ("\t%02x\n", (long)(&r->dispA_DISPMMEMFIFO) - (long)r); -} -*/ - -extern u8 GPU_screen[4*256*192]; - - -GPU * GPU_Init(u8 l); -void GPU_Reset(GPU *g, u8 l); -void GPU_DeInit(GPU *); - -void textBG(const GPU * gpu, u8 num, u8 * DST); //Draw text based background -void rotBG(GPU * gpu, u8 num, u8 * DST); -void extRotBG(GPU * gpu, u8 num, u8 * DST); -void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab); -void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab); - -extern short sizeTab[4][4][2]; -extern size sprSizeTab[4][4]; -extern s8 mode2type[8][4]; -extern void (*modeRender[8][4])(GPU * gpu, u8 num, u16 l, u8 * DST); - -typedef struct { - GPU * gpu; - u16 offset; -} NDS_Screen; - -extern NDS_Screen MainScreen; -extern NDS_Screen SubScreen; - -int Screen_Init(int coreid); -void Screen_Reset(void); -void Screen_DeInit(void); - -extern MMU_struct MMU; - - - -#define GFXCORE_DEFAULT -1 -#define GFXCORE_DUMMY 0 - -#define GFXCORE_FULLSCREEN (1 << 0) - -typedef struct -{ - int id; // ID number for core(see above defines) - const char *Name; // Name of core - int flags; // What features the core supports(full screen, etc.) - int (*Init)(); // Initializes stuff related to core - void (*DeInit)(); // Deinitializes stuff related to core - void (*Resize)(int width, int height, BOOL fullscreen); // Resizes window or fullscreen - void (*OnScreenText)(char *string, ...); // For handling save state messages, etc. -} GraphicsInterface_struct; - -extern GraphicsInterface_struct GFXDummy; - -void GPU_setVideoProp(GPU *, u32 p); -void GPU_setBGProp(GPU *, u16 num, u16 p); - -void GPU_setBLDCNT(GPU *gpu, u16 v) ; -void GPU_setBLDALPHA(GPU *gpu, u16 v) ; -void GPU_setBLDY(GPU *gpu, u16 v) ; -void GPU_setMOSAIC(GPU *gpu, u16 v) ; - - -void GPU_remove(GPU *, u8 num); -void GPU_addBack(GPU *, u8 num); - -int GPU_ChangeGraphicsCore(int coreid); - -void GPU_set_DISPCAPCNT(GPU * gpu, u32 val) ; -void GPU_ligne(NDS_Screen * screen, u16 l) ; -void GPU_setMasterBrightness (GPU *gpu, u16 val); - -void GPU_setWIN0_H (GPU *gpu, u16 val); -void GPU_setWIN0_H0 (GPU *gpu, u8 val); -void GPU_setWIN0_H1 (GPU *gpu, u8 val); - -void GPU_setWIN0_V (GPU *gpu, u16 val); -void GPU_setWIN0_V0 (GPU *gpu, u8 val); -void GPU_setWIN0_V1 (GPU *gpu, u8 val); - -void GPU_setWIN1_H (GPU *gpu, u16 val); -void GPU_setWIN1_H0 (GPU *gpu, u8 val); -void GPU_setWIN1_H1 (GPU *gpu, u8 val); - -void GPU_setWIN1_V (GPU *gpu, u16 val); -void GPU_setWIN1_V0 (GPU *gpu, u8 val); -void GPU_setWIN1_V1 (GPU *gpu, u8 val); - -void GPU_setWININ (GPU *gpu, u16 val); -void GPU_setWININ0 (GPU *gpu, u8 val); -void GPU_setWININ1 (GPU *gpu, u8 val); - -void GPU_setWINOUT16(GPU *gpu, u16 val); -void GPU_setWINOUT (GPU *gpu, u8 val); -void GPU_setWINOBJ (GPU *gpu, u8 val); - -void GPU_setBLDCNT_LOW (GPU *gpu, u8 val); -void GPU_setBLDCNT_HIGH (GPU *gpu, u8 val); -void GPU_setBLDCNT (GPU *gpu, u16 val); - -void GPU_setBLDALPHA (GPU *gpu, u16 val); -void GPU_setBLDALPHA_EVA(GPU *gpu, u8 val); -void GPU_setBLDALPHA_EVB(GPU *gpu, u8 val); - -void GPU_setBLDY_EVY (GPU *gpu, u8 val); - -#endif - diff -Nru audacious-plugins-4.1/src/xsf/desmume/instruction_attributes.h audacious-plugins-4.2/src/xsf/desmume/instruction_attributes.h --- audacious-plugins-4.1/src/xsf/desmume/instruction_attributes.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/instruction_attributes.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,5171 @@ +/* Copyright (C) 2006 yopyop + Copyright (C) 2011 Loren Merritt + Copyright (C) 2012 DeSmuME team + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +#include "types.h" + +#define INSTR_CYCLES_MASK 0x7 +#define INSTR_CYCLES(c) c // constant cycles. does not include the penalty for writing to r15 for instructions other than dedicated branches. +#define INSTR_CYCLES_VARIABLE 0 // duration to be determined at runtime +#define INSTR_CYCLES_V INSTR_CYCLES_VARIABLE + +#define SRCREG_NONE 0x0000 +#define SRCREG_POS0 0x0008 +#define SRCREG_POS3 0x0010 +#define SRCREG_POS8 0x0020 +#define SRCREG_POS12 0x0040 +#define SRCREG_POS16 0x0080 +#define SRCREG_STM 0x0100 + +#define BRANCH_NEVER 0x00000000 +#define BRANCH_ALWAYS 0x00000800 +#define BRANCH_POS0 0x00001000 // branch if (REG_NUM(i,0)|((i>>4)&8))==15 +#define BRANCH_POS12 0x00002000 // branch if REG_POS(i,12)==15 +#define BRANCH_LDM 0x00004000 +#define BRANCH_SWI 0x00008000 // branch if use external SWI - if (cpu->swi_tab == NULL) + +#define JIT_BYPASS 0x80000000 // JIT makes no assumptions about what this instruction does + +const uint32_t instruction_attributes[] = +{ +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_MUL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_POS_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_AND_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_MUL_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_POS_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_POS_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_AND_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_POS_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_MLA +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_EOR_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_MLA_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_EOR_S_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_POS_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SUB_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_POS_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_POS_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SUB_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_POS_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSB_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSB_S_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_UMULL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_POS_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADD_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_UMULL_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_POS_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_POS_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADD_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_POS_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_UMLAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ADC_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_UMLAL_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ADC_S_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMULL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_POS_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_POST_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_SBC_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMULL_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_POS_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_POS_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_SBC_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_POS_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_RSC_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_LSL_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL_S +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_LSR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_ASR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_RSC_S_ROR_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MRS_CPSR +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_QADD +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLA_B_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_SWP +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLA_T_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_M_REG_OFF +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLA_B_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLA_T_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_LSL_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TST_LSL_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_LSR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TST_LSR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_ASR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TST_ASR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_ROR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TST_ROR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TST_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0, //OP_MSR_CPSR +INSTR_CYCLES(3) | BRANCH_ALWAYS | SRCREG_POS0, //OP_BX +JIT_BYPASS, //OP_UND +INSTR_CYCLES(3) | BRANCH_ALWAYS | SRCREG_POS0, //OP_BLX_REG +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_QSUB +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_BKPT +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLAW_B +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMULW_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_PRE_INDE_M_REG_OFF +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12, //OP_SMLAW_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMULW_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_LSL_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TEQ_LSL_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_LSR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TEQ_LSR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_ASR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TEQ_ASR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_ROR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_TEQ_ROR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_PRE_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_PRE_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_TEQ_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_PRE_INDE_M_REG_OFF +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MRS_SPSR +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_QDADD +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL_B_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_SWPB +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL_T_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_M_IMM_OFF +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL_B_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS12 | SRCREG_POS16, //OP_SMLAL_T_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_LSL_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMP_LSL_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_LSR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMP_LSR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_ASR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMP_ASR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_ROR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMP_ROR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMP_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0, //OP_MSR_SPSR +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0, //OP_CLZ +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_QDSUB +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMUL_B_B +JIT_BYPASS, //OP_UND +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMUL_T_B +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_PRE_INDE_M_IMM_OFF +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMUL_B_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8, //OP_SMUL_T_T +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_LSL_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMN_LSL_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_LSR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMN_LSR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_ASR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMN_ASR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_ROR_IMM +INSTR_CYCLES(2) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_CMN_ROR_REG +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_PRE_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_PRE_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_CMN_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_PRE_INDE_M_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_ORR_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_ORR_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_PRE_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MOV_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRH_PRE_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSB_PRE_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MOV_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRSH_PRE_INDE_P_REG_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8 | SRCREG_POS16, //OP_BIC_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_BIC_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRH_PRE_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRD_STRD_OFFSET_PRE_INDEX +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_LSL_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_S_LSL_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_LSR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_S_LSR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_ASR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_S_ASR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_ROR_IMM +INSTR_CYCLES(2) | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS8, //OP_MVN_S_ROR_REG +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_LSL_IMM +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_LSR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRH_PRE_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_ASR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSB_PRE_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS0, //OP_MVN_S_ROR_IMM +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRSH_PRE_INDE_P_IMM_OFF +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_AND_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_EOR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SUB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSB_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADD_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ADC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_SBC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_RSC_S_IMM_VAL +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TST_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_CPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_TEQ_IMM_VAL +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +JIT_BYPASS, //OP_UND +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMP_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MSR_SPSR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS16, //OP_CMN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_ORR_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MOV_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_POS16, //OP_BIC_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES(1) | BRANCH_POS12 | SRCREG_NONE, //OP_MVN_S_IMM_VAL +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_POSTIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_M_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS16, //OP_LDR_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS16, //OP_LDRB_P_IMM_OFF_PREIND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_POSTIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_M_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STR_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_POS12 | SRCREG_POS0 | SRCREG_POS16, //OP_LDR_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS12 | SRCREG_POS16, //OP_STRB_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSL_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_LSR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ASR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS16, //OP_LDRB_P_ROR_IMM_OFF_PREIND +JIT_BYPASS, //OP_UND +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIA2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMDB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2 +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_NEVER | SRCREG_STM | SRCREG_POS16, //OP_STMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES_V | BRANCH_LDM | SRCREG_POS16, //OP_LDMIB2_W +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_B +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BL +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_STC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_LDC_M_POSTIND +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_STC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_LDC_OPTION +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_STC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_LDC_P_POSTIND +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_LDC_M_IMM_OFF +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_STC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_LDC_M_PREIND +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_LDC_P_IMM_OFF +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_STC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_LDC_P_PREIND +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_MCR +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +JIT_BYPASS, //OP_CDP +INSTR_CYCLES(3) | BRANCH_NEVER, //OP_MRC +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI +}; + +const uint32_t thumb_attributes[] = +{ +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL_0 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR_0 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_LSR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR_0 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ASR +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM3 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MOV_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SUB_IMM8 +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_AND +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_EOR +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_LSL_REG +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_LSR_REG +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_ASR_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADC_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_SBC_REG +INSTR_CYCLES(2) | BRANCH_NEVER, //OP_ROR_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_TST +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_NEG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_CMN +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ORR +INSTR_CYCLES_V | BRANCH_NEVER, //OP_MUL_REG +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_BIC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_MVN +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS0 | SRCREG_POS3, //OP_ADD_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS0 | SRCREG_POS3, //OP_ADD_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS0 | SRCREG_POS3, //OP_ADD_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS0 | SRCREG_POS3, //OP_ADD_SPE +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS3, //OP_CMP_SPE +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS3, //OP_CMP_SPE +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS3, //OP_CMP_SPE +INSTR_CYCLES(1) | BRANCH_NEVER | SRCREG_POS0 | SRCREG_POS3, //OP_CMP_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS3, //OP_MOV_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS3, //OP_MOV_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS3, //OP_MOV_SPE +INSTR_CYCLES(1) | BRANCH_POS0 | SRCREG_POS3, //OP_MOV_SPE +INSTR_CYCLES(3) | BRANCH_ALWAYS | SRCREG_POS3, //OP_BX_THUMB +INSTR_CYCLES(3) | BRANCH_ALWAYS | SRCREG_POS3, //OP_BX_THUMB +INSTR_CYCLES(4) | BRANCH_ALWAYS | SRCREG_POS3, //OP_BLX_THUMB +INSTR_CYCLES(4) | BRANCH_ALWAYS | SRCREG_POS3, //OP_BLX_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_PCREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRSH_REG_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRB_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDRH_IMM_OFF +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDR_SPREL +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2PC +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADD_2SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADJUST_P_SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADJUST_P_SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADJUST_M_SP +INSTR_CYCLES(1) | BRANCH_NEVER, //OP_ADJUST_M_SP +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH_LR +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH_LR +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH_LR +INSTR_CYCLES_V | BRANCH_NEVER, //OP_PUSH_LR +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_POP +INSTR_CYCLES_V | BRANCH_NEVER, //OP_POP +INSTR_CYCLES_V | BRANCH_NEVER, //OP_POP +INSTR_CYCLES_V | BRANCH_NEVER, //OP_POP +INSTR_CYCLES_V | BRANCH_ALWAYS, //OP_POP_PC +INSTR_CYCLES_V | BRANCH_ALWAYS, //OP_POP_PC +INSTR_CYCLES_V | BRANCH_ALWAYS, //OP_POP_PC +INSTR_CYCLES_V | BRANCH_ALWAYS, //OP_POP_PC +JIT_BYPASS, //OP_BKPT_THUMB +JIT_BYPASS, //OP_BKPT_THUMB +JIT_BYPASS, //OP_BKPT_THUMB +JIT_BYPASS, //OP_BKPT_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +JIT_BYPASS, //OP_UND_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_STMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES_V | BRANCH_NEVER, //OP_LDMIA_THUMB +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_COND +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI_THUMB +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI_THUMB +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI_THUMB +INSTR_CYCLES_V | BRANCH_SWI, //OP_SWI_THUMB +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(1) | BRANCH_ALWAYS, //OP_B_UNCOND +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11 +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/instructions.h audacious-plugins-4.2/src/xsf/desmume/instructions.h --- audacious-plugins-4.1/src/xsf/desmume/instructions.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/instructions.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,24 @@ +/* Copyright (C) 2006 yopyop + Copyright (C) 2012 DeSmuME team + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +typedef uint32_t (FASTCALL *OpFunc)(uint32_t i); +extern const OpFunc arm_instructions_set[2][4096]; +extern const char *arm_instruction_names[4096]; +extern const OpFunc thumb_instructions_set[2][1024]; +extern const char *thumb_instruction_names[1024]; diff -Nru audacious-plugins-4.1/src/xsf/desmume/instruction_tabdef.inc audacious-plugins-4.2/src/xsf/desmume/instruction_tabdef.inc --- audacious-plugins-4.1/src/xsf/desmume/instruction_tabdef.inc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/instruction_tabdef.inc 2022-07-10 01:12:34.000000000 +0000 @@ -1,4400 +1,4369 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2007-2012 DeSmuME team + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -TYPE_RETOUR (*CALLTYPE NOM_TAB[4096])(PARAMETRES)={ - OP_AND_LSL_IMM, // 000 0000 0 0000 - OP_AND_LSL_REG, // 000 0000 0 0001 - OP_AND_LSR_IMM, // 000 0000 0 0010 - OP_AND_LSR_REG, // 000 0000 0 0011 - OP_AND_ASR_IMM, // 000 0000 0 0100 - OP_AND_ASR_REG, // 000 0000 0 0101 - OP_AND_ROR_IMM, // 000 0000 0 0110 - OP_AND_ROR_REG, // 000 0000 0 0111 - - OP_AND_LSL_IMM, // 000 0000 0 1000 - OP_MUL, // 000 0000 0 1001 - OP_AND_LSR_IMM, // OOO OOOO O 1010 - OP_STRH_POS_INDE_M_REG_OFF, // 000 0000 0 1011 - OP_AND_ASR_IMM, // 000 0000 0 1100 - OP_LDRD_STRD_POST_INDEX, - // 000 0000 0 1101 - OP_AND_ROR_IMM, // 000 0000 0 1110 - OP_LDRD_STRD_POST_INDEX, - // 000 0000 0 1111 - - OP_AND_S_LSL_IMM, // 000 0000 1 0000 - OP_AND_S_LSL_REG, // 000 0000 1 0001 - OP_AND_S_LSR_IMM, // 000 0000 1 0010 - OP_AND_S_LSR_REG, // 000 0000 1 0011 - OP_AND_S_ASR_IMM, // 000 0000 1 0100 - OP_AND_S_ASR_REG, // 000 0000 1 0101 - OP_AND_S_ROR_IMM, // 000 0000 1 0110 - OP_AND_S_ROR_REG, // 000 0000 1 0111 - - OP_AND_S_LSL_IMM, // 000 0000 1 1000 - OP_MUL_S, // 000 0000 1 1001 - OP_AND_S_LSR_IMM, // 000 0000 1 1010 - OP_LDRH_POS_INDE_M_REG_OFF, // 000 0000 1 1011 - OP_AND_S_ASR_IMM, // 000 0000 1 1100 - OP_LDRSB_POS_INDE_M_REG_OFF,// 000 0000 1 1101 - OP_AND_S_ROR_IMM, // 000 0000 1 1110 - OP_LDRSH_POS_INDE_M_REG_OFF,// 000 0000 1 1111 - - OP_EOR_LSL_IMM, // 000 0001 0 0000 - OP_EOR_LSL_REG, // 000 0001 0 0001 - OP_EOR_LSR_IMM, // 000 0001 0 0010 - OP_EOR_LSR_REG, // 000 0001 0 0011 - OP_EOR_ASR_IMM, // 000 0001 0 0100 - OP_EOR_ASR_REG, // 000 0001 0 0101 - OP_EOR_ROR_IMM, // 000 0001 0 0110 - OP_EOR_ROR_REG, // 000 0001 0 0111 - - OP_EOR_LSL_IMM, // 000 0001 0 1000 - OP_MLA, // 000 0001 0 1001 - OP_EOR_LSR_IMM, // OOO OOO1 O 1010 - OP_UND, // 000 0001 0 1011 - OP_EOR_ASR_IMM, // 000 0001 0 1100 - OP_UND, // 000 0001 0 1101 - OP_EOR_ROR_IMM, // 000 0001 0 1110 - OP_UND, // 000 0001 0 1111 - - OP_EOR_S_LSL_IMM, // 000 0001 1 0000 - OP_EOR_S_LSL_REG, // 000 0001 1 0001 - OP_EOR_S_LSR_IMM, // 000 0001 1 0010 - OP_EOR_S_LSR_REG, // 000 0001 1 0011 - OP_EOR_S_ASR_IMM, // 000 0001 1 0100 - OP_EOR_S_ASR_REG, // 000 0001 1 0101 - OP_EOR_S_ROR_IMM, // 000 0001 1 0110 - OP_EOR_S_ROR_REG, // 000 0001 1 0111 - - OP_EOR_S_LSL_IMM, // 000 0001 1 1000 - OP_MLA_S, // 000 0001 1 1001 - OP_EOR_S_LSR_IMM, // 000 0001 1 1010 - OP_UND, // 000 0001 1 1011 - OP_EOR_S_ASR_IMM, // 000 0001 1 1100 - OP_UND, // 000 0001 1 1101 - OP_EOR_S_ROR_IMM, // 000 0001 1 1110 - OP_UND, // 000 0001 1 1111 - - OP_SUB_LSL_IMM, // 000 0010 0 0000 - OP_SUB_LSL_REG, // 000 0010 0 0001 - OP_SUB_LSR_IMM, // 000 0010 0 0010 - OP_SUB_LSR_REG, // 000 0010 0 0011 - OP_SUB_ASR_IMM, // 000 0010 0 0100 - OP_SUB_ASR_REG, // 000 0010 0 0101 - OP_SUB_ROR_IMM, // 000 0010 0 0110 - OP_SUB_ROR_REG, // 000 0010 0 0111 - - OP_SUB_LSL_IMM, // 000 0010 0 1000 - OP_UND, // 000 0010 0 1001 - OP_SUB_LSR_IMM, // OOO OO1O O 1010 - OP_STRH_POS_INDE_M_IMM_OFF, // 000 0010 0 1011 - OP_SUB_ASR_IMM, // 000 0010 0 1100 - OP_LDRD_STRD_POST_INDEX, - // 000 0010 0 1101 - OP_SUB_ROR_IMM, // 000 0010 0 1110 - OP_LDRD_STRD_POST_INDEX, - // 000 0010 0 1111 - - OP_SUB_S_LSL_IMM, // 000 0010 1 0000 - OP_SUB_S_LSL_REG, // 000 0010 1 0001 - OP_SUB_S_LSR_IMM, // 000 0010 1 0010 - OP_SUB_S_LSR_REG, // 000 0010 1 0011 - OP_SUB_S_ASR_IMM, // 000 0010 1 0100 - OP_SUB_S_ASR_REG, // 000 0010 1 0101 - OP_SUB_S_ROR_IMM, // 000 0010 1 0110 - OP_SUB_S_ROR_REG, // 000 0010 1 0111 - - OP_SUB_S_LSL_IMM, // 000 0010 1 1000 - OP_UND, // 000 0010 1 1001 - OP_SUB_S_LSR_IMM, // 000 0010 1 1010 - OP_LDRH_POS_INDE_M_IMM_OFF, // 000 0010 1 1011 - OP_SUB_S_ASR_IMM, // 000 0010 1 1100 - OP_LDRSB_POS_INDE_M_IMM_OFF,// 000 0010 1 1101 - OP_SUB_S_ROR_IMM, // 000 0010 1 1110 - OP_LDRSH_POS_INDE_M_IMM_OFF,// 000 0010 1 1111 -//-------------------- - OP_RSB_LSL_IMM, // 000 0011 0 0000 - OP_RSB_LSL_REG, // 000 0011 0 0001 - OP_RSB_LSR_IMM, // 000 0011 0 0010 - OP_RSB_LSR_REG, // 000 0011 0 0011 - OP_RSB_ASR_IMM, // 000 0011 0 0100 - OP_RSB_ASR_REG, // 000 0011 0 0101 - OP_RSB_ROR_IMM, // 000 0011 0 0110 - OP_RSB_ROR_REG, // 000 0011 0 0111 - - OP_RSB_LSL_IMM, // 000 0011 0 1000 - OP_UND, // 000 0011 0 1001 - OP_RSB_LSR_IMM, // OOO OO11 O 1010 - OP_UND, // 000 0011 0 1011 - OP_RSB_ASR_IMM, // 000 0011 0 1100 - OP_UND, // 000 0011 0 1101 - OP_RSB_ROR_IMM, // 000 0011 0 1110 - OP_UND, // 000 0011 0 1111 - - OP_RSB_S_LSL_IMM, // 000 0011 1 0000 - OP_RSB_S_LSL_REG, // 000 0011 1 0001 - OP_RSB_S_LSR_IMM, // 000 0011 1 0010 - OP_RSB_S_LSR_REG, // 000 0011 1 0011 - OP_RSB_S_ASR_IMM, // 000 0011 1 0100 - OP_RSB_S_ASR_REG, // 000 0011 1 0101 - OP_RSB_S_ROR_IMM, // 000 0011 1 0110 - OP_RSB_S_ROR_REG, // 000 0011 1 0111 - - OP_RSB_S_LSL_IMM, // 000 0011 1 1000 - OP_UND, // 000 0011 1 1001 - OP_RSB_S_LSR_IMM, // 000 0011 1 1010 - OP_UND, // 000 0011 1 1011 - OP_RSB_S_ASR_IMM, // 000 0011 1 1100 - OP_UND, // 000 0011 1 1101 - OP_RSB_S_ROR_IMM, // 000 0011 1 1110 - OP_UND, // 000 0011 1 1111 -//-------------------------- - OP_ADD_LSL_IMM, // 000 0100 0 0000 - OP_ADD_LSL_REG, // 000 0100 0 0001 - OP_ADD_LSR_IMM, // 000 0100 0 0010 - OP_ADD_LSR_REG, // 000 0100 0 0011 - OP_ADD_ASR_IMM, // 000 0100 0 0100 - OP_ADD_ASR_REG, // 000 0100 0 0101 - OP_ADD_ROR_IMM, // 000 0100 0 0110 - OP_ADD_ROR_REG, // 000 0100 0 0111 - - OP_ADD_LSL_IMM, // 000 0100 0 1000 - OP_UMULL, // 000 0100 0 1001 - OP_ADD_LSR_IMM, // OOO O10O O 1010 - OP_STRH_POS_INDE_P_REG_OFF, // 000 0100 0 1011 - OP_ADD_ASR_IMM, // 000 0100 0 1100 - OP_LDRD_STRD_POST_INDEX, - // 000 0100 0 1101 - OP_ADD_ROR_IMM, // 000 0100 0 1110 - OP_LDRD_STRD_POST_INDEX, - // 000 0100 0 1111 - - OP_ADD_S_LSL_IMM, // 000 0100 1 0000 - OP_ADD_S_LSL_REG, // 000 0100 1 0001 - OP_ADD_S_LSR_IMM, // 000 0100 1 0010 - OP_ADD_S_LSR_REG, // 000 0100 1 0011 - OP_ADD_S_ASR_IMM, // 000 0100 1 0100 - OP_ADD_S_ASR_REG, // 000 0100 1 0101 - OP_ADD_S_ROR_IMM, // 000 0100 1 0110 - OP_ADD_S_ROR_REG, // 000 0100 1 0111 - - OP_ADD_S_LSL_IMM, // 000 0100 1 1000 - OP_UMULL_S, // 000 0100 1 1001 - OP_ADD_S_LSR_IMM, // 000 0100 1 1010 - OP_LDRH_POS_INDE_P_REG_OFF, // 000 0100 1 1011 - OP_ADD_S_ASR_IMM, // 000 0100 1 1100 - OP_LDRSB_POS_INDE_P_REG_OFF,// 000 0100 1 1101 - OP_ADD_S_ROR_IMM, // 000 0100 1 1110 - OP_LDRSH_POS_INDE_P_REG_OFF,// 000 0100 1 1111 -//----------------------------------------- - OP_ADC_LSL_IMM, // 000 0101 0 0000 - OP_ADC_LSL_REG, // 000 0101 0 0001 - OP_ADC_LSR_IMM, // 000 0101 0 0010 - OP_ADC_LSR_REG, // 000 0101 0 0011 - OP_ADC_ASR_IMM, // 000 0101 0 0100 - OP_ADC_ASR_REG, // 000 0101 0 0101 - OP_ADC_ROR_IMM, // 000 0101 0 0110 - OP_ADC_ROR_REG, // 000 0101 0 0111 - - OP_ADC_LSL_IMM, // 000 0101 0 1000 - OP_UMLAL, // 000 0101 0 1001 - OP_ADC_LSR_IMM, // OOO O101 O 1010 - OP_UND, // 000 0101 0 1011 - OP_ADC_ASR_IMM, // 000 0101 0 1100 - OP_UND, // 000 0101 0 1101 - OP_ADC_ROR_IMM, // 000 0101 0 1110 - OP_UND, // 000 0101 0 1111 - - OP_ADC_S_LSL_IMM, // 000 0101 1 0000 - OP_ADC_S_LSL_REG, // 000 0101 1 0001 - OP_ADC_S_LSR_IMM, // 000 0101 1 0010 - OP_ADC_S_LSR_REG, // 000 0101 1 0011 - OP_ADC_S_ASR_IMM, // 000 0101 1 0100 - OP_ADC_S_ASR_REG, // 000 0101 1 0101 - OP_ADC_S_ROR_IMM, // 000 0101 1 0110 - OP_ADC_S_ROR_REG, // 000 0101 1 0111 - - OP_ADC_S_LSL_IMM, // 000 0101 1 1000 - OP_UMLAL_S, // 000 0101 1 1001 - OP_ADC_S_LSR_IMM, // 000 0101 1 1010 - OP_UND, // 000 0101 1 1011 - OP_ADC_S_ASR_IMM, // 000 0101 1 1100 - OP_UND, // 000 0101 1 1101 - OP_ADC_S_ROR_IMM, // 000 0101 1 1110 - OP_UND, // 000 0101 1 1111 -//------------------------------------------ - OP_SBC_LSL_IMM, // 000 0110 0 0000 - OP_SBC_LSL_REG, // 000 0110 0 0001 - OP_SBC_LSR_IMM, // 000 0110 0 0010 - OP_SBC_LSR_REG, // 000 0110 0 0011 - OP_SBC_ASR_IMM, // 000 0110 0 0100 - OP_SBC_ASR_REG, // 000 0110 0 0101 - OP_SBC_ROR_IMM, // 000 0110 0 0110 - OP_SBC_ROR_REG, // 000 0110 0 0111 - - OP_SBC_LSL_IMM, // 000 0110 0 1000 - OP_SMULL, // 000 0110 0 1001 - OP_SBC_LSR_IMM, // OOO O11O O 1010 - OP_STRH_POS_INDE_P_IMM_OFF, // 000 0110 0 1011 - OP_SBC_ASR_IMM, // 000 0110 0 1100 - OP_LDRD_STRD_POST_INDEX, - // 000 0110 0 1101 - OP_SBC_ROR_IMM, // 000 0110 0 1110 - OP_LDRD_STRD_POST_INDEX, - // 000 0110 0 1111 - - OP_SBC_S_LSL_IMM, // 000 0110 1 0000 - OP_SBC_S_LSL_REG, // 000 0110 1 0001 - OP_SBC_S_LSR_IMM, // 000 0110 1 0010 - OP_SBC_S_LSR_REG, // 000 0110 1 0011 - OP_SBC_S_ASR_IMM, // 000 0110 1 0100 - OP_SBC_S_ASR_REG, // 000 0110 1 0101 - OP_SBC_S_ROR_IMM, // 000 0110 1 0110 - OP_SBC_S_ROR_REG, // 000 0110 1 0111 - - OP_SBC_S_LSL_IMM, // 000 0110 1 1000 - OP_SMULL_S, // 000 0110 1 1001 - OP_SBC_S_LSR_IMM, // 000 0110 1 1010 - OP_LDRH_POS_INDE_P_IMM_OFF, // 000 0110 1 1011 - OP_SBC_S_ASR_IMM, // 000 0110 1 1100 - OP_LDRSB_POS_INDE_P_IMM_OFF,// 000 0110 1 1101 - OP_SBC_S_ROR_IMM, // 000 0110 1 1110 - OP_LDRSH_POS_INDE_P_IMM_OFF,// 000 0110 1 1111 -//------------------------------------------ - OP_RSC_LSL_IMM, // 000 0111 0 0000 - OP_RSC_LSL_REG, // 000 0111 0 0001 - OP_RSC_LSR_IMM, // 000 0111 0 0010 - OP_RSC_LSR_REG, // 000 0111 0 0011 - OP_RSC_ASR_IMM, // 000 0111 0 0100 - OP_RSC_ASR_REG, // 000 0111 0 0101 - OP_RSC_ROR_IMM, // 000 0111 0 0110 - OP_RSC_ROR_REG, // 000 0111 0 0111 - - OP_RSC_LSL_IMM, // 000 0111 0 1000 - OP_SMLAL, // 000 0111 0 1001 - OP_RSC_LSR_IMM, // OOO O111 O 1010 - OP_UND, // 000 0111 0 1011 - OP_RSC_ASR_IMM, // 000 0111 0 1100 - OP_UND, // 000 0111 0 1101 - OP_RSC_ROR_IMM, // 000 0111 0 1110 - OP_UND, // 000 0111 0 1111 - - OP_RSC_S_LSL_IMM, // 000 0111 1 0000 - OP_RSC_S_LSL_REG, // 000 0111 1 0001 - OP_RSC_S_LSR_IMM, // 000 0111 1 0010 - OP_RSC_S_LSR_REG, // 000 0111 1 0011 - OP_RSC_S_ASR_IMM, // 000 0111 1 0100 - OP_RSC_S_ASR_REG, // 000 0111 1 0101 - OP_RSC_S_ROR_IMM, // 000 0111 1 0110 - OP_RSC_S_ROR_REG, // 000 0111 1 0111 - - OP_RSC_S_LSL_IMM, // 000 0111 1 1000 - OP_SMLAL_S, // 000 0111 1 1001 - OP_RSC_S_LSR_IMM, // 000 0111 1 1010 - OP_UND, // 000 0111 1 1011 - OP_RSC_S_ASR_IMM, // 000 0111 1 1100 - OP_UND, // 000 0111 1 1101 - OP_RSC_S_ROR_IMM, // 000 0111 1 1110 - OP_UND, // 000 0111 1 1111 -//------------------------------------------ - OP_MRS_CPSR, // 000 1000 0 0000 - OP_UND, // 000 1000 0 0001 - OP_UND, // 000 1000 0 0010 - OP_UND, // 000 1000 0 0011 - OP_UND, // 000 1000 0 0100 - OP_QADD, // 000 1000 0 0101 - OP_UND, // 000 1000 0 0110 - OP_UND, // 000 1000 0 0111 - - OP_SMLA_B_B, // 000 1000 0 1000 - OP_SWP, // 000 1000 0 1001 - OP_SMLA_T_B, // 000 1000 0 1010 - OP_STRH_M_REG_OFF, // 000 1000 0 1011 - OP_SMLA_B_T, // 000 1000 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1000 0 1101 - OP_SMLA_T_T, // 000 1000 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1000 0 1111 - - OP_TST_LSL_IMM, // 000 1000 1 0000 - OP_TST_LSL_REG, // 000 1000 1 0001 - OP_TST_LSR_IMM, // 000 1000 1 0010 - OP_TST_LSR_REG, // 000 1000 1 0011 - OP_TST_ASR_IMM, // 000 1000 1 0100 - OP_TST_ASR_REG, // 000 1000 1 0101 - OP_TST_ROR_IMM, // 000 1000 1 0110 - OP_TST_ROR_REG, // 000 1000 1 0111 - - OP_TST_LSL_IMM, // 000 1000 1 1000 - OP_UND, // 000 1000 1 1001 - OP_TST_LSR_IMM, // OOO 100O 1 1010 - OP_LDRH_M_REG_OFF, // 000 1000 1 1011 - OP_TST_ASR_IMM, // 000 1000 1 1100 - OP_LDRSB_M_REG_OFF,// 000 1000 1 1101 - OP_TST_ROR_IMM, // 000 1000 1 1110 - OP_LDRSH_M_REG_OFF,// 000 1000 1 1111 -//------------------------------------------ - OP_MSR_CPSR, // 000 1001 0 0000 - OP_BX, // 000 1001 0 0001 - OP_UND, // 000 1001 0 0010 - OP_BLX_REG, // 000 1001 0 0011 - OP_UND, // 000 1001 0 0100 - OP_QSUB, // 000 1001 0 0101 - OP_UND, // 000 1001 0 0110 - OP_BKPT, // 000 1001 0 0111 - - OP_SMLAW_B, // 000 1001 0 1000 - OP_UND, // 000 1001 0 1001 - OP_SMULW_B, // 000 1001 0 1010 - OP_STRH_PRE_INDE_M_REG_OFF, // 000 1001 0 1011 - OP_SMLAW_T, // 000 1001 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1001 0 1101 - OP_SMULW_T, // 000 1001 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1001 0 1111 - - OP_TEQ_LSL_IMM, // 000 1001 1 0000 - OP_TEQ_LSL_REG, // 000 1001 1 0001 - OP_TEQ_LSR_IMM, // 000 1001 1 0010 - OP_TEQ_LSR_REG, // 000 1001 1 0011 - OP_TEQ_ASR_IMM, // 000 1001 1 0100 - OP_TEQ_ASR_REG, // 000 1001 1 0101 - OP_TEQ_ROR_IMM, // 000 1001 1 0110 - OP_TEQ_ROR_REG, // 000 1001 1 0111 - - OP_TEQ_LSL_IMM, // 000 1001 1 1000 - OP_UND, // 000 1001 1 1001 - OP_TEQ_LSR_IMM, // OOO 1001 1 1010 - OP_LDRH_PRE_INDE_M_REG_OFF, // 000 1001 1 1011 - OP_TEQ_ASR_IMM, // 000 1001 1 1100 - OP_LDRSB_PRE_INDE_M_REG_OFF, // 000 1001 1 1101 - OP_TEQ_ROR_IMM, // 000 1001 1 1110 - OP_LDRSH_PRE_INDE_M_REG_OFF, // 000 1001 1 1111 -//------------------------------------------ - OP_MRS_SPSR, // 000 1010 0 0000 - OP_UND, // 000 1010 0 0001 - OP_UND, // 000 1010 0 0010 - OP_UND, // 000 1010 0 0011 - OP_UND, // 000 1010 0 0100 - OP_QDADD, // 000 1010 0 0101 - OP_UND, // 000 1010 0 0110 - OP_UND, // 000 1010 0 0111 - - OP_SMLAL_B_B, // 000 1010 0 1000 - OP_SWPB, // 000 1010 0 1001 - OP_SMLAL_T_B, // 000 1010 0 1010 - OP_STRH_M_IMM_OFF, // 000 1010 0 1011 - OP_SMLAL_B_T, // 000 1010 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1010 0 1101 - OP_SMLAL_T_T, // 000 1010 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1010 0 1111 - - OP_CMP_LSL_IMM, // 000 1010 1 0000 - OP_CMP_LSL_REG, // 000 1010 1 0001 - OP_CMP_LSR_IMM, // 000 1010 1 0010 - OP_CMP_LSR_REG, // 000 1010 1 0011 - OP_CMP_ASR_IMM, // 000 1010 1 0100 - OP_CMP_ASR_REG, // 000 1010 1 0101 - OP_CMP_ROR_IMM, // 000 1010 1 0110 - OP_CMP_ROR_REG, // 000 1010 1 0111 - - OP_CMP_LSL_IMM, // 000 1010 1 1000 - OP_UND, // 000 1010 1 1001 - OP_CMP_LSR_IMM, // OOO 1O1O 1 1010 - OP_LDRH_M_IMM_OFF, // 000 1010 1 1011 - OP_CMP_ASR_IMM, // 000 1010 1 1100 - OP_LDRSB_M_IMM_OFF,// 000 1010 1 1101 - OP_CMP_ROR_IMM, // 000 1010 1 1110 - OP_LDRSH_M_IMM_OFF,// 000 1010 1 1111 -//------------------------------------------ - OP_MSR_SPSR, // 000 1011 0 0000 - OP_CLZ, // 000 1011 0 0001 - OP_UND, // 000 1011 0 0010 - OP_UND, // 000 1011 0 0011 - OP_UND, // 000 1011 0 0100 - OP_QDSUB, // 000 1011 0 0101 - OP_UND, // 000 1011 0 0110 - OP_UND, // 000 1011 0 0111 - - OP_SMUL_B_B, // 000 1011 0 1000 - OP_UND, // 000 1011 0 1001 - OP_SMUL_T_B, // 000 1011 0 1010 - OP_STRH_PRE_INDE_M_IMM_OFF, // 000 1011 0 1011 - OP_SMUL_B_T, // 000 1011 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1011 0 1101 - OP_SMUL_T_T, // 000 1011 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1011 0 1111 - - OP_CMN_LSL_IMM, // 000 1011 1 0000 - OP_CMN_LSL_REG, // 000 1011 1 0001 - OP_CMN_LSR_IMM, // 000 1011 1 0010 - OP_CMN_LSR_REG, // 000 1011 1 0011 - OP_CMN_ASR_IMM, // 000 1011 1 0100 - OP_CMN_ASR_REG, // 000 1011 1 0101 - OP_CMN_ROR_IMM, // 000 1011 1 0110 - OP_CMN_ROR_REG, // 000 1011 1 0111 - - OP_CMN_LSL_IMM, // 000 1011 1 1000 - OP_UND, // 000 1011 1 1001 - OP_CMN_LSR_IMM, // OOO 1O11 1 1010 - OP_LDRH_PRE_INDE_M_IMM_OFF, // 000 1011 1 1011 - OP_CMN_ASR_IMM, // 000 1011 1 1100 - OP_LDRSB_PRE_INDE_M_IMM_OFF, // 000 1011 1 1101 - OP_CMN_ROR_IMM, // 000 1011 1 1110 - OP_LDRSH_PRE_INDE_M_IMM_OFF, // 000 1011 1 1111 -//------------------------------------------ - OP_ORR_LSL_IMM, // 000 1100 0 0000 - OP_ORR_LSL_REG, // 000 1100 0 0001 - OP_ORR_LSR_IMM, // 000 1100 0 0010 - OP_ORR_LSR_REG, // 000 1100 0 0011 - OP_ORR_ASR_IMM, // 000 1100 0 0100 - OP_ORR_ASR_REG, // 000 1100 0 0101 - OP_ORR_ROR_IMM, // 000 1100 0 0110 - OP_ORR_ROR_REG, // 000 1100 0 0111 - - OP_ORR_LSL_IMM, // 000 1100 0 1000 - OP_UND, // 000 1100 0 1001 - OP_ORR_LSR_IMM, // OOO 110O O 1010 - OP_STRH_P_REG_OFF, // 000 1100 0 1011 - OP_ORR_ASR_IMM, // 000 1100 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1100 0 1101 - OP_ORR_ROR_IMM, // 000 1100 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1100 0 1111 - - OP_ORR_S_LSL_IMM, // 000 1100 1 0000 - OP_ORR_S_LSL_REG, // 000 1100 1 0001 - OP_ORR_S_LSR_IMM, // 000 1100 1 0010 - OP_ORR_S_LSR_REG, // 000 1100 1 0011 - OP_ORR_S_ASR_IMM, // 000 1100 1 0100 - OP_ORR_S_ASR_REG, // 000 1100 1 0101 - OP_ORR_S_ROR_IMM, // 000 1100 1 0110 - OP_ORR_S_ROR_REG, // 000 1100 1 0111 - - OP_ORR_S_LSL_IMM, // 000 1100 1 1000 - OP_UND, // 000 1100 1 1001 - OP_ORR_S_LSR_IMM, // 000 1100 1 1010 - OP_LDRH_P_REG_OFF, // 000 1100 1 1011 - OP_ORR_S_ASR_IMM, // 000 1100 1 1100 - OP_LDRSB_P_REG_OFF,// 000 1100 1 1101 - OP_ORR_S_ROR_IMM, // 000 1100 1 1110 - OP_LDRSH_P_REG_OFF,// 000 1100 1 1111 -//------------------------------------------ - OP_MOV_LSL_IMM, // 000 1101 0 0000 - OP_MOV_LSL_REG, // 000 1101 0 0001 - OP_MOV_LSR_IMM, // 000 1101 0 0010 - OP_MOV_LSR_REG, // 000 1101 0 0011 - OP_MOV_ASR_IMM, // 000 1101 0 0100 - OP_MOV_ASR_REG, // 000 1101 0 0101 - OP_MOV_ROR_IMM, // 000 1101 0 0110 - OP_MOV_ROR_REG, // 000 1101 0 0111 - - OP_MOV_LSL_IMM, // 000 1101 0 1000 - OP_UND, // 000 1101 0 1001 - OP_MOV_LSR_IMM, // OOO 1101 O 1010 - OP_STRH_PRE_INDE_P_REG_OFF, // 000 1101 0 1011 - OP_MOV_ASR_IMM, // 000 1101 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1101 0 1101 - OP_MOV_ROR_IMM, // 000 1101 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1101 0 1111 - - OP_MOV_S_LSL_IMM, // 000 1101 1 0000 - OP_MOV_S_LSL_REG, // 000 1101 1 0001 - OP_MOV_S_LSR_IMM, // 000 1101 1 0010 - OP_MOV_S_LSR_REG, // 000 1101 1 0011 - OP_MOV_S_ASR_IMM, // 000 1101 1 0100 - OP_MOV_S_ASR_REG, // 000 1101 1 0101 - OP_MOV_S_ROR_IMM, // 000 1101 1 0110 - OP_MOV_S_ROR_REG, // 000 1101 1 0111 - - OP_MOV_S_LSL_IMM, // 000 1101 1 1000 - OP_UND, // 000 1101 1 1001 - OP_MOV_S_LSR_IMM, // 000 1101 1 1010 - OP_LDRH_PRE_INDE_P_REG_OFF, // 000 1101 1 1011 - OP_MOV_S_ASR_IMM, // 000 1101 1 1100 - OP_LDRSB_PRE_INDE_P_REG_OFF,// 000 1101 1 1101 - OP_MOV_S_ROR_IMM, // 000 1101 1 1110 - OP_LDRSH_PRE_INDE_P_REG_OFF,// 000 1101 1 1111 -//------------------------------------------ - OP_BIC_LSL_IMM, // 000 1110 0 0000 - OP_BIC_LSL_REG, // 000 1110 0 0001 - OP_BIC_LSR_IMM, // 000 1110 0 0010 - OP_BIC_LSR_REG, // 000 1110 0 0011 - OP_BIC_ASR_IMM, // 000 1110 0 0100 - OP_BIC_ASR_REG, // 000 1110 0 0101 - OP_BIC_ROR_IMM, // 000 1110 0 0110 - OP_BIC_ROR_REG, // 000 1110 0 0111 - - OP_BIC_LSL_IMM, // 000 1110 0 1000 - OP_UND, // 000 1110 0 1001 - OP_BIC_LSR_IMM, // OOO 111O O 1010 - OP_STRH_P_IMM_OFF, // 000 1110 0 1011 - OP_BIC_ASR_IMM, // 000 1110 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1110 0 1101 - OP_BIC_ROR_IMM, // 000 1110 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1110 0 1111 - - OP_BIC_S_LSL_IMM, // 000 1110 1 0000 - OP_BIC_S_LSL_REG, // 000 1110 1 0001 - OP_BIC_S_LSR_IMM, // 000 1110 1 0010 - OP_BIC_S_LSR_REG, // 000 1110 1 0011 - OP_BIC_S_ASR_IMM, // 000 1110 1 0100 - OP_BIC_S_ASR_REG, // 000 1110 1 0101 - OP_BIC_S_ROR_IMM, // 000 1110 1 0110 - OP_BIC_S_ROR_REG, // 000 1110 1 0111 - - OP_BIC_S_LSL_IMM, // 000 1110 1 1000 - OP_UND, // 000 1110 1 1001 - OP_BIC_S_LSR_IMM, // 000 1110 1 1010 - OP_LDRH_P_IMM_OFF, // 000 1110 1 1011 - OP_BIC_S_ASR_IMM, // 000 1110 1 1100 - OP_LDRSB_P_IMM_OFF,// 000 1110 1 1101 - OP_BIC_S_ROR_IMM, // 000 1110 1 1110 - OP_LDRSH_P_IMM_OFF,// 000 1110 1 1111 -//------------------------------------------- - OP_MVN_LSL_IMM, // 000 1111 0 0000 - OP_MVN_LSL_REG, // 000 1111 0 0001 - OP_MVN_LSR_IMM, // 000 1111 0 0010 - OP_MVN_LSR_REG, // 000 1111 0 0011 - OP_MVN_ASR_IMM, // 000 1111 0 0100 - OP_MVN_ASR_REG, // 000 1111 0 0101 - OP_MVN_ROR_IMM, // 000 1111 0 0110 - OP_MVN_ROR_REG, // 000 1111 0 0111 - - OP_MVN_LSL_IMM, // 000 1111 0 1000 - OP_UND, // 000 1111 0 1001 - OP_MVN_LSR_IMM, // OOO 1111 O 1010 - OP_STRH_PRE_INDE_P_IMM_OFF, // 000 1111 0 1011 - OP_MVN_ASR_IMM, // 000 1111 0 1100 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1111 0 1101 - OP_MVN_ROR_IMM, // 000 1111 0 1110 - OP_LDRD_STRD_OFFSET_PRE_INDEX, - // 000 1111 0 1111 - - OP_MVN_S_LSL_IMM, // 000 1111 1 0000 - OP_MVN_S_LSL_REG, // 000 1111 1 0001 - OP_MVN_S_LSR_IMM, // 000 1111 1 0010 - OP_MVN_S_LSR_REG, // 000 1111 1 0011 - OP_MVN_S_ASR_IMM, // 000 1111 1 0100 - OP_MVN_S_ASR_REG, // 000 1111 1 0101 - OP_MVN_S_ROR_IMM, // 000 1111 1 0110 - OP_MVN_S_ROR_REG, // 000 1111 1 0111 - - OP_MVN_S_LSL_IMM, // 000 1111 1 1000 - OP_UND, // 000 1111 1 1001 - OP_MVN_S_LSR_IMM, // 000 1111 1 1010 - OP_LDRH_PRE_INDE_P_IMM_OFF, // 000 1111 1 1011 - OP_MVN_S_ASR_IMM, // 000 1111 1 1100 - OP_LDRSB_PRE_INDE_P_IMM_OFF,// 000 1111 1 1101 - OP_MVN_S_ROR_IMM, // 000 1111 1 1110 - OP_LDRSH_PRE_INDE_P_IMM_OFF,// 000 1111 1 1111 -//------------------------------------------- - OP_AND_IMM_VAL, // 001 0000 0 0000 - OP_AND_IMM_VAL, // 001 0000 0 0001 - OP_AND_IMM_VAL, // 001 0000 0 0010 - OP_AND_IMM_VAL, // 001 0000 0 0011 - OP_AND_IMM_VAL, // 001 0000 0 0100 - OP_AND_IMM_VAL, // 001 0000 0 0101 - OP_AND_IMM_VAL, // 001 0000 0 0110 - OP_AND_IMM_VAL, // 001 0000 0 0111 - OP_AND_IMM_VAL, // 001 0000 0 1000 - OP_AND_IMM_VAL, // 001 0000 0 1001 - OP_AND_IMM_VAL, // 001 0000 0 1010 - OP_AND_IMM_VAL, // 001 0000 0 1011 - OP_AND_IMM_VAL, // 001 0000 0 1100 - OP_AND_IMM_VAL, // 001 0000 0 1101 - OP_AND_IMM_VAL, // 001 0000 0 1110 - OP_AND_IMM_VAL, // 001 0000 0 1111 - - OP_AND_S_IMM_VAL, // 001 0000 1 0000 - OP_AND_S_IMM_VAL, // 001 0000 1 0001 - OP_AND_S_IMM_VAL, // 001 0000 1 0010 - OP_AND_S_IMM_VAL, // 001 0000 1 0011 - OP_AND_S_IMM_VAL, // 001 0000 1 0100 - OP_AND_S_IMM_VAL, // 001 0000 1 0101 - OP_AND_S_IMM_VAL, // 001 0000 1 0110 - OP_AND_S_IMM_VAL, // 001 0000 1 0111 - OP_AND_S_IMM_VAL, // 001 0000 1 1000 - OP_AND_S_IMM_VAL, // 001 0000 1 1001 - OP_AND_S_IMM_VAL, // 001 0000 1 1010 - OP_AND_S_IMM_VAL, // 001 0000 1 1011 - OP_AND_S_IMM_VAL, // 001 0000 1 1100 - OP_AND_S_IMM_VAL, // 001 0000 1 1101 - OP_AND_S_IMM_VAL, // 001 0000 1 1110 - OP_AND_S_IMM_VAL, // 001 0000 1 1111 -//------------------------------------------ - OP_EOR_IMM_VAL, // 001 0001 0 0000 - OP_EOR_IMM_VAL, // 001 0001 0 0001 - OP_EOR_IMM_VAL, // 001 0001 0 0010 - OP_EOR_IMM_VAL, // 001 0001 0 0011 - OP_EOR_IMM_VAL, // 001 0001 0 0100 - OP_EOR_IMM_VAL, // 001 0001 0 0101 - OP_EOR_IMM_VAL, // 001 0001 0 0110 - OP_EOR_IMM_VAL, // 001 0001 0 0111 - OP_EOR_IMM_VAL, // 001 0001 0 1000 - OP_EOR_IMM_VAL, // 001 0001 0 1001 - OP_EOR_IMM_VAL, // 001 0001 0 1010 - OP_EOR_IMM_VAL, // 001 0001 0 1011 - OP_EOR_IMM_VAL, // 001 0001 0 1100 - OP_EOR_IMM_VAL, // 001 0001 0 1101 - OP_EOR_IMM_VAL, // 001 0001 0 1110 - OP_EOR_IMM_VAL, // 001 0001 0 1111 - - OP_EOR_S_IMM_VAL, // 001 0001 1 0000 - OP_EOR_S_IMM_VAL, // 001 0001 1 0001 - OP_EOR_S_IMM_VAL, // 001 0001 1 0010 - OP_EOR_S_IMM_VAL, // 001 0001 1 0011 - OP_EOR_S_IMM_VAL, // 001 0001 1 0100 - OP_EOR_S_IMM_VAL, // 001 0001 1 0101 - OP_EOR_S_IMM_VAL, // 001 0001 1 0110 - OP_EOR_S_IMM_VAL, // 001 0001 1 0111 - OP_EOR_S_IMM_VAL, // 001 0001 1 1000 - OP_EOR_S_IMM_VAL, // 001 0001 1 1001 - OP_EOR_S_IMM_VAL, // 001 0001 1 1010 - OP_EOR_S_IMM_VAL, // 001 0001 1 1011 - OP_EOR_S_IMM_VAL, // 001 0001 1 1100 - OP_EOR_S_IMM_VAL, // 001 0001 1 1101 - OP_EOR_S_IMM_VAL, // 001 0001 1 1110 - OP_EOR_S_IMM_VAL, // 001 0001 1 1111 -//------------------------------------------ - OP_SUB_IMM_VAL, // 001 0010 0 0000 - OP_SUB_IMM_VAL, // 001 0010 0 0001 - OP_SUB_IMM_VAL, // 001 0010 0 0010 - OP_SUB_IMM_VAL, // 001 0010 0 0011 - OP_SUB_IMM_VAL, // 001 0010 0 0100 - OP_SUB_IMM_VAL, // 001 0010 0 0101 - OP_SUB_IMM_VAL, // 001 0010 0 0110 - OP_SUB_IMM_VAL, // 001 0010 0 0111 - OP_SUB_IMM_VAL, // 001 0010 0 1000 - OP_SUB_IMM_VAL, // 001 0010 0 1001 - OP_SUB_IMM_VAL, // 001 0010 0 1010 - OP_SUB_IMM_VAL, // 001 0010 0 1011 - OP_SUB_IMM_VAL, // 001 0010 0 1100 - OP_SUB_IMM_VAL, // 001 0010 0 1101 - OP_SUB_IMM_VAL, // 001 0010 0 1110 - OP_SUB_IMM_VAL, // 001 0010 0 1111 - - OP_SUB_S_IMM_VAL, // 001 0010 1 0000 - OP_SUB_S_IMM_VAL, // 001 0010 1 0001 - OP_SUB_S_IMM_VAL, // 001 0010 1 0010 - OP_SUB_S_IMM_VAL, // 001 0010 1 0011 - OP_SUB_S_IMM_VAL, // 001 0010 1 0100 - OP_SUB_S_IMM_VAL, // 001 0010 1 0101 - OP_SUB_S_IMM_VAL, // 001 0010 1 0110 - OP_SUB_S_IMM_VAL, // 001 0010 1 0111 - OP_SUB_S_IMM_VAL, // 001 0010 1 1000 - OP_SUB_S_IMM_VAL, // 001 0010 1 1001 - OP_SUB_S_IMM_VAL, // 001 0010 1 1010 - OP_SUB_S_IMM_VAL, // 001 0010 1 1011 - OP_SUB_S_IMM_VAL, // 001 0010 1 1100 - OP_SUB_S_IMM_VAL, // 001 0010 1 1101 - OP_SUB_S_IMM_VAL, // 001 0010 1 1110 - OP_SUB_S_IMM_VAL, // 001 0010 1 1111 -//------------------------------------------ - OP_RSB_IMM_VAL, // 001 0011 0 0000 - OP_RSB_IMM_VAL, // 001 0011 0 0001 - OP_RSB_IMM_VAL, // 001 0011 0 0010 - OP_RSB_IMM_VAL, // 001 0011 0 0011 - OP_RSB_IMM_VAL, // 001 0011 0 0100 - OP_RSB_IMM_VAL, // 001 0011 0 0101 - OP_RSB_IMM_VAL, // 001 0011 0 0110 - OP_RSB_IMM_VAL, // 001 0011 0 0111 - OP_RSB_IMM_VAL, // 001 0011 0 1000 - OP_RSB_IMM_VAL, // 001 0011 0 1001 - OP_RSB_IMM_VAL, // 001 0011 0 1010 - OP_RSB_IMM_VAL, // 001 0011 0 1011 - OP_RSB_IMM_VAL, // 001 0011 0 1100 - OP_RSB_IMM_VAL, // 001 0011 0 1101 - OP_RSB_IMM_VAL, // 001 0011 0 1110 - OP_RSB_IMM_VAL, // 001 0011 0 1111 - - OP_RSB_S_IMM_VAL, // 001 0011 1 0000 - OP_RSB_S_IMM_VAL, // 001 0011 1 0001 - OP_RSB_S_IMM_VAL, // 001 0011 1 0010 - OP_RSB_S_IMM_VAL, // 001 0011 1 0011 - OP_RSB_S_IMM_VAL, // 001 0011 1 0100 - OP_RSB_S_IMM_VAL, // 001 0011 1 0101 - OP_RSB_S_IMM_VAL, // 001 0011 1 0110 - OP_RSB_S_IMM_VAL, // 001 0011 1 0111 - OP_RSB_S_IMM_VAL, // 001 0011 1 1000 - OP_RSB_S_IMM_VAL, // 001 0011 1 1001 - OP_RSB_S_IMM_VAL, // 001 0011 1 1010 - OP_RSB_S_IMM_VAL, // 001 0011 1 1011 - OP_RSB_S_IMM_VAL, // 001 0011 1 1100 - OP_RSB_S_IMM_VAL, // 001 0011 1 1101 - OP_RSB_S_IMM_VAL, // 001 0011 1 1110 - OP_RSB_S_IMM_VAL, // 001 0011 1 1111 -//------------------------------------------ - OP_ADD_IMM_VAL, // 001 0100 0 0000 - OP_ADD_IMM_VAL, // 001 0100 0 0001 - OP_ADD_IMM_VAL, // 001 0100 0 0010 - OP_ADD_IMM_VAL, // 001 0100 0 0011 - OP_ADD_IMM_VAL, // 001 0100 0 0100 - OP_ADD_IMM_VAL, // 001 0100 0 0101 - OP_ADD_IMM_VAL, // 001 0100 0 0110 - OP_ADD_IMM_VAL, // 001 0100 0 0111 - OP_ADD_IMM_VAL, // 001 0100 0 1000 - OP_ADD_IMM_VAL, // 001 0100 0 1001 - OP_ADD_IMM_VAL, // 001 0100 0 1010 - OP_ADD_IMM_VAL, // 001 0100 0 1011 - OP_ADD_IMM_VAL, // 001 0100 0 1100 - OP_ADD_IMM_VAL, // 001 0100 0 1101 - OP_ADD_IMM_VAL, // 001 0100 0 1110 - OP_ADD_IMM_VAL, // 001 0100 0 1111 - - OP_ADD_S_IMM_VAL, // 001 0100 1 0000 - OP_ADD_S_IMM_VAL, // 001 0100 1 0001 - OP_ADD_S_IMM_VAL, // 001 0100 1 0010 - OP_ADD_S_IMM_VAL, // 001 0100 1 0011 - OP_ADD_S_IMM_VAL, // 001 0100 1 0100 - OP_ADD_S_IMM_VAL, // 001 0100 1 0101 - OP_ADD_S_IMM_VAL, // 001 0100 1 0110 - OP_ADD_S_IMM_VAL, // 001 0100 1 0111 - OP_ADD_S_IMM_VAL, // 001 0100 1 1000 - OP_ADD_S_IMM_VAL, // 001 0100 1 1001 - OP_ADD_S_IMM_VAL, // 001 0100 1 1010 - OP_ADD_S_IMM_VAL, // 001 0100 1 1011 - OP_ADD_S_IMM_VAL, // 001 0100 1 1100 - OP_ADD_S_IMM_VAL, // 001 0100 1 1101 - OP_ADD_S_IMM_VAL, // 001 0100 1 1110 - OP_ADD_S_IMM_VAL, // 001 0100 1 1111 -//------------------------------------------ - OP_ADC_IMM_VAL, // 001 0101 0 0000 - OP_ADC_IMM_VAL, // 001 0101 0 0001 - OP_ADC_IMM_VAL, // 001 0101 0 0010 - OP_ADC_IMM_VAL, // 001 0101 0 0011 - OP_ADC_IMM_VAL, // 001 0101 0 0100 - OP_ADC_IMM_VAL, // 001 0101 0 0101 - OP_ADC_IMM_VAL, // 001 0101 0 0110 - OP_ADC_IMM_VAL, // 001 0101 0 0111 - OP_ADC_IMM_VAL, // 001 0101 0 1000 - OP_ADC_IMM_VAL, // 001 0101 0 1001 - OP_ADC_IMM_VAL, // 001 0101 0 1010 - OP_ADC_IMM_VAL, // 001 0101 0 1011 - OP_ADC_IMM_VAL, // 001 0101 0 1100 - OP_ADC_IMM_VAL, // 001 0101 0 1101 - OP_ADC_IMM_VAL, // 001 0101 0 1110 - OP_ADC_IMM_VAL, // 001 0101 0 1111 - - OP_ADC_S_IMM_VAL, // 001 0101 1 0000 - OP_ADC_S_IMM_VAL, // 001 0101 1 0001 - OP_ADC_S_IMM_VAL, // 001 0101 1 0010 - OP_ADC_S_IMM_VAL, // 001 0101 1 0011 - OP_ADC_S_IMM_VAL, // 001 0101 1 0100 - OP_ADC_S_IMM_VAL, // 001 0101 1 0101 - OP_ADC_S_IMM_VAL, // 001 0101 1 0110 - OP_ADC_S_IMM_VAL, // 001 0101 1 0111 - OP_ADC_S_IMM_VAL, // 001 0101 1 1000 - OP_ADC_S_IMM_VAL, // 001 0101 1 1001 - OP_ADC_S_IMM_VAL, // 001 0101 1 1010 - OP_ADC_S_IMM_VAL, // 001 0101 1 1011 - OP_ADC_S_IMM_VAL, // 001 0101 1 1100 - OP_ADC_S_IMM_VAL, // 001 0101 1 1101 - OP_ADC_S_IMM_VAL, // 001 0101 1 1110 - OP_ADC_S_IMM_VAL, // 001 0101 1 1111 -//------------------------------------------ - OP_SBC_IMM_VAL, // 001 0110 0 0000 - OP_SBC_IMM_VAL, // 001 0110 0 0001 - OP_SBC_IMM_VAL, // 001 0110 0 0010 - OP_SBC_IMM_VAL, // 001 0110 0 0011 - OP_SBC_IMM_VAL, // 001 0110 0 0100 - OP_SBC_IMM_VAL, // 001 0110 0 0101 - OP_SBC_IMM_VAL, // 001 0110 0 0110 - OP_SBC_IMM_VAL, // 001 0110 0 0111 - OP_SBC_IMM_VAL, // 001 0110 0 1000 - OP_SBC_IMM_VAL, // 001 0110 0 1001 - OP_SBC_IMM_VAL, // 001 0110 0 1010 - OP_SBC_IMM_VAL, // 001 0110 0 1011 - OP_SBC_IMM_VAL, // 001 0110 0 1100 - OP_SBC_IMM_VAL, // 001 0110 0 1101 - OP_SBC_IMM_VAL, // 001 0110 0 1110 - OP_SBC_IMM_VAL, // 001 0110 0 1111 - - OP_SBC_S_IMM_VAL, // 001 0110 1 0000 - OP_SBC_S_IMM_VAL, // 001 0110 1 0001 - OP_SBC_S_IMM_VAL, // 001 0110 1 0010 - OP_SBC_S_IMM_VAL, // 001 0110 1 0011 - OP_SBC_S_IMM_VAL, // 001 0110 1 0100 - OP_SBC_S_IMM_VAL, // 001 0110 1 0101 - OP_SBC_S_IMM_VAL, // 001 0110 1 0110 - OP_SBC_S_IMM_VAL, // 001 0110 1 0111 - OP_SBC_S_IMM_VAL, // 001 0110 1 1000 - OP_SBC_S_IMM_VAL, // 001 0110 1 1001 - OP_SBC_S_IMM_VAL, // 001 0110 1 1010 - OP_SBC_S_IMM_VAL, // 001 0110 1 1011 - OP_SBC_S_IMM_VAL, // 001 0110 1 1100 - OP_SBC_S_IMM_VAL, // 001 0110 1 1101 - OP_SBC_S_IMM_VAL, // 001 0110 1 1110 - OP_SBC_S_IMM_VAL, // 001 0110 1 1111 -//------------------------------------------ - OP_RSC_IMM_VAL, // 001 0111 0 0000 - OP_RSC_IMM_VAL, // 001 0111 0 0001 - OP_RSC_IMM_VAL, // 001 0111 0 0010 - OP_RSC_IMM_VAL, // 001 0111 0 0011 - OP_RSC_IMM_VAL, // 001 0111 0 0100 - OP_RSC_IMM_VAL, // 001 0111 0 0101 - OP_RSC_IMM_VAL, // 001 0111 0 0110 - OP_RSC_IMM_VAL, // 001 0111 0 0111 - OP_RSC_IMM_VAL, // 001 0111 0 1000 - OP_RSC_IMM_VAL, // 001 0111 0 1001 - OP_RSC_IMM_VAL, // 001 0111 0 1010 - OP_RSC_IMM_VAL, // 001 0111 0 1011 - OP_RSC_IMM_VAL, // 001 0111 0 1100 - OP_RSC_IMM_VAL, // 001 0111 0 1101 - OP_RSC_IMM_VAL, // 001 0111 0 1110 - OP_RSC_IMM_VAL, // 001 0111 0 1111 - - OP_RSC_S_IMM_VAL, // 001 0111 1 0000 - OP_RSC_S_IMM_VAL, // 001 0111 1 0001 - OP_RSC_S_IMM_VAL, // 001 0111 1 0010 - OP_RSC_S_IMM_VAL, // 001 0111 1 0011 - OP_RSC_S_IMM_VAL, // 001 0111 1 0100 - OP_RSC_S_IMM_VAL, // 001 0111 1 0101 - OP_RSC_S_IMM_VAL, // 001 0111 1 0110 - OP_RSC_S_IMM_VAL, // 001 0111 1 0111 - OP_RSC_S_IMM_VAL, // 001 0111 1 1000 - OP_RSC_S_IMM_VAL, // 001 0111 1 1001 - OP_RSC_S_IMM_VAL, // 001 0111 1 1010 - OP_RSC_S_IMM_VAL, // 001 0111 1 1011 - OP_RSC_S_IMM_VAL, // 001 0111 1 1100 - OP_RSC_S_IMM_VAL, // 001 0111 1 1101 - OP_RSC_S_IMM_VAL, // 001 0111 1 1110 - OP_RSC_S_IMM_VAL, // 001 0111 1 1111 -//------------------------------------------ - OP_UND, // 001 1000 0 0000 - OP_UND, // 001 1000 0 0001 - OP_UND, // 001 1000 0 0010 - OP_UND, // 001 1000 0 0011 - OP_UND, // 001 1000 0 0100 - OP_UND, // 001 1000 0 0101 - OP_UND, // 001 1000 0 0110 - OP_UND, // 001 1000 0 0111 - OP_UND, // 001 1000 0 1000 - OP_UND, // 001 1000 0 1001 - OP_UND, // 001 1000 0 1010 - OP_UND, // 001 1000 0 1011 - OP_UND, // 001 1000 0 1100 - OP_UND, // 001 1000 0 1101 - OP_UND, // 001 1000 0 1110 - OP_UND, // 001 1000 0 1111 - - OP_TST_IMM_VAL, // 001 1000 1 0000 - OP_TST_IMM_VAL, // 001 1000 1 0001 - OP_TST_IMM_VAL, // 001 1000 1 0010 - OP_TST_IMM_VAL, // 001 1000 1 0011 - OP_TST_IMM_VAL, // 001 1000 1 0100 - OP_TST_IMM_VAL, // 001 1000 1 0101 - OP_TST_IMM_VAL, // 001 1000 1 0110 - OP_TST_IMM_VAL, // 001 1000 1 0111 - OP_TST_IMM_VAL, // 001 1000 1 1000 - OP_TST_IMM_VAL, // 001 1000 1 1001 - OP_TST_IMM_VAL, // 001 1000 1 1010 - OP_TST_IMM_VAL, // 001 1000 1 1011 - OP_TST_IMM_VAL, // 001 1000 1 1100 - OP_TST_IMM_VAL, // 001 1000 1 1101 - OP_TST_IMM_VAL, // 001 1000 1 1110 - OP_TST_IMM_VAL, // 001 1000 1 1111 -//------------------------------------------ - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0000 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0001 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0010 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0011 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0100 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0101 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0110 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 0111 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1000 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1001 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1010 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1011 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1100 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1101 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1110 - OP_MSR_CPSR_IMM_VAL, // 001 1001 0 1111 - - OP_TEQ_IMM_VAL, // 001 1001 1 0000 - OP_TEQ_IMM_VAL, // 001 1001 1 0001 - OP_TEQ_IMM_VAL, // 001 1001 1 0010 - OP_TEQ_IMM_VAL, // 001 1001 1 0011 - OP_TEQ_IMM_VAL, // 001 1001 1 0100 - OP_TEQ_IMM_VAL, // 001 1001 1 0101 - OP_TEQ_IMM_VAL, // 001 1001 1 0110 - OP_TEQ_IMM_VAL, // 001 1001 1 0111 - OP_TEQ_IMM_VAL, // 001 1001 1 1000 - OP_TEQ_IMM_VAL, // 001 1001 1 1001 - OP_TEQ_IMM_VAL, // 001 1001 1 1010 - OP_TEQ_IMM_VAL, // 001 1001 1 1011 - OP_TEQ_IMM_VAL, // 001 1001 1 1100 - OP_TEQ_IMM_VAL, // 001 1001 1 1101 - OP_TEQ_IMM_VAL, // 001 1001 1 1110 - OP_TEQ_IMM_VAL, // 001 1001 1 1111 -//------------------------------------------ - OP_UND, // 001 1010 0 0000 - OP_UND, // 001 1010 0 0001 - OP_UND, // 001 1010 0 0010 - OP_UND, // 001 1010 0 0011 - OP_UND, // 001 1010 0 0100 - OP_UND, // 001 1010 0 0101 - OP_UND, // 001 1010 0 0110 - OP_UND, // 001 1010 0 0111 - OP_UND, // 001 1010 0 1000 - OP_UND, // 001 1010 0 1001 - OP_UND, // 001 1010 0 1010 - OP_UND, // 001 1010 0 1011 - OP_UND, // 001 1010 0 1100 - OP_UND, // 001 1010 0 1101 - OP_UND, // 001 1010 0 1110 - OP_UND, // 001 1010 0 1111 - - OP_CMP_IMM_VAL, // 001 1010 1 0000 - OP_CMP_IMM_VAL, // 001 1010 1 0001 - OP_CMP_IMM_VAL, // 001 1010 1 0010 - OP_CMP_IMM_VAL, // 001 1010 1 0011 - OP_CMP_IMM_VAL, // 001 1010 1 0100 - OP_CMP_IMM_VAL, // 001 1010 1 0101 - OP_CMP_IMM_VAL, // 001 1010 1 0110 - OP_CMP_IMM_VAL, // 001 1010 1 0111 - OP_CMP_IMM_VAL, // 001 1010 1 1000 - OP_CMP_IMM_VAL, // 001 1010 1 1001 - OP_CMP_IMM_VAL, // 001 1010 1 1010 - OP_CMP_IMM_VAL, // 001 1010 1 1011 - OP_CMP_IMM_VAL, // 001 1010 1 1100 - OP_CMP_IMM_VAL, // 001 1010 1 1101 - OP_CMP_IMM_VAL, // 001 1010 1 1110 - OP_CMP_IMM_VAL, // 001 1010 1 1111 -//------------------------------------------ - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0000 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0001 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0010 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0011 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0100 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0101 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0110 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 0111 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1000 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1001 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1010 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1011 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1100 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1101 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1110 - OP_MSR_SPSR_IMM_VAL, // 001 1011 0 1111 - - OP_CMN_IMM_VAL, // 001 1011 1 0000 - OP_CMN_IMM_VAL, // 001 1011 1 0001 - OP_CMN_IMM_VAL, // 001 1011 1 0010 - OP_CMN_IMM_VAL, // 001 1011 1 0011 - OP_CMN_IMM_VAL, // 001 1011 1 0100 - OP_CMN_IMM_VAL, // 001 1011 1 0101 - OP_CMN_IMM_VAL, // 001 1011 1 0110 - OP_CMN_IMM_VAL, // 001 1011 1 0111 - OP_CMN_IMM_VAL, // 001 1011 1 1000 - OP_CMN_IMM_VAL, // 001 1011 1 1001 - OP_CMN_IMM_VAL, // 001 1011 1 1010 - OP_CMN_IMM_VAL, // 001 1011 1 1011 - OP_CMN_IMM_VAL, // 001 1011 1 1100 - OP_CMN_IMM_VAL, // 001 1011 1 1101 - OP_CMN_IMM_VAL, // 001 1011 1 1110 - OP_CMN_IMM_VAL, // 001 1011 1 1111 -//------------------------------------------ - OP_ORR_IMM_VAL, // 001 1100 0 0000 - OP_ORR_IMM_VAL, // 001 1100 0 0001 - OP_ORR_IMM_VAL, // 001 1100 0 0010 - OP_ORR_IMM_VAL, // 001 1100 0 0011 - OP_ORR_IMM_VAL, // 001 1100 0 0100 - OP_ORR_IMM_VAL, // 001 1100 0 0101 - OP_ORR_IMM_VAL, // 001 1100 0 0110 - OP_ORR_IMM_VAL, // 001 1100 0 0111 - OP_ORR_IMM_VAL, // 001 1100 0 1000 - OP_ORR_IMM_VAL, // 001 1100 0 1001 - OP_ORR_IMM_VAL, // 001 1100 0 1010 - OP_ORR_IMM_VAL, // 001 1100 0 1011 - OP_ORR_IMM_VAL, // 001 1100 0 1100 - OP_ORR_IMM_VAL, // 001 1100 0 1101 - OP_ORR_IMM_VAL, // 001 1100 0 1110 - OP_ORR_IMM_VAL, // 001 1100 0 1111 - - OP_ORR_S_IMM_VAL, // 001 1100 1 0000 - OP_ORR_S_IMM_VAL, // 001 1100 1 0001 - OP_ORR_S_IMM_VAL, // 001 1100 1 0010 - OP_ORR_S_IMM_VAL, // 001 1100 1 0011 - OP_ORR_S_IMM_VAL, // 001 1100 1 0100 - OP_ORR_S_IMM_VAL, // 001 1100 1 0101 - OP_ORR_S_IMM_VAL, // 001 1100 1 0110 - OP_ORR_S_IMM_VAL, // 001 1100 1 0111 - OP_ORR_S_IMM_VAL, // 001 1100 1 1000 - OP_ORR_S_IMM_VAL, // 001 1100 1 1001 - OP_ORR_S_IMM_VAL, // 001 1100 1 1010 - OP_ORR_S_IMM_VAL, // 001 1100 1 1011 - OP_ORR_S_IMM_VAL, // 001 1100 1 1100 - OP_ORR_S_IMM_VAL, // 001 1100 1 1101 - OP_ORR_S_IMM_VAL, // 001 1100 1 1110 - OP_ORR_S_IMM_VAL, // 001 1100 1 1111 -//------------------------------------------ - OP_MOV_IMM_VAL, // 001 1101 0 0000 - OP_MOV_IMM_VAL, // 001 1101 0 0001 - OP_MOV_IMM_VAL, // 001 1101 0 0010 - OP_MOV_IMM_VAL, // 001 1101 0 0011 - OP_MOV_IMM_VAL, // 001 1101 0 0100 - OP_MOV_IMM_VAL, // 001 1101 0 0101 - OP_MOV_IMM_VAL, // 001 1101 0 0110 - OP_MOV_IMM_VAL, // 001 1101 0 0111 - OP_MOV_IMM_VAL, // 001 1101 0 1000 - OP_MOV_IMM_VAL, // 001 1101 0 1001 - OP_MOV_IMM_VAL, // 001 1101 0 1010 - OP_MOV_IMM_VAL, // 001 1101 0 1011 - OP_MOV_IMM_VAL, // 001 1101 0 1100 - OP_MOV_IMM_VAL, // 001 1101 0 1101 - OP_MOV_IMM_VAL, // 001 1101 0 1110 - OP_MOV_IMM_VAL, // 001 1101 0 1111 - - OP_MOV_S_IMM_VAL, // 001 1101 1 0000 - OP_MOV_S_IMM_VAL, // 001 1101 1 0001 - OP_MOV_S_IMM_VAL, // 001 1101 1 0010 - OP_MOV_S_IMM_VAL, // 001 1101 1 0011 - OP_MOV_S_IMM_VAL, // 001 1101 1 0100 - OP_MOV_S_IMM_VAL, // 001 1101 1 0101 - OP_MOV_S_IMM_VAL, // 001 1101 1 0110 - OP_MOV_S_IMM_VAL, // 001 1101 1 0111 - OP_MOV_S_IMM_VAL, // 001 1101 1 1000 - OP_MOV_S_IMM_VAL, // 001 1101 1 1001 - OP_MOV_S_IMM_VAL, // 001 1101 1 1010 - OP_MOV_S_IMM_VAL, // 001 1101 1 1011 - OP_MOV_S_IMM_VAL, // 001 1101 1 1100 - OP_MOV_S_IMM_VAL, // 001 1101 1 1101 - OP_MOV_S_IMM_VAL, // 001 1101 1 1110 - OP_MOV_S_IMM_VAL, // 001 1101 1 1111 -//------------------------------------------ - OP_BIC_IMM_VAL, // 001 1110 0 0000 - OP_BIC_IMM_VAL, // 001 1110 0 0001 - OP_BIC_IMM_VAL, // 001 1110 0 0010 - OP_BIC_IMM_VAL, // 001 1110 0 0011 - OP_BIC_IMM_VAL, // 001 1110 0 0100 - OP_BIC_IMM_VAL, // 001 1110 0 0101 - OP_BIC_IMM_VAL, // 001 1110 0 0110 - OP_BIC_IMM_VAL, // 001 1110 0 0111 - OP_BIC_IMM_VAL, // 001 1110 0 1000 - OP_BIC_IMM_VAL, // 001 1110 0 1001 - OP_BIC_IMM_VAL, // 001 1110 0 1010 - OP_BIC_IMM_VAL, // 001 1110 0 1011 - OP_BIC_IMM_VAL, // 001 1110 0 1100 - OP_BIC_IMM_VAL, // 001 1110 0 1101 - OP_BIC_IMM_VAL, // 001 1110 0 1110 - OP_BIC_IMM_VAL, // 001 1110 0 1111 - - OP_BIC_S_IMM_VAL, // 001 1110 1 0000 - OP_BIC_S_IMM_VAL, // 001 1110 1 0001 - OP_BIC_S_IMM_VAL, // 001 1110 1 0010 - OP_BIC_S_IMM_VAL, // 001 1110 1 0011 - OP_BIC_S_IMM_VAL, // 001 1110 1 0100 - OP_BIC_S_IMM_VAL, // 001 1110 1 0101 - OP_BIC_S_IMM_VAL, // 001 1110 1 0110 - OP_BIC_S_IMM_VAL, // 001 1110 1 0111 - OP_BIC_S_IMM_VAL, // 001 1110 1 1000 - OP_BIC_S_IMM_VAL, // 001 1110 1 1001 - OP_BIC_S_IMM_VAL, // 001 1110 1 1010 - OP_BIC_S_IMM_VAL, // 001 1110 1 1011 - OP_BIC_S_IMM_VAL, // 001 1110 1 1100 - OP_BIC_S_IMM_VAL, // 001 1110 1 1101 - OP_BIC_S_IMM_VAL, // 001 1110 1 1110 - OP_BIC_S_IMM_VAL, // 001 1110 1 1111 -//------------------------------------------ - OP_MVN_IMM_VAL, // 001 1111 0 0000 - OP_MVN_IMM_VAL, // 001 1111 0 0001 - OP_MVN_IMM_VAL, // 001 1111 0 0010 - OP_MVN_IMM_VAL, // 001 1111 0 0011 - OP_MVN_IMM_VAL, // 001 1111 0 0100 - OP_MVN_IMM_VAL, // 001 1111 0 0101 - OP_MVN_IMM_VAL, // 001 1111 0 0110 - OP_MVN_IMM_VAL, // 001 1111 0 0111 - OP_MVN_IMM_VAL, // 001 1111 0 1000 - OP_MVN_IMM_VAL, // 001 1111 0 1001 - OP_MVN_IMM_VAL, // 001 1111 0 1010 - OP_MVN_IMM_VAL, // 001 1111 0 1011 - OP_MVN_IMM_VAL, // 001 1111 0 1100 - OP_MVN_IMM_VAL, // 001 1111 0 1101 - OP_MVN_IMM_VAL, // 001 1111 0 1110 - OP_MVN_IMM_VAL, // 001 1111 0 1111 - - OP_MVN_S_IMM_VAL, // 001 1111 1 0000 - OP_MVN_S_IMM_VAL, // 001 1111 1 0001 - OP_MVN_S_IMM_VAL, // 001 1111 1 0010 - OP_MVN_S_IMM_VAL, // 001 1111 1 0011 - OP_MVN_S_IMM_VAL, // 001 1111 1 0100 - OP_MVN_S_IMM_VAL, // 001 1111 1 0101 - OP_MVN_S_IMM_VAL, // 001 1111 1 0110 - OP_MVN_S_IMM_VAL, // 001 1111 1 0111 - OP_MVN_S_IMM_VAL, // 001 1111 1 1000 - OP_MVN_S_IMM_VAL, // 001 1111 1 1001 - OP_MVN_S_IMM_VAL, // 001 1111 1 1010 - OP_MVN_S_IMM_VAL, // 001 1111 1 1011 - OP_MVN_S_IMM_VAL, // 001 1111 1 1100 - OP_MVN_S_IMM_VAL, // 001 1111 1 1101 - OP_MVN_S_IMM_VAL, // 001 1111 1 1110 - OP_MVN_S_IMM_VAL, // 001 1111 1 1111 -//------------------------------------------ - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0000 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0001 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0010 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0011 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0100 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0101 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0110 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 0111 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1000 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1001 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1010 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1011 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1100 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1101 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1110 - OP_STR_M_IMM_OFF_POSTIND, //010 0000 0 1111 - - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0000 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0001 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0010 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0011 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0100 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0101 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0110 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 0111 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1000 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1001 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1010 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1011 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1100 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1101 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1110 - OP_LDR_M_IMM_OFF_POSTIND, //010 0000 1 1111 -//------------------------------------------ - OP_UND, //010 0001 0 0000 - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, -//------------------------------------------ - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0000 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0001 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0010 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0011 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0100 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0101 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0110 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 0111 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1000 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1001 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1010 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1011 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1100 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1101 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1110 - OP_STRB_M_IMM_OFF_POSTIND, //010 0010 0 1111 - - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0000 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0001 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0010 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0011 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0100 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0101 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0110 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 0111 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1000 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1001 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1010 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1011 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1100 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1101 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1110 - OP_LDRB_M_IMM_OFF_POSTIND, //010 0010 1 1111 -//------------------------------------------ - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_STRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 - OP_LDRBT_M_IMM_OFF_POSTIND, //010 0011 0 0000 -//------------------------------------------ - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND, //010 0100 0 0000 -//------------------------------------------ - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STR_P_IMM_OFF_POSTIND, //010 0100 0 0000 - - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 - OP_LDR_P_IMM_OFF_POSTIND2, //010 0100 0 0000 -//------------------------------------------ - OP_STRB_P_IMM_OFF_POSTIND, //010 0110 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRB_P_IMM_OFF_POSTIND, //010 0110 1 1111 -//------------------------------------------ - OP_STRBT_P_IMM_OFF_POSTIND, //010 0111 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_STRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0100 0 0000 - OP_LDRBT_P_IMM_OFF_POSTIND, //010 0111 1 1111 -//------------------------------------------ - OP_STR_M_IMM_OFF, //010 1000 0 0000 - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - OP_STR_M_IMM_OFF, - - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, - OP_LDR_M_IMM_OFF, //010 1000 1 1111 -//------------------------------------------ - OP_STR_M_IMM_OFF_PREIND, //010 1001 0 0000 - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - OP_STR_M_IMM_OFF_PREIND, - - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, - OP_LDR_M_IMM_OFF_PREIND, //010 1001 1 1111 -//------------------------------------------ - OP_STRB_M_IMM_OFF, //010 1010 0 0000 - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - OP_STRB_M_IMM_OFF, - - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, - OP_LDRB_M_IMM_OFF, //010 1010 1 1111 -//------------------------------------------ - OP_STRB_M_IMM_OFF_PREIND, //010 1011 0 0000 - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - OP_STRB_M_IMM_OFF_PREIND, - - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, - OP_LDRB_M_IMM_OFF_PREIND, //010 1011 1 1111 -//------------------------------------------ - OP_STR_P_IMM_OFF, //010 1100 0 0000 - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - OP_STR_P_IMM_OFF, - - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, - OP_LDR_P_IMM_OFF, //010 1100 1 1111 -//------------------------------------------ - OP_STR_P_IMM_OFF_PREIND, //010 1101 0 0000 - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - OP_STR_P_IMM_OFF_PREIND, - - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, - OP_LDR_P_IMM_OFF_PREIND, //010 1101 1 1111 -//------------------------------------------ - OP_STRB_P_IMM_OFF, //010 1110 0 0000 - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - OP_STRB_P_IMM_OFF, - - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, - OP_LDRB_P_IMM_OFF, //010 1110 1 1111 -//------------------------------------------ - OP_STRB_P_IMM_OFF_PREIND, //010 1111 0 0000 - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - OP_STRB_P_IMM_OFF_PREIND, - - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, - OP_LDRB_P_IMM_OFF_PREIND, //010 1111 1 1111 -//------------------------------------------ - OP_STR_M_LSL_IMM_OFF_POSTIND, //011 0000 0 0000 - OP_UND, - OP_STR_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_M_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDR_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_M_ROR_IMM_OFF_POSTIND, - OP_UND, //011 0000 1 1111 -//------------------------------------------ - OP_UND, //011 0001 0 0000 - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, //011 0001 1 1111 -//------------------------------------------ - OP_STRB_M_LSL_IMM_OFF_POSTIND, //011 0010 0 0000 - OP_UND, - OP_STRB_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_M_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDRB_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF_POSTIND, - OP_UND, //011 0010 1 1111 -//------------------------------------------ - OP_STRBT_M_LSL_IMM_OFF_POSTIND, //011 0011 0 0000 - OP_UND, - OP_STRBT_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_M_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDRBT_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_M_ROR_IMM_OFF_POSTIND, - OP_UND, //011 0011 1 1111 -//------------------------------------------ - OP_STR_P_LSL_IMM_OFF_POSTIND, //011 0100 0 0000 - OP_UND, - OP_STR_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STR_P_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDR_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDR_P_ROR_IMM_OFF_POSTIND, - OP_UND, //011 0100 1 1111 -//------------------------------------------ - OP_UND, //011 0101 0 0000 - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, - OP_UND, //011 0101 1 1111 -//------------------------------------------ - OP_STRB_P_LSL_IMM_OFF_POSTIND, //011 0110 0 0000 - OP_UND, - OP_STRB_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRB_P_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDRB_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF_POSTIND, - OP_UND, -//------------------------------------------ - OP_STRBT_P_LSL_IMM_OFF_POSTIND, //011 0111 0 0000 - OP_UND, - OP_STRBT_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_STRBT_P_ROR_IMM_OFF_POSTIND, - OP_UND, - - OP_LDRBT_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_ROR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_LSL_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_LSR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_ASR_IMM_OFF_POSTIND, - OP_UND, - OP_LDRBT_P_ROR_IMM_OFF_POSTIND, - OP_UND, -//------------------------------------------ - OP_STR_M_LSL_IMM_OFF, //011 1000 0 0000 - OP_UND, - OP_STR_M_LSR_IMM_OFF, - OP_UND, - OP_STR_M_ASR_IMM_OFF, - OP_UND, - OP_STR_M_ROR_IMM_OFF, - OP_UND, - OP_STR_M_LSL_IMM_OFF, - OP_UND, - OP_STR_M_LSR_IMM_OFF, - OP_UND, - OP_STR_M_ASR_IMM_OFF, - OP_UND, - OP_STR_M_ROR_IMM_OFF, - OP_UND, - - OP_LDR_M_LSL_IMM_OFF, - OP_UND, - OP_LDR_M_LSR_IMM_OFF, - OP_UND, - OP_LDR_M_ASR_IMM_OFF, - OP_UND, - OP_LDR_M_ROR_IMM_OFF, - OP_UND, - OP_LDR_M_LSL_IMM_OFF, - OP_UND, - OP_LDR_M_LSR_IMM_OFF, - OP_UND, - OP_LDR_M_ASR_IMM_OFF, - OP_UND, - OP_LDR_M_ROR_IMM_OFF, - OP_UND, -//------------------------------------------ - OP_STR_M_LSL_IMM_OFF_PREIND, //011 1001 0 0000 - OP_UND, - OP_STR_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_ROR_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STR_M_ROR_IMM_OFF_PREIND, - OP_UND, - - OP_LDR_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_ROR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_M_ROR_IMM_OFF_PREIND, - OP_UND, -//------------------------------------------ - OP_STRB_M_LSL_IMM_OFF, //011 1010 0 0000 - OP_UND, - OP_STRB_M_LSR_IMM_OFF, - OP_UND, - OP_STRB_M_ASR_IMM_OFF, - OP_UND, - OP_STRB_M_ROR_IMM_OFF, - OP_UND, - OP_STRB_M_LSL_IMM_OFF, - OP_UND, - OP_STRB_M_LSR_IMM_OFF, - OP_UND, - OP_STRB_M_ASR_IMM_OFF, - OP_UND, - OP_STRB_M_ROR_IMM_OFF, - OP_UND, - - OP_LDRB_M_LSL_IMM_OFF, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF, - OP_UND, - OP_LDRB_M_LSL_IMM_OFF, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF, - OP_UND, -//------------------------------------------ - OP_STRB_M_LSL_IMM_OFF_PREIND, //011 1011 0 0000 - OP_UND, - OP_STRB_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_ROR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_M_ROR_IMM_OFF_PREIND, - OP_UND, - - OP_LDRB_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_M_ROR_IMM_OFF_PREIND, - OP_UND, -//------------------------------------------ - OP_STR_P_LSL_IMM_OFF, //011 1100 0 0000 - OP_UND, - OP_STR_P_LSR_IMM_OFF, - OP_UND, - OP_STR_P_ASR_IMM_OFF, - OP_UND, - OP_STR_P_ROR_IMM_OFF, - OP_UND, - OP_STR_P_LSL_IMM_OFF, - OP_UND, - OP_STR_P_LSR_IMM_OFF, - OP_UND, - OP_STR_P_ASR_IMM_OFF, - OP_UND, - OP_STR_P_ROR_IMM_OFF, - OP_UND, - - OP_LDR_P_LSL_IMM_OFF, - OP_UND, - OP_LDR_P_LSR_IMM_OFF, - OP_UND, - OP_LDR_P_ASR_IMM_OFF, - OP_UND, - OP_LDR_P_ROR_IMM_OFF, - OP_UND, - OP_LDR_P_LSL_IMM_OFF, - OP_UND, - OP_LDR_P_LSR_IMM_OFF, - OP_UND, - OP_LDR_P_ASR_IMM_OFF, - OP_UND, - OP_LDR_P_ROR_IMM_OFF, - OP_UND, -//------------------------------------------ - OP_STR_P_LSL_IMM_OFF_PREIND, //011 1101 0 0000 - OP_UND, - OP_STR_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_ROR_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STR_P_ROR_IMM_OFF_PREIND, - OP_UND, - - OP_LDR_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_ROR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDR_P_ROR_IMM_OFF_PREIND, - OP_UND, -//------------------------------------------ - OP_STRB_P_LSL_IMM_OFF, //011 1110 0 0000 - OP_UND, - OP_STRB_P_LSR_IMM_OFF, - OP_UND, - OP_STRB_P_ASR_IMM_OFF, - OP_UND, - OP_STRB_P_ROR_IMM_OFF, - OP_UND, - OP_STRB_P_LSL_IMM_OFF, - OP_UND, - OP_STRB_P_LSR_IMM_OFF, - OP_UND, - OP_STRB_P_ASR_IMM_OFF, - OP_UND, - OP_STRB_P_ROR_IMM_OFF, - OP_UND, - - OP_LDRB_P_LSL_IMM_OFF, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF, - OP_UND, - OP_LDRB_P_LSL_IMM_OFF, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF, - OP_UND, -//------------------------------------------ - OP_STRB_P_LSL_IMM_OFF_PREIND, //011 1111 0 0000 - OP_UND, - OP_STRB_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_ROR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_STRB_P_ROR_IMM_OFF_PREIND, - OP_UND, - - OP_LDRB_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_LSL_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_LSR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_ASR_IMM_OFF_PREIND, - OP_UND, - OP_LDRB_P_ROR_IMM_OFF_PREIND, - OP_UND, //011 1111 1 1111 -//------------------------------------------ - OP_STMDA, //100 0000 0 0000 - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - OP_STMDA, - - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, - OP_LDMDA, -//------------------------------------------ - OP_STMDA_W, //100 0001 0 0000 - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - OP_STMDA_W, - - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, - OP_LDMDA_W, -//------------------------------------------ - OP_STMDA2, //100 0010 0 0000 - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - OP_STMDA2, - - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, - OP_LDMDA2, -//------------------------------------------ - OP_STMDA2_W, //100 0011 0 0000 - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - OP_STMDA2_W, - - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, - OP_LDMDA2_W, -//------------------------------------------ - OP_STMIA, //100 0100 0 0000 - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - OP_STMIA, - - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, - OP_LDMIA, -//------------------------------------------ - OP_STMIA_W, //100 0101 0 0000 - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - OP_STMIA_W, - - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, - OP_LDMIA_W, -//------------------------------------------ - OP_STMIA2, //100 0110 0 0000 - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - OP_STMIA2, - - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, - OP_LDMIA2, -//------------------------------------------ - OP_STMIA2_W, //100 0111 0 0000 - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - OP_STMIA2_W, - - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, - OP_LDMIA2_W, -//------------------------------------------ - OP_STMDB, //100 1000 0 0000 - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - OP_STMDB, - - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, - OP_LDMDB, -//------------------------------------------ - OP_STMDB_W, //100 1001 0 0000 - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - OP_STMDB_W, - - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, - OP_LDMDB_W, -//------------------------------------------ - OP_STMDB2, //100 1010 0 0000 - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - OP_STMDB2, - - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, - OP_LDMDB2, -//------------------------------------------ - OP_STMDB2_W, //100 1011 0 0000 - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - OP_STMDB2_W, - - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, - OP_LDMDB2_W, -//------------------------------------------ - - - OP_STMIB, //100 1100 0 0000 - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - OP_STMIB, - - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, - OP_LDMIB, -//------------------------------------------ - OP_STMIB_W, //100 1101 0 0000 - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - OP_STMIB_W, - - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, - OP_LDMIB_W, -//------------------------------------------ - OP_STMIB2, //100 1110 0 0000 - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - OP_STMIB2, - - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, - OP_LDMIB2, -//------------------------------------------ - OP_STMIB2_W, //100 1111 0 0000 - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - OP_STMIB2_W, - - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, - OP_LDMIB2_W, -//------------------------------------------ - OP_B, //101 0000 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0001 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0010 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0011 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0100 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0101 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0110 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_B, //101 0111 0 0000 - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, - OP_B, -//------------------------------------------ - OP_BL, //101 1000 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1001 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1010 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1011 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1100 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1101 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1110 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_BL, //101 1111 0 0000 - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, - OP_BL, -//------------------------------------------ - OP_STC_OPTION, //110 0000 0 0000 - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, -//------------------------------------------ - OP_STC_M_POSTIND, //110 0001 0 0000 - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, -//------------------------------------------ - OP_STC_OPTION, //110 0010 0 0000 - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, -//------------------------------------------ - OP_STC_M_POSTIND, //110 0011 0 0000 - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - OP_STC_M_POSTIND, - - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, - OP_LDC_M_POSTIND, -//------------------------------------------ - OP_STC_OPTION, //110 0100 0 0000 - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, -//------------------------------------------ - OP_STC_P_POSTIND, //110 0101 0 0000 - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, -//------------------------------------------ - OP_STC_OPTION, //110 0110 0 0000 - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - OP_STC_OPTION, - - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, - OP_LDC_OPTION, -//------------------------------------------ - OP_STC_P_POSTIND, //110 0111 0 0000 - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - OP_STC_P_POSTIND, - - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, - OP_LDC_P_POSTIND, -//------------------------------------------ - OP_STC_M_IMM_OFF, //110 1000 0 0000 - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, -//------------------------------------------ - OP_STC_M_PREIND, //110 1001 0 0000 - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, -//------------------------------------------ - OP_STC_M_IMM_OFF, //110 1010 0 0000 - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - OP_STC_M_IMM_OFF, - - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, - OP_LDC_M_IMM_OFF, -//------------------------------------------ - OP_STC_M_PREIND, //110 1011 0 0000 - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - OP_STC_M_PREIND, - - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, - OP_LDC_M_PREIND, -//------------------------------------------ - OP_STC_P_IMM_OFF, //110 1100 0 0000 - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, -//------------------------------------------ - OP_STC_P_PREIND, //110 1101 0 0000 - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, -//------------------------------------------ - OP_STC_P_IMM_OFF, //110 1110 0 0000 - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - OP_STC_P_IMM_OFF, - - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, - OP_LDC_P_IMM_OFF, -//------------------------------------------ - OP_STC_P_PREIND, //110 1111 0 0000 - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - OP_STC_P_PREIND, - - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, - OP_LDC_P_PREIND, -//------------------------------------------ - OP_CDP, //111 0000 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0001 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0010 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0011 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0100 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0101 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0110 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_CDP, //111 0111 0 0000 - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - OP_CDP, - OP_MCR, - - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, - OP_CDP, - OP_MRC, -//--------------------------------------------- - OP_SWI, //111 1000 0 0000 - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, - OP_SWI, -}; +/* 0000 0000 0000 */ TABDECL(OP_AND_LSL_IMM), // OP_AND_LSL_IMM +/* 0000 0000 0001 */ TABDECL(OP_AND_LSL_REG), // OP_AND_LSL_REG +/* 0000 0000 0010 */ TABDECL(OP_AND_LSR_IMM), // OP_AND_LSR_IMM +/* 0000 0000 0011 */ TABDECL(OP_AND_LSR_REG), // OP_AND_LSR_REG +/* 0000 0000 0100 */ TABDECL(OP_AND_ASR_IMM), // OP_AND_ASR_IMM +/* 0000 0000 0101 */ TABDECL(OP_AND_ASR_REG), // OP_AND_ASR_REG +/* 0000 0000 0110 */ TABDECL(OP_AND_ROR_IMM), // OP_AND_ROR_IMM +/* 0000 0000 0111 */ TABDECL(OP_AND_ROR_REG), // OP_AND_ROR_REG +/* 0000 0000 1000 */ TABDECL(OP_AND_LSL_IMM), // OP_AND_LSL_IMM +/* 0000 0000 1001 */ TABDECL(OP_MUL), // OP_MUL +/* 0000 0000 1010 */ TABDECL(OP_AND_LSR_IMM), // OP_AND_LSR_IMM +/* 0000 0000 1011 */ TABDECL(OP_STRH_POS_INDE_M_REG_OFF), // OP_STRH_POS_INDE_M_REG_OFF +/* 0000 0000 1100 */ TABDECL(OP_AND_ASR_IMM), // OP_AND_ASR_IMM +/* 0000 0000 1101 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX +/* 0000 0000 1110 */ TABDECL(OP_AND_ROR_IMM), // OP_AND_ROR_IMM +/* 0000 0000 1111 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX + +/* 0000 0001 0000 */ TABDECL(OP_AND_S_LSL_IMM), // OP_AND_S_LSL_IMM +/* 0000 0001 0001 */ TABDECL(OP_AND_S_LSL_REG), // OP_AND_S_LSL_REG +/* 0000 0001 0010 */ TABDECL(OP_AND_S_LSR_IMM), // OP_AND_S_LSR_IMM +/* 0000 0001 0011 */ TABDECL(OP_AND_S_LSR_REG), // OP_AND_S_LSR_REG +/* 0000 0001 0100 */ TABDECL(OP_AND_S_ASR_IMM), // OP_AND_S_ASR_IMM +/* 0000 0001 0101 */ TABDECL(OP_AND_S_ASR_REG), // OP_AND_S_ASR_REG +/* 0000 0001 0110 */ TABDECL(OP_AND_S_ROR_IMM), // OP_AND_S_ROR_IMM +/* 0000 0001 0111 */ TABDECL(OP_AND_S_ROR_REG), // OP_AND_S_ROR_REG +/* 0000 0001 1000 */ TABDECL(OP_AND_S_LSL_IMM), // OP_AND_S_LSL_IMM +/* 0000 0001 1001 */ TABDECL(OP_MUL_S), // OP_MUL_S +/* 0000 0001 1010 */ TABDECL(OP_AND_S_LSR_IMM), // OP_AND_S_LSR_IMM +/* 0000 0001 1011 */ TABDECL(OP_LDRH_POS_INDE_M_REG_OFF), // OP_LDRH_POS_INDE_M_REG_OFF +/* 0000 0001 1100 */ TABDECL(OP_AND_S_ASR_IMM), // OP_AND_S_ASR_IMM +/* 0000 0001 1101 */ TABDECL(OP_LDRSB_POS_INDE_M_REG_OFF), // OP_LDRSB_POS_INDE_M_REG_OFF +/* 0000 0001 1110 */ TABDECL(OP_AND_S_ROR_IMM), // OP_AND_S_ROR_IMM +/* 0000 0001 1111 */ TABDECL(OP_LDRSH_POS_INDE_M_REG_OFF), // OP_LDRSH_POS_INDE_M_REG_OFF + +/* 0000 0010 0000 */ TABDECL(OP_EOR_LSL_IMM), // OP_EOR_LSL_IMM +/* 0000 0010 0001 */ TABDECL(OP_EOR_LSL_REG), // OP_EOR_LSL_REG +/* 0000 0010 0010 */ TABDECL(OP_EOR_LSR_IMM), // OP_EOR_LSR_IMM +/* 0000 0010 0011 */ TABDECL(OP_EOR_LSR_REG), // OP_EOR_LSR_REG +/* 0000 0010 0100 */ TABDECL(OP_EOR_ASR_IMM), // OP_EOR_ASR_IMM +/* 0000 0010 0101 */ TABDECL(OP_EOR_ASR_REG), // OP_EOR_ASR_REG +/* 0000 0010 0110 */ TABDECL(OP_EOR_ROR_IMM), // OP_EOR_ROR_IMM +/* 0000 0010 0111 */ TABDECL(OP_EOR_ROR_REG), // OP_EOR_ROR_REG +/* 0000 0010 1000 */ TABDECL(OP_EOR_LSL_IMM), // OP_EOR_LSL_IMM +/* 0000 0010 1001 */ TABDECL(OP_MLA), // OP_MLA +/* 0000 0010 1010 */ TABDECL(OP_EOR_LSR_IMM), // OP_EOR_LSR_IMM +/* 0000 0010 1011 */ TABDECL(OP_UND), +/* 0000 0010 1100 */ TABDECL(OP_EOR_ASR_IMM), // OP_EOR_ASR_IMM +/* 0000 0010 1101 */ TABDECL(OP_UND), +/* 0000 0010 1110 */ TABDECL(OP_EOR_ROR_IMM), // OP_EOR_ROR_IMM +/* 0000 0010 1111 */ TABDECL(OP_UND), + +/* 0000 0011 0000 */ TABDECL(OP_EOR_S_LSL_IMM), // OP_EOR_S_LSL_IMM +/* 0000 0011 0001 */ TABDECL(OP_EOR_S_LSL_REG), // OP_EOR_S_LSL_REG +/* 0000 0011 0010 */ TABDECL(OP_EOR_S_LSR_IMM), // OP_EOR_S_LSR_IMM +/* 0000 0011 0011 */ TABDECL(OP_EOR_S_LSR_REG), // OP_EOR_S_LSR_REG +/* 0000 0011 0100 */ TABDECL(OP_EOR_S_ASR_IMM), // OP_EOR_S_ASR_IMM +/* 0000 0011 0101 */ TABDECL(OP_EOR_S_ASR_REG), // OP_EOR_S_ASR_REG +/* 0000 0011 0110 */ TABDECL(OP_EOR_S_ROR_IMM), // OP_EOR_S_ROR_IMM +/* 0000 0011 0111 */ TABDECL(OP_EOR_S_ROR_REG), // OP_EOR_S_ROR_REG +/* 0000 0011 1000 */ TABDECL(OP_EOR_S_LSL_IMM), // OP_EOR_S_LSL_IMM +/* 0000 0011 1001 */ TABDECL(OP_MLA_S), // OP_MLA_S +/* 0000 0011 1010 */ TABDECL(OP_EOR_S_LSR_IMM), // OP_EOR_S_LSR_IMM +/* 0000 0011 1011 */ TABDECL(OP_UND), +/* 0000 0011 1100 */ TABDECL(OP_EOR_S_ASR_IMM), // OP_EOR_S_ASR_IMM +/* 0000 0011 1101 */ TABDECL(OP_UND), +/* 0000 0011 1110 */ TABDECL(OP_EOR_S_ROR_IMM), // OP_EOR_S_ROR_IMM +/* 0000 0011 1111 */ TABDECL(OP_UND), + +/* 0000 0100 0000 */ TABDECL(OP_SUB_LSL_IMM), // OP_SUB_LSL_IMM +/* 0000 0100 0001 */ TABDECL(OP_SUB_LSL_REG), // OP_SUB_LSL_REG +/* 0000 0100 0010 */ TABDECL(OP_SUB_LSR_IMM), // OP_SUB_LSR_IMM +/* 0000 0100 0011 */ TABDECL(OP_SUB_LSR_REG), // OP_SUB_LSR_REG +/* 0000 0100 0100 */ TABDECL(OP_SUB_ASR_IMM), // OP_SUB_ASR_IMM +/* 0000 0100 0101 */ TABDECL(OP_SUB_ASR_REG), // OP_SUB_ASR_REG +/* 0000 0100 0110 */ TABDECL(OP_SUB_ROR_IMM), // OP_SUB_ROR_IMM +/* 0000 0100 0111 */ TABDECL(OP_SUB_ROR_REG), // OP_SUB_ROR_REG +/* 0000 0100 1000 */ TABDECL(OP_SUB_LSL_IMM), // OP_SUB_LSL_IMM +/* 0000 0100 1001 */ TABDECL(OP_UND), +/* 0000 0100 1010 */ TABDECL(OP_SUB_LSR_IMM), // OP_SUB_LSR_IMM +/* 0000 0100 1011 */ TABDECL(OP_STRH_POS_INDE_M_IMM_OFF), // OP_STRH_POS_INDE_M_IMM_OFF +/* 0000 0100 1100 */ TABDECL(OP_SUB_ASR_IMM), // OP_SUB_ASR_IMM +/* 0000 0100 1101 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX +/* 0000 0100 1110 */ TABDECL(OP_SUB_ROR_IMM), // OP_SUB_ROR_IMM +/* 0000 0100 1111 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX + +/* 0000 0101 0000 */ TABDECL(OP_SUB_S_LSL_IMM), // OP_SUB_S_LSL_IMM +/* 0000 0101 0001 */ TABDECL(OP_SUB_S_LSL_REG), // OP_SUB_S_LSL_REG +/* 0000 0101 0010 */ TABDECL(OP_SUB_S_LSR_IMM), // OP_SUB_S_LSR_IMM +/* 0000 0101 0011 */ TABDECL(OP_SUB_S_LSR_REG), // OP_SUB_S_LSR_REG +/* 0000 0101 0100 */ TABDECL(OP_SUB_S_ASR_IMM), // OP_SUB_S_ASR_IMM +/* 0000 0101 0101 */ TABDECL(OP_SUB_S_ASR_REG), // OP_SUB_S_ASR_REG +/* 0000 0101 0110 */ TABDECL(OP_SUB_S_ROR_IMM), // OP_SUB_S_ROR_IMM +/* 0000 0101 0111 */ TABDECL(OP_SUB_S_ROR_REG), // OP_SUB_S_ROR_REG +/* 0000 0101 1000 */ TABDECL(OP_SUB_S_LSL_IMM), // OP_SUB_S_LSL_IMM +/* 0000 0101 1001 */ TABDECL(OP_UND), +/* 0000 0101 1010 */ TABDECL(OP_SUB_S_LSR_IMM), // OP_SUB_S_LSR_IMM +/* 0000 0101 1011 */ TABDECL(OP_LDRH_POS_INDE_M_IMM_OFF), // OP_LDRH_POS_INDE_M_IMM_OFF +/* 0000 0101 1100 */ TABDECL(OP_SUB_S_ASR_IMM), // OP_SUB_S_ASR_IMM +/* 0000 0101 1101 */ TABDECL(OP_LDRSB_POS_INDE_M_IMM_OFF), // OP_LDRSB_POS_INDE_M_IMM_OFF +/* 0000 0101 1110 */ TABDECL(OP_SUB_S_ROR_IMM), // OP_SUB_S_ROR_IMM +/* 0000 0101 1111 */ TABDECL(OP_LDRSH_POS_INDE_M_IMM_OFF), // OP_LDRSH_POS_INDE_M_IMM_OFF + +/* 0000 0110 0000 */ TABDECL(OP_RSB_LSL_IMM), // OP_RSB_LSL_IMM +/* 0000 0110 0001 */ TABDECL(OP_RSB_LSL_REG), // OP_RSB_LSL_REG +/* 0000 0110 0010 */ TABDECL(OP_RSB_LSR_IMM), // OP_RSB_LSR_IMM +/* 0000 0110 0011 */ TABDECL(OP_RSB_LSR_REG), // OP_RSB_LSR_REG +/* 0000 0110 0100 */ TABDECL(OP_RSB_ASR_IMM), // OP_RSB_ASR_IMM +/* 0000 0110 0101 */ TABDECL(OP_RSB_ASR_REG), // OP_RSB_ASR_REG +/* 0000 0110 0110 */ TABDECL(OP_RSB_ROR_IMM), // OP_RSB_ROR_IMM +/* 0000 0110 0111 */ TABDECL(OP_RSB_ROR_REG), // OP_RSB_ROR_REG +/* 0000 0110 1000 */ TABDECL(OP_RSB_LSL_IMM), // OP_RSB_LSL_IMM +/* 0000 0110 1001 */ TABDECL(OP_UND), +/* 0000 0110 1010 */ TABDECL(OP_RSB_LSR_IMM), // OP_RSB_LSR_IMM +/* 0000 0110 1011 */ TABDECL(OP_UND), +/* 0000 0110 1100 */ TABDECL(OP_RSB_ASR_IMM), // OP_RSB_ASR_IMM +/* 0000 0110 1101 */ TABDECL(OP_UND), +/* 0000 0110 1110 */ TABDECL(OP_RSB_ROR_IMM), // OP_RSB_ROR_IMM +/* 0000 0110 1111 */ TABDECL(OP_UND), + +/* 0000 0111 0000 */ TABDECL(OP_RSB_S_LSL_IMM), // OP_RSB_S_LSL_IMM +/* 0000 0111 0001 */ TABDECL(OP_RSB_S_LSL_REG), // OP_RSB_S_LSL_REG +/* 0000 0111 0010 */ TABDECL(OP_RSB_S_LSR_IMM), // OP_RSB_S_LSR_IMM +/* 0000 0111 0011 */ TABDECL(OP_RSB_S_LSR_REG), // OP_RSB_S_LSR_REG +/* 0000 0111 0100 */ TABDECL(OP_RSB_S_ASR_IMM), // OP_RSB_S_ASR_IMM +/* 0000 0111 0101 */ TABDECL(OP_RSB_S_ASR_REG), // OP_RSB_S_ASR_REG +/* 0000 0111 0110 */ TABDECL(OP_RSB_S_ROR_IMM), // OP_RSB_S_ROR_IMM +/* 0000 0111 0111 */ TABDECL(OP_RSB_S_ROR_REG), // OP_RSB_S_ROR_REG +/* 0000 0111 1000 */ TABDECL(OP_RSB_S_LSL_IMM), // OP_RSB_S_LSL_IMM +/* 0000 0111 1001 */ TABDECL(OP_UND), +/* 0000 0111 1010 */ TABDECL(OP_RSB_S_LSR_IMM), // OP_RSB_S_LSR_IMM +/* 0000 0111 1011 */ TABDECL(OP_UND), +/* 0000 0111 1100 */ TABDECL(OP_RSB_S_ASR_IMM), // OP_RSB_S_ASR_IMM +/* 0000 0111 1101 */ TABDECL(OP_UND), +/* 0000 0111 1110 */ TABDECL(OP_RSB_S_ROR_IMM), // OP_RSB_S_ROR_IMM +/* 0000 0111 1111 */ TABDECL(OP_UND), + +/* 0000 1000 0000 */ TABDECL(OP_ADD_LSL_IMM), // OP_ADD_LSL_IMM +/* 0000 1000 0001 */ TABDECL(OP_ADD_LSL_REG), // OP_ADD_LSL_REG +/* 0000 1000 0010 */ TABDECL(OP_ADD_LSR_IMM), // OP_ADD_LSR_IMM +/* 0000 1000 0011 */ TABDECL(OP_ADD_LSR_REG), // OP_ADD_LSR_REG +/* 0000 1000 0100 */ TABDECL(OP_ADD_ASR_IMM), // OP_ADD_ASR_IMM +/* 0000 1000 0101 */ TABDECL(OP_ADD_ASR_REG), // OP_ADD_ASR_REG +/* 0000 1000 0110 */ TABDECL(OP_ADD_ROR_IMM), // OP_ADD_ROR_IMM +/* 0000 1000 0111 */ TABDECL(OP_ADD_ROR_REG), // OP_ADD_ROR_REG +/* 0000 1000 1000 */ TABDECL(OP_ADD_LSL_IMM), // OP_ADD_LSL_IMM +/* 0000 1000 1001 */ TABDECL(OP_UMULL), // OP_UMULL +/* 0000 1000 1010 */ TABDECL(OP_ADD_LSR_IMM), // OP_ADD_LSR_IMM +/* 0000 1000 1011 */ TABDECL(OP_STRH_POS_INDE_P_REG_OFF), // OP_STRH_POS_INDE_P_REG_OFF +/* 0000 1000 1100 */ TABDECL(OP_ADD_ASR_IMM), // OP_ADD_ASR_IMM +/* 0000 1000 1101 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX +/* 0000 1000 1110 */ TABDECL(OP_ADD_ROR_IMM), // OP_ADD_ROR_IMM +/* 0000 1000 1111 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX + +/* 0000 1001 0000 */ TABDECL(OP_ADD_S_LSL_IMM), // OP_ADD_S_LSL_IMM +/* 0000 1001 0001 */ TABDECL(OP_ADD_S_LSL_REG), // OP_ADD_S_LSL_REG +/* 0000 1001 0010 */ TABDECL(OP_ADD_S_LSR_IMM), // OP_ADD_S_LSR_IMM +/* 0000 1001 0011 */ TABDECL(OP_ADD_S_LSR_REG), // OP_ADD_S_LSR_REG +/* 0000 1001 0100 */ TABDECL(OP_ADD_S_ASR_IMM), // OP_ADD_S_ASR_IMM +/* 0000 1001 0101 */ TABDECL(OP_ADD_S_ASR_REG), // OP_ADD_S_ASR_REG +/* 0000 1001 0110 */ TABDECL(OP_ADD_S_ROR_IMM), // OP_ADD_S_ROR_IMM +/* 0000 1001 0111 */ TABDECL(OP_ADD_S_ROR_REG), // OP_ADD_S_ROR_REG +/* 0000 1001 1000 */ TABDECL(OP_ADD_S_LSL_IMM), // OP_ADD_S_LSL_IMM +/* 0000 1001 1001 */ TABDECL(OP_UMULL_S), // OP_UMULL_S +/* 0000 1001 1010 */ TABDECL(OP_ADD_S_LSR_IMM), // OP_ADD_S_LSR_IMM +/* 0000 1001 1011 */ TABDECL(OP_LDRH_POS_INDE_P_REG_OFF), // OP_LDRH_POS_INDE_P_REG_OFF +/* 0000 1001 1100 */ TABDECL(OP_ADD_S_ASR_IMM), // OP_ADD_S_ASR_IMM +/* 0000 1001 1101 */ TABDECL(OP_LDRSB_POS_INDE_P_REG_OFF), // OP_LDRSB_POS_INDE_P_REG_OFF +/* 0000 1001 1110 */ TABDECL(OP_ADD_S_ROR_IMM), // OP_ADD_S_ROR_IMM +/* 0000 1001 1111 */ TABDECL(OP_LDRSH_POS_INDE_P_REG_OFF), // OP_LDRSH_POS_INDE_P_REG_OFF + +/* 0000 1010 0000 */ TABDECL(OP_ADC_LSL_IMM), // OP_ADC_LSL_IMM +/* 0000 1010 0001 */ TABDECL(OP_ADC_LSL_REG), // OP_ADC_LSL_REG +/* 0000 1010 0010 */ TABDECL(OP_ADC_LSR_IMM), // OP_ADC_LSR_IMM +/* 0000 1010 0011 */ TABDECL(OP_ADC_LSR_REG), // OP_ADC_LSR_REG +/* 0000 1010 0100 */ TABDECL(OP_ADC_ASR_IMM), // OP_ADC_ASR_IMM +/* 0000 1010 0101 */ TABDECL(OP_ADC_ASR_REG), // OP_ADC_ASR_REG +/* 0000 1010 0110 */ TABDECL(OP_ADC_ROR_IMM), // OP_ADC_ROR_IMM +/* 0000 1010 0111 */ TABDECL(OP_ADC_ROR_REG), // OP_ADC_ROR_REG +/* 0000 1010 1000 */ TABDECL(OP_ADC_LSL_IMM), // OP_ADC_LSL_IMM +/* 0000 1010 1001 */ TABDECL(OP_UMLAL), // OP_UMLAL +/* 0000 1010 1010 */ TABDECL(OP_ADC_LSR_IMM), // OP_ADC_LSR_IMM +/* 0000 1010 1011 */ TABDECL(OP_UND), +/* 0000 1010 1100 */ TABDECL(OP_ADC_ASR_IMM), // OP_ADC_ASR_IMM +/* 0000 1010 1101 */ TABDECL(OP_UND), +/* 0000 1010 1110 */ TABDECL(OP_ADC_ROR_IMM), // OP_ADC_ROR_IMM +/* 0000 1010 1111 */ TABDECL(OP_UND), + +/* 0000 1011 0000 */ TABDECL(OP_ADC_S_LSL_IMM), // OP_ADC_S_LSL_IMM +/* 0000 1011 0001 */ TABDECL(OP_ADC_S_LSL_REG), // OP_ADC_S_LSL_REG +/* 0000 1011 0010 */ TABDECL(OP_ADC_S_LSR_IMM), // OP_ADC_S_LSR_IMM +/* 0000 1011 0011 */ TABDECL(OP_ADC_S_LSR_REG), // OP_ADC_S_LSR_REG +/* 0000 1011 0100 */ TABDECL(OP_ADC_S_ASR_IMM), // OP_ADC_S_ASR_IMM +/* 0000 1011 0101 */ TABDECL(OP_ADC_S_ASR_REG), // OP_ADC_S_ASR_REG +/* 0000 1011 0110 */ TABDECL(OP_ADC_S_ROR_IMM), // OP_ADC_S_ROR_IMM +/* 0000 1011 0111 */ TABDECL(OP_ADC_S_ROR_REG), // OP_ADC_S_ROR_REG +/* 0000 1011 1000 */ TABDECL(OP_ADC_S_LSL_IMM), // OP_ADC_S_LSL_IMM +/* 0000 1011 1001 */ TABDECL(OP_UMLAL_S), // OP_UMLAL_S +/* 0000 1011 1010 */ TABDECL(OP_ADC_S_LSR_IMM), // OP_ADC_S_LSR_IMM +/* 0000 1011 1011 */ TABDECL(OP_UND), +/* 0000 1011 1100 */ TABDECL(OP_ADC_S_ASR_IMM), // OP_ADC_S_ASR_IMM +/* 0000 1011 1101 */ TABDECL(OP_UND), +/* 0000 1011 1110 */ TABDECL(OP_ADC_S_ROR_IMM), // OP_ADC_S_ROR_IMM +/* 0000 1011 1111 */ TABDECL(OP_UND), + +/* 0000 1100 0000 */ TABDECL(OP_SBC_LSL_IMM), // OP_SBC_LSL_IMM +/* 0000 1100 0001 */ TABDECL(OP_SBC_LSL_REG), // OP_SBC_LSL_REG +/* 0000 1100 0010 */ TABDECL(OP_SBC_LSR_IMM), // OP_SBC_LSR_IMM +/* 0000 1100 0011 */ TABDECL(OP_SBC_LSR_REG), // OP_SBC_LSR_REG +/* 0000 1100 0100 */ TABDECL(OP_SBC_ASR_IMM), // OP_SBC_ASR_IMM +/* 0000 1100 0101 */ TABDECL(OP_SBC_ASR_REG), // OP_SBC_ASR_REG +/* 0000 1100 0110 */ TABDECL(OP_SBC_ROR_IMM), // OP_SBC_ROR_IMM +/* 0000 1100 0111 */ TABDECL(OP_SBC_ROR_REG), // OP_SBC_ROR_REG +/* 0000 1100 1000 */ TABDECL(OP_SBC_LSL_IMM), // OP_SBC_LSL_IMM +/* 0000 1100 1001 */ TABDECL(OP_SMULL), // OP_SMULL +/* 0000 1100 1010 */ TABDECL(OP_SBC_LSR_IMM), // OP_SBC_LSR_IMM +/* 0000 1100 1011 */ TABDECL(OP_STRH_POS_INDE_P_IMM_OFF), // OP_STRH_POS_INDE_P_IMM_OFF +/* 0000 1100 1100 */ TABDECL(OP_SBC_ASR_IMM), // OP_SBC_ASR_IMM +/* 0000 1100 1101 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX +/* 0000 1100 1110 */ TABDECL(OP_SBC_ROR_IMM), // OP_SBC_ROR_IMM +/* 0000 1100 1111 */ TABDECL(OP_LDRD_STRD_POST_INDEX), // OP_LDRD_STRD_POST_INDEX + +/* 0000 1101 0000 */ TABDECL(OP_SBC_S_LSL_IMM), // OP_SBC_S_LSL_IMM +/* 0000 1101 0001 */ TABDECL(OP_SBC_S_LSL_REG), // OP_SBC_S_LSL_REG +/* 0000 1101 0010 */ TABDECL(OP_SBC_S_LSR_IMM), // OP_SBC_S_LSR_IMM +/* 0000 1101 0011 */ TABDECL(OP_SBC_S_LSR_REG), // OP_SBC_S_LSR_REG +/* 0000 1101 0100 */ TABDECL(OP_SBC_S_ASR_IMM), // OP_SBC_S_ASR_IMM +/* 0000 1101 0101 */ TABDECL(OP_SBC_S_ASR_REG), // OP_SBC_S_ASR_REG +/* 0000 1101 0110 */ TABDECL(OP_SBC_S_ROR_IMM), // OP_SBC_S_ROR_IMM +/* 0000 1101 0111 */ TABDECL(OP_SBC_S_ROR_REG), // OP_SBC_S_ROR_REG +/* 0000 1101 1000 */ TABDECL(OP_SBC_S_LSL_IMM), // OP_SBC_S_LSL_IMM +/* 0000 1101 1001 */ TABDECL(OP_SMULL_S), // OP_SMULL_S +/* 0000 1101 1010 */ TABDECL(OP_SBC_S_LSR_IMM), // OP_SBC_S_LSR_IMM +/* 0000 1101 1011 */ TABDECL(OP_LDRH_POS_INDE_P_IMM_OFF), // OP_LDRH_POS_INDE_P_IMM_OFF +/* 0000 1101 1100 */ TABDECL(OP_SBC_S_ASR_IMM), // OP_SBC_S_ASR_IMM +/* 0000 1101 1101 */ TABDECL(OP_LDRSB_POS_INDE_P_IMM_OFF), // OP_LDRSB_POS_INDE_P_IMM_OFF +/* 0000 1101 1110 */ TABDECL(OP_SBC_S_ROR_IMM), // OP_SBC_S_ROR_IMM +/* 0000 1101 1111 */ TABDECL(OP_LDRSH_POS_INDE_P_IMM_OFF), // OP_LDRSH_POS_INDE_P_IMM_OFF + +/* 0000 1110 0000 */ TABDECL(OP_RSC_LSL_IMM), // OP_RSC_LSL_IMM +/* 0000 1110 0001 */ TABDECL(OP_RSC_LSL_REG), // OP_RSC_LSL_REG +/* 0000 1110 0010 */ TABDECL(OP_RSC_LSR_IMM), // OP_RSC_LSR_IMM +/* 0000 1110 0011 */ TABDECL(OP_RSC_LSR_REG), // OP_RSC_LSR_REG +/* 0000 1110 0100 */ TABDECL(OP_RSC_ASR_IMM), // OP_RSC_ASR_IMM +/* 0000 1110 0101 */ TABDECL(OP_RSC_ASR_REG), // OP_RSC_ASR_REG +/* 0000 1110 0110 */ TABDECL(OP_RSC_ROR_IMM), // OP_RSC_ROR_IMM +/* 0000 1110 0111 */ TABDECL(OP_RSC_ROR_REG), // OP_RSC_ROR_REG +/* 0000 1110 1000 */ TABDECL(OP_RSC_LSL_IMM), // OP_RSC_LSL_IMM +/* 0000 1110 1001 */ TABDECL(OP_SMLAL), // OP_SMLAL +/* 0000 1110 1010 */ TABDECL(OP_RSC_LSR_IMM), // OP_RSC_LSR_IMM +/* 0000 1110 1011 */ TABDECL(OP_UND), +/* 0000 1110 1100 */ TABDECL(OP_RSC_ASR_IMM), // OP_RSC_ASR_IMM +/* 0000 1110 1101 */ TABDECL(OP_UND), +/* 0000 1110 1110 */ TABDECL(OP_RSC_ROR_IMM), // OP_RSC_ROR_IMM +/* 0000 1110 1111 */ TABDECL(OP_UND), + +/* 0000 1111 0000 */ TABDECL(OP_RSC_S_LSL_IMM), // OP_RSC_S_LSL_IMM +/* 0000 1111 0001 */ TABDECL(OP_RSC_S_LSL_REG), // OP_RSC_S_LSL_REG +/* 0000 1111 0010 */ TABDECL(OP_RSC_S_LSR_IMM), // OP_RSC_S_LSR_IMM +/* 0000 1111 0011 */ TABDECL(OP_RSC_S_LSR_REG), // OP_RSC_S_LSR_REG +/* 0000 1111 0100 */ TABDECL(OP_RSC_S_ASR_IMM), // OP_RSC_S_ASR_IMM +/* 0000 1111 0101 */ TABDECL(OP_RSC_S_ASR_REG), // OP_RSC_S_ASR_REG +/* 0000 1111 0110 */ TABDECL(OP_RSC_S_ROR_IMM), // OP_RSC_S_ROR_IMM +/* 0000 1111 0111 */ TABDECL(OP_RSC_S_ROR_REG), // OP_RSC_S_ROR_REG +/* 0000 1111 1000 */ TABDECL(OP_RSC_S_LSL_IMM), // OP_RSC_S_LSL_IMM +/* 0000 1111 1001 */ TABDECL(OP_SMLAL_S), // OP_SMLAL_S +/* 0000 1111 1010 */ TABDECL(OP_RSC_S_LSR_IMM), // OP_RSC_S_LSR_IMM +/* 0000 1111 1011 */ TABDECL(OP_UND), +/* 0000 1111 1100 */ TABDECL(OP_RSC_S_ASR_IMM), // OP_RSC_S_ASR_IMM +/* 0000 1111 1101 */ TABDECL(OP_UND), +/* 0000 1111 1110 */ TABDECL(OP_RSC_S_ROR_IMM), // OP_RSC_S_ROR_IMM +/* 0000 1111 1111 */ TABDECL(OP_UND), + +/* 0001 0000 0000 */ TABDECL(OP_MRS_CPSR), // OP_MRS_CPSR +/* 0001 0000 0001 */ TABDECL(OP_UND), +/* 0001 0000 0010 */ TABDECL(OP_UND), +/* 0001 0000 0011 */ TABDECL(OP_UND), +/* 0001 0000 0100 */ TABDECL(OP_UND), +/* 0001 0000 0101 */ TABDECL(OP_QADD), // OP_QADD +/* 0001 0000 0110 */ TABDECL(OP_UND), +/* 0001 0000 0111 */ TABDECL(OP_UND), +/* 0001 0000 1000 */ TABDECL(OP_SMLA_B_B), // OP_SMLA_B_B +/* 0001 0000 1001 */ TABDECL(OP_SWP), // OP_SWP +/* 0001 0000 1010 */ TABDECL(OP_SMLA_T_B), // OP_SMLA_T_B +/* 0001 0000 1011 */ TABDECL(OP_STRH_M_REG_OFF), // OP_STRH_M_REG_OFF +/* 0001 0000 1100 */ TABDECL(OP_SMLA_B_T), // OP_SMLA_B_T +/* 0001 0000 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 0000 1110 */ TABDECL(OP_SMLA_T_T), // OP_SMLA_T_T +/* 0001 0000 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 0001 0000 */ TABDECL(OP_TST_LSL_IMM), // OP_TST_LSL_IMM +/* 0001 0001 0001 */ TABDECL(OP_TST_LSL_REG), // OP_TST_LSL_REG +/* 0001 0001 0010 */ TABDECL(OP_TST_LSR_IMM), // OP_TST_LSR_IMM +/* 0001 0001 0011 */ TABDECL(OP_TST_LSR_REG), // OP_TST_LSR_REG +/* 0001 0001 0100 */ TABDECL(OP_TST_ASR_IMM), // OP_TST_ASR_IMM +/* 0001 0001 0101 */ TABDECL(OP_TST_ASR_REG), // OP_TST_ASR_REG +/* 0001 0001 0110 */ TABDECL(OP_TST_ROR_IMM), // OP_TST_ROR_IMM +/* 0001 0001 0111 */ TABDECL(OP_TST_ROR_REG), // OP_TST_ROR_REG +/* 0001 0001 1000 */ TABDECL(OP_TST_LSL_IMM), // OP_TST_LSL_IMM +/* 0001 0001 1001 */ TABDECL(OP_UND), +/* 0001 0001 1010 */ TABDECL(OP_TST_LSR_IMM), // OP_TST_LSR_IMM +/* 0001 0001 1011 */ TABDECL(OP_LDRH_M_REG_OFF), // OP_LDRH_M_REG_OFF +/* 0001 0001 1100 */ TABDECL(OP_TST_ASR_IMM), // OP_TST_ASR_IMM +/* 0001 0001 1101 */ TABDECL(OP_LDRSB_M_REG_OFF), // OP_LDRSB_M_REG_OFF +/* 0001 0001 1110 */ TABDECL(OP_TST_ROR_IMM), // OP_TST_ROR_IMM +/* 0001 0001 1111 */ TABDECL(OP_LDRSH_M_REG_OFF), // OP_LDRSH_M_REG_OFF + +/* 0001 0010 0000 */ TABDECL(OP_MSR_CPSR), // OP_MSR_CPSR +/* 0001 0010 0001 */ TABDECL(OP_BX), // OP_BX +/* 0001 0010 0010 */ TABDECL(OP_UND), +/* 0001 0010 0011 */ TABDECL(OP_BLX_REG), // OP_BLX_REG +/* 0001 0010 0100 */ TABDECL(OP_UND), +/* 0001 0010 0101 */ TABDECL(OP_QSUB), // OP_QSUB +/* 0001 0010 0110 */ TABDECL(OP_UND), +/* 0001 0010 0111 */ TABDECL(OP_BKPT), // OP_BKPT +/* 0001 0010 1000 */ TABDECL(OP_SMLAW_B), // OP_SMLAW_B +/* 0001 0010 1001 */ TABDECL(OP_UND), +/* 0001 0010 1010 */ TABDECL(OP_SMULW_B), // OP_SMULW_B +/* 0001 0010 1011 */ TABDECL(OP_STRH_PRE_INDE_M_REG_OFF), // OP_STRH_PRE_INDE_M_REG_OFF +/* 0001 0010 1100 */ TABDECL(OP_SMLAW_T), // OP_SMLAW_T +/* 0001 0010 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 0010 1110 */ TABDECL(OP_SMULW_T), // OP_SMULW_T +/* 0001 0010 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 0011 0000 */ TABDECL(OP_TEQ_LSL_IMM), // OP_TEQ_LSL_IMM +/* 0001 0011 0001 */ TABDECL(OP_TEQ_LSL_REG), // OP_TEQ_LSL_REG +/* 0001 0011 0010 */ TABDECL(OP_TEQ_LSR_IMM), // OP_TEQ_LSR_IMM +/* 0001 0011 0011 */ TABDECL(OP_TEQ_LSR_REG), // OP_TEQ_LSR_REG +/* 0001 0011 0100 */ TABDECL(OP_TEQ_ASR_IMM), // OP_TEQ_ASR_IMM +/* 0001 0011 0101 */ TABDECL(OP_TEQ_ASR_REG), // OP_TEQ_ASR_REG +/* 0001 0011 0110 */ TABDECL(OP_TEQ_ROR_IMM), // OP_TEQ_ROR_IMM +/* 0001 0011 0111 */ TABDECL(OP_TEQ_ROR_REG), // OP_TEQ_ROR_REG +/* 0001 0011 1000 */ TABDECL(OP_TEQ_LSL_IMM), // OP_TEQ_LSL_IMM +/* 0001 0011 1001 */ TABDECL(OP_UND), +/* 0001 0011 1010 */ TABDECL(OP_TEQ_LSR_IMM), // OP_TEQ_LSR_IMM +/* 0001 0011 1011 */ TABDECL(OP_LDRH_PRE_INDE_M_REG_OFF), // OP_LDRH_PRE_INDE_M_REG_OFF +/* 0001 0011 1100 */ TABDECL(OP_TEQ_ASR_IMM), // OP_TEQ_ASR_IMM +/* 0001 0011 1101 */ TABDECL(OP_LDRSB_PRE_INDE_M_REG_OFF), // OP_LDRSB_PRE_INDE_M_REG_OFF +/* 0001 0011 1110 */ TABDECL(OP_TEQ_ROR_IMM), // OP_TEQ_ROR_IMM +/* 0001 0011 1111 */ TABDECL(OP_LDRSH_PRE_INDE_M_REG_OFF), // OP_LDRSH_PRE_INDE_M_REG_OFF + +/* 0001 0100 0000 */ TABDECL(OP_MRS_SPSR), // OP_MRS_SPSR +/* 0001 0100 0001 */ TABDECL(OP_UND), +/* 0001 0100 0010 */ TABDECL(OP_UND), +/* 0001 0100 0011 */ TABDECL(OP_UND), +/* 0001 0100 0100 */ TABDECL(OP_UND), +/* 0001 0100 0101 */ TABDECL(OP_QDADD), // OP_QDADD +/* 0001 0100 0110 */ TABDECL(OP_UND), +/* 0001 0100 0111 */ TABDECL(OP_UND), +/* 0001 0100 1000 */ TABDECL(OP_SMLAL_B_B), // OP_SMLAL_B_B +/* 0001 0100 1001 */ TABDECL(OP_SWPB), // OP_SWPB +/* 0001 0100 1010 */ TABDECL(OP_SMLAL_T_B), // OP_SMLAL_T_B +/* 0001 0100 1011 */ TABDECL(OP_STRH_M_IMM_OFF), // OP_STRH_M_IMM_OFF +/* 0001 0100 1100 */ TABDECL(OP_SMLAL_B_T), // OP_SMLAL_B_T +/* 0001 0100 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 0100 1110 */ TABDECL(OP_SMLAL_T_T), // OP_SMLAL_T_T +/* 0001 0100 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 0101 0000 */ TABDECL(OP_CMP_LSL_IMM), // OP_CMP_LSL_IMM +/* 0001 0101 0001 */ TABDECL(OP_CMP_LSL_REG), // OP_CMP_LSL_REG +/* 0001 0101 0010 */ TABDECL(OP_CMP_LSR_IMM), // OP_CMP_LSR_IMM +/* 0001 0101 0011 */ TABDECL(OP_CMP_LSR_REG), // OP_CMP_LSR_REG +/* 0001 0101 0100 */ TABDECL(OP_CMP_ASR_IMM), // OP_CMP_ASR_IMM +/* 0001 0101 0101 */ TABDECL(OP_CMP_ASR_REG), // OP_CMP_ASR_REG +/* 0001 0101 0110 */ TABDECL(OP_CMP_ROR_IMM), // OP_CMP_ROR_IMM +/* 0001 0101 0111 */ TABDECL(OP_CMP_ROR_REG), // OP_CMP_ROR_REG +/* 0001 0101 1000 */ TABDECL(OP_CMP_LSL_IMM), // OP_CMP_LSL_IMM +/* 0001 0101 1001 */ TABDECL(OP_UND), +/* 0001 0101 1010 */ TABDECL(OP_CMP_LSR_IMM), // OP_CMP_LSR_IMM +/* 0001 0101 1011 */ TABDECL(OP_LDRH_M_IMM_OFF), // OP_LDRH_M_IMM_OFF +/* 0001 0101 1100 */ TABDECL(OP_CMP_ASR_IMM), // OP_CMP_ASR_IMM +/* 0001 0101 1101 */ TABDECL(OP_LDRSB_M_IMM_OFF), // OP_LDRSB_M_IMM_OFF +/* 0001 0101 1110 */ TABDECL(OP_CMP_ROR_IMM), // OP_CMP_ROR_IMM +/* 0001 0101 1111 */ TABDECL(OP_LDRSH_M_IMM_OFF), // OP_LDRSH_M_IMM_OFF + +/* 0001 0110 0000 */ TABDECL(OP_MSR_SPSR), // OP_MSR_SPSR +/* 0001 0110 0001 */ TABDECL(OP_CLZ), // OP_CLZ +/* 0001 0110 0010 */ TABDECL(OP_UND), +/* 0001 0110 0011 */ TABDECL(OP_UND), +/* 0001 0110 0100 */ TABDECL(OP_UND), +/* 0001 0110 0101 */ TABDECL(OP_QDSUB), // OP_QDSUB +/* 0001 0110 0110 */ TABDECL(OP_UND), +/* 0001 0110 0111 */ TABDECL(OP_UND), +/* 0001 0110 1000 */ TABDECL(OP_SMUL_B_B), // OP_SMUL_B_B +/* 0001 0110 1001 */ TABDECL(OP_UND), +/* 0001 0110 1010 */ TABDECL(OP_SMUL_T_B), // OP_SMUL_T_B +/* 0001 0110 1011 */ TABDECL(OP_STRH_PRE_INDE_M_IMM_OFF), // OP_STRH_PRE_INDE_M_IMM_OFF +/* 0001 0110 1100 */ TABDECL(OP_SMUL_B_T), // OP_SMUL_B_T +/* 0001 0110 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 0110 1110 */ TABDECL(OP_SMUL_T_T), // OP_SMUL_T_T +/* 0001 0110 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 0111 0000 */ TABDECL(OP_CMN_LSL_IMM), // OP_CMN_LSL_IMM +/* 0001 0111 0001 */ TABDECL(OP_CMN_LSL_REG), // OP_CMN_LSL_REG +/* 0001 0111 0010 */ TABDECL(OP_CMN_LSR_IMM), // OP_CMN_LSR_IMM +/* 0001 0111 0011 */ TABDECL(OP_CMN_LSR_REG), // OP_CMN_LSR_REG +/* 0001 0111 0100 */ TABDECL(OP_CMN_ASR_IMM), // OP_CMN_ASR_IMM +/* 0001 0111 0101 */ TABDECL(OP_CMN_ASR_REG), // OP_CMN_ASR_REG +/* 0001 0111 0110 */ TABDECL(OP_CMN_ROR_IMM), // OP_CMN_ROR_IMM +/* 0001 0111 0111 */ TABDECL(OP_CMN_ROR_REG), // OP_CMN_ROR_REG +/* 0001 0111 1000 */ TABDECL(OP_CMN_LSL_IMM), // OP_CMN_LSL_IMM +/* 0001 0111 1001 */ TABDECL(OP_UND), +/* 0001 0111 1010 */ TABDECL(OP_CMN_LSR_IMM), // OP_CMN_LSR_IMM +/* 0001 0111 1011 */ TABDECL(OP_LDRH_PRE_INDE_M_IMM_OFF), // OP_LDRH_PRE_INDE_M_IMM_OFF +/* 0001 0111 1100 */ TABDECL(OP_CMN_ASR_IMM), // OP_CMN_ASR_IMM +/* 0001 0111 1101 */ TABDECL(OP_LDRSB_PRE_INDE_M_IMM_OFF), // OP_LDRSB_PRE_INDE_M_IMM_OFF +/* 0001 0111 1110 */ TABDECL(OP_CMN_ROR_IMM), // OP_CMN_ROR_IMM +/* 0001 0111 1111 */ TABDECL(OP_LDRSH_PRE_INDE_M_IMM_OFF), // OP_LDRSH_PRE_INDE_M_IMM_OFF + +/* 0001 1000 0000 */ TABDECL(OP_ORR_LSL_IMM), // OP_ORR_LSL_IMM +/* 0001 1000 0001 */ TABDECL(OP_ORR_LSL_REG), // OP_ORR_LSL_REG +/* 0001 1000 0010 */ TABDECL(OP_ORR_LSR_IMM), // OP_ORR_LSR_IMM +/* 0001 1000 0011 */ TABDECL(OP_ORR_LSR_REG), // OP_ORR_LSR_REG +/* 0001 1000 0100 */ TABDECL(OP_ORR_ASR_IMM), // OP_ORR_ASR_IMM +/* 0001 1000 0101 */ TABDECL(OP_ORR_ASR_REG), // OP_ORR_ASR_REG +/* 0001 1000 0110 */ TABDECL(OP_ORR_ROR_IMM), // OP_ORR_ROR_IMM +/* 0001 1000 0111 */ TABDECL(OP_ORR_ROR_REG), // OP_ORR_ROR_REG +/* 0001 1000 1000 */ TABDECL(OP_ORR_LSL_IMM), // OP_ORR_LSL_IMM +/* 0001 1000 1001 */ TABDECL(OP_STREX), // OP_STREX +/* 0001 1000 1010 */ TABDECL(OP_ORR_LSR_IMM), // OP_ORR_LSR_IMM +/* 0001 1000 1011 */ TABDECL(OP_STRH_P_REG_OFF), // OP_STRH_P_REG_OFF +/* 0001 1000 1100 */ TABDECL(OP_ORR_ASR_IMM), // OP_ORR_ASR_IMM +/* 0001 1000 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 1000 1110 */ TABDECL(OP_ORR_ROR_IMM), // OP_ORR_ROR_IMM +/* 0001 1000 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 1001 0000 */ TABDECL(OP_ORR_S_LSL_IMM), // OP_ORR_S_LSL_IMM +/* 0001 1001 0001 */ TABDECL(OP_ORR_S_LSL_REG), // OP_ORR_S_LSL_REG +/* 0001 1001 0010 */ TABDECL(OP_ORR_S_LSR_IMM), // OP_ORR_S_LSR_IMM +/* 0001 1001 0011 */ TABDECL(OP_ORR_S_LSR_REG), // OP_ORR_S_LSR_REG +/* 0001 1001 0100 */ TABDECL(OP_ORR_S_ASR_IMM), // OP_ORR_S_ASR_IMM +/* 0001 1001 0101 */ TABDECL(OP_ORR_S_ASR_REG), // OP_ORR_S_ASR_REG +/* 0001 1001 0110 */ TABDECL(OP_ORR_S_ROR_IMM), // OP_ORR_S_ROR_IMM +/* 0001 1001 0111 */ TABDECL(OP_ORR_S_ROR_REG), // OP_ORR_S_ROR_REG +/* 0001 1001 1000 */ TABDECL(OP_ORR_S_LSL_IMM), // OP_ORR_S_LSL_IMM +/* 0001 1001 1001 */ TABDECL(OP_LDREX), // OP_LDREX +/* 0001 1001 1010 */ TABDECL(OP_ORR_S_LSR_IMM), // OP_ORR_S_LSR_IMM +/* 0001 1001 1011 */ TABDECL(OP_LDRH_P_REG_OFF), // OP_LDRH_P_REG_OFF +/* 0001 1001 1100 */ TABDECL(OP_ORR_S_ASR_IMM), // OP_ORR_S_ASR_IMM +/* 0001 1001 1101 */ TABDECL(OP_LDRSB_P_REG_OFF), // OP_LDRSB_P_REG_OFF +/* 0001 1001 1110 */ TABDECL(OP_ORR_S_ROR_IMM), // OP_ORR_S_ROR_IMM +/* 0001 1001 1111 */ TABDECL(OP_LDRSH_P_REG_OFF), // OP_LDRSH_P_REG_OFF + +/* 0001 1010 0000 */ TABDECL(OP_MOV_LSL_IMM), // OP_MOV_LSL_IMM +/* 0001 1010 0001 */ TABDECL(OP_MOV_LSL_REG), // OP_MOV_LSL_REG +/* 0001 1010 0010 */ TABDECL(OP_MOV_LSR_IMM), // OP_MOV_LSR_IMM +/* 0001 1010 0011 */ TABDECL(OP_MOV_LSR_REG), // OP_MOV_LSR_REG +/* 0001 1010 0100 */ TABDECL(OP_MOV_ASR_IMM), // OP_MOV_ASR_IMM +/* 0001 1010 0101 */ TABDECL(OP_MOV_ASR_REG), // OP_MOV_ASR_REG +/* 0001 1010 0110 */ TABDECL(OP_MOV_ROR_IMM), // OP_MOV_ROR_IMM +/* 0001 1010 0111 */ TABDECL(OP_MOV_ROR_REG), // OP_MOV_ROR_REG +/* 0001 1010 1000 */ TABDECL(OP_MOV_LSL_IMM), // OP_MOV_LSL_IMM +/* 0001 1010 1001 */ TABDECL(OP_UND), +/* 0001 1010 1010 */ TABDECL(OP_MOV_LSR_IMM), // OP_MOV_LSR_IMM +/* 0001 1010 1011 */ TABDECL(OP_STRH_PRE_INDE_P_REG_OFF), // OP_STRH_PRE_INDE_P_REG_OFF +/* 0001 1010 1100 */ TABDECL(OP_MOV_ASR_IMM), // OP_MOV_ASR_IMM +/* 0001 1010 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 1010 1110 */ TABDECL(OP_MOV_ROR_IMM), // OP_MOV_ROR_IMM +/* 0001 1010 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 1011 0000 */ TABDECL(OP_MOV_S_LSL_IMM), // OP_MOV_S_LSL_IMM +/* 0001 1011 0001 */ TABDECL(OP_MOV_S_LSL_REG), // OP_MOV_S_LSL_REG +/* 0001 1011 0010 */ TABDECL(OP_MOV_S_LSR_IMM), // OP_MOV_S_LSR_IMM +/* 0001 1011 0011 */ TABDECL(OP_MOV_S_LSR_REG), // OP_MOV_S_LSR_REG +/* 0001 1011 0100 */ TABDECL(OP_MOV_S_ASR_IMM), // OP_MOV_S_ASR_IMM +/* 0001 1011 0101 */ TABDECL(OP_MOV_S_ASR_REG), // OP_MOV_S_ASR_REG +/* 0001 1011 0110 */ TABDECL(OP_MOV_S_ROR_IMM), // OP_MOV_S_ROR_IMM +/* 0001 1011 0111 */ TABDECL(OP_MOV_S_ROR_REG), // OP_MOV_S_ROR_REG +/* 0001 1011 1000 */ TABDECL(OP_MOV_S_LSL_IMM), // OP_MOV_S_LSL_IMM +/* 0001 1011 1001 */ TABDECL(OP_UND), +/* 0001 1011 1010 */ TABDECL(OP_MOV_S_LSR_IMM), // OP_MOV_S_LSR_IMM +/* 0001 1011 1011 */ TABDECL(OP_LDRH_PRE_INDE_P_REG_OFF), // OP_LDRH_PRE_INDE_P_REG_OFF +/* 0001 1011 1100 */ TABDECL(OP_MOV_S_ASR_IMM), // OP_MOV_S_ASR_IMM +/* 0001 1011 1101 */ TABDECL(OP_LDRSB_PRE_INDE_P_REG_OFF), // OP_LDRSB_PRE_INDE_P_REG_OFF +/* 0001 1011 1110 */ TABDECL(OP_MOV_S_ROR_IMM), // OP_MOV_S_ROR_IMM +/* 0001 1011 1111 */ TABDECL(OP_LDRSH_PRE_INDE_P_REG_OFF), // OP_LDRSH_PRE_INDE_P_REG_OFF + +/* 0001 1100 0000 */ TABDECL(OP_BIC_LSL_IMM), // OP_BIC_LSL_IMM +/* 0001 1100 0001 */ TABDECL(OP_BIC_LSL_REG), // OP_BIC_LSL_REG +/* 0001 1100 0010 */ TABDECL(OP_BIC_LSR_IMM), // OP_BIC_LSR_IMM +/* 0001 1100 0011 */ TABDECL(OP_BIC_LSR_REG), // OP_BIC_LSR_REG +/* 0001 1100 0100 */ TABDECL(OP_BIC_ASR_IMM), // OP_BIC_ASR_IMM +/* 0001 1100 0101 */ TABDECL(OP_BIC_ASR_REG), // OP_BIC_ASR_REG +/* 0001 1100 0110 */ TABDECL(OP_BIC_ROR_IMM), // OP_BIC_ROR_IMM +/* 0001 1100 0111 */ TABDECL(OP_BIC_ROR_REG), // OP_BIC_ROR_REG +/* 0001 1100 1000 */ TABDECL(OP_BIC_LSL_IMM), // OP_BIC_LSL_IMM +/* 0001 1100 1001 */ TABDECL(OP_UND), +/* 0001 1100 1010 */ TABDECL(OP_BIC_LSR_IMM), // OP_BIC_LSR_IMM +/* 0001 1100 1011 */ TABDECL(OP_STRH_P_IMM_OFF), // OP_STRH_P_IMM_OFF +/* 0001 1100 1100 */ TABDECL(OP_BIC_ASR_IMM), // OP_BIC_ASR_IMM +/* 0001 1100 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 1100 1110 */ TABDECL(OP_BIC_ROR_IMM), // OP_BIC_ROR_IMM +/* 0001 1100 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 1101 0000 */ TABDECL(OP_BIC_S_LSL_IMM), // OP_BIC_S_LSL_IMM +/* 0001 1101 0001 */ TABDECL(OP_BIC_S_LSL_REG), // OP_BIC_S_LSL_REG +/* 0001 1101 0010 */ TABDECL(OP_BIC_S_LSR_IMM), // OP_BIC_S_LSR_IMM +/* 0001 1101 0011 */ TABDECL(OP_BIC_S_LSR_REG), // OP_BIC_S_LSR_REG +/* 0001 1101 0100 */ TABDECL(OP_BIC_S_ASR_IMM), // OP_BIC_S_ASR_IMM +/* 0001 1101 0101 */ TABDECL(OP_BIC_S_ASR_REG), // OP_BIC_S_ASR_REG +/* 0001 1101 0110 */ TABDECL(OP_BIC_S_ROR_IMM), // OP_BIC_S_ROR_IMM +/* 0001 1101 0111 */ TABDECL(OP_BIC_S_ROR_REG), // OP_BIC_S_ROR_REG +/* 0001 1101 1000 */ TABDECL(OP_BIC_S_LSL_IMM), // OP_BIC_S_LSL_IMM +/* 0001 1101 1001 */ TABDECL(OP_UND), +/* 0001 1101 1010 */ TABDECL(OP_BIC_S_LSR_IMM), // OP_BIC_S_LSR_IMM +/* 0001 1101 1011 */ TABDECL(OP_LDRH_P_IMM_OFF), // OP_LDRH_P_IMM_OFF +/* 0001 1101 1100 */ TABDECL(OP_BIC_S_ASR_IMM), // OP_BIC_S_ASR_IMM +/* 0001 1101 1101 */ TABDECL(OP_LDRSB_P_IMM_OFF), // OP_LDRSB_P_IMM_OFF +/* 0001 1101 1110 */ TABDECL(OP_BIC_S_ROR_IMM), // OP_BIC_S_ROR_IMM +/* 0001 1101 1111 */ TABDECL(OP_LDRSH_P_IMM_OFF), // OP_LDRSH_P_IMM_OFF + +/* 0001 1110 0000 */ TABDECL(OP_MVN_LSL_IMM), // OP_MVN_LSL_IMM +/* 0001 1110 0001 */ TABDECL(OP_MVN_LSL_REG), // OP_MVN_LSL_REG +/* 0001 1110 0010 */ TABDECL(OP_MVN_LSR_IMM), // OP_MVN_LSR_IMM +/* 0001 1110 0011 */ TABDECL(OP_MVN_LSR_REG), // OP_MVN_LSR_REG +/* 0001 1110 0100 */ TABDECL(OP_MVN_ASR_IMM), // OP_MVN_ASR_IMM +/* 0001 1110 0101 */ TABDECL(OP_MVN_ASR_REG), // OP_MVN_ASR_REG +/* 0001 1110 0110 */ TABDECL(OP_MVN_ROR_IMM), // OP_MVN_ROR_IMM +/* 0001 1110 0111 */ TABDECL(OP_MVN_ROR_REG), // OP_MVN_ROR_REG +/* 0001 1110 1000 */ TABDECL(OP_MVN_LSL_IMM), // OP_MVN_LSL_IMM +/* 0001 1110 1001 */ TABDECL(OP_UND), +/* 0001 1110 1010 */ TABDECL(OP_MVN_LSR_IMM), // OP_MVN_LSR_IMM +/* 0001 1110 1011 */ TABDECL(OP_STRH_PRE_INDE_P_IMM_OFF), // OP_STRH_PRE_INDE_P_IMM_OFF +/* 0001 1110 1100 */ TABDECL(OP_MVN_ASR_IMM), // OP_MVN_ASR_IMM +/* 0001 1110 1101 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX +/* 0001 1110 1110 */ TABDECL(OP_MVN_ROR_IMM), // OP_MVN_ROR_IMM +/* 0001 1110 1111 */ TABDECL(OP_LDRD_STRD_OFFSET_PRE_INDEX), // OP_LDRD_STRD_OFFSET_PRE_INDEX + +/* 0001 1111 0000 */ TABDECL(OP_MVN_S_LSL_IMM), // OP_MVN_S_LSL_IMM +/* 0001 1111 0001 */ TABDECL(OP_MVN_S_LSL_REG), // OP_MVN_S_LSL_REG +/* 0001 1111 0010 */ TABDECL(OP_MVN_S_LSR_IMM), // OP_MVN_S_LSR_IMM +/* 0001 1111 0011 */ TABDECL(OP_MVN_S_LSR_REG), // OP_MVN_S_LSR_REG +/* 0001 1111 0100 */ TABDECL(OP_MVN_S_ASR_IMM), // OP_MVN_S_ASR_IMM +/* 0001 1111 0101 */ TABDECL(OP_MVN_S_ASR_REG), // OP_MVN_S_ASR_REG +/* 0001 1111 0110 */ TABDECL(OP_MVN_S_ROR_IMM), // OP_MVN_S_ROR_IMM +/* 0001 1111 0111 */ TABDECL(OP_MVN_S_ROR_REG), // OP_MVN_S_ROR_REG +/* 0001 1111 1000 */ TABDECL(OP_MVN_S_LSL_IMM), // OP_MVN_S_LSL_IMM +/* 0001 1111 1001 */ TABDECL(OP_UND), +/* 0001 1111 1010 */ TABDECL(OP_MVN_S_LSR_IMM), // OP_MVN_S_LSR_IMM +/* 0001 1111 1011 */ TABDECL(OP_LDRH_PRE_INDE_P_IMM_OFF), // OP_LDRH_PRE_INDE_P_IMM_OFF +/* 0001 1111 1100 */ TABDECL(OP_MVN_S_ASR_IMM), // OP_MVN_S_ASR_IMM +/* 0001 1111 1101 */ TABDECL(OP_LDRSB_PRE_INDE_P_IMM_OFF), // OP_LDRSB_PRE_INDE_P_IMM_OFF +/* 0001 1111 1110 */ TABDECL(OP_MVN_S_ROR_IMM), // OP_MVN_S_ROR_IMM +/* 0001 1111 1111 */ TABDECL(OP_LDRSH_PRE_INDE_P_IMM_OFF), // OP_LDRSH_PRE_INDE_P_IMM_OFF + +/* 0010 0000 0000 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0001 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0010 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0011 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0100 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0101 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0110 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 0111 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1000 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1001 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1010 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1011 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1100 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1101 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1110 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL +/* 0010 0000 1111 */ TABDECL(OP_AND_IMM_VAL), // OP_AND_IMM_VAL + +/* 0010 0001 0000 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0001 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0010 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0011 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0100 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0101 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0110 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 0111 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1000 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1001 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1010 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1011 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1100 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1101 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1110 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL +/* 0010 0001 1111 */ TABDECL(OP_AND_S_IMM_VAL), // OP_AND_S_IMM_VAL + +/* 0010 0010 0000 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0001 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0010 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0011 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0100 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0101 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0110 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 0111 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1000 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1001 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1010 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1011 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1100 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1101 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1110 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL +/* 0010 0010 1111 */ TABDECL(OP_EOR_IMM_VAL), // OP_EOR_IMM_VAL + +/* 0010 0011 0000 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0001 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0010 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0011 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0100 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0101 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0110 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 0111 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1000 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1001 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1010 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1011 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1100 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1101 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1110 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL +/* 0010 0011 1111 */ TABDECL(OP_EOR_S_IMM_VAL), // OP_EOR_S_IMM_VAL + +/* 0010 0100 0000 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0001 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0010 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0011 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0100 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0101 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0110 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 0111 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1000 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1001 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1010 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1011 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1100 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1101 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1110 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL +/* 0010 0100 1111 */ TABDECL(OP_SUB_IMM_VAL), // OP_SUB_IMM_VAL + +/* 0010 0101 0000 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0001 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0010 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0011 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0100 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0101 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0110 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 0111 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1000 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1001 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1010 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1011 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1100 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1101 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1110 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL +/* 0010 0101 1111 */ TABDECL(OP_SUB_S_IMM_VAL), // OP_SUB_S_IMM_VAL + +/* 0010 0110 0000 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0001 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0010 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0011 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0100 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0101 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0110 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 0111 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1000 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1001 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1010 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1011 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1100 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1101 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1110 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL +/* 0010 0110 1111 */ TABDECL(OP_RSB_IMM_VAL), // OP_RSB_IMM_VAL + +/* 0010 0111 0000 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0001 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0010 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0011 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0100 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0101 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0110 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 0111 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1000 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1001 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1010 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1011 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1100 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1101 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1110 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL +/* 0010 0111 1111 */ TABDECL(OP_RSB_S_IMM_VAL), // OP_RSB_S_IMM_VAL + +/* 0010 1000 0000 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0001 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0010 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0011 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0100 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0101 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0110 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 0111 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1000 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1001 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1010 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1011 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1100 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1101 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1110 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL +/* 0010 1000 1111 */ TABDECL(OP_ADD_IMM_VAL), // OP_ADD_IMM_VAL + +/* 0010 1001 0000 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0001 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0010 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0011 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0100 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0101 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0110 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 0111 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1000 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1001 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1010 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1011 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1100 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1101 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1110 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL +/* 0010 1001 1111 */ TABDECL(OP_ADD_S_IMM_VAL), // OP_ADD_S_IMM_VAL + +/* 0010 1010 0000 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0001 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0010 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0011 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0100 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0101 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0110 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 0111 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1000 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1001 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1010 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1011 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1100 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1101 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1110 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL +/* 0010 1010 1111 */ TABDECL(OP_ADC_IMM_VAL), // OP_ADC_IMM_VAL + +/* 0010 1011 0000 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0001 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0010 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0011 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0100 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0101 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0110 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 0111 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1000 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1001 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1010 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1011 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1100 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1101 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1110 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL +/* 0010 1011 1111 */ TABDECL(OP_ADC_S_IMM_VAL), // OP_ADC_S_IMM_VAL + +/* 0010 1100 0000 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0001 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0010 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0011 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0100 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0101 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0110 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 0111 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1000 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1001 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1010 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1011 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1100 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1101 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1110 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL +/* 0010 1100 1111 */ TABDECL(OP_SBC_IMM_VAL), // OP_SBC_IMM_VAL + +/* 0010 1101 0000 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0001 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0010 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0011 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0100 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0101 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0110 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 0111 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1000 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1001 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1010 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1011 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1100 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1101 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1110 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL +/* 0010 1101 1111 */ TABDECL(OP_SBC_S_IMM_VAL), // OP_SBC_S_IMM_VAL + +/* 0010 1110 0000 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0001 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0010 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0011 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0100 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0101 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0110 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 0111 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1000 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1001 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1010 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1011 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1100 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1101 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1110 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL +/* 0010 1110 1111 */ TABDECL(OP_RSC_IMM_VAL), // OP_RSC_IMM_VAL + +/* 0010 1111 0000 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0001 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0010 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0011 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0100 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0101 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0110 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 0111 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1000 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1001 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1010 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1011 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1100 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1101 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1110 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL +/* 0010 1111 1111 */ TABDECL(OP_RSC_S_IMM_VAL), // OP_RSC_S_IMM_VAL + +/* 0011 0000 0000 */ TABDECL(OP_UND), +/* 0011 0000 0001 */ TABDECL(OP_UND), +/* 0011 0000 0010 */ TABDECL(OP_UND), +/* 0011 0000 0011 */ TABDECL(OP_UND), +/* 0011 0000 0100 */ TABDECL(OP_UND), +/* 0011 0000 0101 */ TABDECL(OP_UND), +/* 0011 0000 0110 */ TABDECL(OP_UND), +/* 0011 0000 0111 */ TABDECL(OP_UND), +/* 0011 0000 1000 */ TABDECL(OP_UND), +/* 0011 0000 1001 */ TABDECL(OP_UND), +/* 0011 0000 1010 */ TABDECL(OP_UND), +/* 0011 0000 1011 */ TABDECL(OP_UND), +/* 0011 0000 1100 */ TABDECL(OP_UND), +/* 0011 0000 1101 */ TABDECL(OP_UND), +/* 0011 0000 1110 */ TABDECL(OP_UND), +/* 0011 0000 1111 */ TABDECL(OP_UND), + +/* 0011 0001 0000 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0001 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0010 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0011 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0100 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0101 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0110 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 0111 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1000 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1001 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1010 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1011 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1100 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1101 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1110 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL +/* 0011 0001 1111 */ TABDECL(OP_TST_IMM_VAL), // OP_TST_IMM_VAL + +/* 0011 0010 0000 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0001 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0010 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0011 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0100 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0101 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0110 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 0111 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1000 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1001 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1010 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1011 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1100 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1101 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1110 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL +/* 0011 0010 1111 */ TABDECL(OP_MSR_CPSR_IMM_VAL), // OP_MSR_CPSR_IMM_VAL + +/* 0011 0011 0000 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0001 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0010 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0011 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0100 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0101 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0110 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 0111 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1000 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1001 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1010 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1011 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1100 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1101 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1110 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL +/* 0011 0011 1111 */ TABDECL(OP_TEQ_IMM_VAL), // OP_TEQ_IMM_VAL + +/* 0011 0100 0000 */ TABDECL(OP_UND), +/* 0011 0100 0001 */ TABDECL(OP_UND), +/* 0011 0100 0010 */ TABDECL(OP_UND), +/* 0011 0100 0011 */ TABDECL(OP_UND), +/* 0011 0100 0100 */ TABDECL(OP_UND), +/* 0011 0100 0101 */ TABDECL(OP_UND), +/* 0011 0100 0110 */ TABDECL(OP_UND), +/* 0011 0100 0111 */ TABDECL(OP_UND), +/* 0011 0100 1000 */ TABDECL(OP_UND), +/* 0011 0100 1001 */ TABDECL(OP_UND), +/* 0011 0100 1010 */ TABDECL(OP_UND), +/* 0011 0100 1011 */ TABDECL(OP_UND), +/* 0011 0100 1100 */ TABDECL(OP_UND), +/* 0011 0100 1101 */ TABDECL(OP_UND), +/* 0011 0100 1110 */ TABDECL(OP_UND), +/* 0011 0100 1111 */ TABDECL(OP_UND), + +/* 0011 0101 0000 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0001 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0010 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0011 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0100 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0101 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0110 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 0111 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1000 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1001 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1010 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1011 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1100 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1101 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1110 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL +/* 0011 0101 1111 */ TABDECL(OP_CMP_IMM_VAL), // OP_CMP_IMM_VAL + +/* 0011 0110 0000 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0001 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0010 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0011 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0100 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0101 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0110 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 0111 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1000 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1001 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1010 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1011 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1100 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1101 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1110 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL +/* 0011 0110 1111 */ TABDECL(OP_MSR_SPSR_IMM_VAL), // OP_MSR_SPSR_IMM_VAL + +/* 0011 0111 0000 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0001 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0010 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0011 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0100 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0101 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0110 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 0111 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1000 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1001 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1010 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1011 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1100 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1101 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1110 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL +/* 0011 0111 1111 */ TABDECL(OP_CMN_IMM_VAL), // OP_CMN_IMM_VAL + +/* 0011 1000 0000 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0001 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0010 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0011 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0100 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0101 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0110 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 0111 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1000 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1001 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1010 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1011 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1100 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1101 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1110 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL +/* 0011 1000 1111 */ TABDECL(OP_ORR_IMM_VAL), // OP_ORR_IMM_VAL + +/* 0011 1001 0000 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0001 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0010 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0011 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0100 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0101 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0110 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 0111 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1000 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1001 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1010 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1011 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1100 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1101 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1110 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL +/* 0011 1001 1111 */ TABDECL(OP_ORR_S_IMM_VAL), // OP_ORR_S_IMM_VAL + +/* 0011 1010 0000 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0001 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0010 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0011 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0100 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0101 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0110 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 0111 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1000 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1001 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1010 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1011 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1100 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1101 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1110 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL +/* 0011 1010 1111 */ TABDECL(OP_MOV_IMM_VAL), // OP_MOV_IMM_VAL + +/* 0011 1011 0000 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0001 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0010 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0011 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0100 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0101 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0110 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 0111 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1000 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1001 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1010 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1011 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1100 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1101 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1110 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL +/* 0011 1011 1111 */ TABDECL(OP_MOV_S_IMM_VAL), // OP_MOV_S_IMM_VAL + +/* 0011 1100 0000 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0001 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0010 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0011 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0100 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0101 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0110 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 0111 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1000 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1001 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1010 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1011 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1100 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1101 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1110 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL +/* 0011 1100 1111 */ TABDECL(OP_BIC_IMM_VAL), // OP_BIC_IMM_VAL + +/* 0011 1101 0000 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0001 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0010 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0011 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0100 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0101 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0110 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 0111 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1000 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1001 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1010 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1011 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1100 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1101 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1110 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL +/* 0011 1101 1111 */ TABDECL(OP_BIC_S_IMM_VAL), // OP_BIC_S_IMM_VAL + +/* 0011 1110 0000 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0001 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0010 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0011 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0100 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0101 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0110 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 0111 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1000 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1001 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1010 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1011 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1100 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1101 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1110 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL +/* 0011 1110 1111 */ TABDECL(OP_MVN_IMM_VAL), // OP_MVN_IMM_VAL + +/* 0011 1111 0000 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0001 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0010 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0011 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0100 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0101 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0110 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 0111 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1000 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1001 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1010 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1011 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1100 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1101 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1110 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL +/* 0011 1111 1111 */ TABDECL(OP_MVN_S_IMM_VAL), // OP_MVN_S_IMM_VAL + +/* 0100 0000 0000 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0001 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0010 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0011 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0100 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0101 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0110 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 0111 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1000 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1001 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1010 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1011 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1100 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1101 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1110 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0000 1111 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND + +/* 0100 0001 0000 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0001 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0010 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0011 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0100 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0101 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0110 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 0111 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1000 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1001 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1010 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1011 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1100 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1101 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1110 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0001 1111 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND + +/* 0100 0010 0000 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0001 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0010 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0011 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0100 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0101 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0110 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 0111 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1000 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1001 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1010 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1011 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1100 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1101 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1110 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND +/* 0100 0010 1111 */ TABDECL(OP_STR_M_IMM_OFF_POSTIND), // OP_STR_M_IMM_OFF_POSTIND + +/* 0100 0011 0000 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0001 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0010 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0011 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0100 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0101 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0110 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 0111 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1000 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1001 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1010 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1011 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1100 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1101 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1110 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND +/* 0100 0011 1111 */ TABDECL(OP_LDR_M_IMM_OFF_POSTIND), // OP_LDR_M_IMM_OFF_POSTIND + +/* 0100 0100 0000 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0001 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0010 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0011 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0100 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0101 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0110 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 0111 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1000 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1001 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1010 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1011 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1100 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1101 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1110 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0100 1111 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND + +/* 0100 0101 0000 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0001 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0010 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0011 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0100 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0101 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0110 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 0111 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1000 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1001 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1010 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1011 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1100 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1101 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1110 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0101 1111 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND + +/* 0100 0110 0000 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0001 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0010 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0011 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0100 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0101 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0110 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 0111 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1000 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1001 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1010 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1011 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1100 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1101 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1110 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND +/* 0100 0110 1111 */ TABDECL(OP_STRB_M_IMM_OFF_POSTIND), // OP_STRB_M_IMM_OFF_POSTIND + +/* 0100 0111 0000 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0001 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0010 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0011 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0100 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0101 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0110 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 0111 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1000 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1001 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1010 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1011 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1100 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1101 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1110 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND +/* 0100 0111 1111 */ TABDECL(OP_LDRB_M_IMM_OFF_POSTIND), // OP_LDRB_M_IMM_OFF_POSTIND + +/* 0100 1000 0000 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0001 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0010 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0011 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0100 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0101 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0110 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 0111 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1000 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1001 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1010 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1011 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1100 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1101 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1110 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1000 1111 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND + +/* 0100 1001 0000 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0001 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0010 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0011 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0100 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0101 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0110 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 0111 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1000 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1001 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1010 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1011 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1100 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1101 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1110 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1001 1111 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND + +/* 0100 1010 0000 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0001 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0010 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0011 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0100 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0101 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0110 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 0111 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1000 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1001 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1010 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1011 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1100 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1101 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1110 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND +/* 0100 1010 1111 */ TABDECL(OP_STR_P_IMM_OFF_POSTIND), // OP_STR_P_IMM_OFF_POSTIND + +/* 0100 1011 0000 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0001 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0010 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0011 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0100 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0101 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0110 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 0111 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1000 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1001 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1010 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1011 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1100 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1101 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1110 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND +/* 0100 1011 1111 */ TABDECL(OP_LDR_P_IMM_OFF_POSTIND), // OP_LDR_P_IMM_OFF_POSTIND + +/* 0100 1100 0000 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0001 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0010 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0011 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0100 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0101 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0110 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 0111 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1000 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1001 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1010 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1011 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1100 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1101 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1110 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1100 1111 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND + +/* 0100 1101 0000 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0001 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0010 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0011 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0100 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0101 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0110 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 0111 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1000 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1001 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1010 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1011 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1100 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1101 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1110 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1101 1111 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND + +/* 0100 1110 0000 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0001 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0010 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0011 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0100 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0101 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0110 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 0111 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1000 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1001 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1010 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1011 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1100 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1101 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1110 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND +/* 0100 1110 1111 */ TABDECL(OP_STRB_P_IMM_OFF_POSTIND), // OP_STRB_P_IMM_OFF_POSTIND + +/* 0100 1111 0000 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0001 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0010 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0011 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0100 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0101 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0110 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 0111 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1000 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1001 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1010 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1011 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1100 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1101 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1110 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND +/* 0100 1111 1111 */ TABDECL(OP_LDRB_P_IMM_OFF_POSTIND), // OP_LDRB_P_IMM_OFF_POSTIND + +/* 0101 0000 0000 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0001 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0010 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0011 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0100 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0101 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0110 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 0111 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1000 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1001 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1010 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1011 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1100 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1101 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1110 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF +/* 0101 0000 1111 */ TABDECL(OP_STR_M_IMM_OFF), // OP_STR_M_IMM_OFF + +/* 0101 0001 0000 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0001 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0010 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0011 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0100 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0101 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0110 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 0111 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1000 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1001 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1010 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1011 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1100 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1101 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1110 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF +/* 0101 0001 1111 */ TABDECL(OP_LDR_M_IMM_OFF), // OP_LDR_M_IMM_OFF + +/* 0101 0010 0000 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0001 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0010 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0011 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0100 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0101 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0110 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 0111 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1000 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1001 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1010 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1011 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1100 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1101 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1110 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND +/* 0101 0010 1111 */ TABDECL(OP_STR_M_IMM_OFF_PREIND), // OP_STR_M_IMM_OFF_PREIND + +/* 0101 0011 0000 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0001 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0010 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0011 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0100 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0101 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0110 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 0111 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1000 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1001 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1010 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1011 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1100 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1101 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1110 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND +/* 0101 0011 1111 */ TABDECL(OP_LDR_M_IMM_OFF_PREIND), // OP_LDR_M_IMM_OFF_PREIND + +/* 0101 0100 0000 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0001 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0010 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0011 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0100 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0101 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0110 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 0111 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1000 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1001 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1010 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1011 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1100 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1101 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1110 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF +/* 0101 0100 1111 */ TABDECL(OP_STRB_M_IMM_OFF), // OP_STRB_M_IMM_OFF + +/* 0101 0101 0000 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0001 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0010 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0011 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0100 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0101 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0110 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 0111 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1000 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1001 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1010 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1011 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1100 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1101 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1110 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF +/* 0101 0101 1111 */ TABDECL(OP_LDRB_M_IMM_OFF), // OP_LDRB_M_IMM_OFF + +/* 0101 0110 0000 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0001 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0010 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0011 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0100 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0101 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0110 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 0111 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1000 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1001 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1010 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1011 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1100 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1101 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1110 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND +/* 0101 0110 1111 */ TABDECL(OP_STRB_M_IMM_OFF_PREIND), // OP_STRB_M_IMM_OFF_PREIND + +/* 0101 0111 0000 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0001 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0010 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0011 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0100 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0101 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0110 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 0111 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1000 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1001 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1010 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1011 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1100 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1101 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1110 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND +/* 0101 0111 1111 */ TABDECL(OP_LDRB_M_IMM_OFF_PREIND), // OP_LDRB_M_IMM_OFF_PREIND + +/* 0101 1000 0000 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0001 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0010 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0011 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0100 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0101 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0110 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 0111 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1000 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1001 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1010 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1011 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1100 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1101 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1110 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF +/* 0101 1000 1111 */ TABDECL(OP_STR_P_IMM_OFF), // OP_STR_P_IMM_OFF + +/* 0101 1001 0000 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0001 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0010 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0011 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0100 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0101 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0110 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 0111 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1000 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1001 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1010 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1011 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1100 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1101 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1110 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF +/* 0101 1001 1111 */ TABDECL(OP_LDR_P_IMM_OFF), // OP_LDR_P_IMM_OFF + +/* 0101 1010 0000 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0001 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0010 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0011 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0100 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0101 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0110 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 0111 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1000 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1001 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1010 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1011 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1100 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1101 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1110 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND +/* 0101 1010 1111 */ TABDECL(OP_STR_P_IMM_OFF_PREIND), // OP_STR_P_IMM_OFF_PREIND + +/* 0101 1011 0000 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0001 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0010 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0011 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0100 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0101 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0110 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 0111 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1000 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1001 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1010 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1011 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1100 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1101 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1110 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND +/* 0101 1011 1111 */ TABDECL(OP_LDR_P_IMM_OFF_PREIND), // OP_LDR_P_IMM_OFF_PREIND + +/* 0101 1100 0000 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0001 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0010 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0011 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0100 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0101 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0110 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 0111 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1000 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1001 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1010 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1011 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1100 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1101 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1110 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF +/* 0101 1100 1111 */ TABDECL(OP_STRB_P_IMM_OFF), // OP_STRB_P_IMM_OFF + +/* 0101 1101 0000 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0001 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0010 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0011 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0100 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0101 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0110 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 0111 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1000 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1001 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1010 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1011 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1100 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1101 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1110 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF +/* 0101 1101 1111 */ TABDECL(OP_LDRB_P_IMM_OFF), // OP_LDRB_P_IMM_OFF + +/* 0101 1110 0000 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0001 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0010 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0011 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0100 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0101 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0110 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 0111 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1000 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1001 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1010 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1011 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1100 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1101 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1110 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND +/* 0101 1110 1111 */ TABDECL(OP_STRB_P_IMM_OFF_PREIND), // OP_STRB_P_IMM_OFF_PREIND + +/* 0101 1111 0000 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0001 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0010 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0011 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0100 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0101 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0110 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 0111 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1000 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1001 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1010 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1011 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1100 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1101 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1110 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND +/* 0101 1111 1111 */ TABDECL(OP_LDRB_P_IMM_OFF_PREIND), // OP_LDRB_P_IMM_OFF_PREIND + +/* 0110 0000 0000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_POSTIND), // OP_STR_M_LSL_IMM_OFF_POSTIND +/* 0110 0000 0001 */ TABDECL(OP_UND), +/* 0110 0000 0010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_POSTIND), // OP_STR_M_LSR_IMM_OFF_POSTIND +/* 0110 0000 0011 */ TABDECL(OP_UND), +/* 0110 0000 0100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_POSTIND), // OP_STR_M_ASR_IMM_OFF_POSTIND +/* 0110 0000 0101 */ TABDECL(OP_UND), +/* 0110 0000 0110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_POSTIND), // OP_STR_M_ROR_IMM_OFF_POSTIND +/* 0110 0000 0111 */ TABDECL(OP_UND), +/* 0110 0000 1000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_POSTIND), // OP_STR_M_LSL_IMM_OFF_POSTIND +/* 0110 0000 1001 */ TABDECL(OP_UND), +/* 0110 0000 1010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_POSTIND), // OP_STR_M_LSR_IMM_OFF_POSTIND +/* 0110 0000 1011 */ TABDECL(OP_UND), +/* 0110 0000 1100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_POSTIND), // OP_STR_M_ASR_IMM_OFF_POSTIND +/* 0110 0000 1101 */ TABDECL(OP_UND), +/* 0110 0000 1110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_POSTIND), // OP_STR_M_ROR_IMM_OFF_POSTIND +/* 0110 0000 1111 */ TABDECL(OP_UND), + +/* 0110 0001 0000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_POSTIND), // OP_LDR_M_LSL_IMM_OFF_POSTIND +/* 0110 0001 0001 */ TABDECL(OP_UND), +/* 0110 0001 0010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_POSTIND), // OP_LDR_M_LSR_IMM_OFF_POSTIND +/* 0110 0001 0011 */ TABDECL(OP_UND), +/* 0110 0001 0100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_POSTIND), // OP_LDR_M_ASR_IMM_OFF_POSTIND +/* 0110 0001 0101 */ TABDECL(OP_UND), +/* 0110 0001 0110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_POSTIND), // OP_LDR_M_ROR_IMM_OFF_POSTIND +/* 0110 0001 0111 */ TABDECL(OP_UND), +/* 0110 0001 1000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_POSTIND), // OP_LDR_M_LSL_IMM_OFF_POSTIND +/* 0110 0001 1001 */ TABDECL(OP_UND), +/* 0110 0001 1010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_POSTIND), // OP_LDR_M_LSR_IMM_OFF_POSTIND +/* 0110 0001 1011 */ TABDECL(OP_UND), +/* 0110 0001 1100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_POSTIND), // OP_LDR_M_ASR_IMM_OFF_POSTIND +/* 0110 0001 1101 */ TABDECL(OP_UND), +/* 0110 0001 1110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_POSTIND), // OP_LDR_M_ROR_IMM_OFF_POSTIND +/* 0110 0001 1111 */ TABDECL(OP_UND), + +/* 0110 0010 0000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_POSTIND), // OP_STR_M_LSL_IMM_OFF_POSTIND +/* 0110 0010 0001 */ TABDECL(OP_UND), +/* 0110 0010 0010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_POSTIND), // OP_STR_M_LSR_IMM_OFF_POSTIND +/* 0110 0010 0011 */ TABDECL(OP_UND), +/* 0110 0010 0100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_POSTIND), // OP_STR_M_ASR_IMM_OFF_POSTIND +/* 0110 0010 0101 */ TABDECL(OP_UND), +/* 0110 0010 0110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_POSTIND), // OP_STR_M_ROR_IMM_OFF_POSTIND +/* 0110 0010 0111 */ TABDECL(OP_UND), +/* 0110 0010 1000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_POSTIND), // OP_STR_M_LSL_IMM_OFF_POSTIND +/* 0110 0010 1001 */ TABDECL(OP_UND), +/* 0110 0010 1010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_POSTIND), // OP_STR_M_LSR_IMM_OFF_POSTIND +/* 0110 0010 1011 */ TABDECL(OP_UND), +/* 0110 0010 1100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_POSTIND), // OP_STR_M_ASR_IMM_OFF_POSTIND +/* 0110 0010 1101 */ TABDECL(OP_UND), +/* 0110 0010 1110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_POSTIND), // OP_STR_M_ROR_IMM_OFF_POSTIND +/* 0110 0010 1111 */ TABDECL(OP_UND), + +/* 0110 0011 0000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_POSTIND), // OP_LDR_M_LSL_IMM_OFF_POSTIND +/* 0110 0011 0001 */ TABDECL(OP_UND), +/* 0110 0011 0010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_POSTIND), // OP_LDR_M_LSR_IMM_OFF_POSTIND +/* 0110 0011 0011 */ TABDECL(OP_UND), +/* 0110 0011 0100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_POSTIND), // OP_LDR_M_ASR_IMM_OFF_POSTIND +/* 0110 0011 0101 */ TABDECL(OP_UND), +/* 0110 0011 0110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_POSTIND), // OP_LDR_M_ROR_IMM_OFF_POSTIND +/* 0110 0011 0111 */ TABDECL(OP_UND), +/* 0110 0011 1000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_POSTIND), // OP_LDR_M_LSL_IMM_OFF_POSTIND +/* 0110 0011 1001 */ TABDECL(OP_UND), +/* 0110 0011 1010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_POSTIND), // OP_LDR_M_LSR_IMM_OFF_POSTIND +/* 0110 0011 1011 */ TABDECL(OP_UND), +/* 0110 0011 1100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_POSTIND), // OP_LDR_M_ASR_IMM_OFF_POSTIND +/* 0110 0011 1101 */ TABDECL(OP_UND), +/* 0110 0011 1110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_POSTIND), // OP_LDR_M_ROR_IMM_OFF_POSTIND +/* 0110 0011 1111 */ TABDECL(OP_UND), + +/* 0110 0100 0000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_POSTIND), // OP_STRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0100 0001 */ TABDECL(OP_UND), +/* 0110 0100 0010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_POSTIND), // OP_STRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0100 0011 */ TABDECL(OP_UND), +/* 0110 0100 0100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_POSTIND), // OP_STRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0100 0101 */ TABDECL(OP_UND), +/* 0110 0100 0110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_POSTIND), // OP_STRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0100 0111 */ TABDECL(OP_UND), +/* 0110 0100 1000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_POSTIND), // OP_STRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0100 1001 */ TABDECL(OP_UND), +/* 0110 0100 1010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_POSTIND), // OP_STRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0100 1011 */ TABDECL(OP_UND), +/* 0110 0100 1100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_POSTIND), // OP_STRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0100 1101 */ TABDECL(OP_UND), +/* 0110 0100 1110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_POSTIND), // OP_STRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0100 1111 */ TABDECL(OP_UND), + +/* 0110 0101 0000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_POSTIND), // OP_LDRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0101 0001 */ TABDECL(OP_UND), +/* 0110 0101 0010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_POSTIND), // OP_LDRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0101 0011 */ TABDECL(OP_UND), +/* 0110 0101 0100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_POSTIND), // OP_LDRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0101 0101 */ TABDECL(OP_UND), +/* 0110 0101 0110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_POSTIND), // OP_LDRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0101 0111 */ TABDECL(OP_UND), +/* 0110 0101 1000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_POSTIND), // OP_LDRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0101 1001 */ TABDECL(OP_UND), +/* 0110 0101 1010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_POSTIND), // OP_LDRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0101 1011 */ TABDECL(OP_UND), +/* 0110 0101 1100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_POSTIND), // OP_LDRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0101 1101 */ TABDECL(OP_UND), +/* 0110 0101 1110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_POSTIND), // OP_LDRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0101 1111 */ TABDECL(OP_UND), + +/* 0110 0110 0000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_POSTIND), // OP_STRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0110 0001 */ TABDECL(OP_UND), +/* 0110 0110 0010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_POSTIND), // OP_STRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0110 0011 */ TABDECL(OP_UND), +/* 0110 0110 0100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_POSTIND), // OP_STRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0110 0101 */ TABDECL(OP_UND), +/* 0110 0110 0110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_POSTIND), // OP_STRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0110 0111 */ TABDECL(OP_UND), +/* 0110 0110 1000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_POSTIND), // OP_STRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0110 1001 */ TABDECL(OP_UND), +/* 0110 0110 1010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_POSTIND), // OP_STRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0110 1011 */ TABDECL(OP_UND), +/* 0110 0110 1100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_POSTIND), // OP_STRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0110 1101 */ TABDECL(OP_UND), +/* 0110 0110 1110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_POSTIND), // OP_STRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0110 1111 */ TABDECL(OP_UND), + +/* 0110 0111 0000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_POSTIND), // OP_LDRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0111 0001 */ TABDECL(OP_UND), +/* 0110 0111 0010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_POSTIND), // OP_LDRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0111 0011 */ TABDECL(OP_UND), +/* 0110 0111 0100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_POSTIND), // OP_LDRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0111 0101 */ TABDECL(OP_UND), +/* 0110 0111 0110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_POSTIND), // OP_LDRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0111 0111 */ TABDECL(OP_UND), +/* 0110 0111 1000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_POSTIND), // OP_LDRB_M_LSL_IMM_OFF_POSTIND +/* 0110 0111 1001 */ TABDECL(OP_UND), +/* 0110 0111 1010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_POSTIND), // OP_LDRB_M_LSR_IMM_OFF_POSTIND +/* 0110 0111 1011 */ TABDECL(OP_UND), +/* 0110 0111 1100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_POSTIND), // OP_LDRB_M_ASR_IMM_OFF_POSTIND +/* 0110 0111 1101 */ TABDECL(OP_UND), +/* 0110 0111 1110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_POSTIND), // OP_LDRB_M_ROR_IMM_OFF_POSTIND +/* 0110 0111 1111 */ TABDECL(OP_UND), + +/* 0110 1000 0000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_POSTIND), // OP_STR_P_LSL_IMM_OFF_POSTIND +/* 0110 1000 0001 */ TABDECL(OP_UND), +/* 0110 1000 0010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_POSTIND), // OP_STR_P_LSR_IMM_OFF_POSTIND +/* 0110 1000 0011 */ TABDECL(OP_UND), +/* 0110 1000 0100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_POSTIND), // OP_STR_P_ASR_IMM_OFF_POSTIND +/* 0110 1000 0101 */ TABDECL(OP_UND), +/* 0110 1000 0110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_POSTIND), // OP_STR_P_ROR_IMM_OFF_POSTIND +/* 0110 1000 0111 */ TABDECL(OP_UND), +/* 0110 1000 1000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_POSTIND), // OP_STR_P_LSL_IMM_OFF_POSTIND +/* 0110 1000 1001 */ TABDECL(OP_UND), +/* 0110 1000 1010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_POSTIND), // OP_STR_P_LSR_IMM_OFF_POSTIND +/* 0110 1000 1011 */ TABDECL(OP_UND), +/* 0110 1000 1100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_POSTIND), // OP_STR_P_ASR_IMM_OFF_POSTIND +/* 0110 1000 1101 */ TABDECL(OP_UND), +/* 0110 1000 1110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_POSTIND), // OP_STR_P_ROR_IMM_OFF_POSTIND +/* 0110 1000 1111 */ TABDECL(OP_UND), + +/* 0110 1001 0000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1001 0001 */ TABDECL(OP_UND), +/* 0110 1001 0010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF_POSTIND), // OP_LDR_P_LSR_IMM_OFF_POSTIND +/* 0110 1001 0011 */ TABDECL(OP_UND), +/* 0110 1001 0100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF_POSTIND), // OP_LDR_P_ASR_IMM_OFF_POSTIND +/* 0110 1001 0101 */ TABDECL(OP_UND), +/* 0110 1001 0110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF_POSTIND), // OP_LDR_P_ROR_IMM_OFF_POSTIND +/* 0110 1001 0111 */ TABDECL(OP_UND), +/* 0110 1001 1000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1001 1001 */ TABDECL(OP_UND), +/* 0110 1001 1010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF_POSTIND), // OP_LDR_P_LSR_IMM_OFF_POSTIND +/* 0110 1001 1011 */ TABDECL(OP_UND), +/* 0110 1001 1100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF_POSTIND), // OP_LDR_P_ASR_IMM_OFF_POSTIND +/* 0110 1001 1101 */ TABDECL(OP_UND), +/* 0110 1001 1110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF_POSTIND), // OP_LDR_P_ROR_IMM_OFF_POSTIND +/* 0110 1001 1111 */ TABDECL(OP_UND), + +/* 0110 1010 0000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_POSTIND), // OP_STR_P_LSL_IMM_OFF_POSTIND +/* 0110 1010 0001 */ TABDECL(OP_UND), +/* 0110 1010 0010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_POSTIND), // OP_STR_P_LSR_IMM_OFF_POSTIND +/* 0110 1010 0011 */ TABDECL(OP_UND), +/* 0110 1010 0100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_POSTIND), // OP_STR_P_ASR_IMM_OFF_POSTIND +/* 0110 1010 0101 */ TABDECL(OP_UND), +/* 0110 1010 0110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_POSTIND), // OP_STR_P_ROR_IMM_OFF_POSTIND +/* 0110 1010 0111 */ TABDECL(OP_UND), +/* 0110 1010 1000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_POSTIND), // OP_STR_P_LSL_IMM_OFF_POSTIND +/* 0110 1010 1001 */ TABDECL(OP_UND), +/* 0110 1010 1010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_POSTIND), // OP_STR_P_LSR_IMM_OFF_POSTIND +/* 0110 1010 1011 */ TABDECL(OP_UND), +/* 0110 1010 1100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_POSTIND), // OP_STR_P_ASR_IMM_OFF_POSTIND +/* 0110 1010 1101 */ TABDECL(OP_UND), +/* 0110 1010 1110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_POSTIND), // OP_STR_P_ROR_IMM_OFF_POSTIND +/* 0110 1010 1111 */ TABDECL(OP_UND), + +/* 0110 1011 0000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 0001 */ TABDECL(OP_UND), +/* 0110 1011 0010 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 0011 */ TABDECL(OP_UND), +/* 0110 1011 0100 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 0101 */ TABDECL(OP_UND), +/* 0110 1011 0110 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 0111 */ TABDECL(OP_UND), +/* 0110 1011 1000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 1001 */ TABDECL(OP_UND), +/* 0110 1011 1010 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 1011 */ TABDECL(OP_UND), +/* 0110 1011 1100 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 1101 */ TABDECL(OP_UND), +/* 0110 1011 1110 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_POSTIND), // OP_LDR_P_LSL_IMM_OFF_POSTIND +/* 0110 1011 1111 */ TABDECL(OP_UND), + +/* 0110 1100 0000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_POSTIND), // OP_STRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1100 0001 */ TABDECL(OP_UND), +/* 0110 1100 0010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_POSTIND), // OP_STRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1100 0011 */ TABDECL(OP_UND), +/* 0110 1100 0100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_POSTIND), // OP_STRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1100 0101 */ TABDECL(OP_UND), +/* 0110 1100 0110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_POSTIND), // OP_STRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1100 0111 */ TABDECL(OP_UND), +/* 0110 1100 1000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_POSTIND), // OP_STRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1100 1001 */ TABDECL(OP_UND), +/* 0110 1100 1010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_POSTIND), // OP_STRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1100 1011 */ TABDECL(OP_UND), +/* 0110 1100 1100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_POSTIND), // OP_STRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1100 1101 */ TABDECL(OP_UND), +/* 0110 1100 1110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_POSTIND), // OP_STRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1100 1111 */ TABDECL(OP_UND), + +/* 0110 1101 0000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_POSTIND), // OP_LDRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1101 0001 */ TABDECL(OP_UND), +/* 0110 1101 0010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_POSTIND), // OP_LDRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1101 0011 */ TABDECL(OP_UND), +/* 0110 1101 0100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_POSTIND), // OP_LDRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1101 0101 */ TABDECL(OP_UND), +/* 0110 1101 0110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_POSTIND), // OP_LDRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1101 0111 */ TABDECL(OP_UND), +/* 0110 1101 1000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_POSTIND), // OP_LDRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1101 1001 */ TABDECL(OP_UND), +/* 0110 1101 1010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_POSTIND), // OP_LDRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1101 1011 */ TABDECL(OP_UND), +/* 0110 1101 1100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_POSTIND), // OP_LDRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1101 1101 */ TABDECL(OP_UND), +/* 0110 1101 1110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_POSTIND), // OP_LDRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1101 1111 */ TABDECL(OP_UND), + +/* 0110 1110 0000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_POSTIND), // OP_STRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1110 0001 */ TABDECL(OP_UND), +/* 0110 1110 0010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_POSTIND), // OP_STRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1110 0011 */ TABDECL(OP_UND), +/* 0110 1110 0100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_POSTIND), // OP_STRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1110 0101 */ TABDECL(OP_UND), +/* 0110 1110 0110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_POSTIND), // OP_STRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1110 0111 */ TABDECL(OP_UND), +/* 0110 1110 1000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_POSTIND), // OP_STRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1110 1001 */ TABDECL(OP_UND), +/* 0110 1110 1010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_POSTIND), // OP_STRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1110 1011 */ TABDECL(OP_UND), +/* 0110 1110 1100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_POSTIND), // OP_STRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1110 1101 */ TABDECL(OP_UND), +/* 0110 1110 1110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_POSTIND), // OP_STRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1110 1111 */ TABDECL(OP_UND), + +/* 0110 1111 0000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_POSTIND), // OP_LDRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1111 0001 */ TABDECL(OP_UND), +/* 0110 1111 0010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_POSTIND), // OP_LDRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1111 0011 */ TABDECL(OP_UND), +/* 0110 1111 0100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_POSTIND), // OP_LDRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1111 0101 */ TABDECL(OP_UND), +/* 0110 1111 0110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_POSTIND), // OP_LDRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1111 0111 */ TABDECL(OP_UND), +/* 0110 1111 1000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_POSTIND), // OP_LDRB_P_LSL_IMM_OFF_POSTIND +/* 0110 1111 1001 */ TABDECL(OP_UND), +/* 0110 1111 1010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_POSTIND), // OP_LDRB_P_LSR_IMM_OFF_POSTIND +/* 0110 1111 1011 */ TABDECL(OP_UND), +/* 0110 1111 1100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_POSTIND), // OP_LDRB_P_ASR_IMM_OFF_POSTIND +/* 0110 1111 1101 */ TABDECL(OP_UND), +/* 0110 1111 1110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_POSTIND), // OP_LDRB_P_ROR_IMM_OFF_POSTIND +/* 0110 1111 1111 */ TABDECL(OP_UND), + +/* 0111 0000 0000 */ TABDECL(OP_STR_M_LSL_IMM_OFF), // OP_STR_M_LSL_IMM_OFF +/* 0111 0000 0001 */ TABDECL(OP_UND), +/* 0111 0000 0010 */ TABDECL(OP_STR_M_LSR_IMM_OFF), // OP_STR_M_LSR_IMM_OFF +/* 0111 0000 0011 */ TABDECL(OP_UND), +/* 0111 0000 0100 */ TABDECL(OP_STR_M_ASR_IMM_OFF), // OP_STR_M_ASR_IMM_OFF +/* 0111 0000 0101 */ TABDECL(OP_UND), +/* 0111 0000 0110 */ TABDECL(OP_STR_M_ROR_IMM_OFF), // OP_STR_M_ROR_IMM_OFF +/* 0111 0000 0111 */ TABDECL(OP_UND), +/* 0111 0000 1000 */ TABDECL(OP_STR_M_LSL_IMM_OFF), // OP_STR_M_LSL_IMM_OFF +/* 0111 0000 1001 */ TABDECL(OP_UND), +/* 0111 0000 1010 */ TABDECL(OP_STR_M_LSR_IMM_OFF), // OP_STR_M_LSR_IMM_OFF +/* 0111 0000 1011 */ TABDECL(OP_UND), +/* 0111 0000 1100 */ TABDECL(OP_STR_M_ASR_IMM_OFF), // OP_STR_M_ASR_IMM_OFF +/* 0111 0000 1101 */ TABDECL(OP_UND), +/* 0111 0000 1110 */ TABDECL(OP_STR_M_ROR_IMM_OFF), // OP_STR_M_ROR_IMM_OFF +/* 0111 0000 1111 */ TABDECL(OP_UND), + +/* 0111 0001 0000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF), // OP_LDR_M_LSL_IMM_OFF +/* 0111 0001 0001 */ TABDECL(OP_UND), +/* 0111 0001 0010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF), // OP_LDR_M_LSR_IMM_OFF +/* 0111 0001 0011 */ TABDECL(OP_UND), +/* 0111 0001 0100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF), // OP_LDR_M_ASR_IMM_OFF +/* 0111 0001 0101 */ TABDECL(OP_UND), +/* 0111 0001 0110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF), // OP_LDR_M_ROR_IMM_OFF +/* 0111 0001 0111 */ TABDECL(OP_UND), +/* 0111 0001 1000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF), // OP_LDR_M_LSL_IMM_OFF +/* 0111 0001 1001 */ TABDECL(OP_UND), +/* 0111 0001 1010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF), // OP_LDR_M_LSR_IMM_OFF +/* 0111 0001 1011 */ TABDECL(OP_UND), +/* 0111 0001 1100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF), // OP_LDR_M_ASR_IMM_OFF +/* 0111 0001 1101 */ TABDECL(OP_UND), +/* 0111 0001 1110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF), // OP_LDR_M_ROR_IMM_OFF +/* 0111 0001 1111 */ TABDECL(OP_UND), + +/* 0111 0010 0000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_PREIND), // OP_STR_M_LSL_IMM_OFF_PREIND +/* 0111 0010 0001 */ TABDECL(OP_UND), +/* 0111 0010 0010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_PREIND), // OP_STR_M_LSR_IMM_OFF_PREIND +/* 0111 0010 0011 */ TABDECL(OP_UND), +/* 0111 0010 0100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_PREIND), // OP_STR_M_ASR_IMM_OFF_PREIND +/* 0111 0010 0101 */ TABDECL(OP_UND), +/* 0111 0010 0110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_PREIND), // OP_STR_M_ROR_IMM_OFF_PREIND +/* 0111 0010 0111 */ TABDECL(OP_UND), +/* 0111 0010 1000 */ TABDECL(OP_STR_M_LSL_IMM_OFF_PREIND), // OP_STR_M_LSL_IMM_OFF_PREIND +/* 0111 0010 1001 */ TABDECL(OP_UND), +/* 0111 0010 1010 */ TABDECL(OP_STR_M_LSR_IMM_OFF_PREIND), // OP_STR_M_LSR_IMM_OFF_PREIND +/* 0111 0010 1011 */ TABDECL(OP_UND), +/* 0111 0010 1100 */ TABDECL(OP_STR_M_ASR_IMM_OFF_PREIND), // OP_STR_M_ASR_IMM_OFF_PREIND +/* 0111 0010 1101 */ TABDECL(OP_UND), +/* 0111 0010 1110 */ TABDECL(OP_STR_M_ROR_IMM_OFF_PREIND), // OP_STR_M_ROR_IMM_OFF_PREIND +/* 0111 0010 1111 */ TABDECL(OP_UND), + +/* 0111 0011 0000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_PREIND), // OP_LDR_M_LSL_IMM_OFF_PREIND +/* 0111 0011 0001 */ TABDECL(OP_UND), +/* 0111 0011 0010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_PREIND), // OP_LDR_M_LSR_IMM_OFF_PREIND +/* 0111 0011 0011 */ TABDECL(OP_UND), +/* 0111 0011 0100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_PREIND), // OP_LDR_M_ASR_IMM_OFF_PREIND +/* 0111 0011 0101 */ TABDECL(OP_UND), +/* 0111 0011 0110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_PREIND), // OP_LDR_M_ROR_IMM_OFF_PREIND +/* 0111 0011 0111 */ TABDECL(OP_UND), +/* 0111 0011 1000 */ TABDECL(OP_LDR_M_LSL_IMM_OFF_PREIND), // OP_LDR_M_LSL_IMM_OFF_PREIND +/* 0111 0011 1001 */ TABDECL(OP_UND), +/* 0111 0011 1010 */ TABDECL(OP_LDR_M_LSR_IMM_OFF_PREIND), // OP_LDR_M_LSR_IMM_OFF_PREIND +/* 0111 0011 1011 */ TABDECL(OP_UND), +/* 0111 0011 1100 */ TABDECL(OP_LDR_M_ASR_IMM_OFF_PREIND), // OP_LDR_M_ASR_IMM_OFF_PREIND +/* 0111 0011 1101 */ TABDECL(OP_UND), +/* 0111 0011 1110 */ TABDECL(OP_LDR_M_ROR_IMM_OFF_PREIND), // OP_LDR_M_ROR_IMM_OFF_PREIND +/* 0111 0011 1111 */ TABDECL(OP_UND), + +/* 0111 0100 0000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF), // OP_STRB_M_LSL_IMM_OFF +/* 0111 0100 0001 */ TABDECL(OP_UND), +/* 0111 0100 0010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF), // OP_STRB_M_LSR_IMM_OFF +/* 0111 0100 0011 */ TABDECL(OP_UND), +/* 0111 0100 0100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF), // OP_STRB_M_ASR_IMM_OFF +/* 0111 0100 0101 */ TABDECL(OP_UND), +/* 0111 0100 0110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF), // OP_STRB_M_ROR_IMM_OFF +/* 0111 0100 0111 */ TABDECL(OP_UND), +/* 0111 0100 1000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF), // OP_STRB_M_LSL_IMM_OFF +/* 0111 0100 1001 */ TABDECL(OP_UND), +/* 0111 0100 1010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF), // OP_STRB_M_LSR_IMM_OFF +/* 0111 0100 1011 */ TABDECL(OP_UND), +/* 0111 0100 1100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF), // OP_STRB_M_ASR_IMM_OFF +/* 0111 0100 1101 */ TABDECL(OP_UND), +/* 0111 0100 1110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF), // OP_STRB_M_ROR_IMM_OFF +/* 0111 0100 1111 */ TABDECL(OP_UND), + +/* 0111 0101 0000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF), // OP_LDRB_M_LSL_IMM_OFF +/* 0111 0101 0001 */ TABDECL(OP_UND), +/* 0111 0101 0010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF), // OP_LDRB_M_LSR_IMM_OFF +/* 0111 0101 0011 */ TABDECL(OP_UND), +/* 0111 0101 0100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF), // OP_LDRB_M_ASR_IMM_OFF +/* 0111 0101 0101 */ TABDECL(OP_UND), +/* 0111 0101 0110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF), // OP_LDRB_M_ROR_IMM_OFF +/* 0111 0101 0111 */ TABDECL(OP_UND), +/* 0111 0101 1000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF), // OP_LDRB_M_LSL_IMM_OFF +/* 0111 0101 1001 */ TABDECL(OP_UND), +/* 0111 0101 1010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF), // OP_LDRB_M_LSR_IMM_OFF +/* 0111 0101 1011 */ TABDECL(OP_UND), +/* 0111 0101 1100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF), // OP_LDRB_M_ASR_IMM_OFF +/* 0111 0101 1101 */ TABDECL(OP_UND), +/* 0111 0101 1110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF), // OP_LDRB_M_ROR_IMM_OFF +/* 0111 0101 1111 */ TABDECL(OP_UND), + +/* 0111 0110 0000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_PREIND), // OP_STRB_M_LSL_IMM_OFF_PREIND +/* 0111 0110 0001 */ TABDECL(OP_UND), +/* 0111 0110 0010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_PREIND), // OP_STRB_M_LSR_IMM_OFF_PREIND +/* 0111 0110 0011 */ TABDECL(OP_UND), +/* 0111 0110 0100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_PREIND), // OP_STRB_M_ASR_IMM_OFF_PREIND +/* 0111 0110 0101 */ TABDECL(OP_UND), +/* 0111 0110 0110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_PREIND), // OP_STRB_M_ROR_IMM_OFF_PREIND +/* 0111 0110 0111 */ TABDECL(OP_UND), +/* 0111 0110 1000 */ TABDECL(OP_STRB_M_LSL_IMM_OFF_PREIND), // OP_STRB_M_LSL_IMM_OFF_PREIND +/* 0111 0110 1001 */ TABDECL(OP_UND), +/* 0111 0110 1010 */ TABDECL(OP_STRB_M_LSR_IMM_OFF_PREIND), // OP_STRB_M_LSR_IMM_OFF_PREIND +/* 0111 0110 1011 */ TABDECL(OP_UND), +/* 0111 0110 1100 */ TABDECL(OP_STRB_M_ASR_IMM_OFF_PREIND), // OP_STRB_M_ASR_IMM_OFF_PREIND +/* 0111 0110 1101 */ TABDECL(OP_UND), +/* 0111 0110 1110 */ TABDECL(OP_STRB_M_ROR_IMM_OFF_PREIND), // OP_STRB_M_ROR_IMM_OFF_PREIND +/* 0111 0110 1111 */ TABDECL(OP_UND), + +/* 0111 0111 0000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_PREIND), // OP_LDRB_M_LSL_IMM_OFF_PREIND +/* 0111 0111 0001 */ TABDECL(OP_UND), +/* 0111 0111 0010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_PREIND), // OP_LDRB_M_LSR_IMM_OFF_PREIND +/* 0111 0111 0011 */ TABDECL(OP_UND), +/* 0111 0111 0100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_PREIND), // OP_LDRB_M_ASR_IMM_OFF_PREIND +/* 0111 0111 0101 */ TABDECL(OP_UND), +/* 0111 0111 0110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_PREIND), // OP_LDRB_M_ROR_IMM_OFF_PREIND +/* 0111 0111 0111 */ TABDECL(OP_UND), +/* 0111 0111 1000 */ TABDECL(OP_LDRB_M_LSL_IMM_OFF_PREIND), // OP_LDRB_M_LSL_IMM_OFF_PREIND +/* 0111 0111 1001 */ TABDECL(OP_UND), +/* 0111 0111 1010 */ TABDECL(OP_LDRB_M_LSR_IMM_OFF_PREIND), // OP_LDRB_M_LSR_IMM_OFF_PREIND +/* 0111 0111 1011 */ TABDECL(OP_UND), +/* 0111 0111 1100 */ TABDECL(OP_LDRB_M_ASR_IMM_OFF_PREIND), // OP_LDRB_M_ASR_IMM_OFF_PREIND +/* 0111 0111 1101 */ TABDECL(OP_UND), +/* 0111 0111 1110 */ TABDECL(OP_LDRB_M_ROR_IMM_OFF_PREIND), // OP_LDRB_M_ROR_IMM_OFF_PREIND +/* 0111 0111 1111 */ TABDECL(OP_UND), + +/* 0111 1000 0000 */ TABDECL(OP_STR_P_LSL_IMM_OFF), // OP_STR_P_LSL_IMM_OFF +/* 0111 1000 0001 */ TABDECL(OP_UND), +/* 0111 1000 0010 */ TABDECL(OP_STR_P_LSR_IMM_OFF), // OP_STR_P_LSR_IMM_OFF +/* 0111 1000 0011 */ TABDECL(OP_UND), +/* 0111 1000 0100 */ TABDECL(OP_STR_P_ASR_IMM_OFF), // OP_STR_P_ASR_IMM_OFF +/* 0111 1000 0101 */ TABDECL(OP_UND), +/* 0111 1000 0110 */ TABDECL(OP_STR_P_ROR_IMM_OFF), // OP_STR_P_ROR_IMM_OFF +/* 0111 1000 0111 */ TABDECL(OP_UND), +/* 0111 1000 1000 */ TABDECL(OP_STR_P_LSL_IMM_OFF), // OP_STR_P_LSL_IMM_OFF +/* 0111 1000 1001 */ TABDECL(OP_UND), +/* 0111 1000 1010 */ TABDECL(OP_STR_P_LSR_IMM_OFF), // OP_STR_P_LSR_IMM_OFF +/* 0111 1000 1011 */ TABDECL(OP_UND), +/* 0111 1000 1100 */ TABDECL(OP_STR_P_ASR_IMM_OFF), // OP_STR_P_ASR_IMM_OFF +/* 0111 1000 1101 */ TABDECL(OP_UND), +/* 0111 1000 1110 */ TABDECL(OP_STR_P_ROR_IMM_OFF), // OP_STR_P_ROR_IMM_OFF +/* 0111 1000 1111 */ TABDECL(OP_UND), + +/* 0111 1001 0000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF), // OP_LDR_P_LSL_IMM_OFF +/* 0111 1001 0001 */ TABDECL(OP_UND), +/* 0111 1001 0010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF), // OP_LDR_P_LSR_IMM_OFF +/* 0111 1001 0011 */ TABDECL(OP_UND), +/* 0111 1001 0100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF), // OP_LDR_P_ASR_IMM_OFF +/* 0111 1001 0101 */ TABDECL(OP_UND), +/* 0111 1001 0110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF), // OP_LDR_P_ROR_IMM_OFF +/* 0111 1001 0111 */ TABDECL(OP_UND), +/* 0111 1001 1000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF), // OP_LDR_P_LSL_IMM_OFF +/* 0111 1001 1001 */ TABDECL(OP_UND), +/* 0111 1001 1010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF), // OP_LDR_P_LSR_IMM_OFF +/* 0111 1001 1011 */ TABDECL(OP_UND), +/* 0111 1001 1100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF), // OP_LDR_P_ASR_IMM_OFF +/* 0111 1001 1101 */ TABDECL(OP_UND), +/* 0111 1001 1110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF), // OP_LDR_P_ROR_IMM_OFF +/* 0111 1001 1111 */ TABDECL(OP_UND), + +/* 0111 1010 0000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_PREIND), // OP_STR_P_LSL_IMM_OFF_PREIND +/* 0111 1010 0001 */ TABDECL(OP_UND), +/* 0111 1010 0010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_PREIND), // OP_STR_P_LSR_IMM_OFF_PREIND +/* 0111 1010 0011 */ TABDECL(OP_UND), +/* 0111 1010 0100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_PREIND), // OP_STR_P_ASR_IMM_OFF_PREIND +/* 0111 1010 0101 */ TABDECL(OP_UND), +/* 0111 1010 0110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_PREIND), // OP_STR_P_ROR_IMM_OFF_PREIND +/* 0111 1010 0111 */ TABDECL(OP_UND), +/* 0111 1010 1000 */ TABDECL(OP_STR_P_LSL_IMM_OFF_PREIND), // OP_STR_P_LSL_IMM_OFF_PREIND +/* 0111 1010 1001 */ TABDECL(OP_UND), +/* 0111 1010 1010 */ TABDECL(OP_STR_P_LSR_IMM_OFF_PREIND), // OP_STR_P_LSR_IMM_OFF_PREIND +/* 0111 1010 1011 */ TABDECL(OP_UND), +/* 0111 1010 1100 */ TABDECL(OP_STR_P_ASR_IMM_OFF_PREIND), // OP_STR_P_ASR_IMM_OFF_PREIND +/* 0111 1010 1101 */ TABDECL(OP_UND), +/* 0111 1010 1110 */ TABDECL(OP_STR_P_ROR_IMM_OFF_PREIND), // OP_STR_P_ROR_IMM_OFF_PREIND +/* 0111 1010 1111 */ TABDECL(OP_UND), + +/* 0111 1011 0000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_PREIND), // OP_LDR_P_LSL_IMM_OFF_PREIND +/* 0111 1011 0001 */ TABDECL(OP_UND), +/* 0111 1011 0010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF_PREIND), // OP_LDR_P_LSR_IMM_OFF_PREIND +/* 0111 1011 0011 */ TABDECL(OP_UND), +/* 0111 1011 0100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF_PREIND), // OP_LDR_P_ASR_IMM_OFF_PREIND +/* 0111 1011 0101 */ TABDECL(OP_UND), +/* 0111 1011 0110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF_PREIND), // OP_LDR_P_ROR_IMM_OFF_PREIND +/* 0111 1011 0111 */ TABDECL(OP_UND), +/* 0111 1011 1000 */ TABDECL(OP_LDR_P_LSL_IMM_OFF_PREIND), // OP_LDR_P_LSL_IMM_OFF_PREIND +/* 0111 1011 1001 */ TABDECL(OP_UND), +/* 0111 1011 1010 */ TABDECL(OP_LDR_P_LSR_IMM_OFF_PREIND), // OP_LDR_P_LSR_IMM_OFF_PREIND +/* 0111 1011 1011 */ TABDECL(OP_UND), +/* 0111 1011 1100 */ TABDECL(OP_LDR_P_ASR_IMM_OFF_PREIND), // OP_LDR_P_ASR_IMM_OFF_PREIND +/* 0111 1011 1101 */ TABDECL(OP_UND), +/* 0111 1011 1110 */ TABDECL(OP_LDR_P_ROR_IMM_OFF_PREIND), // OP_LDR_P_ROR_IMM_OFF_PREIND +/* 0111 1011 1111 */ TABDECL(OP_UND), + +/* 0111 1100 0000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF), // OP_STRB_P_LSL_IMM_OFF +/* 0111 1100 0001 */ TABDECL(OP_UND), +/* 0111 1100 0010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF), // OP_STRB_P_LSR_IMM_OFF +/* 0111 1100 0011 */ TABDECL(OP_UND), +/* 0111 1100 0100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF), // OP_STRB_P_ASR_IMM_OFF +/* 0111 1100 0101 */ TABDECL(OP_UND), +/* 0111 1100 0110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF), // OP_STRB_P_ROR_IMM_OFF +/* 0111 1100 0111 */ TABDECL(OP_UND), +/* 0111 1100 1000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF), // OP_STRB_P_LSL_IMM_OFF +/* 0111 1100 1001 */ TABDECL(OP_UND), +/* 0111 1100 1010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF), // OP_STRB_P_LSR_IMM_OFF +/* 0111 1100 1011 */ TABDECL(OP_UND), +/* 0111 1100 1100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF), // OP_STRB_P_ASR_IMM_OFF +/* 0111 1100 1101 */ TABDECL(OP_UND), +/* 0111 1100 1110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF), // OP_STRB_P_ROR_IMM_OFF +/* 0111 1100 1111 */ TABDECL(OP_UND), + +/* 0111 1101 0000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF), // OP_LDRB_P_LSL_IMM_OFF +/* 0111 1101 0001 */ TABDECL(OP_UND), +/* 0111 1101 0010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF), // OP_LDRB_P_LSR_IMM_OFF +/* 0111 1101 0011 */ TABDECL(OP_UND), +/* 0111 1101 0100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF), // OP_LDRB_P_ASR_IMM_OFF +/* 0111 1101 0101 */ TABDECL(OP_UND), +/* 0111 1101 0110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF), // OP_LDRB_P_ROR_IMM_OFF +/* 0111 1101 0111 */ TABDECL(OP_UND), +/* 0111 1101 1000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF), // OP_LDRB_P_LSL_IMM_OFF +/* 0111 1101 1001 */ TABDECL(OP_UND), +/* 0111 1101 1010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF), // OP_LDRB_P_LSR_IMM_OFF +/* 0111 1101 1011 */ TABDECL(OP_UND), +/* 0111 1101 1100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF), // OP_LDRB_P_ASR_IMM_OFF +/* 0111 1101 1101 */ TABDECL(OP_UND), +/* 0111 1101 1110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF), // OP_LDRB_P_ROR_IMM_OFF +/* 0111 1101 1111 */ TABDECL(OP_UND), + +/* 0111 1110 0000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_PREIND), // OP_STRB_P_LSL_IMM_OFF_PREIND +/* 0111 1110 0001 */ TABDECL(OP_UND), +/* 0111 1110 0010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_PREIND), // OP_STRB_P_LSR_IMM_OFF_PREIND +/* 0111 1110 0011 */ TABDECL(OP_UND), +/* 0111 1110 0100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_PREIND), // OP_STRB_P_ASR_IMM_OFF_PREIND +/* 0111 1110 0101 */ TABDECL(OP_UND), +/* 0111 1110 0110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_PREIND), // OP_STRB_P_ROR_IMM_OFF_PREIND +/* 0111 1110 0111 */ TABDECL(OP_UND), +/* 0111 1110 1000 */ TABDECL(OP_STRB_P_LSL_IMM_OFF_PREIND), // OP_STRB_P_LSL_IMM_OFF_PREIND +/* 0111 1110 1001 */ TABDECL(OP_UND), +/* 0111 1110 1010 */ TABDECL(OP_STRB_P_LSR_IMM_OFF_PREIND), // OP_STRB_P_LSR_IMM_OFF_PREIND +/* 0111 1110 1011 */ TABDECL(OP_UND), +/* 0111 1110 1100 */ TABDECL(OP_STRB_P_ASR_IMM_OFF_PREIND), // OP_STRB_P_ASR_IMM_OFF_PREIND +/* 0111 1110 1101 */ TABDECL(OP_UND), +/* 0111 1110 1110 */ TABDECL(OP_STRB_P_ROR_IMM_OFF_PREIND), // OP_STRB_P_ROR_IMM_OFF_PREIND +/* 0111 1110 1111 */ TABDECL(OP_UND), + +/* 0111 1111 0000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_PREIND), // OP_LDRB_P_LSL_IMM_OFF_PREIND +/* 0111 1111 0001 */ TABDECL(OP_UND), +/* 0111 1111 0010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_PREIND), // OP_LDRB_P_LSR_IMM_OFF_PREIND +/* 0111 1111 0011 */ TABDECL(OP_UND), +/* 0111 1111 0100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_PREIND), // OP_LDRB_P_ASR_IMM_OFF_PREIND +/* 0111 1111 0101 */ TABDECL(OP_UND), +/* 0111 1111 0110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_PREIND), // OP_LDRB_P_ROR_IMM_OFF_PREIND +/* 0111 1111 0111 */ TABDECL(OP_UND), +/* 0111 1111 1000 */ TABDECL(OP_LDRB_P_LSL_IMM_OFF_PREIND), // OP_LDRB_P_LSL_IMM_OFF_PREIND +/* 0111 1111 1001 */ TABDECL(OP_UND), +/* 0111 1111 1010 */ TABDECL(OP_LDRB_P_LSR_IMM_OFF_PREIND), // OP_LDRB_P_LSR_IMM_OFF_PREIND +/* 0111 1111 1011 */ TABDECL(OP_UND), +/* 0111 1111 1100 */ TABDECL(OP_LDRB_P_ASR_IMM_OFF_PREIND), // OP_LDRB_P_ASR_IMM_OFF_PREIND +/* 0111 1111 1101 */ TABDECL(OP_UND), +/* 0111 1111 1110 */ TABDECL(OP_LDRB_P_ROR_IMM_OFF_PREIND), // OP_LDRB_P_ROR_IMM_OFF_PREIND +/* 0111 1111 1111 */ TABDECL(OP_UND), + +/* 1000 0000 0000 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0001 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0010 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0011 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0100 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0101 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0110 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 0111 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1000 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1001 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1010 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1011 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1100 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1101 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1110 */ TABDECL(OP_STMDA), // OP_STMDA +/* 1000 0000 1111 */ TABDECL(OP_STMDA), // OP_STMDA + +/* 1000 0001 0000 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0001 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0010 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0011 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0100 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0101 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0110 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 0111 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1000 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1001 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1010 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1011 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1100 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1101 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1110 */ TABDECL(OP_LDMDA), // OP_LDMDA +/* 1000 0001 1111 */ TABDECL(OP_LDMDA), // OP_LDMDA + +/* 1000 0010 0000 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0001 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0010 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0011 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0100 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0101 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0110 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 0111 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1000 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1001 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1010 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1011 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1100 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1101 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1110 */ TABDECL(OP_STMDA_W), // OP_STMDA_W +/* 1000 0010 1111 */ TABDECL(OP_STMDA_W), // OP_STMDA_W + +/* 1000 0011 0000 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0001 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0010 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0011 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0100 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0101 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0110 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 0111 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1000 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1001 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1010 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1011 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1100 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1101 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1110 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W +/* 1000 0011 1111 */ TABDECL(OP_LDMDA_W), // OP_LDMDA_W + +/* 1000 0100 0000 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0001 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0010 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0011 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0100 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0101 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0110 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 0111 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1000 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1001 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1010 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1011 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1100 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1101 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1110 */ TABDECL(OP_STMDA2), // OP_STMDA2 +/* 1000 0100 1111 */ TABDECL(OP_STMDA2), // OP_STMDA2 + +/* 1000 0101 0000 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0001 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0010 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0011 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0100 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0101 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0110 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 0111 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1000 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1001 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1010 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1011 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1100 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1101 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1110 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 +/* 1000 0101 1111 */ TABDECL(OP_LDMDA2), // OP_LDMDA2 + +/* 1000 0110 0000 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0001 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0010 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0011 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0100 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0101 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0110 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 0111 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1000 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1001 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1010 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1011 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1100 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1101 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1110 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W +/* 1000 0110 1111 */ TABDECL(OP_STMDA2_W), // OP_STMDA2_W + +/* 1000 0111 0000 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0001 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0010 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0011 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0100 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0101 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0110 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 0111 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1000 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1001 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1010 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1011 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1100 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1101 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1110 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W +/* 1000 0111 1111 */ TABDECL(OP_LDMDA2_W), // OP_LDMDA2_W + +/* 1000 1000 0000 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0001 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0010 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0011 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0100 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0101 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0110 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 0111 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1000 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1001 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1010 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1011 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1100 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1101 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1110 */ TABDECL(OP_STMIA), // OP_STMIA +/* 1000 1000 1111 */ TABDECL(OP_STMIA), // OP_STMIA + +/* 1000 1001 0000 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0001 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0010 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0011 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0100 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0101 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0110 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 0111 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1000 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1001 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1010 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1011 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1100 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1101 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1110 */ TABDECL(OP_LDMIA), // OP_LDMIA +/* 1000 1001 1111 */ TABDECL(OP_LDMIA), // OP_LDMIA + +/* 1000 1010 0000 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0001 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0010 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0011 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0100 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0101 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0110 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 0111 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1000 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1001 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1010 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1011 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1100 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1101 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1110 */ TABDECL(OP_STMIA_W), // OP_STMIA_W +/* 1000 1010 1111 */ TABDECL(OP_STMIA_W), // OP_STMIA_W + +/* 1000 1011 0000 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0001 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0010 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0011 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0100 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0101 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0110 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 0111 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1000 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1001 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1010 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1011 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1100 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1101 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1110 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W +/* 1000 1011 1111 */ TABDECL(OP_LDMIA_W), // OP_LDMIA_W + +/* 1000 1100 0000 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0001 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0010 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0011 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0100 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0101 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0110 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 0111 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1000 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1001 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1010 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1011 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1100 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1101 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1110 */ TABDECL(OP_STMIA2), // OP_STMIA2 +/* 1000 1100 1111 */ TABDECL(OP_STMIA2), // OP_STMIA2 + +/* 1000 1101 0000 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0001 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0010 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0011 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0100 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0101 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0110 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 0111 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1000 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1001 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1010 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1011 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1100 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1101 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1110 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 +/* 1000 1101 1111 */ TABDECL(OP_LDMIA2), // OP_LDMIA2 + +/* 1000 1110 0000 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0001 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0010 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0011 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0100 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0101 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0110 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 0111 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1000 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1001 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1010 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1011 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1100 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1101 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1110 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W +/* 1000 1110 1111 */ TABDECL(OP_STMIA2_W), // OP_STMIA2_W + +/* 1000 1111 0000 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0001 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0010 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0011 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0100 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0101 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0110 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 0111 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1000 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1001 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1010 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1011 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1100 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1101 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1110 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W +/* 1000 1111 1111 */ TABDECL(OP_LDMIA2_W), // OP_LDMIA2_W + +/* 1001 0000 0000 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0001 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0010 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0011 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0100 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0101 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0110 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 0111 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1000 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1001 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1010 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1011 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1100 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1101 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1110 */ TABDECL(OP_STMDB), // OP_STMDB +/* 1001 0000 1111 */ TABDECL(OP_STMDB), // OP_STMDB + +/* 1001 0001 0000 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0001 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0010 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0011 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0100 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0101 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0110 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 0111 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1000 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1001 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1010 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1011 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1100 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1101 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1110 */ TABDECL(OP_LDMDB), // OP_LDMDB +/* 1001 0001 1111 */ TABDECL(OP_LDMDB), // OP_LDMDB + +/* 1001 0010 0000 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0001 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0010 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0011 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0100 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0101 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0110 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 0111 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1000 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1001 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1010 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1011 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1100 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1101 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1110 */ TABDECL(OP_STMDB_W), // OP_STMDB_W +/* 1001 0010 1111 */ TABDECL(OP_STMDB_W), // OP_STMDB_W + +/* 1001 0011 0000 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0001 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0010 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0011 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0100 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0101 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0110 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 0111 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1000 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1001 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1010 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1011 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1100 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1101 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1110 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W +/* 1001 0011 1111 */ TABDECL(OP_LDMDB_W), // OP_LDMDB_W + +/* 1001 0100 0000 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0001 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0010 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0011 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0100 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0101 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0110 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 0111 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1000 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1001 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1010 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1011 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1100 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1101 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1110 */ TABDECL(OP_STMDB2), // OP_STMDB2 +/* 1001 0100 1111 */ TABDECL(OP_STMDB2), // OP_STMDB2 + +/* 1001 0101 0000 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0001 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0010 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0011 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0100 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0101 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0110 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 0111 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1000 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1001 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1010 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1011 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1100 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1101 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1110 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 +/* 1001 0101 1111 */ TABDECL(OP_LDMDB2), // OP_LDMDB2 + +/* 1001 0110 0000 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0001 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0010 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0011 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0100 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0101 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0110 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 0111 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1000 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1001 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1010 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1011 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1100 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1101 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1110 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W +/* 1001 0110 1111 */ TABDECL(OP_STMDB2_W), // OP_STMDB2_W + +/* 1001 0111 0000 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0001 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0010 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0011 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0100 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0101 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0110 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 0111 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1000 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1001 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1010 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1011 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1100 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1101 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1110 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W +/* 1001 0111 1111 */ TABDECL(OP_LDMDB2_W), // OP_LDMDB2_W + +/* 1001 1000 0000 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0001 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0010 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0011 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0100 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0101 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0110 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 0111 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1000 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1001 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1010 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1011 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1100 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1101 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1110 */ TABDECL(OP_STMIB), // OP_STMIB +/* 1001 1000 1111 */ TABDECL(OP_STMIB), // OP_STMIB + +/* 1001 1001 0000 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0001 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0010 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0011 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0100 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0101 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0110 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 0111 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1000 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1001 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1010 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1011 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1100 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1101 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1110 */ TABDECL(OP_LDMIB), // OP_LDMIB +/* 1001 1001 1111 */ TABDECL(OP_LDMIB), // OP_LDMIB + +/* 1001 1010 0000 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0001 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0010 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0011 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0100 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0101 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0110 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 0111 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1000 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1001 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1010 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1011 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1100 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1101 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1110 */ TABDECL(OP_STMIB_W), // OP_STMIB_W +/* 1001 1010 1111 */ TABDECL(OP_STMIB_W), // OP_STMIB_W + +/* 1001 1011 0000 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0001 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0010 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0011 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0100 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0101 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0110 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 0111 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1000 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1001 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1010 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1011 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1100 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1101 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1110 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W +/* 1001 1011 1111 */ TABDECL(OP_LDMIB_W), // OP_LDMIB_W + +/* 1001 1100 0000 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0001 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0010 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0011 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0100 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0101 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0110 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 0111 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1000 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1001 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1010 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1011 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1100 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1101 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1110 */ TABDECL(OP_STMIB2), // OP_STMIB2 +/* 1001 1100 1111 */ TABDECL(OP_STMIB2), // OP_STMIB2 + +/* 1001 1101 0000 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0001 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0010 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0011 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0100 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0101 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0110 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 0111 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1000 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1001 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1010 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1011 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1100 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1101 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1110 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 +/* 1001 1101 1111 */ TABDECL(OP_LDMIB2), // OP_LDMIB2 + +/* 1001 1110 0000 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0001 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0010 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0011 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0100 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0101 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0110 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 0111 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1000 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1001 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1010 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1011 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1100 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1101 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1110 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W +/* 1001 1110 1111 */ TABDECL(OP_STMIB2_W), // OP_STMIB2_W + +/* 1001 1111 0000 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0001 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0010 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0011 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0100 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0101 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0110 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 0111 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1000 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1001 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1010 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1011 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1100 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1101 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1110 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W +/* 1001 1111 1111 */ TABDECL(OP_LDMIB2_W), // OP_LDMIB2_W + +/* 1010 0000 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0000 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0000 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0001 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0001 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0001 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0010 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0010 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0010 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0011 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0011 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0011 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0100 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0100 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0100 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0101 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0101 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0101 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0110 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0110 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0110 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 0111 0000 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0001 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0010 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0011 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0100 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0101 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0110 */ TABDECL(OP_B), // OP_B +/* 1010 0111 0111 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1000 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1001 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1010 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1011 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1100 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1101 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1110 */ TABDECL(OP_B), // OP_B +/* 1010 0111 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1000 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1000 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1000 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1001 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1001 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1001 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1010 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1010 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1010 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1011 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1011 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1011 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1100 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1100 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1100 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1101 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1101 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1101 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1110 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1110 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1110 1111 */ TABDECL(OP_B), // OP_B + +/* 1010 1111 0000 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0001 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0010 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0011 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0100 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0101 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0110 */ TABDECL(OP_B), // OP_B +/* 1010 1111 0111 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1000 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1001 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1010 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1011 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1100 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1101 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1110 */ TABDECL(OP_B), // OP_B +/* 1010 1111 1111 */ TABDECL(OP_B), // OP_B + +/* 1011 0000 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0000 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0001 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0001 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0010 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0010 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0011 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0011 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0100 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0100 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0101 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0101 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0110 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0110 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 0111 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 0111 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1000 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1000 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1001 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1001 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1010 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1010 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1011 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1011 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1100 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1100 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1101 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1101 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1110 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1110 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1011 1111 0000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 0111 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1000 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1001 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1010 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1011 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1100 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1101 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1110 */ TABDECL(OP_BL), // OP_BL +/* 1011 1111 1111 */ TABDECL(OP_BL), // OP_BL + +/* 1100 0000 0000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 0111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0000 1111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION + +/* 1100 0001 0000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 0111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0001 1111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION + +/* 1100 0010 0000 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0001 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0010 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0011 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0100 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0101 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0110 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 0111 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1000 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1001 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1010 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1011 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1100 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1101 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1110 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0010 1111 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND + +/* 1100 0011 0000 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0001 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0010 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0011 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0100 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0101 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0110 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 0111 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1000 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1001 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1010 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1011 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1100 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1101 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1110 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0011 1111 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND + +/* 1100 0100 0000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 0111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 0100 1111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION + +/* 1100 0101 0000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 0111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 0101 1111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION + +/* 1100 0110 0000 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0001 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0010 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0011 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0100 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0101 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0110 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 0111 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1000 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1001 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1010 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1011 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1100 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1101 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1110 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND +/* 1100 0110 1111 */ TABDECL(OP_STC_M_POSTIND), // OP_STC_M_POSTIND + +/* 1100 0111 0000 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0001 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0010 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0011 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0100 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0101 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0110 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 0111 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1000 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1001 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1010 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1011 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1100 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1101 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1110 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND +/* 1100 0111 1111 */ TABDECL(OP_LDC_M_POSTIND), // OP_LDC_M_POSTIND + +/* 1100 1000 0000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 0111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1000 1111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION + +/* 1100 1001 0000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 0111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1001 1111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION + +/* 1100 1010 0000 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0001 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0010 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0011 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0100 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0101 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0110 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 0111 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1000 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1001 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1010 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1011 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1100 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1101 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1110 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1010 1111 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND + +/* 1100 1011 0000 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0001 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0010 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0011 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0100 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0101 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0110 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 0111 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1000 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1001 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1010 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1011 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1100 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1101 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1110 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1011 1111 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND + +/* 1100 1100 0000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 0111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1000 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1001 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1010 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1011 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1100 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1101 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1110 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION +/* 1100 1100 1111 */ TABDECL(OP_STC_OPTION), // OP_STC_OPTION + +/* 1100 1101 0000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 0111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1000 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1001 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1010 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1011 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1100 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1101 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1110 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION +/* 1100 1101 1111 */ TABDECL(OP_LDC_OPTION), // OP_LDC_OPTION + +/* 1100 1110 0000 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0001 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0010 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0011 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0100 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0101 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0110 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 0111 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1000 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1001 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1010 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1011 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1100 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1101 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1110 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND +/* 1100 1110 1111 */ TABDECL(OP_STC_P_POSTIND), // OP_STC_P_POSTIND + +/* 1100 1111 0000 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0001 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0010 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0011 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0100 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0101 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0110 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 0111 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1000 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1001 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1010 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1011 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1100 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1101 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1110 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND +/* 1100 1111 1111 */ TABDECL(OP_LDC_P_POSTIND), // OP_LDC_P_POSTIND + +/* 1101 0000 0000 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0001 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0010 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0011 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0100 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0101 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0110 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 0111 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1000 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1001 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1010 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1011 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1100 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1101 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1110 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0000 1111 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF + +/* 1101 0001 0000 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0001 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0010 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0011 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0100 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0101 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0110 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 0111 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1000 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1001 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1010 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1011 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1100 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1101 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1110 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0001 1111 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF + +/* 1101 0010 0000 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0001 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0010 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0011 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0100 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0101 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0110 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 0111 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1000 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1001 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1010 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1011 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1100 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1101 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1110 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0010 1111 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND + +/* 1101 0011 0000 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0001 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0010 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0011 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0100 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0101 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0110 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 0111 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1000 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1001 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1010 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1011 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1100 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1101 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1110 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0011 1111 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND + +/* 1101 0100 0000 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0001 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0010 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0011 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0100 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0101 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0110 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 0111 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1000 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1001 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1010 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1011 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1100 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1101 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1110 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF +/* 1101 0100 1111 */ TABDECL(OP_STC_M_IMM_OFF), // OP_STC_M_IMM_OFF + +/* 1101 0101 0000 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0001 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0010 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0011 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0100 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0101 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0110 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 0111 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1000 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1001 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1010 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1011 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1100 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1101 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1110 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF +/* 1101 0101 1111 */ TABDECL(OP_LDC_M_IMM_OFF), // OP_LDC_M_IMM_OFF + +/* 1101 0110 0000 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0001 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0010 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0011 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0100 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0101 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0110 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 0111 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1000 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1001 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1010 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1011 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1100 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1101 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1110 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND +/* 1101 0110 1111 */ TABDECL(OP_STC_M_PREIND), // OP_STC_M_PREIND + +/* 1101 0111 0000 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0001 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0010 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0011 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0100 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0101 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0110 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 0111 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1000 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1001 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1010 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1011 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1100 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1101 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1110 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND +/* 1101 0111 1111 */ TABDECL(OP_LDC_M_PREIND), // OP_LDC_M_PREIND + +/* 1101 1000 0000 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0001 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0010 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0011 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0100 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0101 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0110 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 0111 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1000 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1001 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1010 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1011 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1100 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1101 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1110 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1000 1111 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF + +/* 1101 1001 0000 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0001 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0010 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0011 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0100 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0101 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0110 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 0111 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1000 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1001 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1010 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1011 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1100 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1101 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1110 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1001 1111 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF + +/* 1101 1010 0000 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0001 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0010 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0011 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0100 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0101 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0110 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 0111 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1000 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1001 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1010 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1011 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1100 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1101 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1110 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1010 1111 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND + +/* 1101 1011 0000 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0001 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0010 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0011 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0100 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0101 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0110 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 0111 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1000 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1001 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1010 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1011 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1100 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1101 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1110 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1011 1111 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND + +/* 1101 1100 0000 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0001 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0010 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0011 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0100 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0101 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0110 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 0111 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1000 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1001 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1010 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1011 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1100 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1101 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1110 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF +/* 1101 1100 1111 */ TABDECL(OP_STC_P_IMM_OFF), // OP_STC_P_IMM_OFF + +/* 1101 1101 0000 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0001 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0010 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0011 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0100 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0101 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0110 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 0111 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1000 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1001 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1010 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1011 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1100 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1101 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1110 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF +/* 1101 1101 1111 */ TABDECL(OP_LDC_P_IMM_OFF), // OP_LDC_P_IMM_OFF + +/* 1101 1110 0000 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0001 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0010 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0011 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0100 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0101 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0110 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 0111 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1000 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1001 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1010 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1011 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1100 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1101 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1110 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND +/* 1101 1110 1111 */ TABDECL(OP_STC_P_PREIND), // OP_STC_P_PREIND + +/* 1101 1111 0000 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0001 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0010 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0011 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0100 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0101 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0110 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 0111 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1000 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1001 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1010 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1011 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1100 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1101 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1110 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND +/* 1101 1111 1111 */ TABDECL(OP_LDC_P_PREIND), // OP_LDC_P_PREIND + +/* 1110 0000 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0000 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0000 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 0001 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0001 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0001 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 0010 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0010 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0010 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 0011 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0011 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0011 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 0100 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0100 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0100 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 0101 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0101 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0101 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 0110 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 0110 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0110 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 0111 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 0111 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 0111 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 1000 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1000 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1000 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 1001 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1001 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1001 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 1010 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1010 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1010 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 1011 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1011 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1011 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 1100 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1100 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1100 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 1101 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1101 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1101 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1110 1110 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 0001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 0011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 0101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 0111 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 1001 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 1011 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 1101 */ TABDECL(OP_MCR), // OP_MCR +/* 1110 1110 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1110 1111 */ TABDECL(OP_MCR), // OP_MCR + +/* 1110 1111 0000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 0001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 0010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 0011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 0100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 0101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 0110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 0111 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 1000 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 1001 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 1010 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 1011 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 1100 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 1101 */ TABDECL(OP_MRC), // OP_MRC +/* 1110 1111 1110 */ TABDECL(OP_CDP), // OP_CDP +/* 1110 1111 1111 */ TABDECL(OP_MRC), // OP_MRC + +/* 1111 0000 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0000 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0001 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0001 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0010 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0010 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0011 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0011 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0100 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0100 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0101 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0101 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0110 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0110 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 0111 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 0111 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1000 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1000 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1001 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1001 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1010 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1010 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1011 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1011 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1100 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1100 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1101 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1101 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1110 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1110 1111 */ TABDECL(OP_SWI), // OP_SWI + +/* 1111 1111 0000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 0111 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1000 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1001 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1010 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1011 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1100 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1101 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1110 */ TABDECL(OP_SWI), // OP_SWI +/* 1111 1111 1111 */ TABDECL(OP_SWI), // OP_SWI diff -Nru audacious-plugins-4.1/src/xsf/desmume/matrix.cc audacious-plugins-4.2/src/xsf/desmume/matrix.cc --- audacious-plugins-4.1/src/xsf/desmume/matrix.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/matrix.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,257 +0,0 @@ -/* - Copyright (C) 2006-2007 shash - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include -#include -#include -#include "matrix.h" - -void MatrixInit (float *matrix) -{ - memset (matrix, 0, sizeof(float)*16); - - matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.f; -} - -void MatrixMultVec4x4 (float *matrix, float *vecPtr) -{ - float x = vecPtr[0]; - float y = vecPtr[1]; - float z = vecPtr[2]; - - vecPtr[0] = x * matrix[0] + y * matrix[4] + z * matrix[ 8] + matrix[12]; - vecPtr[1] = x * matrix[1] + y * matrix[5] + z * matrix[ 9] + matrix[13]; - vecPtr[2] = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14]; -} - -void MatrixMultVec3x3 (float *matrix, float *vecPtr) -{ - float x = vecPtr[0]; - float y = vecPtr[1]; - float z = vecPtr[2]; - - vecPtr[0] = x * matrix[0] + y * matrix[4] + z * matrix[ 8]; - vecPtr[1] = x * matrix[1] + y * matrix[5] + z * matrix[ 9]; - vecPtr[2] = x * matrix[2] + y * matrix[6] + z * matrix[10]; -} - -void MatrixIdentity (float *matrix) -{ - memset (matrix, 0, sizeof(float)*16); - - matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.f; -} - -void MatrixMultiply (float *matrix, float *rightMatrix) -{ - float tmpMatrix[16]; - - tmpMatrix[0] = (matrix[0]*rightMatrix[0])+(matrix[4]*rightMatrix[1])+(matrix[8]*rightMatrix[2])+(matrix[12]*rightMatrix[3]); - tmpMatrix[1] = (matrix[1]*rightMatrix[0])+(matrix[5]*rightMatrix[1])+(matrix[9]*rightMatrix[2])+(matrix[13]*rightMatrix[3]); - tmpMatrix[2] = (matrix[2]*rightMatrix[0])+(matrix[6]*rightMatrix[1])+(matrix[10]*rightMatrix[2])+(matrix[14]*rightMatrix[3]); - tmpMatrix[3] = (matrix[3]*rightMatrix[0])+(matrix[7]*rightMatrix[1])+(matrix[11]*rightMatrix[2])+(matrix[15]*rightMatrix[3]); - - tmpMatrix[4] = (matrix[0]*rightMatrix[4])+(matrix[4]*rightMatrix[5])+(matrix[8]*rightMatrix[6])+(matrix[12]*rightMatrix[7]); - tmpMatrix[5] = (matrix[1]*rightMatrix[4])+(matrix[5]*rightMatrix[5])+(matrix[9]*rightMatrix[6])+(matrix[13]*rightMatrix[7]); - tmpMatrix[6] = (matrix[2]*rightMatrix[4])+(matrix[6]*rightMatrix[5])+(matrix[10]*rightMatrix[6])+(matrix[14]*rightMatrix[7]); - tmpMatrix[7] = (matrix[3]*rightMatrix[4])+(matrix[7]*rightMatrix[5])+(matrix[11]*rightMatrix[6])+(matrix[15]*rightMatrix[7]); - - tmpMatrix[8] = (matrix[0]*rightMatrix[8])+(matrix[4]*rightMatrix[9])+(matrix[8]*rightMatrix[10])+(matrix[12]*rightMatrix[11]); - tmpMatrix[9] = (matrix[1]*rightMatrix[8])+(matrix[5]*rightMatrix[9])+(matrix[9]*rightMatrix[10])+(matrix[13]*rightMatrix[11]); - tmpMatrix[10] = (matrix[2]*rightMatrix[8])+(matrix[6]*rightMatrix[9])+(matrix[10]*rightMatrix[10])+(matrix[14]*rightMatrix[11]); - tmpMatrix[11] = (matrix[3]*rightMatrix[8])+(matrix[7]*rightMatrix[9])+(matrix[11]*rightMatrix[10])+(matrix[15]*rightMatrix[11]); - - tmpMatrix[12] = (matrix[0]*rightMatrix[12])+(matrix[4]*rightMatrix[13])+(matrix[8]*rightMatrix[14])+(matrix[12]*rightMatrix[15]); - tmpMatrix[13] = (matrix[1]*rightMatrix[12])+(matrix[5]*rightMatrix[13])+(matrix[9]*rightMatrix[14])+(matrix[13]*rightMatrix[15]); - tmpMatrix[14] = (matrix[2]*rightMatrix[12])+(matrix[6]*rightMatrix[13])+(matrix[10]*rightMatrix[14])+(matrix[14]*rightMatrix[15]); - tmpMatrix[15] = (matrix[3]*rightMatrix[12])+(matrix[7]*rightMatrix[13])+(matrix[11]*rightMatrix[14])+(matrix[15]*rightMatrix[15]); - - memcpy (matrix, tmpMatrix, sizeof(float)*16); -} -/* -void MatrixMulti (float* right) -{ - float tmpMatrix[16]; - - tmpMatrix[0] = (matrix[0]*right[0])+(matrix[4]*right[1])+(matrix[8]*right[2])+(matrix[12]*right[3]); - tmpMatrix[1] = (matrix[1]*right[0])+(matrix[5]*right[1])+(matrix[9]*right[2])+(matrix[13]*right[3]); - tmpMatrix[2] = (matrix[2]*right[0])+(matrix[6]*right[1])+(matrix[10]*right[2])+(matrix[14]*right[3]); - tmpMatrix[3] = (matrix[3]*right[0])+(matrix[7]*right[1])+(matrix[11]*right[2])+(matrix[15]*right[3]); - - tmpMatrix[4] = (matrix[0]*right[4])+(matrix[4]*right[5])+(matrix[8]*right[6])+(matrix[12]*right[7]); - tmpMatrix[5] = (matrix[1]*right[4])+(matrix[5]*right[5])+(matrix[9]*right[6])+(matrix[13]*right[7]); - tmpMatrix[6] = (matrix[2]*right[4])+(matrix[6]*right[5])+(matrix[10]*right[6])+(matrix[14]*right[7]); - tmpMatrix[7] = (matrix[3]*right[4])+(matrix[7]*right[5])+(matrix[11]*right[6])+(matrix[15]*right[7]); - - tmpMatrix[8] = (matrix[0]*right[8])+(matrix[4]*right[9])+(matrix[8]*right[10])+(matrix[12]*right[11]); - tmpMatrix[9] = (matrix[1]*right[8])+(matrix[5]*right[9])+(matrix[9]*right[10])+(matrix[13]*right[11]); - tmpMatrix[10] = (matrix[2]*right[8])+(matrix[6]*right[9])+(matrix[10]*right[10])+(matrix[14]*right[11]); - tmpMatrix[11] = (matrix[3]*right[8])+(matrix[7]*right[9])+(matrix[11]*right[10])+(matrix[15]*right[11]); - - tmpMatrix[12] = (matrix[0]*right[12])+(matrix[4]*right[13])+(matrix[8]*right[14])+(matrix[12]*right[15]); - tmpMatrix[13] = (matrix[1]*right[12])+(matrix[5]*right[13])+(matrix[9]*right[14])+(matrix[13]*right[15]); - tmpMatrix[14] = (matrix[2]*right[12])+(matrix[6]*right[13])+(matrix[10]*right[14])+(matrix[14]*right[15]); - tmpMatrix[15] = (matrix[3]*right[12])+(matrix[7]*right[13])+(matrix[11]*right[14])+(matrix[15]*right[15]); - - memcpy (matrix, tmpMatrix, sizeof(float)*16); -} - - -float* Matrix::Get (void) -{ - return matrix; -} - -float MatrixGet (float *matrix, int index) -{ - return matrix[index]; -} -*/ - -float MatrixGetMultipliedIndex (int index, float *matrix, float *rightMatrix) -{ - int iMod = index%4, iDiv = (index>>2)<<2; - - return (matrix[iMod ]*rightMatrix[iDiv ])+(matrix[iMod+ 4]*rightMatrix[iDiv+1])+ - (matrix[iMod+8]*rightMatrix[iDiv+2])+(matrix[iMod+12]*rightMatrix[iDiv+3]); -} - -void MatrixSet (float *matrix, int x, int y, float value) -{ - matrix [x+(y<<2)] = value; -} -/* -void Matrix::Set (int pos, float value) -{ - matrix [pos] = value; -} -*/ -void MatrixCopy (float *matrixDST, float *matrixSRC) -{ - memcpy (matrixDST, matrixSRC, sizeof(float)*16); -} - -void MatrixTranslate (float *matrix, float *ptr) -{ - matrix[12] += (matrix[0]*ptr[0])+(matrix[4]*ptr[1])+(matrix[ 8]*ptr[2]); - matrix[13] += (matrix[1]*ptr[0])+(matrix[5]*ptr[1])+(matrix[ 9]*ptr[2]); - matrix[14] += (matrix[2]*ptr[0])+(matrix[6]*ptr[1])+(matrix[10]*ptr[2]); - matrix[15] += (matrix[3]*ptr[0])+(matrix[7]*ptr[1])+(matrix[11]*ptr[2]); -} - -void MatrixScale (float *matrix, float *ptr) -{ - matrix[0] *= ptr[0]; - matrix[1] *= ptr[0]; - matrix[2] *= ptr[0]; - matrix[3] *= ptr[0]; - - matrix[4] *= ptr[1]; - matrix[5] *= ptr[1]; - matrix[6] *= ptr[1]; - matrix[7] *= ptr[1]; - - matrix[8] *= ptr[2]; - matrix[9] *= ptr[2]; - matrix[10] *= ptr[2]; - matrix[11] *= ptr[2]; -} -/* -void Matrix::Set (float a11, float a21, float a31, float a41, - float a12, float a22, float a32, float a42, - float a13, float a23, float a33, float a43, - float a14, float a24, float a34, float a44) -{ -} -*/ - - -//----------------------------------------- - -void MatrixStackInit (MatrixStack *stack) -{ - stack->matrix = nullptr; - stack->position = 0; - stack->size = 0; -} - -void MatrixStackSetMaxSize (MatrixStack *stack, int size) -{ - int i = 0; - - stack->size = size; - - if (stack->matrix == nullptr) - { - stack->matrix = (float*) malloc (stack->size*16*sizeof(float)); - } - else - { - free (stack->matrix); - stack->matrix = (float*) malloc (stack->size*16*sizeof(float)); - } - - for (i = 0; i < stack->size; i++) - { - MatrixInit (&stack->matrix[i*16]); - } - - stack->size--; -} - - -void MatrixStackSetStackPosition (MatrixStack *stack, int pos) -{ - stack->position += pos; - - if (stack->position < 0) - stack->position = 0; - else if (stack->position > stack->size) - stack->position = stack->size; -} - -void MatrixStackPushMatrix (MatrixStack *stack, float *ptr) -{ - MatrixCopy (&stack->matrix[stack->position*16], ptr); - - MatrixStackSetStackPosition (stack, 1); -} - -float * MatrixStackPopMatrix (MatrixStack *stack, int size) -{ - MatrixStackSetStackPosition(stack, -size); - - return &stack->matrix[stack->position*16]; -} - -float * MatrixStackGetPos (MatrixStack *stack, int pos) -{ - return &stack->matrix[pos*16]; -} - -float * MatrixStackGet (MatrixStack *stack) -{ - return &stack->matrix[stack->position*16]; -} - -void MatrixStackLoadMatrix (MatrixStack *stack, int pos, float *ptr) -{ - MatrixCopy (&stack->matrix[pos*16], ptr); -} diff -Nru audacious-plugins-4.1/src/xsf/desmume/matrix.h audacious-plugins-4.2/src/xsf/desmume/matrix.h --- audacious-plugins-4.1/src/xsf/desmume/matrix.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/matrix.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,51 +1,63 @@ -/* +/* Copyright (C) 2006-2007 shash + Copyright (C) 2007-2012 DeSmuME team - This file is part of DeSmuME + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef MATRIX_H -#define MATRIX_H +#pragma once -typedef struct MatrixStack +#include +#include +#include "types.h" +#include "mem.h" + +#ifdef __SSE2__ +#include +#endif + +// these functions are an unreliable, inaccurate floor. +// it should only be used for positive numbers +// this isnt as fast as it could be if we used a visual c++ intrinsic, but those appear not to be universally available +inline uint32_t u32floor(float f) +{ +#ifdef __SSE2__ + return static_cast(_mm_cvtt_ss2si(_mm_set_ss(f))); +#else + return static_cast(f); +#endif +} +inline uint32_t u32floor(double d) { - float *matrix; - int position; - int size; -} MatrixStack; - -void MatrixInit (float *matrix); -void MatrixMultVec3x3 (float *matrix, float *vecPtr); -void MatrixMultVec4x4 (float *matrix, float *vecPtr); -void MatrixIdentity (float *matrix); -void MatrixMultiply (float *matrix, float *rightMatrix); -float MatrixGetMultipliedIndex(int index, float *matrix, float *rightMatrix); -void MatrixSet (float *matrix, int x, int y, float value); -void MatrixCopy (float *matrixDST, float *matrixSRC); -void MatrixTranslate (float *matrix, float *ptr); -void MatrixScale (float *matrix, float *ptr); - -void MatrixStackInit (MatrixStack *stack); -void MatrixStackSetMaxSize (MatrixStack *stack, int size); -void MatrixStackSetStackPosition (MatrixStack *stack, int pos); -void MatrixStackPushMatrix (MatrixStack *stack, float *ptr); -float* MatrixStackPopMatrix (MatrixStack *stack, int size); -float* MatrixStackGetPos (MatrixStack *stack, int pos); -float* MatrixStackGet (MatrixStack *stack); -void MatrixStackLoadMatrix (MatrixStack *stack, int pos, float *ptr); +#ifdef __SSE2__ + return static_cast(_mm_cvttsd_si32(_mm_set_sd(d))); +#else + return static_cast(d); +#endif +} +// same as above but works for negative values too. +// be sure that the results are the same thing as floorf! +inline int32_t s32floor(float f) +{ +#ifdef __SSE2__ + return _mm_cvtss_si32(_mm_add_ss(_mm_set_ss(-0.5f),_mm_add_ss(_mm_set_ss(f), _mm_set_ss(f)))) >> 1; +#else + return static_cast(floorf(f)); #endif +} +inline int32_t s32floor(double d) +{ + return s32floor(static_cast(d)); +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/mc.cc audacious-plugins-4.2/src/xsf/desmume/mc.cc --- audacious-plugins-4.1/src/xsf/desmume/mc.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/mc.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,121 +1,634 @@ -/* Copyright (C) 2006 thoduv - Copyright (C) 2006-2007 Theo Berkau +/* + Copyright (C) 2006 thoduv + Copyright (C) 2006-2007 Theo Berkau + Copyright (C) 2008-2013 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#include -#include "debug.h" +#include +#include #include "types.h" #include "mc.h" +#include "readwrite.h" +#include "NDSSystem.h" + +static const uint8_t FW_CMD_READ = 0x03; +static const uint8_t FW_CMD_WRITEDISABLE = 0x04; +static const uint8_t FW_CMD_READSTATUS = 0x05; +static const uint8_t FW_CMD_WRITEENABLE = 0x06; +static const uint8_t FW_CMD_PAGEWRITE = 0x0A; +static const uint8_t FW_CMD_READ_ID = 0x9F; + +// since r2203 this was 0x00. +// but baby pals proves finally that it should be 0xFF: +// the game reads its initial sound volumes from uninitialized data, and if it is 0, the game will be silent +// if it is 0xFF then the game starts with its sound and music at max, as presumably it is supposed to. +// so in r3303 I finally changed it (no$ appears definitely to initialized to 0xFF) +static const uint8_t kUninitializedSaveDataValue = 0xFF; -#define FW_CMD_READ 0x3 -#define FW_CMD_WRITEDISABLE 0x4 -#define FW_CMD_READSTATUS 0x5 -#define FW_CMD_WRITEENABLE 0x6 -#define FW_CMD_PAGEWRITE 0xA - -#define BM_CMD_AUTODETECT 0xFF -#define BM_CMD_WRITESTATUS 0x1 -#define BM_CMD_WRITELOW 0x2 -#define BM_CMD_READLOW 0x3 -#define BM_CMD_WRITEDISABLE 0x4 -#define BM_CMD_READSTATUS 0x5 -#define BM_CMD_WRITEENABLE 0x6 -#define BM_CMD_WRITEHIGH 0xA -#define BM_CMD_READHIGH 0xB - -/* FLASH*/ -#define COMM_PAGE_WRITE 0x0A -#define COMM_PAGE_ERASE 0xDB -#define COMM_SECTOR_ERASE 0xD8 -#define COMM_CHIP_ERASE 0xC7 -#define CARDFLASH_READ_BYTES_FAST 0x0B /* Not used*/ -#define CARDFLASH_DEEP_POWDOWN 0xB9 /* Not used*/ -#define CARDFLASH_WAKEUP 0xAB /* Not used*/ +static const char *kDesmumeSaveCookie = "|-DESMUME SAVE-|"; +//the lookup table from user save types to save parameters +const SAVE_TYPE save_types[] = +{ + {"Autodetect", MC_TYPE_AUTODETECT, 1}, + {"EEPROM 4kbit", MC_TYPE_EEPROM1, MC_SIZE_4KBITS}, + {"EEPROM 64kbit", MC_TYPE_EEPROM2, MC_SIZE_64KBITS}, + {"EEPROM 512kbit", MC_TYPE_EEPROM2, MC_SIZE_512KBITS}, + {"FRAM 256kbit", MC_TYPE_FRAM, MC_SIZE_256KBITS}, + {"FLASH 2Mbit", MC_TYPE_FLASH, MC_SIZE_2MBITS}, + {"FLASH 4Mbit", MC_TYPE_FLASH, MC_SIZE_4MBITS}, + {"FLASH 8Mbit", MC_TYPE_FLASH, MC_SIZE_8MBITS}, + {"FLASH 16Mbit", MC_TYPE_FLASH, MC_SIZE_16MBITS}, + {"FLASH 32Mbit", MC_TYPE_FLASH, MC_SIZE_32MBITS}, + {"FLASH 64Mbit", MC_TYPE_FLASH, MC_SIZE_64MBITS}, + {"FLASH 128Mbit", MC_TYPE_FLASH, MC_SIZE_128MBITS}, + {"FLASH 256Mbit", MC_TYPE_FLASH, MC_SIZE_256MBITS}, + {"FLASH 512Mbit", MC_TYPE_FLASH, MC_SIZE_512MBITS} +}; void mc_init(memory_chip_t *mc, int type) { - mc->com = 0; - mc->addr = 0; - mc->addr_shift = 0; - mc->data = nullptr; - mc->size = 0; - mc->write_enable = false; - mc->writeable_buffer = false; - mc->type = type; - mc->autodetectsize = 0; - - switch(mc->type) - { - case MC_TYPE_EEPROM1: - mc->addr_size = 1; - break; - case MC_TYPE_EEPROM2: - case MC_TYPE_FRAM: - mc->addr_size = 2; - break; - case MC_TYPE_FLASH: - mc->addr_size = 3; - break; - default: break; - } + mc->com = 0; + mc->addr = 0; + mc->addr_shift = 0; + mc->data.clear(); + mc->size = 0; + mc->write_enable = false; + mc->writeable_buffer = false; + mc->type = type; + mc->autodetectsize = 0; + + switch (mc->type) + { + case MC_TYPE_EEPROM1: + mc->addr_size = 1; + break; + case MC_TYPE_EEPROM2: + case MC_TYPE_FRAM: + mc->addr_size = 2; + break; + case MC_TYPE_FLASH: + mc->addr_size = 3; + } } -u8 *mc_alloc(memory_chip_t *mc, u32 size) +uint8_t *mc_alloc(memory_chip_t *mc, uint32_t size) { - u8 *buffer; - buffer = (u8 *) malloc(size); - - mc->data = buffer; - if(!buffer) { return nullptr; } + mc->data.clear(); + mc->data.resize(size, 0); mc->size = size; mc->writeable_buffer = true; - return buffer; + return nullptr; } void mc_free(memory_chip_t *mc) { - if(mc->data) + mc->data.clear(); + mc_init(mc, 0); +} + +void fw_reset_com(memory_chip_t *mc) +{ + if (mc->com == FW_CMD_PAGEWRITE) { - free(mc->data); - mc->data = 0; + if (mc->fp) + { + fseek(mc->fp, 0, SEEK_SET); + fwrite(&mc->data[0], mc->size, 1, mc->fp); + } + + if (mc->isFirmware&&CommonSettings.UseExtFirmware) + { + // copy User Settings 1 to User Settings 0 area + memcpy(&mc->data[0x3FE00], &mc->data[0x3FF00], 0x100); + + fprintf(stderr, "Firmware: save config"); + FILE *fp = fopen(mc->userfile, "wb"); + if (fp) + { + if (fwrite(&mc->data[0x3FF00], 1, 0x100, fp) == 0x100) // User Settings + { + if (fwrite(&mc->data[0x0002A], 1, 0x1D6, fp) == 0x1D6) // WiFi Settings + { + if (fwrite(&mc->data[0x3FA00], 1, 0x300, fp) == 0x300) // WiFi AP Settings + fprintf(stderr, " - done\n"); + else + fprintf(stderr, " - failed\n"); + } + } + fclose(fp); + } + else + fprintf(stderr, " - failed\n"); + } + + mc->write_enable = false; } - mc_init(mc, 0); + + mc->com = 0; } -void mc_realloc(memory_chip_t *mc, int type, u32 size) +uint8_t fw_transfer(memory_chip_t *mc, uint8_t data) { - mc_free(mc); - mc_init(mc, type); - mc_alloc(mc, size); + if (mc->com == FW_CMD_READ || mc->com == FW_CMD_PAGEWRITE) /* check if we are in a command that needs 3 bytes address */ + { + if (mc->addr_shift > 0) /* if we got a complete address */ + { + --mc->addr_shift; + mc->addr |= data << (mc->addr_shift * 8); /* argument is a byte of address */ + } + else /* if we have received 3 bytes of address, proceed command */ + { + switch (mc->com) + { + case FW_CMD_READ: + if (mc->addr < mc->size) /* check if we can read */ + { + data = mc->data[mc->addr]; /* return byte */ + ++mc->addr; /* then increment address */ + } + break; + case FW_CMD_PAGEWRITE: + if (mc->addr < mc->size) + { + mc->data[mc->addr] = data; /* write byte */ + ++mc->addr; + } + } + } + } + else if (mc->com == FW_CMD_READ_ID) + { + switch (mc->addr) + { + // here is an ID string measured from an old ds fat: 62 16 00 (0x62=sanyo) + // but we chose to use an ST from martin's ds fat string so programs might have a clue as to the firmware size: + // 20 40 12 + case 0: + data = 0x20; + mc->addr = 1; + break; + case 1: + data = 0x40; // according to gbatek this is the device ID for the flash on someone's ds fat + mc->addr = 2; + break; + case 2: + data = 0x12; + mc->addr = 0; + } + } + else if (mc->com == FW_CMD_READSTATUS) + return mc->write_enable ? 0x02 : 0x00; + else // finally, check if it's a new command + { + switch (data) + { + case 0: + break; // nothing + + case FW_CMD_READ_ID: + mc->addr = 0; + mc->com = FW_CMD_READ_ID; + break; + + case FW_CMD_READ: //read command + mc->addr = 0; + mc->addr_shift = 3; + mc->com = FW_CMD_READ; + break; + + case FW_CMD_WRITEENABLE: //enable writing + if (mc->writeable_buffer) + mc->write_enable = true; + break; + + case FW_CMD_WRITEDISABLE: //disable writing + mc->write_enable = false; + break; + + case FW_CMD_PAGEWRITE: //write command + if (mc->write_enable) + { + mc->addr = 0; + mc->addr_shift = 3; + mc->com = FW_CMD_PAGEWRITE; + } + else + data = 0; + break; + + case FW_CMD_READSTATUS: //status register command + mc->com = FW_CMD_READSTATUS; + break; + + default: + fprintf(stderr, "Unhandled FW command: %02X\n", data); + } + } + + return data; } +BackupDevice::BackupDevice() +{ + this->reset(); +} -void mc_reset_com(memory_chip_t *mc) +// due to unfortunate shortcomings in the emulator architecture, +// at reset-time, we won't have a filename to the .dsv file. +// so the only difference between load_rom (init) and reset is that +// one of them saves the filename +void BackupDevice::load_rom(const std::string &fn) { + this->filename = fn; + this->reset(); } -u8 fw_transfer(memory_chip_t *mc, u8 data) + +void BackupDevice::reset_hardware() { - return 0; + this->write_enable = false; + this->com = 0; + this->addr = this->addr_counter = 0; + this->motionInitState = MOTION_INIT_STATE_IDLE; + this->motionFlag = MOTION_FLAG_NONE; + this->state = DETECTING; + this->flushPending = false; + this->lazyFlushPending = false; } -u8 bm_transfer(memory_chip_t *mc, u8 data) + +void BackupDevice::reset() { - return 0; + memset(&this->info, 0, sizeof(this->info)); + this->reset_hardware(); + this->resize(0); + this->data_autodetect.resize(0); + this->addr_size = 0; + this->loadfile(); + + // if the user has requested a manual choice for backup type, and we havent imported a raw save file, then apply it now + if (this->state == DETECTING && CommonSettings.manualBackupType != MC_TYPE_AUTODETECT) + { + this->state = RUNNING; + int savetype = save_types[CommonSettings.manualBackupType].media_type; + int savesize = save_types[CommonSettings.manualBackupType].size; + this->ensure(savesize); // expand properly if necessary + this->resize(savesize); // truncate if necessary + this->addr_size = this->addr_size_for_old_save_type(savetype); + } +} + +// guarantees that the data buffer has room enough for the specified number of bytes +void BackupDevice::ensure(uint32_t Addr) +{ + uint32_t size = this->data.size(); + if (size < Addr) + this->resize(Addr); +} + +void BackupDevice::resize(uint32_t size) +{ + size_t old_size = this->data.size(); + this->data.resize(size); + for (uint32_t i = old_size; i < size; ++i) + this->data[i] = kUninitializedSaveDataValue; +} + +uint32_t BackupDevice::addr_size_for_old_save_size(int bupmem_size) +{ + switch (bupmem_size) + { + case MC_SIZE_4KBITS: + return 1; + case MC_SIZE_64KBITS: + case MC_SIZE_256KBITS: + case MC_SIZE_512KBITS: + return 2; + case MC_SIZE_1MBITS: + case MC_SIZE_2MBITS: + case MC_SIZE_4MBITS: + case MC_SIZE_8MBITS: + case MC_SIZE_16MBITS: + case MC_SIZE_64MBITS: + return 3; + default: + return 0xFFFFFFFF; + } +} + +uint32_t BackupDevice::addr_size_for_old_save_type(int bupmem_type) +{ + switch (bupmem_type) + { + case MC_TYPE_EEPROM1: + return 1; + case MC_TYPE_EEPROM2: + case MC_TYPE_FRAM: + return 2; + case MC_TYPE_FLASH: + return 3; + default: + return 0xFFFFFFFF; + } +} + +void BackupDevice::load_old_state(uint32_t addrSize, uint8_t *Data, uint32_t datasize) +{ + this->state = RUNNING; + this->addr_size = addrSize; + this->resize(datasize); + memcpy(&this->data[0], Data, datasize); } +// ======================================================================= no$GBA +// ======================================================================= +// ======================================================================= + +static int no_gba_unpackSAV(const uint8_t *in_buf, uint32_t fsize, uint8_t *out_buf, uint32_t &size) +{ + const char no_GBA_HEADER_ID[] = "NocashGbaBackupMediaSavDataFile"; + const char no_GBA_HEADER_SRAM_ID[] = "SRAM"; + const uint8_t *src = in_buf; + uint8_t *dst = out_buf; + uint32_t src_pos = 0; + uint32_t dst_pos = 0; + uint32_t size_unpacked = 0; + uint32_t compressMethod = 0; + + if (fsize < 0x50) + return 1; + + for (int i = 0; i < 0x1F; ++i) + if (src[i] != no_GBA_HEADER_ID[i]) + return 2; + if (src[0x1F] != 0x1A) + return 2; + for (int i = 0; i < 0x4; ++i) + if (src[i + 0x40] != no_GBA_HEADER_SRAM_ID[i]) + return 2; + + compressMethod = *(reinterpret_cast(src + 0x44)); + + if (!compressMethod) // unpacked + { + size_unpacked = *(reinterpret_cast(src + 0x48)); + src_pos = 0x4C; + for (uint32_t i = 0; i < size_unpacked; ++i) + dst[dst_pos++] = src[src_pos++]; + size = dst_pos; + return 0; + } + + if (compressMethod == 1) // packed (method 1) + { + size_unpacked = *(reinterpret_cast(src + 0x4C)); + + src_pos = 0x50; + while (true) + { + uint8_t cc = src[src_pos++]; + + if (!cc) + { + size = dst_pos; + return 0; + } + + if (cc == 0x80) + { + uint16_t tsize = *(reinterpret_cast(src + src_pos + 1)); + for (int t = 0; t < tsize; ++t) + dst[dst_pos++] = src[src_pos]; + src_pos += 3; + continue; + } + + if (cc > 0x80) // repeat + { + cc -= 0x80; + for (int t = 0; t < cc; ++t) + dst[dst_pos++] = src[src_pos]; + ++src_pos; + continue; + } + // copy + for (int t = 0; t < cc; ++t) + dst[dst_pos++] = src[src_pos++]; + } + } + return 200; +} + +static uint32_t no_gba_savTrim(uint8_t *buf, uint32_t size) +{ + uint32_t rows = size / 16; + uint32_t pos = (size - 16); + uint8_t *src = buf; + + for (unsigned i = 0; i < rows; ++i, pos -= 16) + { + if (src[pos] == 0xFF) + { + for (int t = 0; t < 16; ++t) + if (src[pos + t] != 0xFF) + return pos + 16; + } + else + return pos + 16; + } + return size; +} + +static uint32_t no_gba_fillLeft(uint32_t size) +{ + for (uint32_t i = 1; i < ARRAY_SIZE(save_types); ++i) + if (size <= static_cast(save_types[i].size)) + return size + (save_types[i].size - size); + return size; +} + +bool BackupDevice::load_no_gba(const char *fname) +{ + FILE *fsrc = fopen(fname, "rb"); + + if (fsrc) + { + fseek(fsrc, 0, SEEK_END); + uint32_t fsize = ftell(fsrc); + fseek(fsrc, 0, SEEK_SET); + //fprintf(stderr, "Open %s file (size %i bytes)\n", fname, fsize); + + auto in_buf = std::unique_ptr(new uint8_t[fsize]); + + if (fread(&in_buf[0], 1, fsize, fsrc) == fsize) + { + auto out_buf = std::unique_ptr(new uint8_t[8 * 1024 * 1024 / 8]); + + memset(&out_buf[0], 0xFF, 8 * 1024 * 1024 / 8); + uint32_t size = 0; + if (!no_gba_unpackSAV(&in_buf[0], fsize, &out_buf[0], size)) + { + //fprintf(stderr, "New size %i byte(s)\n", size); + size = no_gba_savTrim(&out_buf[0], size); + //fprintf(stderr, "--- new size after trim %i byte(s)\n", size); + size = no_gba_fillLeft(size); + //fprintf(stderr, "--- new size after fill %i byte(s)\n", size); + raw_applyUserSettings(size); + this->data.resize(size); + for (uint32_t tt = 0; tt < size; ++tt) + this->data[tt] = out_buf[tt]; + + //dump back out as a dsv, just to keep things sane + fprintf(stderr, "---- Loaded no$GBA save\n"); + + fclose(fsrc); + return true; + } + } + fclose(fsrc); + } + + return false; +} + +// ======================================================================= end +// ======================================================================= +// ======================================================================= no$GBA + +void BackupDevice::loadfile() +{ + if (this->filename.empty()) + return; // No sense crashing if no filename supplied + + auto inf = std::unique_ptr(new EMUFILE_FILE(filename.c_str(), "rb")); + if (inf->fail()) + { + // no dsv found; we need to try auto-importing a file with .sav extension + fprintf(stderr, "DeSmuME .dsv save file not found. Trying to load an old raw .sav file.\n"); + + // change extension to sav + char tmp[MAX_PATH]; + strcpy(tmp, this->filename.c_str()); + tmp[strlen(tmp) - 3] = 0; + strcat(tmp, "sav"); + + inf.reset(new EMUFILE_FILE(tmp, "rb")); + if (inf->fail()) + { + fprintf(stderr, "Missing save file %s\n", this->filename.c_str()); + return; + } + + if (!this->load_no_gba(tmp)) + this->load_raw(tmp); + } + else + { + // scan for desmume save footer + int32_t cookieLen = strlen(kDesmumeSaveCookie); + auto sigbuf = std::unique_ptr(new char[cookieLen]); + inf->fseek(-cookieLen, SEEK_END); + inf->fread(&sigbuf[0], cookieLen); + int cmp = memcmp(&sigbuf[0], kDesmumeSaveCookie,cookieLen); + if (cmp) + { + // maybe it is a misnamed raw save file. try loading it that way + fprintf(stderr, "Not a DeSmuME .dsv save file. Trying to load as raw.\n"); + if (!this->load_no_gba(this->filename.c_str())) + this->load_raw(this->filename.c_str()); + return; + } + // desmume format + inf->fseek(-cookieLen, SEEK_END); + inf->fseek(-4, SEEK_CUR); + uint32_t version = 0xFFFFFFFF; + read32le(&version, inf.get()); + if (version) + { + fprintf(stderr, "Unknown save file format\n"); + return; + } + inf->fseek(-24, SEEK_CUR); + read32le(&this->info.size, inf.get()); + read32le(&this->info.padSize, inf.get()); + read32le(&this->info.type, inf.get()); + read32le(&this->info.addr_size, inf.get()); + read32le(&this->info.mem_size, inf.get()); + + // establish the save data + this->resize(this->info.size); + inf->fseek(0, SEEK_SET); + if (this->info.size > 0) + inf->fread(&this->data[0], this->info.size); // read all the raw data we have + this->state = RUNNING; + this->addr_size = this->info.addr_size; + // none of the other fields are used right now + } +} + +void BackupDevice::raw_applyUserSettings(uint32_t &size, bool manual) +{ + // respect the user's choice of backup memory type + if (CommonSettings.manualBackupType == MC_TYPE_AUTODETECT && !manual) + { + this->addr_size = this->addr_size_for_old_save_size(size); + this->resize(size); + } + else + { + uint32_t type = CommonSettings.manualBackupType; + int savetype = save_types[type].media_type; + int savesize = save_types[type].size; + this->addr_size = this->addr_size_for_old_save_type(savetype); + if (static_cast(savesize) < size) + size = savesize; + this->resize(savesize); + } + + this->state = RUNNING; +} + +bool BackupDevice::load_raw(const char *fn, uint32_t force_size) +{ + FILE *inf = fopen(fn,"rb"); + + if (!inf) + return false; + + fseek(inf, 0, SEEK_END); + uint32_t size = ftell(inf); + uint32_t left = 0; + + if (force_size > 0) + { + if (size > force_size) + size = force_size; + else if (size < force_size) + { + left = force_size - size; + size = force_size; + } + } + + fseek(inf, 0, SEEK_SET); + + this->raw_applyUserSettings(size, force_size > 0); + + int bytesRead = fread(&this->data[0], 1, size - left, inf); + (void)bytesRead; + fclose(inf); + + return true; +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/mc.h audacious-plugins-4.2/src/xsf/desmume/mc.h --- audacious-plugins-4.1/src/xsf/desmume/mc.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/mc.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,29 +1,32 @@ -/* Copyright (C) 2006 thoduv - Copyright (C) 2006 Theo Berkau +/* + Copyright (C) 2006 thoduv + Copyright (C) 2006 Theo Berkau + Copyright (C) 2008-2013 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef __FW_H__ -#define __FW_H__ +#pragma once -#include +#include +#include +#include #include "types.h" +#include "emufile.h" +//#include "windowsh_wrapper.h" +#define MAX_SAVE_TYPES 13 #define MC_TYPE_AUTODETECT 0x0 #define MC_TYPE_EEPROM1 0x1 #define MC_TYPE_EEPROM2 0x2 @@ -39,39 +42,122 @@ #define MC_SIZE_4MBITS 0x080000 #define MC_SIZE_8MBITS 0x100000 #define MC_SIZE_16MBITS 0x200000 +#define MC_SIZE_32MBITS 0x400000 #define MC_SIZE_64MBITS 0x800000 +#define MC_SIZE_128MBITS 0x1000000 +#define MC_SIZE_256MBITS 0x2000000 +#define MC_SIZE_512MBITS 0x4000000 + +struct memory_chip_t +{ + uint8_t com; // persistent command actually handled + uint32_t addr; // current address for reading/writing + uint8_t addr_shift; // shift for address (since addresses are transfered by 3 bytes units) + uint8_t addr_size; // size of addr when writing/reading + + bool write_enable; //is write enabled ? + + std::vector data; //memory data + uint32_t size; // memory size + bool writeable_buffer; // is "data" writeable ? + int type; //type of Memory + char *filename; + FILE *fp; + uint8_t autodetectbuf[32768]; + int autodetectsize; + + // needs only for firmware + bool isFirmware; + char userfile[MAX_PATH]; +}; -typedef struct +// the new backup system by zeromus +class BackupDevice { - u8 com; /* persistent command actually handled */ - u32 addr; /* current address for reading/writing */ - u8 addr_shift; /* shift for address (since addresses are transfered by 3 bytes units) */ - u8 addr_size; /* size of addr when writing/reading */ - - BOOL write_enable; /* is write enabled ? */ - - u8 *data; /* memory data */ - u32 size; /* memory size */ - BOOL writeable_buffer; /* is "data" writeable ? */ - int type; /* type of Memory */ - char *filename; - FILE *fp; - u8 autodetectbuf[32768]; - int autodetectsize; -} memory_chip_t; - -#define NDS_FW_SIZE_V1 (256 * 1024) /* size of fw memory on nds v1 */ -#define NDS_FW_SIZE_V2 (512 * 1024) /* size of fw memory on nds v2 */ - -void mc_init(memory_chip_t *mc, int type); /* reset and init values for memory struct */ -u8 *mc_alloc(memory_chip_t *mc, u32 size); /* alloc mc memory */ -void mc_realloc(memory_chip_t *mc, int type, u32 size); /* realloc mc memory */ -void mc_load_file(memory_chip_t *mc, const char* filename); /* load save file and setup fp */ -int mc_load_duc(memory_chip_t *mc, const char* filename); /* load Action Replay DS save file */ -void mc_free(memory_chip_t *mc); /* delete mc memory */ -void mc_reset_com(memory_chip_t *mc); /* reset communication with mc */ -u8 fw_transfer(memory_chip_t *mc, u8 data); /* transfer to, then receive data from firmware */ -u8 bm_transfer(memory_chip_t *mc, u8 data); /* transfer to, then receive data from backup memory */ +public: + BackupDevice(); -#endif /*__FW_H__*/ + // signals the save system that we are in our regular mode, loading up a rom. initializes for that case. + void load_rom(const std::string &filename); + void reset(); + void reset_hardware(); + std::string getFilename() { return filename; } + + std::vector data; + + // this info was saved before the last reset (used for savestate compatibility) + struct SavedInfo + { + uint32_t addr_size; + } savedInfo; + + // and these are used by old savestates + void load_old_state(uint32_t addr_size, uint8_t *data, uint32_t datasize); + static uint32_t addr_size_for_old_save_size(int bupmem_size); + static uint32_t addr_size_for_old_save_type(int bupmem_type); + + void raw_applyUserSettings(uint32_t &size, bool manual = false); + + bool load_no_gba(const char *fname); + bool load_raw(const char* filename, uint32_t force_size = 0); + + struct + { + uint32_t size, padSize, type, addr_size, mem_size; + } info; +private: + std::string filename; + + bool write_enable; // is write enabled? + uint32_t com; // persistent command actually handled + uint32_t addr_size, addr_counter; + uint32_t addr; + + std::vector data_autodetect; + enum STATE + { + DETECTING = 0, + RUNNING = 1 + } state; + + enum MOTION_INIT_STATE + { + MOTION_INIT_STATE_IDLE, + MOTION_INIT_STATE_RECEIVED_4, + MOTION_INIT_STATE_RECEIVED_4_B, + MOTION_INIT_STATE_FE, + MOTION_INIT_STATE_FD, + MOTION_INIT_STATE_FB + }; + enum MOTION_FLAG + { + MOTION_FLAG_NONE, + MOTION_FLAG_ENABLED, + MOTION_FLAG_SENSORMODE + }; + uint8_t motionInitState, motionFlag; + + void loadfile(); + void ensure(uint32_t addr); + + bool flushPending, lazyFlushPending; + + void resize(uint32_t size); +}; + +#define NDS_FW_SIZE_V1 (256 * 1024) /* size of fw memory on nds v1 */ +#define NDS_FW_SIZE_V2 (512 * 1024) /* size of fw memory on nds v2 */ + +void mc_init(memory_chip_t *mc, int type); /* reset and init values for memory struct */ +uint8_t *mc_alloc(memory_chip_t *mc, uint32_t size); /* alloc mc memory */ +void mc_free(memory_chip_t *mc); /* delete mc memory */ +void fw_reset_com(memory_chip_t *mc); /* reset communication with mc */ +uint8_t fw_transfer(memory_chip_t *mc, uint8_t data); + +struct SAVE_TYPE +{ + const char *descr; + int media_type; + int size; +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/mem.h audacious-plugins-4.2/src/xsf/desmume/mem.h --- audacious-plugins-4.1/src/xsf/desmume/mem.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/mem.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,141 +1,130 @@ -/* Copyright 2005-2006 Guillaume Duhamel - Copyright 2005 Theo Berkau +/* + Copyright (C) 2005 Theo Berkau + Copyright (C) 2005-2006 Guillaume Duhamel + Copyright (C) 2008-2010 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - This file is part of Yabause. - - Yabause 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. - - Yabause 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 Yabause; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef MEM_H -#define MEM_H +#pragma once -#include +#include +#include #include "types.h" -/* Type 1 Memory, faster for byte (8 bits) accesses */ - -static INLINE u8 T1ReadByte(u8 * mem, u32 addr) +// this was originally declared in MMU.h but we suffered some organizational problems and had to remove it +enum MMU_ACCESS_TYPE { - return mem[addr]; -} + MMU_AT_CODE, // used for cpu prefetches + MMU_AT_DATA, // used for cpu read/write + MMU_AT_GPU, // used for gpu read/write + MMU_AT_DMA, // used for dma read/write (blocks access to TCM) + MMU_AT_DEBUG // used for emulator debugging functions (bypasses some debug handling) +}; -static INLINE u16 T1ReadWord(u8 * mem, u32 addr) +inline uint8_t T1ReadByte(const uint8_t *const mem, uint32_t addr) { -#ifdef WORDS_BIGENDIAN - return (mem[addr + 1] << 8) | mem[addr]; -#else - return *((u16 *) (mem + addr)); -#endif + return mem[addr]; } -static INLINE u32 T1ReadLong(u8 * mem, u32 addr) +inline uint16_t T1ReadWord_guaranteedAligned(const uint8_t *const mem, uint32_t addr) { + assert(!(addr & 1)); #ifdef WORDS_BIGENDIAN - return (mem[addr + 3] << 24 | mem[addr + 2] << 16 | - mem[addr + 1] << 8 | mem[addr]); + return (mem[addr + 1] << 8) | mem[addr]; #else - return *((u32 *)mem + (addr>>2)); + return *reinterpret_cast(mem + addr); #endif } -static INLINE u64 T1ReadQuad(u8 * mem, u32 addr) +inline uint16_t T1ReadWord(const uint8_t *const mem, uint32_t addr) { #ifdef WORDS_BIGENDIAN - return (mem[addr + 7] << 56 | mem[addr + 6] << 48 | - mem[addr + 5] << 40 | mem[addr + 4] << 32 | - mem[addr + 3] << 24 | mem[addr + 2] << 16 | - mem[addr + 1] << 8 | mem[addr]); + return (mem[addr + 1] << 8) | mem[addr]; #else - return *((u64 *) (mem + addr)); + return *reinterpret_cast(mem + addr); #endif } -static INLINE void T1WriteByte(u8 * mem, u32 addr, u8 val) -{ - mem[addr] = val; -} - -static INLINE void T1WriteWord(u8 * mem, u32 addr, u16 val) +inline uint32_t T1ReadLong_guaranteedAligned(const uint8_t *const mem, uint32_t addr) { + assert(!(addr & 3)); #ifdef WORDS_BIGENDIAN - mem[addr + 1] = val >> 8; - mem[addr] = val & 0xFF; + return (mem[addr + 3] << 24) | (mem[addr + 2] << 16) | (mem[addr + 1] << 8) | mem[addr]; #else - *((u16 *) (mem + addr)) = val; + return *reinterpret_cast(mem + addr); #endif } -static INLINE void T1WriteLong(u8 * mem, u32 addr, u32 val) +inline uint32_t T1ReadLong(const uint8_t *const mem, uint32_t addr) { + addr &= ~3; #ifdef WORDS_BIGENDIAN - mem[addr + 3] = val >> 24; - mem[addr + 2] = (val >> 16) & 0xFF; - mem[addr + 1] = (val >> 8) & 0xFF; - mem[addr] = val & 0xFF; + return (mem[addr + 3] << 24) | (mem[addr + 2] << 16) | (mem[addr + 1] << 8) | mem[addr]; #else - *((u32 *) (mem + addr)) = val; + return *reinterpret_cast(mem + addr); #endif } -/* Type 2 Memory, faster for word (16 bits) accesses */ - -static INLINE u8 T2ReadByte(u8 * mem, u32 addr) +inline uint64_t T1ReadQuad(const uint8_t *const mem, uint32_t addr) { #ifdef WORDS_BIGENDIAN - return mem[addr ^ 1]; + return (mem[addr + 7] << 56) | (mem[addr + 6] << 48) | (mem[addr + 5] << 40) | (mem[addr + 4] << 32) | (mem[addr + 3] << 24) | (mem[addr + 2] << 16) | (mem[addr + 1] << 8) | mem[addr]; #else - return mem[addr]; + return *reinterpret_cast(mem + addr); #endif } -static INLINE u16 T2ReadWord(u8 * mem, u32 addr) +inline void T1WriteByte(uint8_t *const mem, uint32_t addr, uint8_t val) { - return *((u16 *) (mem + addr)); + mem[addr] = val; } -static INLINE u32 T2ReadLong(u8 * mem, u32 addr) +inline void T1WriteWord(uint8_t *const mem, uint32_t addr, uint16_t val) { #ifdef WORDS_BIGENDIAN - return *((u16 *) (mem + addr + 2)) << 16 | *((u16 *) (mem + addr)); + mem[addr + 1] = val >> 8; + mem[addr] = val & 0xFF; #else - return *((u32 *) (mem + addr)); + *reinterpret_cast(mem + addr) = val; #endif } -static INLINE void T2WriteByte(u8 * mem, u32 addr, u8 val) +inline void T1WriteLong(uint8_t *const mem, uint32_t addr, uint32_t val) { #ifdef WORDS_BIGENDIAN - mem[addr ^ 1] = val; + mem[addr + 3] = val >> 24; + mem[addr + 2] = (val >> 16) & 0xFF; + mem[addr + 1] = (val >> 8) & 0xFF; + mem[addr] = val & 0xFF; #else - mem[addr] = val; + *reinterpret_cast(mem + addr) = val; #endif } -static INLINE void T2WriteWord(u8 * mem, u32 addr, u16 val) -{ - *((u16 *) (mem + addr)) = val; -} - -static INLINE void T2WriteLong(u8 * mem, u32 addr, u32 val) +inline void T1WriteQuad(uint8_t *const mem, uint32_t addr, uint64_t val) { #ifdef WORDS_BIGENDIAN - *((u16 *) (mem + addr + 2)) = val >> 16; - *((u16 *) (mem + addr)) = val & 0xFFFF; + mem[addr + 7] = val >> 56; + mem[addr + 6] = (val >> 48) & 0xFF; + mem[addr + 5] = (val >> 40) & 0xFF; + mem[addr + 4] = (val >> 32) & 0xFF; + mem[addr + 3] = (val >> 24) & 0xFF; + mem[addr + 2] = (val >> 16) & 0xFF; + mem[addr + 1] = (val >> 8) & 0xFF; + mem[addr] = val & 0xFF; #else - *((u32 *) (mem + addr)) = val; + *reinterpret_cast(mem + addr) = val; #endif } - -#endif diff -Nru audacious-plugins-4.1/src/xsf/desmume/metaspu.cc audacious-plugins-4.2/src/xsf/desmume/metaspu.cc --- audacious-plugins-4.1/src/xsf/desmume/metaspu.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/metaspu.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,57 @@ +/* Copyright 2009-2015 DeSmuME team + + This file is part of DeSmuME + + DeSmuME 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. + + DeSmuME 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 DeSmuME; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "metaspu.h" + +#include +#include +#include +#include +#include + +class NullSynchronizer : public ISynchronizingAudioBuffer +{ +public: + std::queue buffer; + NullSynchronizer() {} + + virtual void enqueue_samples(s16* buf, int samples_provided) { + for (int i = 0; i < samples_provided * 2; i += 2) { + uint16_t left = buf[i]; + uint16_t right = buf[i + 1]; + buffer.push(left << 16 | right); + } + } + + virtual int output_samples(s16* buf, int samples_requested) { + int samples = ((samples_requested < buffer.size()) ? samples_requested : buffer.size()) & ~1; + for (int offset = 0, i = 0; i < samples; i++) { + uint32_t sample = buffer.front(); + buffer.pop(); + buf[offset++] = (sample >> 16) & 0xFFFF; + buf[offset++] = sample & 0xFFFF; + } + return samples; + } +}; + +ISynchronizingAudioBuffer* metaspu_construct(ESynchMethod method) +{ + return new NullSynchronizer(); +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/metaspu.h audacious-plugins-4.2/src/xsf/desmume/metaspu.h --- audacious-plugins-4.1/src/xsf/desmume/metaspu.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/metaspu.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,54 @@ +/* Copyright 2009-2015 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +//------------------------- +//this file contains the METASPU system +//which is designed to handle the task of audio synchronization +//and is designed to be as portable between multiple emulators +//------------------------- + + +#ifndef _METASPU_H_ +#define _METASPU_H_ + +#include + +#include "types.h" + +class ISynchronizingAudioBuffer +{ +public: + virtual ~ISynchronizingAudioBuffer() {} + + virtual void enqueue_samples(s16* buf, int samples_provided) = 0; + + //returns the number of samples actually supplied, which may not match the number requested + virtual int output_samples(s16* buf, int samples_requested) = 0; +}; + +enum ESynchMode +{ + ESynchMode_Synchronous +}; + +enum ESynchMethod +{ + ESynchMethod_0, //Null +}; + +ISynchronizingAudioBuffer* metaspu_construct(ESynchMethod method); + +#endif diff -Nru audacious-plugins-4.1/src/xsf/desmume/MMU.cc audacious-plugins-4.2/src/xsf/desmume/MMU.cc --- audacious-plugins-4.1/src/xsf/desmume/MMU.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/MMU.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,3526 +1,2795 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - +/* + Copyright (C) 2006 yopyop Copyright (C) 2007 shash + Copyright (C) 2007-2012 DeSmuME team - This file is part of DeSmuME + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -//#define RENDER3D - -#include -#include -#include - -//#include "gl_vertex.h" - -#include "debug.h" +#include +#include +#include +#include +#include #include "NDSSystem.h" -//#include "cflash.h" -#define cflash_read(a) 0 -#define cflash_write(a,d) #include "cp15.h" -//#include "wifi.h" #include "registers.h" +#include "mc.h" +#include "slot1.h" +#include "readwrite.h" +#include "MMU_timing.h" -#if VIO2SF_GPU_ENABLE -#include "render3D.h" -#else -#define GPU_setVideoProp(p1, p2) -#define GPU_setBGProp(p1, p2, p3) - -#define GPU_setBLDCNT(p1, p2) -#define GPU_setBLDALPHA(p1, p2) -#define GPU_setBLDY(p1, p2) -#define GPU_setMOSAIC(p1, p2) - - -#define GPU_remove(p1,p2) -#define GPU_addBack(p1,p2) - -#define GPU_ChangeGraphicsCore(p1) 0 - -#define GPU_set_DISPCAPCNT(p1, p2) -#define GPU_ligne(p1, p2) -#define GPU_setMasterBrightness(p1, p2) - -#define GPU_setWIN0_H(p1, p2) -#define GPU_setWIN0_H0(p1, p2) -#define GPU_setWIN0_H1(p1, p2) - -#define GPU_setWIN0_V(p1, p2) -#define GPU_setWIN0_V0(p1, p2) -#define GPU_setWIN0_V1(p1, p2) - -#define GPU_setWIN1_H(p1, p2) -#define GPU_setWIN1_H0(p1, p2) -#define GPU_setWIN1_H1(p1, p2) - -#define GPU_setWIN1_V(p1, p2) -#define GPU_setWIN1_V0(p1, p2) -#define GPU_setWIN1_V1(p1, p2) +// http://home.utah.edu/~nahaj/factoring/isqrt.c.html +static uint64_t isqrt(uint64_t x) +{ + if (x < 1) + return 0; -#define GPU_setWININ(p1, p2) -#define GPU_setWININ0(p1, p2) -#define GPU_setWININ1(p1, p2) + /* Load the binary constant 01 00 00 ... 00, where the number + * of zero bits to the right of the single one bit + * is even, and the one bit is as far left as is consistant + * with that condition.) + */ + uint64_t squaredbit = (~0LL >> 1) & ~(~0LL >> 2); + /* This portable load replaces the loop that used to be + * here, and was donated by legalize@xmission.com + */ + + /* Form bits of the answer. */ + uint64_t remainder = x, root = 0; + while (squaredbit > 0) + { + if (remainder >= (squaredbit | root)) + { + remainder -= squaredbit | root; + root >>= 1; + root |= squaredbit; + } + else + root >>= 1; + squaredbit >>= 2; + } -#define GPU_setWINOUT16(p1, p2) -#define GPU_setWINOUT(p1, p2) -#define GPU_setWINOBJ(p1, p2) + return root; +} -#define GPU_setBLDCNT_LOW(p1, p2) -#define GPU_setBLDCNT_HIGH(p1, p2) -#define GPU_setBLDCNT(p1, p2) +uint32_t partie = 1; +uint32_t _MMU_MAIN_MEM_MASK = 0x3FFFFF; +uint32_t _MMU_MAIN_MEM_MASK16 = 0x3FFFFF & ~1; +uint32_t _MMU_MAIN_MEM_MASK32 = 0x3FFFFF & ~3; -#define GPU_setBLDALPHA(p1, p2) -#define GPU_setBLDALPHA_EVA(p1, p2) -#define GPU_setBLDALPHA_EVB(p1, p2) +MMU_struct MMU; +MMU_struct_new MMU_new; +MMU_struct_timing MMU_timing; -#define GPU_setBLDY_EVY(p1, p2) -#endif +uint8_t *MMU_struct::MMU_MEM[2][256] = +{ + //arm9 + { + /* 0X*/ DUP16(MMU.ARM9_ITCM), + /* 1X*/ //DUP16(MMU.ARM9_ITCM) + /* 1X*/ DUP16(MMU.UNUSED_RAM), + /* 2X*/ DUP16(MMU.MAIN_MEM), + /* 3X*/ DUP16(MMU.SWIRAM), + /* 4X*/ DUP16(MMU.ARM9_REG), + /* 5X*/ DUP16(MMU.ARM9_VMEM), + /* 6X*/ DUP16(MMU.ARM9_LCD), + /* 7X*/ DUP16(MMU.ARM9_OAM), + /* 8X*/ DUP16(nullptr), + /* 9X*/ DUP16(nullptr), + /* AX*/ DUP16(MMU.UNUSED_RAM), + /* BX*/ DUP16(MMU.UNUSED_RAM), + /* CX*/ DUP16(MMU.UNUSED_RAM), + /* DX*/ DUP16(MMU.UNUSED_RAM), + /* EX*/ DUP16(MMU.UNUSED_RAM), + /* FX*/ DUP16(MMU.ARM9_BIOS) + }, + //arm7 + { + /* 0X*/ DUP16(MMU.ARM7_BIOS), + /* 1X*/ DUP16(MMU.UNUSED_RAM), + /* 2X*/ DUP16(MMU.MAIN_MEM), + /* 3X*/ DUP8(MMU.SWIRAM), + DUP8(MMU.ARM7_ERAM), + /* 4X*/ DUP8(MMU.ARM7_REG), + DUP8(MMU.ARM7_WIRAM), + /* 5X*/ DUP16(MMU.UNUSED_RAM), + /* 6X*/ DUP16(MMU.ARM9_LCD), + /* 7X*/ DUP16(MMU.UNUSED_RAM), + /* 8X*/ DUP16(nullptr), + /* 9X*/ DUP16(nullptr), + /* AX*/ DUP16(MMU.UNUSED_RAM), + /* BX*/ DUP16(MMU.UNUSED_RAM), + /* CX*/ DUP16(MMU.UNUSED_RAM), + /* DX*/ DUP16(MMU.UNUSED_RAM), + /* EX*/ DUP16(MMU.UNUSED_RAM), + /* FX*/ DUP16(MMU.UNUSED_RAM) + } +}; -#define ROM_MASK 3 +uint32_t MMU_struct::MMU_MASK[2][256] = +{ + //arm9 + { + /* 0X*/ DUP16(0x00007FFF), + /* 1X*/ //DUP16(0x00007FFF) + /* 1X*/ DUP16(0x00000003), + /* 2X*/ DUP16(0x003FFFFF), + /* 3X*/ DUP16(0x00007FFF), + /* 4X*/ DUP16(0x00FFFFFF), + /* 5X*/ DUP16(0x000007FF), + /* 6X*/ DUP16(0x000FFFFF), + /* 7X*/ DUP16(0x000007FF), + /* 8X*/ DUP16(0x00000003), + /* 9X*/ DUP16(0x00000003), + /* AX*/ DUP16(0x00000003), + /* BX*/ DUP16(0x00000003), + /* CX*/ DUP16(0x00000003), + /* DX*/ DUP16(0x00000003), + /* EX*/ DUP16(0x00000003), + /* FX*/ DUP16(0x00007FFF) + }, + //arm7 + { + /* 0X*/ DUP16(0x00003FFF), + /* 1X*/ DUP16(0x00000003), + /* 2X*/ DUP16(0x003FFFFF), + /* 3X*/ DUP8(0x00007FFF), + DUP8(0x0000FFFF), + /* 4X*/ DUP8(0x0000FFFF), + DUP8(0x0000FFFF), + /* 5X*/ DUP16(0x00000003), + /* 6X*/ DUP16(0x000FFFFF), + /* 7X*/ DUP16(0x00000003), + /* 8X*/ DUP16(0x00000003), + /* 9X*/ DUP16(0x00000003), + /* AX*/ DUP16(0x00000003), + /* BX*/ DUP16(0x00000003), + /* CX*/ DUP16(0x00000003), + /* DX*/ DUP16(0x00000003), + /* EX*/ DUP16(0x00000003), + /* FX*/ DUP16(0x00000003) + } +}; -/* - * - */ -//#define PROFILE_MEMORY_ACCESS 1 -#define EARLY_MEMORY_ACCESS 1 - -#define INTERNAL_DTCM_READ 1 -#define INTERNAL_DTCM_WRITE 1 - -//#define LOG_CARD -//#define LOG_GPU -//#define LOG_DMA -//#define LOG_DMA2 -//#define LOG_DIV - -char szRomPath[512]; -char szRomBaseName[512]; - -#define DUP2(x) x, x -#define DUP4(x) x, x, x, x -#define DUP8(x) x, x, x, x, x, x, x, x -#define DUP16(x) x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x +////////////////////////////////////////////////////////////// -MMU_struct MMU; +// ------------- +// VRAM MEMORY MAPPING +// ------------- +// (Everything is mapped through to ARM9_LCD in blocks of 16KB) -u8 * MMU_ARM9_MEM_MAP[256]={ -/* 0X*/ DUP16(ARM9Mem.ARM9_ITCM), -/* 1X*/ //DUP16(ARM9Mem.ARM9_ITCM) -/* 1X*/ DUP16(ARM9Mem.ARM9_WRAM), -/* 2X*/ DUP16(ARM9Mem.MAIN_MEM), -/* 3X*/ DUP16(MMU.SWIRAM), -/* 4X*/ DUP16(ARM9Mem.ARM9_REG), -/* 5X*/ DUP16(ARM9Mem.ARM9_VMEM), -/* 6X*/ DUP2(ARM9Mem.ARM9_ABG), - DUP2(ARM9Mem.ARM9_BBG), - DUP2(ARM9Mem.ARM9_AOBJ), - DUP2(ARM9Mem.ARM9_BOBJ), - DUP8(ARM9Mem.ARM9_LCD), -/* 7X*/ DUP16(ARM9Mem.ARM9_OAM), -/* 8X*/ DUP16(nullptr), -/* 9X*/ DUP16(nullptr), -/* AX*/ DUP16(MMU.CART_RAM), -/* BX*/ DUP16(MMU.UNUSED_RAM), -/* CX*/ DUP16(MMU.UNUSED_RAM), -/* DX*/ DUP16(MMU.UNUSED_RAM), -/* EX*/ DUP16(MMU.UNUSED_RAM), -/* FX*/ DUP16(ARM9Mem.ARM9_BIOS) -}; +// for all of the below, values = 41 indicate unmapped memory +static const uint8_t VRAM_PAGE_UNMAPPED = 41; -u32 MMU_ARM9_MEM_MASK[256]={ -/* 0X*/ DUP16(0x00007FFF), -/* 1X*/ //DUP16(0x00007FFF) -/* 1X*/ DUP16(0x00FFFFFF), -/* 2X*/ DUP16(0x003FFFFF), -/* 3X*/ DUP16(0x00007FFF), -/* 4X*/ DUP16(0x00FFFFFF), -/* 5X*/ DUP16(0x000007FF), -/* 6X*/ DUP2(0x0007FFFF), - DUP2(0x0001FFFF), - DUP2(0x0003FFFF), - DUP2(0x0001FFFF), - DUP8(0x000FFFFF), -/* 7X*/ DUP16(0x000007FF), -/* 8X*/ DUP16(ROM_MASK), -/* 9X*/ DUP16(ROM_MASK), -/* AX*/ DUP16(0x0000FFFF), -/* BX*/ DUP16(0x00000003), -/* CX*/ DUP16(0x00000003), -/* DX*/ DUP16(0x00000003), -/* EX*/ DUP16(0x00000003), -/* FX*/ DUP16(0x00007FFF) -}; +static const unsigned VRAM_LCDC_PAGES = 41; +static uint8_t vram_lcdc_map[VRAM_LCDC_PAGES]; -u8 * MMU_ARM7_MEM_MAP[256]={ -/* 0X*/ DUP16(MMU.ARM7_BIOS), -/* 1X*/ DUP16(MMU.UNUSED_RAM), -/* 2X*/ DUP16(ARM9Mem.MAIN_MEM), -/* 3X*/ DUP8(MMU.SWIRAM), - DUP8(MMU.ARM7_ERAM), -/* 4X*/ DUP8(MMU.ARM7_REG), - DUP8(MMU.ARM7_WIRAM), -/* 5X*/ DUP16(MMU.UNUSED_RAM), -/* 6X*/ DUP16(ARM9Mem.ARM9_ABG), -/* 7X*/ DUP16(MMU.UNUSED_RAM), -/* 8X*/ DUP16(nullptr), -/* 9X*/ DUP16(nullptr), -/* AX*/ DUP16(MMU.CART_RAM), -/* BX*/ DUP16(MMU.UNUSED_RAM), -/* CX*/ DUP16(MMU.UNUSED_RAM), -/* DX*/ DUP16(MMU.UNUSED_RAM), -/* EX*/ DUP16(MMU.UNUSED_RAM), -/* FX*/ DUP16(MMU.UNUSED_RAM) -}; +// in the range of 0x06000000 - 0x06800000 in 16KB pages (the ARM9 vram mappable area) +// this maps to 16KB pages in the LCDC buffer which is what will actually contain the data +uint8_t vram_arm9_map[VRAM_ARM9_PAGES]; -u32 MMU_ARM7_MEM_MASK[256]={ -/* 0X*/ DUP16(0x00003FFF), -/* 1X*/ DUP16(0x00000003), -/* 2X*/ DUP16(0x003FFFFF), -/* 3X*/ DUP8(0x00007FFF), - DUP8(0x0000FFFF), -/* 4X*/ DUP8(0x00FFFFFF), - DUP8(0x0000FFFF), -/* 5X*/ DUP16(0x00000003), -/* 6X*/ DUP16(0x0003FFFF), -/* 7X*/ DUP16(0x00000003), -/* 8X*/ DUP16(ROM_MASK), -/* 9X*/ DUP16(ROM_MASK), -/* AX*/ DUP16(0x0000FFFF), -/* BX*/ DUP16(0x00000003), -/* CX*/ DUP16(0x00000003), -/* DX*/ DUP16(0x00000003), -/* EX*/ DUP16(0x00000003), -/* FX*/ DUP16(0x00000003) -}; +// this chooses which banks are mapped in the 128K banks starting at 0x06000000 in ARM7 +static uint8_t vram_arm7_map[2]; -u32 MMU_ARM9_WAIT16[16]={ - 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 1, 1, 1, 1, 1, +struct TVramBankInfo +{ + uint8_t page_addr, num_pages; }; -u32 MMU_ARM9_WAIT32[16]={ - 1, 1, 1, 1, 1, 2, 2, 1, 8, 8, 5, 1, 1, 1, 1, 1, +static const TVramBankInfo vram_bank_info[VRAM_BANKS] = +{ + {0, 8}, + {8, 8}, + {16, 8}, + {24, 8}, + {32, 4}, + {36, 1}, + {37, 1}, + {38, 2}, + {40, 1} }; -u32 MMU_ARM7_WAIT16[16]={ - 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 1, 1, 1, 1, 1, -}; +// this is to remind you that the LCDC mapping returns a strange value (not 0x06800000) as you would expect +// in order to play nicely with the MMU address and mask tables +static const uint32_t LCDC_HACKY_LOCATION = 0x06000000; + +static const uint32_t ARM7_HACKY_IWRAM_LOCATION = 0x03800000; +static const uint32_t ARM7_HACKY_SIWRAM_LOCATION = 0x03000000; + +// maps an ARM9 BG/OBJ or LCDC address into an LCDC address, and informs the caller of whether it isn't mapped +// TODO - in cases where this does some mapping work, we could bypass the logic at the end of the _read* and _write* routines +// this is a good optimization to consider +// NOTE - this whole approach is probably fundamentally wrong. +// according to dasShiny research, its possible to map multiple banks to the same addresses. something more sophisticated would be needed. +// however, it hasnt proven necessary yet for any known test case. +static inline uint32_t MMU_LCDmap(int PROCNUM, uint32_t addr, bool &unmapped, bool &restricted) +{ + unmapped = false; + restricted = false; // this will track whether 8bit writes are allowed -u32 MMU_ARM7_WAIT32[16]={ - 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 5, 1, 1, 1, 1, 1, -}; + // handle SIWRAM and non-shared IWRAM in here too, since it is quite similar to vram. + // in fact it is probably implemented with the same pieces of hardware. + // its sort of like arm7 non-shared IWRAM is lowest priority, and then SIWRAM goes on top. + // however, we implement it differently than vram in emulator for historical reasons. + // instead of keeping a page map like we do vram, we just have a list of all possible page maps (there are only 4 each for arm9 and arm7) + if (addr >= 0x03000000 && addr < 0x04000000) + { + // blocks 0,1,2,3 is arm7 non-shared IWRAM and blocks 4,5 is SIWRAM, and block 8 is un-mapped zeroes + int iwram_block_16k; + int iwram_offset = addr & 0x3FFF; + addr &= 0x00FFFFFF; + if (PROCNUM == ARMCPU_ARM7) + { + static const int arm7_siwram_blocks[][4][4] = + { + { + {0, 1, 2, 3}, //WRAMCNT = 0 -> map to IWRAM + {4, 4, 4, 4}, //WRAMCNT = 1 -> map to SIWRAM block 0 + {5, 5, 5, 5}, //WRAMCNT = 2 -> map to SIWRAM block 1 + {4, 5, 4, 5}, //WRAMCNT = 3 -> map to SIWRAM blocks 0,1 + }, + //high region; always maps to non-shared IWRAM + { + {0, 1, 2, 3}, + {0, 1, 2, 3}, + {0, 1, 2, 3}, + {0, 1, 2, 3} + } + }; + int region = (addr >> 23) & 1; + int block = (addr >> 14) & 3; + assert(region < 2); + assert(block < 4); + iwram_block_16k = arm7_siwram_blocks[region][MMU.WRAMCNT][block]; + } //PROCNUM == ARMCPU_ARM7 + else + { + // PROCNUM == ARMCPU_ARM9 + static const int arm9_siwram_blocks[][4] = + { + {4, 5, 4, 5}, //WRAMCNT = 0 -> map to SIWRAM blocks 0,1 + {5, 5, 5, 5}, //WRAMCNT = 1 -> map to SIWRAM block 1 + {4, 4, 4, 4}, //WRAMCNT = 2 -> map to SIWRAM block 0 + {8, 8, 8, 8}, //WRAMCNT = 3 -> unmapped + }; + int block = (addr >> 14) & 3; + assert(block < 4); + iwram_block_16k = arm9_siwram_blocks[MMU.WRAMCNT][block]; + } -void MMU_Init(void) { - int i; + switch (iwram_block_16k >> 2) + { + case 0: // arm7 non-shared IWRAM + return ARM7_HACKY_IWRAM_LOCATION + (iwram_block_16k << 14) + iwram_offset; + case 1: //SIWRAM + return ARM7_HACKY_SIWRAM_LOCATION + ((iwram_block_16k & 3) << 14) + iwram_offset; + case 2: //zeroes + CASE2: + unmapped = true; + return 0; + default: + assert(false); //how did this happen? + goto CASE2; + } + } - LOG("MMU init\n"); + // in case the address is entirely outside of the interesting VRAM ranges + if (addr < 0x06000000) + return addr; + if (addr >= 0x07000000) + return addr; - memset(&MMU, 0, sizeof(MMU_struct)); + restricted = true; - MMU.CART_ROM = MMU.UNUSED_RAM; + // handle LCD memory mirroring + // TODO - this is gross! this should be renovated if the vram mapping is ever done in a more sophisticated way taking into account dasShiny research + if (addr >= 0x068A4000) + addr = 0x06800000 + + //(addr % 0xA4000); // yuck!! is this even how it mirrors? but we have to keep from overrunning the buffer somehow + (addr & 0x80000); // just as likely to be right (I have no clue how it should work) but faster. - for(i = 0x80; i<0xA0; ++i) - { - MMU_ARM9_MEM_MAP[i] = MMU.CART_ROM; - MMU_ARM7_MEM_MAP[i] = MMU.CART_ROM; - } - - MMU.MMU_MEM[0] = MMU_ARM9_MEM_MAP; - MMU.MMU_MEM[1] = MMU_ARM7_MEM_MAP; - MMU.MMU_MASK[0]= MMU_ARM9_MEM_MASK; - MMU.MMU_MASK[1] = MMU_ARM7_MEM_MASK; - - MMU.ITCMRegion = 0x00800000; - - MMU.MMU_WAIT16[0] = MMU_ARM9_WAIT16; - MMU.MMU_WAIT16[1] = MMU_ARM7_WAIT16; - MMU.MMU_WAIT32[0] = MMU_ARM9_WAIT32; - MMU.MMU_WAIT32[1] = MMU_ARM7_WAIT32; - - for(i = 0;i < 16;i++) - FIFOInit(MMU.fifos + i); - - mc_init(&MMU.fw, MC_TYPE_FLASH); /* init fw device */ - mc_alloc(&MMU.fw, NDS_FW_SIZE_V1); - MMU.fw.fp = nullptr; - - // Init Backup Memory device, this should really be done when the rom is loaded - mc_init(&MMU.bupmem, MC_TYPE_AUTODETECT); - mc_alloc(&MMU.bupmem, 1); - MMU.bupmem.fp = nullptr; - -} - -void MMU_DeInit(void) { - LOG("MMU deinit\n"); -// if (MMU.fw.fp) -// fclose(MMU.fw.fp); - mc_free(&MMU.fw); -// if (MMU.bupmem.fp) -// fclose(MMU.bupmem.fp); - mc_free(&MMU.bupmem); -} - -//Card rom & ram - -u16 SPI_CNT = 0; -u16 SPI_CMD = 0; -u16 AUX_SPI_CNT = 0; -u16 AUX_SPI_CMD = 0; - -u32 rom_mask = 0; - -u32 DMASrc[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}}; -u32 DMADst[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}}; - -void MMU_clearMem() -{ - int i; - - memset(ARM9Mem.ARM9_ABG, 0, 0x080000); - memset(ARM9Mem.ARM9_AOBJ, 0, 0x040000); - memset(ARM9Mem.ARM9_BBG, 0, 0x020000); - memset(ARM9Mem.ARM9_BOBJ, 0, 0x020000); - memset(ARM9Mem.ARM9_DTCM, 0, 0x4000); - memset(ARM9Mem.ARM9_ITCM, 0, 0x8000); - memset(ARM9Mem.ARM9_LCD, 0, 0x0A4000); - memset(ARM9Mem.ARM9_OAM, 0, 0x0800); - memset(ARM9Mem.ARM9_REG, 0, 0x01000000); - memset(ARM9Mem.ARM9_VMEM, 0, 0x0800); - memset(ARM9Mem.ARM9_WRAM, 0, 0x01000000); - memset(ARM9Mem.MAIN_MEM, 0, 0x400000); - - memset(ARM9Mem.blank_memory, 0, sizeof ARM9Mem.blank_memory); - - memset(MMU.ARM7_ERAM, 0, 0x010000); - memset(MMU.ARM7_REG, 0, 0x010000); - - for(i = 0;i < 16;i++) - FIFOInit(MMU.fifos + i); - - MMU.DTCMRegion = 0; - MMU.ITCMRegion = 0x00800000; - - memset(MMU.timer, 0, sizeof(u16) * 2 * 4); - memset(MMU.timerMODE, 0, sizeof(s32) * 2 * 4); - memset(MMU.timerON, 0, sizeof(u32) * 2 * 4); - memset(MMU.timerRUN, 0, sizeof(u32) * 2 * 4); - memset(MMU.timerReload, 0, sizeof(u16) * 2 * 4); - - memset(MMU.reg_IME, 0, sizeof(u32) * 2); - memset(MMU.reg_IE, 0, sizeof(u32) * 2); - memset(MMU.reg_IF, 0, sizeof(u32) * 2); - - memset(MMU.DMAStartTime, 0, sizeof(u32) * 2 * 4); - memset(MMU.DMACycle, 0, sizeof(s32) * 2 * 4); - memset(MMU.DMACrt, 0, sizeof(u32) * 2 * 4); - memset(MMU.DMAing, 0, sizeof(BOOL) * 2 * 4); - - memset(MMU.dscard, 0, sizeof(nds_dscard) * 2); - - MainScreen.offset = 192; - SubScreen.offset = 0; - - /* setup the texture slot pointers */ -#if 0 - ARM9Mem.textureSlotAddr[0] = ARM9Mem.blank_memory; - ARM9Mem.textureSlotAddr[1] = ARM9Mem.blank_memory; - ARM9Mem.textureSlotAddr[2] = ARM9Mem.blank_memory; - ARM9Mem.textureSlotAddr[3] = ARM9Mem.blank_memory; -#else - ARM9Mem.textureSlotAddr[0] = &ARM9Mem.ARM9_LCD[0x20000 * 0]; - ARM9Mem.textureSlotAddr[1] = &ARM9Mem.ARM9_LCD[0x20000 * 1]; - ARM9Mem.textureSlotAddr[2] = &ARM9Mem.ARM9_LCD[0x20000 * 2]; - ARM9Mem.textureSlotAddr[3] = &ARM9Mem.ARM9_LCD[0x20000 * 3]; -#endif -} + uint32_t vram_page; + uint32_t ofs = addr & 0x3FFF; -/* the VRAM blocks keep their content even when not blended in */ -/* to ensure that we write the content back to the LCD ram */ -/* FIXME: VRAM Bank E,F,G,H,I missing */ -void MMU_VRAMWriteBackToLCD(u8 block) -{ - u8 *destination; - u8 *source; - u32 size ; - u8 VRAMBankCnt; - #if 1 - return ; - #endif - destination = 0 ; - source = 0; - VRAMBankCnt = MMU_read8(ARMCPU_ARM9,REG_VRAMCNTA+block) ; - switch (block) - { - case 0: // Bank A - destination = ARM9Mem.ARM9_LCD ; - size = 0x20000 ; - break ; - case 1: // Bank B - destination = ARM9Mem.ARM9_LCD + 0x20000 ; - size = 0x20000 ; - break ; - case 2: // Bank C - destination = ARM9Mem.ARM9_LCD + 0x40000 ; - size = 0x20000 ; - break ; - case 3: // Bank D - destination = ARM9Mem.ARM9_LCD + 0x60000 ; - size = 0x20000 ; - break ; - case 4: // Bank E - destination = ARM9Mem.ARM9_LCD + 0x80000 ; - size = 0x10000 ; - break ; - case 5: // Bank F - destination = ARM9Mem.ARM9_LCD + 0x90000 ; - size = 0x4000 ; - break ; - case 6: // Bank G - destination = ARM9Mem.ARM9_LCD + 0x94000 ; - size = 0x4000 ; - break ; - case 8: // Bank H - destination = ARM9Mem.ARM9_LCD + 0x98000 ; - size = 0x8000 ; - break ; - case 9: // Bank I - destination = ARM9Mem.ARM9_LCD + 0xA0000 ; - size = 0x4000 ; - break ; - default: - return ; - } - switch (VRAMBankCnt & 7) { - case 0: - /* vram is allready stored at LCD, we dont need to write it back */ - MMU.vScreen = 1; - break ; - case 1: - switch(block){ - case 0: - case 1: - case 2: - case 3: - /* banks are in use for BG at ABG + ofs * 0x20000 */ - source = ARM9Mem.ARM9_ABG + ((VRAMBankCnt >> 3) & 3) * 0x20000 ; - break ; - case 4: - /* bank E is in use at ABG */ - source = ARM9Mem.ARM9_ABG ; - break; - case 5: - case 6: - /* banks are in use for BG at ABG + (0x4000*OFS.0)+(0x10000*OFS.1)*/ - source = ARM9Mem.ARM9_ABG + (((VRAMBankCnt >> 3) & 1) * 0x4000) + (((VRAMBankCnt >> 2) & 1) * 0x10000) ; - break; - case 8: - /* bank H is in use at BBG */ - source = ARM9Mem.ARM9_BBG ; - break ; - case 9: - /* bank I is in use at BBG */ - source = ARM9Mem.ARM9_BBG + 0x8000 ; - break; - default: return ; - } - break ; - case 2: - if (block < 2) - { - /* banks A,B are in use for OBJ at AOBJ + ofs * 0x20000 */ - source = ARM9Mem.ARM9_AOBJ + ((VRAMBankCnt >> 3) & 1) * 0x20000 ; - } else return ; - break ; - case 4: - switch(block){ - case 2: - /* bank C is in use at BBG */ - source = ARM9Mem.ARM9_BBG ; - break ; - case 3: - /* bank D is in use at BOBJ */ - source = ARM9Mem.ARM9_BOBJ ; - break ; - default: return ; - } - break ; - default: - return ; - } - if (!destination) return ; - if (!source) return ; - memcpy(destination,source,size) ; -} - -void MMU_VRAMReloadFromLCD(u8 block,u8 VRAMBankCnt) -{ - u8 *destination; - u8 *source; - u32 size; - #if 1 - return ; - #endif - destination = 0; - source = 0; - size = 0; - switch (block) - { - case 0: // Bank A - source = ARM9Mem.ARM9_LCD ; - size = 0x20000 ; - break ; - case 1: // Bank B - source = ARM9Mem.ARM9_LCD + 0x20000 ; - size = 0x20000 ; - break ; - case 2: // Bank C - source = ARM9Mem.ARM9_LCD + 0x40000 ; - size = 0x20000 ; - break ; - case 3: // Bank D - source = ARM9Mem.ARM9_LCD + 0x60000 ; - size = 0x20000 ; - break ; - case 4: // Bank E - source = ARM9Mem.ARM9_LCD + 0x80000 ; - size = 0x10000 ; - break ; - case 5: // Bank F - source = ARM9Mem.ARM9_LCD + 0x90000 ; - size = 0x4000 ; - break ; - case 6: // Bank G - source = ARM9Mem.ARM9_LCD + 0x94000 ; - size = 0x4000 ; - break ; - case 8: // Bank H - source = ARM9Mem.ARM9_LCD + 0x98000 ; - size = 0x8000 ; - break ; - case 9: // Bank I - source = ARM9Mem.ARM9_LCD + 0xA0000 ; - size = 0x4000 ; - break ; - default: - return ; + // return addresses in LCDC range + if (addr >= 0x06800000) + { + // already in LCDC range. just look it up to see whether it is unmapped + vram_page = (addr >> 14) & 63; + assert(vram_page < VRAM_LCDC_PAGES); + vram_page = vram_lcdc_map[vram_page]; } - switch (VRAMBankCnt & 7) { - case 0: - /* vram is allready stored at LCD, we dont need to write it back */ - MMU.vScreen = 1; - break ; - case 1: - if (block < 4) - { - /* banks are in use for BG at ABG + ofs * 0x20000 */ - destination = ARM9Mem.ARM9_ABG + ((VRAMBankCnt >> 3) & 3) * 0x20000 ; - } else return ; - break ; - case 2: - switch(block){ - case 0: - case 1: - case 2: - case 3: - /* banks are in use for BG at ABG + ofs * 0x20000 */ - destination = ARM9Mem.ARM9_ABG + ((VRAMBankCnt >> 3) & 3) * 0x20000 ; - break ; - case 4: - /* bank E is in use at ABG */ - destination = ARM9Mem.ARM9_ABG ; - break; - case 5: - case 6: - /* banks are in use for BG at ABG + (0x4000*OFS.0)+(0x10000*OFS.1)*/ - destination = ARM9Mem.ARM9_ABG + (((VRAMBankCnt >> 3) & 1) * 0x4000) + (((VRAMBankCnt >> 2) & 1) * 0x10000) ; - break; - case 8: - /* bank H is in use at BBG */ - destination = ARM9Mem.ARM9_BBG ; - break ; - case 9: - /* bank I is in use at BBG */ - destination = ARM9Mem.ARM9_BBG + 0x8000 ; - break; - default: return ; - } - break ; - case 4: - switch(block){ - case 2: - /* bank C is in use at BBG */ - destination = ARM9Mem.ARM9_BBG ; - break ; - case 3: - /* bank D is in use at BOBJ */ - destination = ARM9Mem.ARM9_BOBJ ; - break ; - default: return ; + else + { + // map addresses in BG/OBJ range to an LCDC range + vram_page = (addr >> 14) & (VRAM_ARM9_PAGES - 1); + assert(vram_page < VRAM_ARM9_PAGES); + vram_page = vram_arm9_map[vram_page]; } - break ; - default: - return ; + + if (vram_page == VRAM_PAGE_UNMAPPED) + { + unmapped = true; + return 0; } - if (!destination) return ; - if (!source) return ; - memcpy(destination,source,size) ; + else + return LCDC_HACKY_LOCATION + (vram_page << 14) + ofs; } -void MMU_setRom(u8 * rom, u32 mask) -{ - unsigned int i; - MMU.CART_ROM = rom; +VramConfiguration vramConfiguration; - for(i = 0x80; i<0xA0; ++i) +// maps the specified bank to LCDC +static inline void MMU_vram_lcdc(int bank) +{ + for (int i = 0; i < vram_bank_info[bank].num_pages; ++i) { - MMU_ARM9_MEM_MAP[i] = rom; - MMU_ARM7_MEM_MAP[i] = rom; - MMU_ARM9_MEM_MASK[i] = mask; - MMU_ARM7_MEM_MASK[i] = mask; + int page = vram_bank_info[bank].page_addr + i; + vram_lcdc_map[page] = page; } - rom_mask = mask; } -void MMU_unsetRom() +// maps the specified bank to ARM9 at the provided page offset +static inline void MMU_vram_arm9(int bank, int offset) { - unsigned int i; - MMU.CART_ROM=MMU.UNUSED_RAM; + for (int i = 0; i < vram_bank_info[bank].num_pages; ++i) + vram_arm9_map[i + offset] = vram_bank_info[bank].page_addr + i; +} - for(i = 0x80; i<0xA0; ++i) - { - MMU_ARM9_MEM_MAP[i] = MMU.UNUSED_RAM; - MMU_ARM7_MEM_MAP[i] = MMU.UNUSED_RAM; - MMU_ARM9_MEM_MASK[i] = ROM_MASK; - MMU_ARM7_MEM_MASK[i] = ROM_MASK; - } - rom_mask = ROM_MASK; +static inline uint8_t *MMU_vram_physical(int page) +{ + return MMU.ARM9_LCD + (page/**ADDRESS_STEP_16KB*/); } -char txt[80]; -u8 FASTCALL MMU_read8(u32 proc, u32 adr) +// todo - templateize +static inline void MMU_VRAMmapRefreshBank(int bank) { -#ifdef INTERNAL_DTCM_READ - if((proc==ARMCPU_ARM9)&((adr&(~0x3FFF))==MMU.DTCMRegion)) - { - return ARM9Mem.ARM9_DTCM[adr&0x3FFF]; - } -#endif + int block = bank; + if (bank >= VRAM_BANK_H) + ++block; + + uint8_t VRAMBankCnt = T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x240 + block); + + // do nothing if the bank isnt enabled + uint8_t en = VRAMBankCnt & 0x80; + if (!en) + return; - // CFlash reading, Mic - if ((adr>=0x9000000)&&(adr<0x9900000)) - return (unsigned char)cflash_read(adr); - -#ifdef EXPERIMENTAL_WIFI - /* wifi mac access */ - if ((proc==ARMCPU_ARM7) && (adr>=0x04800000)&&(adr<0x05000000)) + int mst, ofs = 0; + switch (bank) { - if (adr & 1) - return (WIFI_read16(&wifiMac,adr) >> 8) & 0xFF; - else - return WIFI_read16(&wifiMac,adr) & 0xFF; - } -#endif + case VRAM_BANK_A: + case VRAM_BANK_B: + mst = VRAMBankCnt & 3; + ofs = (VRAMBankCnt >> 3) & 3; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // ABG + vramConfiguration.banks[bank].purpose = VramConfiguration::ABG; + MMU_vram_arm9(bank, VRAM_PAGE_ABG + ofs * 8); + break; + case 2: // AOBJ + vramConfiguration.banks[bank].purpose = VramConfiguration::AOBJ; + switch (ofs) + { + case 0: + case 1: + MMU_vram_arm9(bank, VRAM_PAGE_AOBJ + ofs * 8); + } + break; + case 3: // texture + vramConfiguration.banks[bank].purpose = VramConfiguration::TEX; + MMU.texInfo.textureSlotAddr[ofs] = MMU_vram_physical(vram_bank_info[bank].page_addr); + break; + default: + goto unsupported_mst; + } + break; - return MMU.MMU_MEM[proc][(adr>>20)&0xFF][adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF]]; -} + case VRAM_BANK_C: + case VRAM_BANK_D: + mst = VRAMBankCnt & 7; + ofs = (VRAMBankCnt >> 3) & 3; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // ABG + vramConfiguration.banks[bank].purpose = VramConfiguration::ABG; + MMU_vram_arm9(bank, VRAM_PAGE_ABG + ofs * 8); + break; + case 2: // arm7 + vramConfiguration.banks[bank].purpose = VramConfiguration::ARM7; + if (bank == 2) + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x240, T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x240) | 1); + if (bank == 3) + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x240, T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x240) | 2); + switch (ofs) + { + case 0: + case 1: + vram_arm7_map[ofs] = vram_bank_info[bank].page_addr; + } + break; + case 3: // texture + vramConfiguration.banks[bank].purpose = VramConfiguration::TEX; + MMU.texInfo.textureSlotAddr[ofs] = MMU_vram_physical(vram_bank_info[bank].page_addr); + break; + case 4: // BGB or BOBJ + if (bank == VRAM_BANK_C) + { + vramConfiguration.banks[bank].purpose = VramConfiguration::BBG; + MMU_vram_arm9(bank, VRAM_PAGE_BBG); // BBG + } + else + { + vramConfiguration.banks[bank].purpose = VramConfiguration::BOBJ; + MMU_vram_arm9(bank, VRAM_PAGE_BOBJ); // BOBJ + } + break; + default: + goto unsupported_mst; + } + break; + + case VRAM_BANK_E: + mst = VRAMBankCnt & 7; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // ABG + vramConfiguration.banks[bank].purpose = VramConfiguration::ABG; + MMU_vram_arm9(bank, VRAM_PAGE_ABG); + break; + case 2: // AOBJ + vramConfiguration.banks[bank].purpose = VramConfiguration::AOBJ; + MMU_vram_arm9(bank, VRAM_PAGE_AOBJ); + break; + case 3: // texture palette + vramConfiguration.banks[bank].purpose = VramConfiguration::TEXPAL; + MMU.texInfo.texPalSlot[0] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.texInfo.texPalSlot[1] = MMU_vram_physical(vram_bank_info[bank].page_addr + 1); + MMU.texInfo.texPalSlot[2] = MMU_vram_physical(vram_bank_info[bank].page_addr + 2); + MMU.texInfo.texPalSlot[3] = MMU_vram_physical(vram_bank_info[bank].page_addr + 3); + break; + case 4: // ABG extended palette + vramConfiguration.banks[bank].purpose = VramConfiguration::ABGEXTPAL; + MMU.ExtPal[0][0] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.ExtPal[0][1] = MMU.ExtPal[0][0]/* + ADDRESS_STEP_8KB*/; + MMU.ExtPal[0][2] = MMU.ExtPal[0][1]/* + ADDRESS_STEP_8KB*/; + MMU.ExtPal[0][3] = MMU.ExtPal[0][2]/* + ADDRESS_STEP_8KB*/; + break; + default: + goto unsupported_mst; + } + break; + case VRAM_BANK_F: + case VRAM_BANK_G: + { + mst = VRAMBankCnt & 7; + ofs = (VRAMBankCnt >> 3) & 3; + const int pageofslut[] = {0, 1, 4, 5}; + int pageofs = pageofslut[ofs]; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // ABG + vramConfiguration.banks[bank].purpose = VramConfiguration::ABG; + MMU_vram_arm9(bank, VRAM_PAGE_ABG + pageofs); + MMU_vram_arm9(bank, VRAM_PAGE_ABG + pageofs + 2); // unexpected mirroring (required by spyro eternal night) + break; + case 2: // AOBJ + vramConfiguration.banks[bank].purpose = VramConfiguration::AOBJ; + MMU_vram_arm9(bank, VRAM_PAGE_AOBJ + pageofs); + MMU_vram_arm9(bank, VRAM_PAGE_AOBJ + pageofs + 2); // unexpected mirroring - I have no proof, but it is inferred from the ABG above + break; + case 3: // texture palette + vramConfiguration.banks[bank].purpose = VramConfiguration::TEXPAL; + MMU.texInfo.texPalSlot[pageofs] = MMU_vram_physical(vram_bank_info[bank].page_addr); + break; + case 4: // ABG extended palette + switch (ofs) + { + case 0: + case 1: + vramConfiguration.banks[bank].purpose = VramConfiguration::ABGEXTPAL; + MMU.ExtPal[0][ofs * 2] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.ExtPal[0][ofs * 2 + 1] = MMU.ExtPal[0][ofs * 2]/* + ADDRESS_STEP_8KB*/; + break; + default: + vramConfiguration.banks[bank].purpose = VramConfiguration::INVALID; + } + break; + case 5: // AOBJ extended palette + vramConfiguration.banks[bank].purpose = VramConfiguration::AOBJEXTPAL; + MMU.ObjExtPal[0][0] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.ObjExtPal[0][1] = MMU.ObjExtPal[0][1]/* + ADDRESS_STEP_8KB*/; + break; + default: + goto unsupported_mst; + } + break; + } + case VRAM_BANK_H: + mst = VRAMBankCnt & 3; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // BBG + vramConfiguration.banks[bank].purpose = VramConfiguration::BBG; + MMU_vram_arm9(bank, VRAM_PAGE_BBG); + MMU_vram_arm9(bank, VRAM_PAGE_BBG + 4); // unexpected mirroring + break; + case 2: // BBG extended palette + vramConfiguration.banks[bank].purpose = VramConfiguration::BBGEXTPAL; + MMU.ExtPal[1][0] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.ExtPal[1][1] = MMU.ExtPal[1][0]/* + ADDRESS_STEP_8KB*/; + MMU.ExtPal[1][2] = MMU.ExtPal[1][1]/* + ADDRESS_STEP_8KB*/; + MMU.ExtPal[1][3] = MMU.ExtPal[1][2]/* + ADDRESS_STEP_8KB*/; + break; + default: + goto unsupported_mst; + } + break; -u16 FASTCALL MMU_read16(u32 proc, u32 adr) -{ -#ifdef INTERNAL_DTCM_READ - if((proc == ARMCPU_ARM9) && ((adr & ~0x3FFF) == MMU.DTCMRegion)) - { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadWord(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); - } -#endif + case VRAM_BANK_I: + mst = VRAMBankCnt & 3; + switch (mst) + { + case 0: // LCDC + vramConfiguration.banks[bank].purpose = VramConfiguration::LCDC; + MMU_vram_lcdc(bank); + break; + case 1: // BBG + vramConfiguration.banks[bank].purpose = VramConfiguration::BBG; + MMU_vram_arm9(bank, VRAM_PAGE_BBG + 2); + MMU_vram_arm9(bank, VRAM_PAGE_BBG + 3); // unexpected mirroring + break; + case 2: // BOBJ + vramConfiguration.banks[bank].purpose = VramConfiguration::BOBJ; + MMU_vram_arm9(bank, VRAM_PAGE_BOBJ); + MMU_vram_arm9(bank, VRAM_PAGE_BOBJ + 1); // FF3 end scene (lens flare sprite) needs this as it renders a sprite off the end of the 16KB and back around + break; + case 3: // BOBJ extended palette + vramConfiguration.banks[bank].purpose = VramConfiguration::BOBJEXTPAL; + MMU.ObjExtPal[1][0] = MMU_vram_physical(vram_bank_info[bank].page_addr); + MMU.ObjExtPal[1][1] = MMU.ObjExtPal[1][1]/* + ADDRESS_STEP_8KB*/; + break; + default: + goto unsupported_mst; + } + break; + } // switch(bank) - // CFlash reading, Mic - if ((adr>=0x08800000)&&(adr<0x09900000)) - return (unsigned short)cflash_read(adr); - -#ifdef EXPERIMENTAL_WIFI - /* wifi mac access */ - if ((proc==ARMCPU_ARM7) && (adr>=0x04800000)&&(adr<0x05000000)) - return WIFI_read16(&wifiMac,adr) ; -#endif + vramConfiguration.banks[bank].ofs = ofs; - adr &= 0x0FFFFFFF; + return; - if(adr&0x04000000) - { - /* Adress is an IO register */ - switch(adr) - { +unsupported_mst: + vramConfiguration.banks[bank].purpose = VramConfiguration::INVALID; +} -#if VIO2SF_GPU_ENABLE - case 0x04000604: - return (gpu3D->NDS_3D_GetNumPolys()&2047); - case 0x04000606: - return (gpu3D->NDS_3D_GetNumVertex()&8191); -#endif +void MMU_VRAM_unmap_all() +{ + vramConfiguration.clear(); - case REG_IPCFIFORECV : /* TODO (clear): ??? */ - execute = false; - return 1; + vram_arm7_map[0] = VRAM_PAGE_UNMAPPED; + vram_arm7_map[1] = VRAM_PAGE_UNMAPPED; - case REG_IME : - return (u16)MMU.reg_IME[proc]; + for (unsigned i = 0; i < VRAM_LCDC_PAGES; ++i) + vram_lcdc_map[i] = VRAM_PAGE_UNMAPPED; + for (int i = 0; i < VRAM_ARM9_PAGES; ++i) + vram_arm9_map[i] = VRAM_PAGE_UNMAPPED; - case REG_IE : - return (u16)MMU.reg_IE[proc]; - case REG_IE + 2 : - return (u16)(MMU.reg_IE[proc]>>16); - - case REG_IF : - return (u16)MMU.reg_IF[proc]; - case REG_IF + 2 : - return (u16)(MMU.reg_IF[proc]>>16); - - case REG_TM0CNTL : - case REG_TM1CNTL : - case REG_TM2CNTL : - case REG_TM3CNTL : - return MMU.timer[proc][(adr&0xF)>>2]; - - case 0x04000630 : - LOG("vect res\r\n"); /* TODO (clear): ??? */ - //execute = false; - return 0; - case REG_POSTFLG : - return 1; - default : - break; - } + for (int i = 0; i < 4; ++i) + { + MMU.ExtPal[0][i] = MMU.blank_memory; + MMU.ExtPal[1][i] = MMU.blank_memory; } - /* Returns data from memory */ - return T1ReadWord(MMU.MMU_MEM[proc][(adr >> 20) & 0xFF], adr & MMU.MMU_MASK[proc][(adr >> 20) & 0xFF]); + MMU.ObjExtPal[0][0] = MMU.blank_memory; + MMU.ObjExtPal[0][1] = MMU.blank_memory; + MMU.ObjExtPal[1][0] = MMU.blank_memory; + MMU.ObjExtPal[1][1] = MMU.blank_memory; + + for (int i = 0; i < 6; ++i) + MMU.texInfo.texPalSlot[i] = MMU.blank_memory; + + for (int i = 0; i < 4; ++i) + MMU.texInfo.textureSlotAddr[i] = MMU.blank_memory; } -u32 FASTCALL MMU_read32(u32 proc, u32 adr) +static inline void MMU_VRAMmapControl(uint8_t block, uint8_t VRAMBankCnt) { -#ifdef INTERNAL_DTCM_READ - if((proc == ARMCPU_ARM9) && ((adr & ~0x3FFF) == MMU.DTCMRegion)) + // handle WRAM, first of all + if (block == 7) { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadLong(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); + MMU.WRAMCNT = VRAMBankCnt & 3; + return; } -#endif - // CFlash reading, Mic - if ((adr>=0x9000000)&&(adr<0x9900000)) - return (unsigned long)cflash_read(adr); + // first, save the texture info so we can check it for changes and trigger purges of the texcache + //MMU_struct::TextureInfo oldTexInfo = MMU.texInfo; - adr &= 0x0FFFFFFF; + // unmap everything + MMU_VRAM_unmap_all(); - if((adr >> 24) == 4) - { - /* Adress is an IO register */ - switch(adr) + // unmap VRAM_BANK_C and VRAM_BANK_D from arm7. theyll get mapped again in a moment if necessary + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x240, 0); + + // write the new value to the reg + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x240 + block, VRAMBankCnt); + + // refresh all bank settings + // zero XX-XX-200X (long before jun 2012) + // these are enumerated so that we can tune the order they get applied + // in order to emulate prioritization rules for memory regions + // with multiple banks mapped. + // We're probably still not mapping things 100% correctly, but this helped us get closer: + // goblet of fire "care of magical creatures" maps I and D to BOBJ (the I is an accident) + // and requires A to override it. + // This may create other bugs.... + MMU_VRAMmapRefreshBank(VRAM_BANK_I); + MMU_VRAMmapRefreshBank(VRAM_BANK_H); + MMU_VRAMmapRefreshBank(VRAM_BANK_G); + MMU_VRAMmapRefreshBank(VRAM_BANK_F); + MMU_VRAMmapRefreshBank(VRAM_BANK_E); + // zero 21-jun-2012 + // tomwi's streaming music demo sets A and D to ABG (the A is an accident). + // in this case, D should get priority. + // this is somewhat risky. will it break other things? + MMU_VRAMmapRefreshBank(VRAM_BANK_A); + MMU_VRAMmapRefreshBank(VRAM_BANK_B); + MMU_VRAMmapRefreshBank(VRAM_BANK_C); + MMU_VRAMmapRefreshBank(VRAM_BANK_D); + + //fprintf(stderr, vramConfiguration.describe().c_str()); + //fprintf(stderr, "vram remapped at vcount=%d\n",nds.VCount); + + // ------------------------------- + // set up arm9 mirrorings + // these are probably not entirely accurate. more study will be necessary. + // in general, we find that it is not uncommon at all for games to accidentally do this. + // + // being able to easily do these experiments was one of the primary motivations for this remake of the vram mapping system + + // see the "unexpected mirroring" comments above for some more mirroring + // so far "unexpected mirrorings" are tested by combining these games: + // despereaux - storybook subtitles + // NSMB - world map sub screen + // drill spirits EU - mission select (just for control purposes, as it doesnt use H or I) + // ... + // note that the "unexpected mirroring" items above may at some point rely on being executed in a certain order. + // (sequentially A..I) + + const int types[] = { VRAM_PAGE_ABG, VRAM_PAGE_BBG, VRAM_PAGE_AOBJ, VRAM_PAGE_BOBJ }; + const int sizes[] = {32, 8, 16, 8}; + for (int t = 0; t < 4; ++t) + { + // the idea here is to pad out the mirrored space with copies of the mappable area, + // without respect to what is mapped within that mappable area. + // we hope that this is correct in all cases + // required for driller spirits in mission select (mapping is simple A,B,C,D to each purpose) + int size = sizes[t]; + int mask = size - 1; + int type = types[t]; + for (int i = size; i < 128; ++i) { - // This is hacked due to the only current 3D core - case 0x04000600: - { - u32 fifonum = IPCFIFO+proc; - - u32 gxstat = (MMU.fifos[fifonum].empty<<26) | - (1<<25) | - (MMU.fifos[fifonum].full<<24) | - /*((NDS_nbpush[0]&1)<<13) | ((NDS_nbpush[2]&0x1F)<<8) |*/ - 2; - - LOG ("GXSTAT: 0x%X", gxstat); - - return gxstat; - } - - case 0x04000640: - case 0x04000644: - case 0x04000648: - case 0x0400064C: - case 0x04000650: - case 0x04000654: - case 0x04000658: - case 0x0400065C: - case 0x04000660: - case 0x04000664: - case 0x04000668: - case 0x0400066C: - case 0x04000670: - case 0x04000674: - case 0x04000678: - case 0x0400067C: - { - //LOG("4000640h..67Fh - CLIPMTX_RESULT - Read Current Clip Coordinates Matrix (R)"); -#if VIO2SF_GPU_ENABLE - return gpu3D->NDS_3D_GetClipMatrix ((adr-0x04000640)/4); -#else - return 0; -#endif - } - case 0x04000680: - case 0x04000684: - case 0x04000688: - case 0x0400068C: - case 0x04000690: - case 0x04000694: - case 0x04000698: - case 0x0400069C: - case 0x040006A0: - { -#if VIO2SF_GPU_ENABLE - //LOG("4000680h..6A3h - VECMTX_RESULT - Read Current Directional Vector Matrix (R)"); - return gpu3D->NDS_3D_GetDirectionalMatrix ((adr-0x04000680)/4); -#else - return 0; -#endif - } + int page = type + i; + vram_arm9_map[page] = vram_arm9_map[type + (i & mask)]; + } + } +} - case 0x4000604: - { -#if VIO2SF_GPU_ENABLE - return (gpu3D->NDS_3D_GetNumPolys()&2047) & ((gpu3D->NDS_3D_GetNumVertex()&8191) << 16); - //LOG ("read32 - RAM_COUNT -> 0x%X", ((u32 *)(MMU.MMU_MEM[proc][(adr>>20)&0xFF]))[(adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF])>>2]); -#else - return 0; -#endif - } +////////////////////////////////////////////////////////////// +//end vram +////////////////////////////////////////////////////////////// - case REG_IME : - return MMU.reg_IME[proc]; - case REG_IE : - return MMU.reg_IE[proc]; - case REG_IF : - return MMU.reg_IF[proc]; - case REG_IPCFIFORECV : - { - u16 IPCFIFO_CNT = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184); - if(IPCFIFO_CNT&0x8000) - { - //execute = false; - u32 fifonum = IPCFIFO+proc; - u32 val = FIFOValue(MMU.fifos + fifonum); - u32 remote = (proc+1) & 1; - u16 IPCFIFO_CNT_remote = T1ReadWord(MMU.MMU_MEM[remote][0x40], 0x184); - IPCFIFO_CNT |= (MMU.fifos[fifonum].empty<<8) | (MMU.fifos[fifonum].full<<9) | (MMU.fifos[fifonum].error<<14); - IPCFIFO_CNT_remote |= (MMU.fifos[fifonum].empty) | (MMU.fifos[fifonum].full<<1); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, IPCFIFO_CNT); - T1WriteWord(MMU.MMU_MEM[remote][0x40], 0x184, IPCFIFO_CNT_remote); - if ((MMU.fifos[fifonum].empty) && (IPCFIFO_CNT & BIT(2))) - NDS_makeInt(remote,17) ; /* remote: SEND FIFO EMPTY */ - return val; - } - } - return 0; - case REG_TM0CNTL : - case REG_TM1CNTL : - case REG_TM2CNTL : - case REG_TM3CNTL : - { - u32 val = T1ReadWord(MMU.MMU_MEM[proc][0x40], (adr + 2) & 0xFFF); - return MMU.timer[proc][(adr&0xF)>>2] | (val<<16); - } - /* - case 0x04000640 : // TODO (clear): again, ??? - LOG("read proj\r\n"); - return 0; - case 0x04000680 : - LOG("read roat\r\n"); - return 0; - case 0x04000620 : - LOG("point res\r\n"); - return 0; - */ - case REG_GCDATAIN: - { - u32 val; +void MMU_Init() +{ + memset((void*)&MMU, 0, sizeof(MMU_struct)); - if(!MMU.dscard[proc].adress) return 0; + MMU.CART_ROM = MMU.UNUSED_RAM; - val = T1ReadLong(MMU.CART_ROM, MMU.dscard[proc].adress); + // even though apps may change dtcm immediately upon startup, this is the correct hardware starting value: + MMU.DTCMRegion = 0x08000000; + MMU.ITCMRegion = 0x00000000; - MMU.dscard[proc].adress += 4; /* increment adress */ + IPC_FIFOinit(ARMCPU_ARM9); + IPC_FIFOinit(ARMCPU_ARM7); + new(&MMU_new) MMU_struct_new; - MMU.dscard[proc].transfer_count--; /* update transfer counter */ - if(MMU.dscard[proc].transfer_count) /* if transfer is not ended */ - { - return val; /* return data */ - } - else /* transfer is done */ - { - T1WriteLong(MMU.MMU_MEM[proc][(REG_GCROMCTRL >> 20) & 0xff], REG_GCROMCTRL & 0xfff, T1ReadLong(MMU.MMU_MEM[proc][(REG_GCROMCTRL >> 20) & 0xff], REG_GCROMCTRL & 0xfff) & ~(0x00800000 | 0x80000000)); - /* = 0x7f7fffff */ + mc_init(&MMU.fw, MC_TYPE_FLASH); /* init fw device */ + mc_alloc(&MMU.fw, NDS_FW_SIZE_V1); + MMU.fw.fp = nullptr; + MMU.fw.isFirmware = true; +} - /* if needed, throw irq for the end of transfer */ - if(T1ReadWord(MMU.MMU_MEM[proc][(REG_AUXSPICNT >> 20) & 0xff], REG_AUXSPICNT & 0xfff) & 0x4000) - { - if(proc == ARMCPU_ARM7) NDS_makeARM7Int(19); - else NDS_makeARM9Int(19); - } +void MMU_DeInit() +{ + mc_free(&MMU.fw); +} - return val; - } - } +void MMU_Reset() +{ + memset(MMU.ARM9_DTCM, 0, sizeof(MMU.ARM9_DTCM)); + memset(MMU.ARM9_ITCM, 0, sizeof(MMU.ARM9_ITCM)); + memset(MMU.ARM9_LCD, 0, sizeof(MMU.ARM9_LCD)); + memset(MMU.ARM9_OAM, 0, sizeof(MMU.ARM9_OAM)); + memset(MMU.ARM9_REG, 0, sizeof(MMU.ARM9_REG)); + memset(MMU.ARM9_VMEM, 0, sizeof(MMU.ARM9_VMEM)); + memset(MMU.MAIN_MEM, 0, sizeof(MMU.MAIN_MEM)); + + memset(MMU.blank_memory, 0, sizeof(MMU.blank_memory)); + memset(MMU.UNUSED_RAM, 0, sizeof(MMU.UNUSED_RAM)); + memset(MMU.MORE_UNUSED_RAM, 0, sizeof(MMU.UNUSED_RAM)); + + memset(MMU.ARM7_ERAM, 0, sizeof(MMU.ARM7_ERAM)); + memset(MMU.ARM7_REG, 0, sizeof(MMU.ARM7_REG)); + memset(MMU.ARM7_WIRAM, 0, sizeof(MMU.ARM7_WIRAM)); + memset(MMU.SWIRAM, 0, sizeof(MMU.SWIRAM)); + + IPC_FIFOinit(ARMCPU_ARM9); + IPC_FIFOinit(ARMCPU_ARM7); + + MMU.DTCMRegion = 0x027C0000; + MMU.ITCMRegion = 0x00000000; + + memset(MMU.timer, 0, sizeof(uint16_t) * 8); + memset(MMU.timerMODE, 0, sizeof(int32_t) * 8); + memset(MMU.timerON, 0, sizeof(uint32_t) * 8); + memset(MMU.timerRUN, 0, sizeof(uint32_t) * 8); + memset(MMU.timerReload, 0, sizeof(uint16_t) * 8); + + memset(MMU.reg_IME, 0, sizeof(uint32_t) * 2); + memset(MMU.reg_IE, 0, sizeof(uint32_t) * 2); + memset(MMU.reg_IF_bits, 0, sizeof(uint32_t) * 2); + memset(MMU.reg_IF_pending, 0, sizeof(uint32_t) * 2); + + memset(MMU.dscard, 0, sizeof(nds_dscard) * 2); + + MMU.divRunning = 0; + MMU.divResult = 0; + MMU.divMod = 0; + MMU.divCycles = 0; + + MMU.sqrtRunning = 0; + MMU.sqrtResult = 0; + MMU.sqrtCycles = 0; + + MMU.SPI_CNT = 0; + MMU.AUX_SPI_CNT = 0; + + MMU.WRAMCNT = 0; + + // Enable the sound speakers + T1WriteWord(MMU.ARM7_REG, 0x304, 0x0001); + + MMU_VRAM_unmap_all(); + + MMU.powerMan_CntReg = 0x00; + MMU.powerMan_CntRegWritten = false; + MMU.powerMan_Reg[0] = 0x0B; + MMU.powerMan_Reg[1] = 0x00; + MMU.powerMan_Reg[2] = 0x01; + MMU.powerMan_Reg[3] = 0x00; + + partie = 1; + + memset(MMU.dscard[ARMCPU_ARM9].command, 0, 8); + MMU.dscard[ARMCPU_ARM9].address = 0; + MMU.dscard[ARMCPU_ARM9].transfer_count = 0; + MMU.dscard[ARMCPU_ARM9].mode = CardMode_Normal; + + memset(MMU.dscard[ARMCPU_ARM7].command, 0, 8); + MMU.dscard[ARMCPU_ARM7].address = 0; + MMU.dscard[ARMCPU_ARM7].transfer_count = 0; + MMU.dscard[ARMCPU_ARM7].mode = CardMode_Normal; + + // HACK!!! + // until we improve all our session tracking stuff, we need to save the backup memory filename + std::string bleh = MMU_new.backupDevice.getFilename(); + BackupDevice tempBackupDevice; + reconstruct(&MMU_new); + MMU_new.backupDevice.load_rom(bleh); + + MMU_timing.arm7codeFetch.Reset(); + MMU_timing.arm7dataFetch.Reset(); + MMU_timing.arm9codeFetch.Reset(); + MMU_timing.arm9dataFetch.Reset(); + MMU_timing.arm9codeCache.Reset(); + MMU_timing.arm9dataCache.Reset(); +} - default : - break; - } - } +void SetupMMU(bool debugConsole, bool dsi) +{ + if (debugConsole) + _MMU_MAIN_MEM_MASK = 0x7FFFFF; + else + _MMU_MAIN_MEM_MASK = 0x3FFFFF; + if (dsi) + _MMU_MAIN_MEM_MASK = 0xFFFFFF; + _MMU_MAIN_MEM_MASK16 = _MMU_MAIN_MEM_MASK & ~1; + _MMU_MAIN_MEM_MASK32 = _MMU_MAIN_MEM_MASK & ~3; +} - /* Returns data from memory */ - return T1ReadLong(MMU.MMU_MEM[proc][(adr >> 20) & 0xFF], adr & MMU.MMU_MASK[proc][(adr >> 20) & 0xFF]); +void MMU_setRom(uint8_t *rom, uint32_t) +{ + MMU.CART_ROM = rom; +} + +void MMU_unsetRom() +{ + MMU.CART_ROM = MMU.UNUSED_RAM; } -void FASTCALL MMU_write8(u32 proc, u32 adr, u8 val) +static void execsqrt() { -#ifdef INTERNAL_DTCM_WRITE - if((proc == ARMCPU_ARM9) && ((adr & ~0x3FFF) == MMU.DTCMRegion)) + uint32_t ret; + uint8_t mode = MMU_new.sqrt.mode; + MMU_new.sqrt.busy = 1; + + if (mode) { - /* Writes data in DTCM (ARM9 only) */ - ARM9Mem.ARM9_DTCM[adr&0x3FFF] = val; - return ; + uint64_t v = T1ReadQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2B8); + ret = isqrt(v) & 0xFFFFFFFF; } -#endif - - // CFlash writing, Mic - if ((adr>=0x9000000)&&(adr<0x9900000)) { - cflash_write(adr,val); - return; + else + { + uint32_t v = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2B8); + ret = isqrt(v) & 0xFFFFFFFF; } - adr &= 0x0FFFFFFF; + // clear the result while the sqrt unit is busy + // todo - is this right? is it reasonable? + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2B4, 0); - // This is bad, remove it - if(proc == ARMCPU_ARM7) - { - if ((adr>=0x04000400)&&(adr<0x0400051D)) - { - SPU_WriteByte(adr, val); - return; - } - } + MMU.sqrtCycles = nds_timer + 26; + MMU.sqrtResult = ret; + MMU.sqrtRunning = true; + NDS_Reschedule(); +} - if ((adr & 0xFF800000) == 0x04800000) - { - /* is wifi hardware, dont intermix with regular hardware registers */ - /* FIXME handle 8 bit writes */ - return ; +static void execdiv() +{ + int64_t num, den; + int64_t res, mod; + uint8_t mode = MMU_new.div.mode; + MMU_new.div.busy = 1; + MMU_new.div.div0 = 0; + + switch (mode) + { + case 0: // 32/32 + num = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x290); + den = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x298); + MMU.divCycles = nds_timer + 36; + break; + case 1: // 64/32 + case 3: // gbatek says this is same as mode 1 + num = T1ReadQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x290); + den = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x298); + MMU.divCycles = nds_timer + 68; + break; + case 2: // 64/64 + default: + num = T1ReadQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x290); + den = T1ReadQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x298); + MMU.divCycles = nds_timer + 68; } - switch(adr) + if (!den) { - case REG_DISPA_WIN0H: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H1 (MainScreen.gpu, val); - break ; - case REG_DISPA_WIN0H+1: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H0 (MainScreen.gpu, val); - break ; - case REG_DISPA_WIN1H: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H1 (MainScreen.gpu,val); - break ; - case REG_DISPA_WIN1H+1: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H0 (MainScreen.gpu,val); - break ; - - case REG_DISPB_WIN0H: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H1(SubScreen.gpu,val); - break ; - case REG_DISPB_WIN0H+1: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H0(SubScreen.gpu,val); - break ; - case REG_DISPB_WIN1H: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H1(SubScreen.gpu,val); - break ; - case REG_DISPB_WIN1H+1: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H0(SubScreen.gpu,val); - break ; - - case REG_DISPA_WIN0V: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V1(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WIN0V+1: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V0(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WIN1V: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V1(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WIN1V+1: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V0(MainScreen.gpu,val) ; - break ; - - case REG_DISPB_WIN0V: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V1(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WIN0V+1: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V0(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WIN1V: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V1(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WIN1V+1: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V0(SubScreen.gpu,val) ; - break ; - - case REG_DISPA_WININ: - if(proc == ARMCPU_ARM9) GPU_setWININ0(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WININ+1: - if(proc == ARMCPU_ARM9) GPU_setWININ1(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WINOUT: - if(proc == ARMCPU_ARM9) GPU_setWINOUT(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WINOUT+1: - if(proc == ARMCPU_ARM9) GPU_setWINOBJ(MainScreen.gpu,val); - break ; - - case REG_DISPB_WININ: - if(proc == ARMCPU_ARM9) GPU_setWININ0(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WININ+1: - if(proc == ARMCPU_ARM9) GPU_setWININ1(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WINOUT: - if(proc == ARMCPU_ARM9) GPU_setWINOUT(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WINOUT+1: - if(proc == ARMCPU_ARM9) GPU_setWINOBJ(SubScreen.gpu,val) ; - break ; - - - case REG_DISPA_BLDCNT: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT_HIGH(MainScreen.gpu,val); - break; - case REG_DISPA_BLDCNT+1: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT_LOW (MainScreen.gpu,val); - break; - - case REG_DISPB_BLDCNT: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT_HIGH (SubScreen.gpu,val); - break; - case REG_DISPB_BLDCNT+1: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT_LOW (SubScreen.gpu,val); - break; - - case REG_DISPA_BLDALPHA: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA_EVB(MainScreen.gpu,val) ; - break; - case REG_DISPA_BLDALPHA+1: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA_EVA(MainScreen.gpu,val) ; - break; - - case REG_DISPB_BLDALPHA: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA_EVB(SubScreen.gpu,val) ; - break; - case REG_DISPB_BLDALPHA+1: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA_EVA(SubScreen.gpu,val); - break; - - case REG_DISPA_BLDY: - if(proc == ARMCPU_ARM9) GPU_setBLDY_EVY(MainScreen.gpu,val) ; - break ; - case REG_DISPB_BLDY: - if(proc == ARMCPU_ARM9) GPU_setBLDY_EVY(SubScreen.gpu,val) ; - break; - - /* TODO: EEEK ! Controls for VRAMs A, B, C, D are missing ! */ - /* TODO: Not all mappings of VRAMs are handled... (especially BG and OBJ modes) */ - case REG_VRAMCNTA: - case REG_VRAMCNTB: - case REG_VRAMCNTC: - case REG_VRAMCNTD: - if(proc == ARMCPU_ARM9) - { - MMU_VRAMWriteBackToLCD(0) ; - MMU_VRAMWriteBackToLCD(1) ; - MMU_VRAMWriteBackToLCD(2) ; - MMU_VRAMWriteBackToLCD(3) ; - switch(val & 0x1F) - { - case 1 : - MMU.vram_mode[adr-REG_VRAMCNTA] = 0; // BG-VRAM - //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*0); // BG-VRAM - break; - case 1 | (1 << 3) : - MMU.vram_mode[adr-REG_VRAMCNTA] = 1; // BG-VRAM - //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*1); // BG-VRAM - break; - case 1 | (2 << 3) : - MMU.vram_mode[adr-REG_VRAMCNTA] = 2; // BG-VRAM - //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*2); // BG-VRAM - break; - case 1 | (3 << 3) : - MMU.vram_mode[adr-REG_VRAMCNTA] = 3; // BG-VRAM - //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*3); // BG-VRAM - break; - case 0: /* mapped to lcd */ - MMU.vram_mode[adr-REG_VRAMCNTA] = 4 | (adr-REG_VRAMCNTA) ; - break ; - } - /* - * FIXME: simply texture slot handling - * This is a first stab and is not correct. It does - * not handle a VRAM texture slot becoming - * unconfigured. - * Revisit all of VRAM control handling for future - * release? - */ - if ( val & 0x80) { - if ( (val & 0x7) == 3) { - int slot_index = (val >> 3) & 0x3; - - ARM9Mem.textureSlotAddr[slot_index] = - &ARM9Mem.ARM9_LCD[0x20000 * (adr - REG_VRAMCNTA)]; - } - } - MMU_VRAMReloadFromLCD(adr-REG_VRAMCNTA,val) ; - } - break; - case REG_VRAMCNTE : - if(proc == ARMCPU_ARM9) - { - MMU_VRAMWriteBackToLCD((u8)REG_VRAMCNTE) ; - if((val & 7) == 5) - { - ARM9Mem.ExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x80000; - ARM9Mem.ExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x82000; - ARM9Mem.ExtPal[0][2] = ARM9Mem.ARM9_LCD + 0x84000; - ARM9Mem.ExtPal[0][3] = ARM9Mem.ARM9_LCD + 0x86000; - } - else if((val & 7) == 3) - { - ARM9Mem.texPalSlot[0] = ARM9Mem.ARM9_LCD + 0x80000; - ARM9Mem.texPalSlot[1] = ARM9Mem.ARM9_LCD + 0x82000; - ARM9Mem.texPalSlot[2] = ARM9Mem.ARM9_LCD + 0x84000; - ARM9Mem.texPalSlot[3] = ARM9Mem.ARM9_LCD + 0x86000; - } - else if((val & 7) == 4) - { - ARM9Mem.ExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x80000; - ARM9Mem.ExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x82000; - ARM9Mem.ExtPal[0][2] = ARM9Mem.ARM9_LCD + 0x84000; - ARM9Mem.ExtPal[0][3] = ARM9Mem.ARM9_LCD + 0x86000; - } + res = num < 0 ? 1 : -1; + mod = num; - MMU_VRAMReloadFromLCD(adr-REG_VRAMCNTE,val) ; - } - break; + // the DIV0 flag in DIVCNT is set only if the full 64bit DIV_DENOM value is zero, even in 32bit mode + if (!T1ReadQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x298)) + MMU_new.div.div0 = 1; + } + else + { + res = num / den; + mod = num % den; + } - case REG_VRAMCNTF : - if(proc == ARMCPU_ARM9) - { - switch(val & 0x1F) - { - case 4 : - ARM9Mem.ExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x90000; - ARM9Mem.ExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x92000; - break; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A0, 0); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A4, 0); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A8, 0); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2AC, 0); - case 4 | (1 << 3) : - ARM9Mem.ExtPal[0][2] = ARM9Mem.ARM9_LCD + 0x90000; - ARM9Mem.ExtPal[0][3] = ARM9Mem.ARM9_LCD + 0x92000; - break; + MMU.divResult = res; + MMU.divMod = mod; + MMU.divRunning = true; + NDS_Reschedule(); +} - case 3 : - ARM9Mem.texPalSlot[0] = ARM9Mem.ARM9_LCD + 0x90000; - break; +DSI_TSC::DSI_TSC() +{ + for (unsigned i = 0; i < ARRAY_SIZE(this->registers); ++i) + this->registers[i] = 0x00; + this->reset_command(); +} - case 3 | (1 << 3) : - ARM9Mem.texPalSlot[1] = ARM9Mem.ARM9_LCD + 0x90000; - break; - - case 3 | (2 << 3) : - ARM9Mem.texPalSlot[2] = ARM9Mem.ARM9_LCD + 0x90000; - break; +void DSI_TSC::reset_command() +{ + this->state = 0; + this->readcount = 0; + this->read_flag = 1; +} - case 3 | (3 << 3) : - ARM9Mem.texPalSlot[3] = ARM9Mem.ARM9_LCD + 0x90000; - break; +uint16_t DSI_TSC::write16(uint16_t val) +{ + uint16_t ret; + switch (state) + { + case 0: + this->reg_selection = (val >> 1) & 0x7F; + this->read_flag = val & 1; + this->state = 1; + return this->read16(); + case 1: + if (!this->read_flag) + this->registers[this->reg_selection] = val & 0xFF; + ret = this->read16(); + ++this->reg_selection; + this->reg_selection &= 0x7F; + return ret; + } + return 0; +} - case 5 : - case 5 | (1 << 3) : - case 5 | (2 << 3) : - case 5 | (3 << 3) : - ARM9Mem.ObjExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x90000; - ARM9Mem.ObjExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x92000; - break; - } - } - break; - case REG_VRAMCNTG : - if(proc == ARMCPU_ARM9) +uint16_t DSI_TSC::read16() +{ + uint8_t page = registers[0]; + switch (page) + { + case 3: // page 3 + switch (this->reg_selection) { - switch(val & 0x1F) - { - case 4 : - ARM9Mem.ExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x94000; - ARM9Mem.ExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x96000; - break; - - case 4 | (1 << 3) : - ARM9Mem.ExtPal[0][2] = ARM9Mem.ARM9_LCD + 0x94000; - ARM9Mem.ExtPal[0][3] = ARM9Mem.ARM9_LCD + 0x96000; - break; + case 9: + return 0x40; + case 14: + return 0x02; + } + } // switch(page) - case 3 : - ARM9Mem.texPalSlot[0] = ARM9Mem.ARM9_LCD + 0x94000; - break; + // unknown page or register + return 0xFF; +} - case 3 | (1 << 3) : - ARM9Mem.texPalSlot[1] = ARM9Mem.ARM9_LCD + 0x94000; - break; +// TODO: +// NAND flash support (used in Made in Ore/WarioWare D.I.Y.) +void FASTCALL MMU_writeToGCControl(int PROCNUM, uint32_t val) +{ + int TEST_PROCNUM = PROCNUM; + nds_dscard &card = MMU.dscard[TEST_PROCNUM]; - case 3 | (2 << 3) : - ARM9Mem.texPalSlot[2] = ARM9Mem.ARM9_LCD + 0x94000; - break; + memcpy(&card.command[0], &MMU.MMU_MEM[TEST_PROCNUM][0x40][0x1A8], 8); - case 3 | (3 << 3) : - ARM9Mem.texPalSlot[3] = ARM9Mem.ARM9_LCD + 0x94000; - break; + card.blocklen = 0; + slot1_device.write32(PROCNUM, 0xFFFFFFFF, val); // Special case for some flashcarts + if (card.blocklen == 0x01020304) + return; - case 5 : - case 5 | (1 << 3) : - case 5 | (2 << 3) : - case 5 | (3 << 3) : - ARM9Mem.ObjExtPal[0][0] = ARM9Mem.ARM9_LCD + 0x94000; - ARM9Mem.ObjExtPal[0][1] = ARM9Mem.ARM9_LCD + 0x96000; - break; - } - } - break; + if (!(val & 0x80000000)) + { + card.address = 0; + card.transfer_count = 0; - case REG_VRAMCNTH : - if(proc == ARMCPU_ARM9) - { - MMU_VRAMWriteBackToLCD((u8)REG_VRAMCNTH) ; + val &= 0x7F7FFFFF; + T1WriteLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4, val); + return; + } - if((val & 7) == 2) - { - ARM9Mem.ExtPal[1][0] = ARM9Mem.ARM9_LCD + 0x98000; - ARM9Mem.ExtPal[1][1] = ARM9Mem.ARM9_LCD + 0x9A000; - ARM9Mem.ExtPal[1][2] = ARM9Mem.ARM9_LCD + 0x9C000; - ARM9Mem.ExtPal[1][3] = ARM9Mem.ARM9_LCD + 0x9E000; - } + uint32_t shift = (val >> 24) & 7; + if (shift == 7) + card.transfer_count = 1; + else if (!shift) + card.transfer_count = 0; + else + card.transfer_count = (0x100 << shift) / 4; - MMU_VRAMReloadFromLCD(adr-REG_VRAMCNTH,val) ; - } + switch (card.mode) + { + case CardMode_Normal: break; - case REG_VRAMCNTI : - if(proc == ARMCPU_ARM9) - { - MMU_VRAMWriteBackToLCD((u8)REG_VRAMCNTI) ; + case CardMode_KEY1: + // TODO + //INFO("Cartridge: KEY1 mode unsupported.\n"); - if((val & 7) == 3) - { - ARM9Mem.ObjExtPal[1][0] = ARM9Mem.ARM9_LCD + 0xA0000; - ARM9Mem.ObjExtPal[1][1] = ARM9Mem.ARM9_LCD + 0xA2000; - } + card.address = 0; + card.transfer_count = 0; - MMU_VRAMReloadFromLCD(adr-REG_VRAMCNTI,val) ; - } + val &= 0x7F7FFFFF; + T1WriteLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4, val); + return; + case CardMode_KEY2: + //INFO("Cartridge: KEY2 mode unsupported.\n"); break; + } -#ifdef LOG_CARD - case 0x040001A0 : /* TODO (clear): ??? */ - case 0x040001A1 : - case 0x040001A2 : - case 0x040001A8 : - case 0x040001A9 : - case 0x040001AA : - case 0x040001AB : - case 0x040001AC : - case 0x040001AD : - case 0x040001AE : - case 0x040001AF : - LOG("%08X : %02X\r\n", adr, val); -#endif - - default : + switch (card.command[0]) + { + case 0x9F: // Dummy + card.address = 0; + card.transfer_count = 0x800; break; - } - MMU.MMU_MEM[proc][(adr>>20)&0xFF][adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF]]=val; -} + case 0x3C: // Switch to KEY1 mode + card.mode = CardMode_KEY1; + break; -u16 partie = 1; + default: + // fall through to the special slot1 handler + slot1_device.write32(TEST_PROCNUM, REG_GCROMCTRL, val); + } -void FASTCALL MMU_write16(u32 proc, u32 adr, u16 val) -{ -#ifdef INTERNAL_DTCM_WRITE - if((proc == ARMCPU_ARM9) && ((adr & ~0x3FFF) == MMU.DTCMRegion)) + if (!card.transfer_count) { - /* Writes in DTCM (ARM9 only) */ - T1WriteWord(ARM9Mem.ARM9_DTCM, adr & 0x3FFF, val); + val &= 0x7F7FFFFF; + T1WriteLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4, val); return; } -#endif - // CFlash writing, Mic - if ((adr>=0x08800000)&&(adr<0x09900000)) + val |= 0x00800000; + T1WriteLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4, val); + + // Launch DMA if start flag was set to "DS Cart" + //fprintf(stderr, "triggering card dma\n"); + triggerDma(EDMAMode_Card); +} + +uint32_t MMU_readFromGC(int PROCNUM) +{ + int TEST_PROCNUM = PROCNUM; + + nds_dscard& card = MMU.dscard[TEST_PROCNUM]; + uint32_t val = 0; + + if (!card.transfer_count) + return 0; + + switch (card.command[0]) { - cflash_write(adr,val); - return; + case 0x9F: // Dummy + val = 0xFFFFFFFF; + break; + + case 0x3C: // Switch to KEY1 mode + val = 0xFFFFFFFF; + break; + + default: + val = slot1_device.read32(TEST_PROCNUM, REG_GCDATAIN); } -#ifdef EXPERIMENTAL_WIFI + card.address += 4; // increment address + + --card.transfer_count; // update transfer counter + if (card.transfer_count) // if transfer is not ended + return val; // return data + + // transfer is done + T1WriteLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4, T1ReadLong(MMU.MMU_MEM[TEST_PROCNUM][0x40], 0x1A4) & 0x7F7FFFFF); + + // if needed, throw irq for the end of transfer + if (MMU.AUX_SPI_CNT & 0x4000) + NDS_makeIrq(TEST_PROCNUM, IRQ_BIT_GC_TRANSFER_COMPLETE); - /* wifi mac access */ - if ((proc==ARMCPU_ARM7) && (adr>=0x04800000)&&(adr<0x05000000)) + return val; +} + +static void REG_IF_WriteByte(int PROCNUM, uint32_t addr, uint8_t val) +{ + // the following bits are generated from logic and should not be affected here + // Bit 21 NDS9 only: Geometry Command FIFO + // arm9: IF &= ~0x00200000; + // arm7: IF &= ~0x00000000; + // UPDATE IN setIF() ALSO!!!!!!!!!!!!!!!! + // UPDATE IN mmu_loadstate ALSO!!!!!!!!!!!! + if (addr == 2) { - WIFI_write16(&wifiMac,adr,val) ; - return ; + if (PROCNUM == ARMCPU_ARM9) + val &= ~0x20; + else + val &= ~0x00; } -#else - if ((proc==ARMCPU_ARM7) && (adr>=0x04800000)&&(adr<0x05000000)) - return ; -#endif - adr &= 0x0FFFFFFF; + // ZERO 01-dec-2010 : I am no longer sure this approach is correct.. it proved to be wrong for IPC fifo....... + // it seems as if IF bits should always be cached (only the user can clear them) - // This is bad, remove it - if(proc == ARMCPU_ARM7) - { - if ((adr>=0x04000400)&&(adr<0x0400051D)) - { - SPU_WriteWord(adr, val); - return; - } - } - - if((adr >> 24) == 4) - { - /* Adress is an IO register */ - switch(adr) - { -#if VIO2SF_GPU_ENABLE - case 0x0400035C: - { - ((u16 *)(MMU.MMU_MEM[proc][0x40]))[0x35C>>1] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_FogOffset (val); - } - return; - } - case 0x04000340: - { - ((u16 *)(MMU.MMU_MEM[proc][0x40]))[0x340>>1] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_AlphaFunc(val); - } - return; - } - case 0x04000060: - { - ((u16 *)(MMU.MMU_MEM[proc][0x40]))[0x060>>1] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Control(val); - } - return; - } - case 0x04000354: - { - ((u16 *)(MMU.MMU_MEM[proc][0x40]))[0x354>>1] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_ClearDepth(val); - } - return; - } -#endif + MMU.reg_IF_bits[PROCNUM] &= ~(val << (addr << 3)); + NDS_Reschedule(); +} - case REG_DISPA_BLDCNT: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT(MainScreen.gpu,val) ; - break ; - case REG_DISPB_BLDCNT: - if(proc == ARMCPU_ARM9) GPU_setBLDCNT(SubScreen.gpu,val) ; - break ; - case REG_DISPA_BLDALPHA: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA(MainScreen.gpu,val) ; - break ; - case REG_DISPB_BLDALPHA: - if(proc == ARMCPU_ARM9) GPU_setBLDALPHA(SubScreen.gpu,val) ; - break ; - case REG_DISPA_BLDY: - if(proc == ARMCPU_ARM9) GPU_setBLDY_EVY(MainScreen.gpu,val) ; - break ; - case REG_DISPB_BLDY: - if(proc == ARMCPU_ARM9) GPU_setBLDY_EVY(SubScreen.gpu,val) ; - break; - case REG_DISPA_MASTERBRIGHT: - GPU_setMasterBrightness (MainScreen.gpu, val); - break; - /* - case REG_DISPA_MOSAIC: - if(proc == ARMCPU_ARM9) GPU_setMOSAIC(MainScreen.gpu,val) ; - break ; - case REG_DISPB_MOSAIC: - if(proc == ARMCPU_ARM9) GPU_setMOSAIC(SubScreen.gpu,val) ; - break ; - */ - - case REG_DISPA_WIN0H: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H (MainScreen.gpu,val) ; - break ; - case REG_DISPA_WIN1H: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H(MainScreen.gpu,val) ; - break ; - case REG_DISPB_WIN0H: - if(proc == ARMCPU_ARM9) GPU_setWIN0_H(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WIN1H: - if(proc == ARMCPU_ARM9) GPU_setWIN1_H(SubScreen.gpu,val) ; - break ; - case REG_DISPA_WIN0V: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V(MainScreen.gpu,val) ; - break ; - case REG_DISPA_WIN1V: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V(MainScreen.gpu,val) ; - break ; - case REG_DISPB_WIN0V: - if(proc == ARMCPU_ARM9) GPU_setWIN0_V(SubScreen.gpu,val) ; - break ; - case REG_DISPB_WIN1V: - if(proc == ARMCPU_ARM9) GPU_setWIN1_V(SubScreen.gpu,val) ; - break ; - case REG_DISPA_WININ: - if(proc == ARMCPU_ARM9) GPU_setWININ(MainScreen.gpu, val) ; - break ; - case REG_DISPA_WINOUT: - if(proc == ARMCPU_ARM9) GPU_setWINOUT16(MainScreen.gpu, val) ; - break ; - case REG_DISPB_WININ: - if(proc == ARMCPU_ARM9) GPU_setWININ(SubScreen.gpu, val) ; - break ; - case REG_DISPB_WINOUT: - if(proc == ARMCPU_ARM9) GPU_setWINOUT16(SubScreen.gpu, val) ; - break ; +static void REG_IF_WriteWord(int PROCNUM, uint32_t addr, uint16_t val) +{ + REG_IF_WriteByte(PROCNUM, addr, val & 0xFF); + REG_IF_WriteByte(PROCNUM, addr + 1, (val >> 8) & 0xFF); +} - case REG_DISPB_MASTERBRIGHT: - GPU_setMasterBrightness (SubScreen.gpu, val); - break; +static void REG_IF_WriteLong(int PROCNUM, uint32_t val) +{ + REG_IF_WriteByte(PROCNUM, 0, val & 0xFF); + REG_IF_WriteByte(PROCNUM, 1, (val >> 8) & 0xFF); + REG_IF_WriteByte(PROCNUM, 2, (val >> 16) & 0xFF); + REG_IF_WriteByte(PROCNUM, 3, (val >> 24) & 0xFF); +} - case REG_POWCNT1 : - if(proc == ARMCPU_ARM9) - { - if(val & (1<<15)) - { - LOG("Main core on top\n"); - MainScreen.offset = 0; - SubScreen.offset = 192; - //nds.swapScreen(); - } - else - { - LOG("Main core on bottom (%04X)\n", val); - MainScreen.offset = 192; - SubScreen.offset = 0; - } - } - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x304, val); - return; +template uint32_t MMU_struct::gen_IF() +{ + return this->reg_IF_bits[PROCNUM]; +} - case REG_AUXSPICNT: - T1WriteWord(MMU.MMU_MEM[proc][(REG_AUXSPICNT >> 20) & 0xff], REG_AUXSPICNT & 0xfff, val); - AUX_SPI_CNT = val; +static inline void MMU_IPCSync(uint8_t proc, uint32_t val) +{ + uint32_t sync_l = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x180) & 0xFFFF; + uint32_t sync_r = T1ReadLong(MMU.MMU_MEM[proc ^ 1][0x40], 0x180) & 0xFFFF; - if (val == 0) - mc_reset_com(&MMU.bupmem); /* reset backup memory device communication */ - return; + sync_l = (sync_l & 0x000F) | (val & 0x0F00); + sync_r = (sync_r & 0x6F00) | ((val >> 8) & 0x000F); - case REG_AUXSPIDATA: - if(val!=0) - { - AUX_SPI_CMD = val & 0xFF; - } + sync_l |= val & 0x6000; - T1WriteWord(MMU.MMU_MEM[proc][(REG_AUXSPIDATA >> 20) & 0xff], REG_AUXSPIDATA & 0xfff, bm_transfer(&MMU.bupmem, val)); - return; + T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x180, sync_l); + T1WriteLong(MMU.MMU_MEM[proc ^ 1][0x40], 0x180, sync_r); - case REG_SPICNT : - if(proc == ARMCPU_ARM7) - { - int reset_firmware = 1; + if ((sync_l & IPCSYNC_IRQ_SEND) && (sync_r & IPCSYNC_IRQ_RECV)) + NDS_makeIrq(proc ^ 1, IRQ_BIT_IPCSYNC); - if ( ((SPI_CNT >> 8) & 0x3) == 1) { - if ( ((val >> 8) & 0x3) == 1) { - if ( BIT11(SPI_CNT)) { - /* select held */ - reset_firmware = 0; - } - } - } - - //MMU.fw.com == 0; /* reset fw device communication */ - if ( reset_firmware) { - /* reset fw device communication */ - mc_reset_com(&MMU.fw); - } - SPI_CNT = val; - } + NDS_Reschedule(); +} - T1WriteWord(MMU.MMU_MEM[proc][(REG_SPICNT >> 20) & 0xff], REG_SPICNT & 0xfff, val); - return; +static inline uint16_t read_timer(int proc, int timerIndex) +{ + // chained timers are always up to date + if (MMU.timerMODE[proc][timerIndex] == 0xFFFF) + return MMU.timer[proc][timerIndex]; - case REG_SPIDATA : - if(proc==ARMCPU_ARM7) - { - u16 spicnt; + // sometimes a timer will be read when it is not enabled. + // we should have the value cached + if (!MMU.timerON[proc][timerIndex]) + return MMU.timer[proc][timerIndex]; - if(val!=0) - { - SPI_CMD = val; - } + // for unchained timers, we do not keep the timer up to date. its value will need to be calculated here + int32_t diff = (nds.timerCycle[proc][timerIndex] - nds_timer) & 0xFFFFFFFF; + assert(diff >= 0); + if (diff < 0) + fprintf(stderr, "NEW EMULOOP BAD NEWS PLEASE REPORT: TIME READ DIFF < 0 (%d) (%d) (%d)\n", diff, timerIndex, MMU.timerMODE[proc][timerIndex]); - spicnt = T1ReadWord(MMU.MMU_MEM[proc][(REG_SPICNT >> 20) & 0xff], REG_SPICNT & 0xfff); + int32_t units = diff / (1 << MMU.timerMODE[proc][timerIndex]); + int32_t ret; - switch((spicnt >> 8) & 0x3) - { - case 0 : - break; + if (units == 65536) + ret = 0; // I'm not sure why this is happening... + // whichever instruction setup this counter should advance nds_timer (I think?) and the division should truncate down to 65535 immediately + else if (units > 65536) + { + fprintf(stderr, "NEW EMULOOP BAD NEWS PLEASE REPORT: UNITS %d:%d = %d\n", proc, timerIndex, units); + ret = 0; + } + else + ret = 65535 - units; - case 1 : /* firmware memory device */ - if((spicnt & 0x3) != 0) /* check SPI baudrate (must be 4mhz) */ - { - T1WriteWord(MMU.MMU_MEM[proc][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, 0); - break; - } - T1WriteWord(MMU.MMU_MEM[proc][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, fw_transfer(&MMU.fw, val)); + return ret & 0xFFFF; +} - return; +static inline void write_timer(int proc, int timerIndex, uint16_t val) +{ + if (val & 0x80) + MMU.timer[proc][timerIndex] = MMU.timerReload[proc][timerIndex]; + else if (MMU.timerON[proc][timerIndex]) + // read the timer value one last time + MMU.timer[proc][timerIndex] = read_timer(proc, timerIndex); - case 2 : - switch(SPI_CMD & 0x70) - { - case 0x00 : - val = 0; - break; - case 0x10 : - //execute = false; - if(SPI_CNT&(1<<11)) - { - if(partie) - { - val = ((nds.touchY<<3)&0x7FF); - partie = 0; - //execute = false; - break; - } - val = (nds.touchY>>5); - partie = 1; - break; - } - val = ((nds.touchY<<3)&0x7FF); - partie = 1; - break; - case 0x20 : - val = 0; - break; - case 0x30 : - val = 0; - break; - case 0x40 : - val = 0; - break; - case 0x50 : - if(spicnt & 0x800) - { - if(partie) - { - val = ((nds.touchX<<3)&0x7FF); - partie = 0; - break; - } - val = (nds.touchX>>5); - partie = 1; - break; - } - val = ((nds.touchX<<3)&0x7FF); - partie = 1; - break; - case 0x60 : - val = 0; - break; - case 0x70 : - val = 0; - break; - } - break; + MMU.timerON[proc][timerIndex] = val & 0x80; - case 3 : - /* NOTICE: Device 3 of SPI is reserved (unused and unusable) */ - break; - } - } + switch (val & 7) + { + case 0: + MMU.timerMODE[proc][timerIndex] = 1; + break; + case 1: + MMU.timerMODE[proc][timerIndex] = 7; + break; + case 2: + MMU.timerMODE[proc][timerIndex] = 9; + break; + case 3: + MMU.timerMODE[proc][timerIndex] = 11; + break; + default: + MMU.timerMODE[proc][timerIndex] = 0xFFFF; + } - T1WriteWord(MMU.MMU_MEM[proc][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, val); - return; + int remain = 65536 - MMU.timerReload[proc][timerIndex]; + nds.timerCycle[proc][timerIndex] = nds_timer + (remain << MMU.timerMODE[proc][timerIndex]); - /* NOTICE: Perhaps we have to use gbatek-like reg names instead of libnds-like ones ...*/ + T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x102 + timerIndex * 4, val); + NDS_RescheduleTimers(); +} - case REG_DISPA_BG0CNT : - //GPULOG("MAIN BG0 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(MainScreen.gpu, 0, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x8, val); - return; - case REG_DISPA_BG1CNT : - //GPULOG("MAIN BG1 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(MainScreen.gpu, 1, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xA, val); - return; - case REG_DISPA_BG2CNT : - //GPULOG("MAIN BG2 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(MainScreen.gpu, 2, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xC, val); - return; - case REG_DISPA_BG3CNT : - //GPULOG("MAIN BG3 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(MainScreen.gpu, 3, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xE, val); - return; - case REG_DISPB_BG0CNT : - //GPULOG("SUB BG0 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(SubScreen.gpu, 0, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x1008, val); - return; - case REG_DISPB_BG1CNT : - //GPULOG("SUB BG1 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(SubScreen.gpu, 1, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x100A, val); - return; - case REG_DISPB_BG2CNT : - //GPULOG("SUB BG2 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(SubScreen.gpu, 2, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x100C, val); - return; - case REG_DISPB_BG3CNT : - //GPULOG("SUB BG3 SETPROP 16B %08X\r\n", val); - if(proc == ARMCPU_ARM9) GPU_setBGProp(SubScreen.gpu, 3, val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x100E, val); - return; - case REG_IME : { - u32 old_val = MMU.reg_IME[proc]; - u32 new_val = val & 1; - MMU.reg_IME[proc] = new_val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x208, val); - if ( new_val && old_val != new_val) { - /* raise an interrupt request to the CPU if needed */ - if ( MMU.reg_IE[proc] & MMU.reg_IF[proc]) { - NDS_ARM7.wIRQ = true; - NDS_ARM7.waitIRQ = false; - } - } - return; - } - case REG_VRAMCNTA: - MMU_write8(proc,adr,val & 0xFF) ; - MMU_write8(proc,adr+1,val >> 8) ; - return ; - case REG_VRAMCNTC: - MMU_write8(proc,adr,val & 0xFF) ; - MMU_write8(proc,adr+1,val >> 8) ; - return ; - case REG_VRAMCNTE: - MMU_write8(proc,adr,val & 0xFF) ; - MMU_write8(proc,adr+1,val >> 8) ; - return ; - case REG_VRAMCNTG: - MMU_write8(proc,adr,val & 0xFF) ; - MMU_write8(proc,adr+1,val >> 8) ; - return ; - case REG_VRAMCNTI: - MMU_write8(proc,adr,val & 0xFF) ; - return ; +uint32_t TGXSTAT::read32() +{ + uint32_t ret = 0; - case REG_IE : - MMU.reg_IE[proc] = (MMU.reg_IE[proc]&0xFFFF0000) | val; - if ( MMU.reg_IME[proc]) { - /* raise an interrupt request to the CPU if needed */ - if ( MMU.reg_IE[proc] & MMU.reg_IF[proc]) { - NDS_ARM7.wIRQ = true; - NDS_ARM7.waitIRQ = false; - } - } - return; - case REG_IE + 2 : - execute = false; - MMU.reg_IE[proc] = (MMU.reg_IE[proc]&0xFFFF) | (((u32)val)<<16); - return; + ret |= this->tb | (this->tr << 1); - case REG_IF : - execute = false; - MMU.reg_IF[proc] &= (~((u32)val)); - return; - case REG_IF + 2 : - execute = false; - MMU.reg_IF[proc] &= (~(((u32)val)<<16)); - return; + ret |= this->sb << 14; // stack busy + ret |= this->se << 15; + ret |= 255 << 16; - case REG_IPCSYNC : - { - u32 remote = (proc+1)&1; - u16 IPCSYNC_remote = T1ReadWord(MMU.MMU_MEM[remote][0x40], 0x180); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x180, (val&0xFFF0)|((IPCSYNC_remote>>8)&0xF)); - T1WriteWord(MMU.MMU_MEM[remote][0x40], 0x180, (IPCSYNC_remote&0xFFF0)|((val>>8)&0xF)); - MMU.reg_IF[remote] |= ((IPCSYNC_remote & (1<<14))<<2) & ((val & (1<<13))<<3);// & (MMU.reg_IME[remote] << 16);// & (MMU.reg_IE[remote] & (1<<16));// - //execute = false; - } - return; - case REG_IPCFIFOCNT : - { - u32 cnt_l = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184) ; - u32 cnt_r = T1ReadWord(MMU.MMU_MEM[(proc+1) & 1][0x40], 0x184) ; - if ((val & 0x8000) && !(cnt_l & 0x8000)) - { - /* this is the first init, the other side didnt init yet */ - /* so do a complete init */ - FIFOInit(MMU.fifos + (IPCFIFO+proc)); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184,0x8101) ; - /* and then handle it as usual */ - } + ret |= (this->gxfifo_irq & 0x3) << 30; // user's irq flags - if(val & 0x4008) - { - FIFOInit(MMU.fifos + (IPCFIFO+((proc+1)&1))); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, (cnt_l & 0x0301) | (val & 0x8404) | 1); - T1WriteWord(MMU.MMU_MEM[proc^1][0x40], 0x184, (cnt_r & 0xC507) | 0x100); - MMU.reg_IF[proc] |= ((val & 4)<<15);// & (MMU.reg_IME[proc]<<17);// & (MMU.reg_IE[proc]&0x20000);// - return; - } - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184) | (val & 0xBFF4)); - } - return; - case REG_TM0CNTL : - case REG_TM1CNTL : - case REG_TM2CNTL : - case REG_TM3CNTL : - MMU.timerReload[proc][(adr>>2)&3] = val; - return; - case REG_TM0CNTH : - case REG_TM1CNTH : - case REG_TM2CNTH : - case REG_TM3CNTH : - if(val&0x80) - { - MMU.timer[proc][((adr-2)>>2)&0x3] = MMU.timerReload[proc][((adr-2)>>2)&0x3]; - } - MMU.timerON[proc][((adr-2)>>2)&0x3] = val & 0x80; - switch(val&7) - { - case 0 : - MMU.timerMODE[proc][((adr-2)>>2)&0x3] = 0+1;//proc; - break; - case 1 : - MMU.timerMODE[proc][((adr-2)>>2)&0x3] = 6+1;//proc; - break; - case 2 : - MMU.timerMODE[proc][((adr-2)>>2)&0x3] = 8+1;//proc; - break; - case 3 : - MMU.timerMODE[proc][((adr-2)>>2)&0x3] = 10+1;//proc; - break; - default : - MMU.timerMODE[proc][((adr-2)>>2)&0x3] = 0xFFFF; - break; - } - if(!(val & 0x80)) - MMU.timerRUN[proc][((adr-2)>>2)&0x3] = false; - T1WriteWord(MMU.MMU_MEM[proc][0x40], adr & 0xFFF, val); - return; - case REG_DISPA_DISPCNT+2 : - { - //execute = false; - u32 v = (T1ReadLong(MMU.MMU_MEM[proc][0x40], 0) & 0xFFFF) | ((u32) val << 16); - GPU_setVideoProp(MainScreen.gpu, v); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0, v); - } - return; - case REG_DISPA_DISPCNT : - if(proc == ARMCPU_ARM9) - { - u32 v = (T1ReadLong(MMU.MMU_MEM[proc][0x40], 0) & 0xFFFF0000) | val; - GPU_setVideoProp(MainScreen.gpu, v); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0, v); - } - return; - case REG_DISPA_DISPCAPCNT : - if(proc == ARMCPU_ARM9) - { - GPU_set_DISPCAPCNT(MainScreen.gpu,val); - } - return; - case REG_DISPB_DISPCNT+2 : - if(proc == ARMCPU_ARM9) - { - //execute = false; - u32 v = (T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x1000) & 0xFFFF) | ((u32) val << 16); - GPU_setVideoProp(SubScreen.gpu, v); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x1000, v); - } - return; - case REG_DISPB_DISPCNT : - { - u32 v = (T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x1000) & 0xFFFF0000) | val; - GPU_setVideoProp(SubScreen.gpu, v); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x1000, v); - } - return; - //case 0x020D8460 : - /*case 0x0235A904 : - LOG("ECRIRE %d %04X\r\n", proc, val); - execute = false;*/ - case REG_DMA0CNTH : - { - u32 v; + //fprintf(stderr, "vc=%03d Returning gxstat read: %08X\n",nds.VCount,ret); - //if(val&0x8000) execute = false; - //LOG("16 bit dma0 %04X\r\n", val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xBA, val); - DMASrc[proc][0] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB0); - DMADst[proc][0] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB4); - v = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB8); - MMU.DMAStartTime[proc][0] = (proc ? (v>>28) & 0x3 : (v>>27) & 0x7); - MMU.DMACrt[proc][0] = v; - if(MMU.DMAStartTime[proc][0] == 0) - MMU_doDMA(proc, 0); - #ifdef LOG_DMA2 - //else - { - LOG("proc %d, dma %d src %08X dst %08X %s\r\n", proc, 0, DMASrc[proc][0], DMADst[proc][0], (val&(1<<25))?"ON":"OFF"); - } - #endif - } - return; - case REG_DMA1CNTH : - { - u32 v; - //if(val&0x8000) execute = false; - //LOG("16 bit dma1 %04X\r\n", val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xC6, val); - DMASrc[proc][1] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xBC); - DMASrc[proc][1] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xC0); - v = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xC4); - MMU.DMAStartTime[proc][1] = (proc ? (v>>28) & 0x3 : (v>>27) & 0x7); - MMU.DMACrt[proc][1] = v; - if(MMU.DMAStartTime[proc][1] == 0) - MMU_doDMA(proc, 1); - #ifdef LOG_DMA2 - //else - { - LOG("proc %d, dma %d src %08X dst %08X %s\r\n", proc, 1, DMASrc[proc][1], DMADst[proc][1], (val&(1<<25))?"ON":"OFF"); - } - #endif - } - return; - case REG_DMA2CNTH : - { - u32 v; - //if(val&0x8000) execute = false; - //LOG("16 bit dma2 %04X\r\n", val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xD2, val); - DMASrc[proc][2] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xC8); - DMASrc[proc][2] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xCC); - v = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xD0); - MMU.DMAStartTime[proc][2] = (proc ? (v>>28) & 0x3 : (v>>27) & 0x7); - MMU.DMACrt[proc][2] = v; - if(MMU.DMAStartTime[proc][2] == 0) - MMU_doDMA(proc, 2); - #ifdef LOG_DMA2 - //else - { - LOG("proc %d, dma %d src %08X dst %08X %s\r\n", proc, 2, DMASrc[proc][2], DMADst[proc][2], (val&(1<<25))?"ON":"OFF"); - } - #endif - } - return; - case REG_DMA3CNTH : - { - u32 v; - //if(val&0x8000) execute = false; - //LOG("16 bit dma3 %04X\r\n", val); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0xDE, val); - DMASrc[proc][3] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xD4); - DMASrc[proc][3] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xD8); - v = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xDC); - MMU.DMAStartTime[proc][3] = (proc ? (v>>28) & 0x3 : (v>>27) & 0x7); - MMU.DMACrt[proc][3] = v; - - if(MMU.DMAStartTime[proc][3] == 0) - MMU_doDMA(proc, 3); - #ifdef LOG_DMA2 - //else - { - LOG("proc %d, dma %d src %08X dst %08X %s\r\n", proc, 3, DMASrc[proc][3], DMADst[proc][3], (val&(1<<25))?"ON":"OFF"); - } - #endif - } - return; - //case REG_AUXSPICNT : execute = false; - default : - T1WriteWord(MMU.MMU_MEM[proc][0x40], adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF], val); - return; - } - } - T1WriteWord(MMU.MMU_MEM[proc][(adr>>20)&0xFF], adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF], val); + return ret; } - -void FASTCALL MMU_write32(u32 proc, u32 adr, u32 val) +void TGXSTAT::write32(uint32_t val) { -#ifdef INTERNAL_DTCM_WRITE - if((proc==ARMCPU_ARM9)&((adr&(~0x3FFF))==MMU.DTCMRegion)) + this->gxfifo_irq = (val >> 30) & 3; + if (BIT15(val)) { - T1WriteLong(ARM9Mem.ARM9_DTCM, adr & 0x3FFF, val); - return ; + // Writing "1" to Bit15 does reset the Error Flag (Bit15), + // and additionally resets the Projection Stack Pointer (Bit13) + //mtxStack[0].position = 0; + this->se = 0; // clear stack error flag } -#endif + //fprintf(stderr, "gxstat write: %08X while gxfifo.size=%d\n",val,gxFIFO.size); +} - // CFlash writing, Mic - if ((adr>=0x9000000)&&(adr<0x9900000)) { - cflash_write(adr,val); - return; - } +// this could be inlined... +void MMU_struct_new::write_dma(int proc, int size, uint32_t _adr, uint32_t val) +{ + //fprintf(stderr, "%08lld -- write_dma: %d %d %08X %08X\n",nds_timer,proc,size,_adr,val); + uint32_t adr = _adr - _REG_DMA_CONTROL_MIN; + uint32_t chan = adr / 12; + uint32_t regnum = (adr - chan * 12) >> 2; - adr &= 0x0FFFFFFF; + MMU_new.dma[proc][chan].regs[regnum]->write(size, adr, val); +} - // This is bad, remove it - if(proc == ARMCPU_ARM7) - { - if ((adr>=0x04000400)&&(adr<0x0400051D)) - { - SPU_WriteLong(adr, val); - return; - } - } - - if ((adr & 0xFF800000) == 0x04800000) { - /* access to non regular hw registers */ - /* return to not overwrite valid data */ - return ; - } ; - - - if((adr>>24)==4) - { - if (adr >= 0x04000400 && adr < 0x04000440) - { - // Geometry commands (aka Dislay Lists) - Parameters:X - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x400>>2] = val; -#if VIO2SF_GPU_ENABLE - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_CallList(val); - } -#endif - } +// this could be inlined... +uint32_t MMU_struct_new::read_dma(int proc, int size, uint32_t _adr) +{ + uint32_t adr = _adr - _REG_DMA_CONTROL_MIN; + uint32_t chan = adr / 12; + uint32_t regnum = (adr - chan * 12) >> 2; + + uint32_t temp = MMU_new.dma[proc][chan].regs[regnum]->read(size, adr); + //fprintf(stderr, "%08lld -- read_dma: %d %d %08X = %08X\n",nds_timer,proc,size,_adr,temp); + + return temp; +} + +MMU_struct_new::MMU_struct_new() +{ + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 4; ++j) + { + dma[i][j].procnum = i; + dma[i][j].chan = j; + } +} + +void DmaController::write32(uint32_t val) +{ + //fprintf(stderr, "dma %d,%d WRITE %08X\n",procnum,chan,val); + this->wordcount = val & 0x1FFFFF; + uint8_t wasEnable = this->enable; + uint32_t valhi = val >> 16; + this->dar = static_cast((valhi >> 5) & 3); + this->sar = static_cast((valhi >> 7) & 3); + this->repeatMode = BIT9(valhi); + this->bitWidth = static_cast(BIT10(valhi)); + this->_startmode = (valhi >> 11) & 7; + if (this->procnum == ARMCPU_ARM7) + this->_startmode &= 6; + this->irq = BIT14(valhi); + this->enable = BIT15(valhi); + + // make sure we don't get any old triggers + if (!wasEnable && this->enable) + this->triggered = false; + + if (this->enable) + { + // address registers are reloaded from user's settings whenever dma is enabled + // this is tested well by contra4 classic games, which use this to hdma scroll registers + // specifically in the fit-screen mode. + this->saddr = this->saddr_user; + this->daddr = this->daddr_user; + } + + //fprintf(stderr, "dma %d,%d set to startmode %d with wordcount set to: %08X\n",procnum,chan,_startmode,wordcount); + // analyze enabling and startmode. + // note that we only do this if the dma was freshly enabled. + // we should probably also only be latching these other regs in that case too.. + // but for now just this one will do (otherwise the dma repeat stop procedure (in this case the ff4 title menu load with gamecard dma) will fail) + //if(!running) enable = userEnable; + + // if we were previously in a triggered mode, and were already enabled, + // then don't re-trigger now. this is rather confusing.. + // we really only want to auto-trigger gxfifo and immediate modes. + // but we don't know what mode we're in yet. + // so this is our workaround + // (otherwise the dma repeat stop procedure (in this case the ff4 title menu load with gamecard dma) will fail) + bool doNotStart = false; + if (this->startmode != EDMAMode_Immediate && wasEnable) + doNotStart = true; + + // this dma may need to trigger now, so give it a chance + //if(!(wasRepeatMode && !repeatMode)) //this was an older test + if (!doNotStart) + this->doSchedule(); +} + +void DmaController::exec() +{ + // this function runs when the DMA ends. the dma start actually queues this event after some kind of guess as to how long the DMA should take + + // we'll need to unfreeze the arm9 bus now + if (this->procnum == ARMCPU_ARM9) + nds.freezeBus &= ~(1 << (this->chan + 1)); + + this->dmaCheck = false; + + if (this->running) + { + this->doStop(); + return; + } + + if (this->enable) + { + // analyze startmode (this only gets latched when a dma begins) + if (this->procnum == ARMCPU_ARM9) + this->startmode = static_cast(this->_startmode); else - switch(adr) { -#if VIO2SF_GPU_ENABLE - // Alpha test reference value - Parameters:1 - case 0x04000340: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x340>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_AlphaFunc(val); - } - return; - } - // Clear background color setup - Parameters:2 - case 0x04000350: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x350>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_ClearColor(val); - } + // arm7 startmode analysis: + static const EDMAMode lookup[] = { EDMAMode_Immediate, EDMAMode_VBlank, EDMAMode_Card, EDMAMode7_Wifi }; + // arm7 has a slightly different startmode encoding + this->startmode = lookup[this->_startmode >> 1]; + if (this->startmode == EDMAMode7_Wifi && (this->chan == 1 || this->chan == 3)) + this->startmode = EDMAMode7_GBASlot; + } + + // make it run, if it is triggered + // but first, scan for triggering conditions + switch (this->startmode) + { + case EDMAMode_Immediate: + this->triggered = true; + break; + default: + break; + } + + if (this->triggered) + { + this->running = true; + this->paused = false; + if (this->procnum == ARMCPU_ARM9) + this->doCopy(); + else + this->doCopy(); + } + } +} + +template void DmaController::doCopy() +{ + // generate a copy count depending on various copy mode's behavior + uint32_t todo = this->wordcount; + if (PROCNUM == ARMCPU_ARM9) + if (!todo) + todo = 0x200000; // according to gbatek.. we've verified this behaviour on the arm7 + if (this->startmode == EDMAMode_MemDisplay) + { + todo = 128; // this is a hack. maybe an alright one though. it should be 4 words at a time. this is a whole scanline + + // apparently this dma turns off after it finishes a frame + if (nds.VCount == 191) + this->enable = 0; + } + if (this->startmode == EDMAMode_Card) + todo *= 0x80; + + // determine how we're going to copy + bool bogarted = false; + uint32_t sz = this->bitWidth == EDMABitWidth_16 ? 2 : 4; + uint32_t dstinc = 0, srcinc = 0; + switch (this->dar) + { + case EDMADestinationUpdate_Increment: + dstinc = sz; + break; + case EDMADestinationUpdate_Decrement: + dstinc = -static_cast(sz); + break; + case EDMADestinationUpdate_Fixed: + dstinc = 0; + break; + case EDMADestinationUpdate_IncrementReload: + dstinc = sz; + } + switch (this->sar) + { + case EDMASourceUpdate_Increment: + srcinc = sz; + break; + case EDMASourceUpdate_Decrement: + srcinc = -static_cast(sz); + break; + case EDMASourceUpdate_Fixed: + srcinc = 0; + break; + case EDMASourceUpdate_Invalid: + bogarted = true; + } + + // need to figure out what to do about this + if (bogarted) + { + fprintf(stderr, "YOUR GAME IS BOGARTED!!! PLEASE REPORT!!!\n"); + assert(false); + return; + } + + uint32_t src = this->saddr; + uint32_t dst = this->daddr; + + // if these do not use MMU_AT_DMA and the corresponding code in the read/write routines, + // then danny phantom title screen will be filled with a garbage char which is made by + // dmaing from 0x00000000 to 0x06000000 + // TODO - these might be losing out a lot by not going through the templated version anymore. + // we might make another function to do just the raw copy op which can use them with checks + // outside the loop + int time_elapsed = 0; + for (int32_t i = todo; i > 0; --i) + { + if (sz == 4) + { + time_elapsed += _MMU_accesstime(src, true); + time_elapsed += _MMU_accesstime(dst, true); + uint32_t temp = _MMU_read32(procnum, MMU_AT_DMA, src); + _MMU_write32(procnum, MMU_AT_DMA, dst, temp); + } + else + { + time_elapsed += _MMU_accesstime(src, true); + time_elapsed += _MMU_accesstime(dst, true); + uint16_t temp = _MMU_read16(procnum, MMU_AT_DMA, src); + _MMU_write16(procnum, MMU_AT_DMA, dst, temp); + } + dst += dstinc; + src += srcinc; + } + + // reschedule an event for the end of this dma, and figure out how much it cost us + this->doSchedule(); + + // zeromus, check it + if (this->wordcount > todo) + this->nextEvent += todo / 4; // TODO - surely this is a gross simplification + // apparently moon has very, very tight timing (i didnt spy it using waitbyloop swi...) + // so lets bump this down a bit for now, + // (i think this code is in nintendo libraries) + + // write back the addresses + this->saddr = src; + if (this->dar != EDMADestinationUpdate_IncrementReload) // but dont write back dst if we were supposed to reload + this->daddr = dst; + + // do wordcount accounting + if (this->startmode == EDMAMode_Card) + todo /= 0x80; // divide this funky one back down before subtracting it + + if (!this->repeatMode) + this->wordcount -= todo; +} + +void triggerDma(EDMAMode mode) +{ + MACRODO2(0, { + int i = X; + MACRODO4(0, { + int j = X; + MMU_new.dma[i][j].tryTrigger(mode); + }); + }); +} + +void DmaController::tryTrigger(EDMAMode mode) +{ + if (this->startmode != mode) + return; + if (!this->enable) + return; + + // hmm dont trigger it if its already running! + // but paused things need triggers to continue + if (this->running && !this->paused) + return; + this->triggered = true; + this->doSchedule(); +} + +void DmaController::doSchedule() +{ + this->dmaCheck = true; + this->nextEvent = nds_timer; + NDS_RescheduleDMA(); +} + +void DmaController::doPause() +{ + this->triggered = false; + this->paused = true; +} + +void DmaController::doStop() +{ + this->running = false; + if (!this->repeatMode) + this->enable = false; + if (this->irq) + NDS_makeIrq(this->procnum, IRQ_BIT_DMA_0 + this->chan); +} + +uint32_t DmaController::read32() +{ + uint32_t ret = 0; + ret |= this->enable << 31; + ret |= this->irq << 30; + ret |= this->_startmode << 27; + ret |= this->bitWidth << 26; + ret |= this->repeatMode << 25; + ret |= this->sar << 23; + ret |= this->dar << 21; + ret |= this->wordcount; + //fprintf(stderr, "dma %d,%d READ %08X\n",procnum,chan,ret); + return ret; +} + +// ================================================================================================== ARM9 * +// ========================================================================================================= +// ========================================================================================================= +// ================================================= MMU write 08 +void FASTCALL _MMU_ARM9_write08(uint32_t adr, uint8_t val) +{ + adr &= 0x0FFFFFFF; + + if (adr < 0x02000000) + { + T1WriteByte(MMU.ARM9_ITCM, adr & 0x7FFF, val); + return; + } + + if (adr >= 0x08000000 && adr < 0x0A010000) + return; + + // block 8bit writes to OAM and palette memory + if ((adr & 0x0F000000) == 0x07000000) + return; + if ((adr & 0x0F000000) == 0x05000000) + return; + + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM9, 8, adr, val); + return; + } + + switch (adr) + { + case REG_SQRTCNT: + fprintf(stderr, "ERROR 8bit SQRTCNT WRITE\n"); return; - } - // Clear background depth setup - Parameters:2 - case 0x04000354: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x354>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_ClearDepth(val); - } + case REG_SQRTCNT + 1: + fprintf(stderr, "ERROR 8bit SQRTCNT1 WRITE\n"); return; - } - // Fog Color - Parameters:4b - case 0x04000358: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x358>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_FogColor(val); - } + case REG_SQRTCNT + 2: + fprintf(stderr, "ERROR 8bit SQRTCNT2 WRITE\n"); return; - } - case 0x0400035C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x35C>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_FogOffset(val); - } + case REG_SQRTCNT + 3: + fprintf(stderr, "ERROR 8bit SQRTCNT3 WRITE\n"); return; - } - // Matrix mode - Parameters:1 - case 0x04000440: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x440>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_MatrixMode(val); - } +#if 1 + case REG_DIVCNT: + fprintf(stderr, "ERROR 8bit DIVCNT WRITE\n"); return; - } - // Push matrix - Parameters:0 - case 0x04000444: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x444>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_PushMatrix(); - } + case REG_DIVCNT + 1: + fprintf(stderr, "ERROR 8bit DIVCNT+1 WRITE\n"); return; - } - // Pop matrix/es - Parameters:1 - case 0x04000448: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x448>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_PopMatrix(val); - } - return; - } - // Store matrix in the stack - Parameters:1 - case 0x0400044C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x44C>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_StoreMatrix(val); - } - return; - } - // Restore matrix from the stack - Parameters:1 - case 0x04000450: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x450>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_RestoreMatrix(val); - } - return; - } - // Load Identity matrix - Parameters:0 - case 0x04000454: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x454>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_LoadIdentity(); - } + case REG_DIVCNT + 2: + fprintf(stderr, "ERROR 8bit DIVCNT+2 WRITE\n"); return; - } - // Load 4x4 matrix - Parameters:16 - case 0x04000458: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x458>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_LoadMatrix4x4(val); - } + case REG_DIVCNT + 3: + fprintf(stderr, "ERROR 8bit DIVCNT+3 WRITE\n"); return; - } - // Load 4x3 matrix - Parameters:12 - case 0x0400045C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x45C>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_LoadMatrix4x3(val); - } +#endif + + case REG_IF: + REG_IF_WriteByte(ARMCPU_ARM9, 0, val); + break; + case REG_IF + 1: + REG_IF_WriteByte(ARMCPU_ARM9, 1, val); + break; + case REG_IF + 2: + REG_IF_WriteByte(ARMCPU_ARM9, 2, val); + break; + case REG_IF + 3: + REG_IF_WriteByte(ARMCPU_ARM9, 3, val); + break; + + case REG_VRAMCNTA: + case REG_VRAMCNTB: + case REG_VRAMCNTC: + case REG_VRAMCNTD: + case REG_VRAMCNTE: + case REG_VRAMCNTF: + case REG_VRAMCNTG: + case REG_WRAMCNT: + case REG_VRAMCNTH: + case REG_VRAMCNTI: + MMU_VRAMmapControl(adr - REG_VRAMCNTA, val); + } + + MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]] = val; + return; + } + + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]] = val; +} + +// ================================================= MMU ARM9 write 16 +void FASTCALL _MMU_ARM9_write16(uint32_t adr, uint16_t val) +{ + adr &= 0x0FFFFFFE; + + if (adr < 0x02000000) + { + T1WriteWord(MMU.ARM9_ITCM, adr & 0x7FFF, val); + return; + } + + if (adr >= 0x08000000 && adr < 0x0A010000) + return; + + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM9, 16, adr, val); + return; + } + + switch (adr >> 4) + { + // toon table + case 0x0400038: + case 0x0400039: + case 0x040003A: + case 0x040003B: + reinterpret_cast(MMU.MMU_MEM[ARMCPU_ARM9][0x40])[(adr & 0xFFF) >> 1] = val; return; - } - // Multiply 4x4 matrix - Parameters:16 - case 0x04000460: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x460>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_MultMatrix4x4(val); - } + } + // Address is an IO register + switch (adr) + { + case REG_DIVCNT: + MMU_new.div.write16(val); + execdiv(); return; - } - // Multiply 4x4 matrix - Parameters:12 - case 0x04000464: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x464>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_MultMatrix4x3(val); - } + +#if 1 + case REG_DIVNUMER: + case REG_DIVNUMER + 2: + case REG_DIVNUMER + 4: + fprintf(stderr, "DIV: 16 write NUMER %08X. PLEASE REPORT! \n", val); + break; + case REG_DIVDENOM: + case REG_DIVDENOM + 2: + case REG_DIVDENOM + 4: + fprintf(stderr, "DIV: 16 write DENOM %08X. PLEASE REPORT! \n", val); + break; +#endif + case REG_SQRTCNT: + MMU_new.sqrt.write16(val); + execsqrt(); return; - } - // Multiply 3x3 matrix - Parameters:9 - case 0x04000468 : + + case REG_EXMEMCNT: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x468>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_MultMatrix3x3(val); - } + uint16_t remote_proc = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x204); + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x204, val); + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x204, (val & 0xFF80) | (remote_proc & 0x7F)); return; } - // Multiply current matrix by scaling matrix - Parameters:3 - case 0x0400046C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x46C>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_Scale(val); - } + + case REG_VRAMCNTA: + case REG_VRAMCNTC: + case REG_VRAMCNTE: + case REG_VRAMCNTG: + case REG_VRAMCNTH: + MMU_VRAMmapControl(adr - REG_VRAMCNTA, val & 0xFF); + MMU_VRAMmapControl(adr - REG_VRAMCNTA + 1, val >> 8); + break; + + case REG_IME: + NDS_Reschedule(); + MMU.reg_IME[ARMCPU_ARM9] = val & 0x01; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x208, val); return; - } - // Multiply current matrix by translation matrix - Parameters:3 - case 0x04000470: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x470>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Translate(val); - } + case REG_IE: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM9] = (MMU.reg_IE[ARMCPU_ARM9] & 0xFFFF0000) | val; return; - } - // Set vertex color - Parameters:1 - case 0x04000480: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x480>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Color3b(val); - } + case REG_IE + 2: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM9] = (MMU.reg_IE[ARMCPU_ARM9] & 0xFFFF) | (val << 16); return; - } - // Set vertex normal - Parameters:1 - case 0x04000484: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x484>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Normal(val); - } + case REG_IF: + REG_IF_WriteWord(ARMCPU_ARM9, 0, val); return; - } - // Set vertex texture coordinate - Parameters:1 - case 0x04000488: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x488>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_TexCoord(val); - } + case REG_IF + 2: + REG_IF_WriteWord(ARMCPU_ARM9, 2, val); return; - } - // Set vertex position 16b/coordinate - Parameters:2 - case 0x0400048C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x48C>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex16b(val); - } + + case REG_IPCSYNC: + MMU_IPCSync(ARMCPU_ARM9, val); return; - } - // Set vertex position 10b/coordinate - Parameters:1 - case 0x04000490: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x490>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex10b(val); - } + + case REG_IPCFIFOCNT: + IPC_FIFOcnt(ARMCPU_ARM9, val); return; - } - // Set vertex XY position - Parameters:1 - case 0x04000494: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x494>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex3_cord(0,1,val); - } + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + MMU.timerReload[ARMCPU_ARM9][(adr >> 2) & 3] = val; return; - } - // Set vertex XZ position - Parameters:1 - case 0x04000498: + case REG_TM0CNTH: + case REG_TM1CNTH: + case REG_TM2CNTH: + case REG_TM3CNTH: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x498>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex3_cord(0,2,val); - } + int timerIndex = ((adr - 2) >> 2) & 0x3; + write_timer(ARMCPU_ARM9, timerIndex, val); return; } - // Set vertex YZ position - Parameters:1 - case 0x0400049C: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x49C>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex3_cord(1,2,val); - } + + case REG_GCROMCTRL: + MMU_writeToGCControl(ARMCPU_ARM9, (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x1A4) & 0xFFFF0000) | val); return; - } - // Set vertex difference position (offset from the last vertex) - Parameters:1 - case 0x040004A0: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4A0>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_Vertex_rel (val); - } + case REG_GCROMCTRL + 2: + MMU_writeToGCControl(ARMCPU_ARM9, (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x1A4) & 0xFFFF) | (val << 16)); return; - } - // Set polygon attributes - Parameters:1 - case 0x040004A4: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4A4>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_PolygonAttrib(val); - } + } + + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20], val); + return; + } + + bool unmapped, restricted; + adr = MMU_LCDmap(ARMCPU_ARM9, adr, unmapped, restricted); + if (unmapped) + return; + + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20], val); +} + +// ================================================= MMU ARM9 write 32 +void FASTCALL _MMU_ARM9_write32(uint32_t adr, uint32_t val) +{ + adr &= 0x0FFFFFFC; + + if (adr < 0x02000000) + { + T1WriteLong(MMU.ARM9_ITCM, adr & 0x7FFF, val); + return; + } + + if (adr >= 0x08000000 && adr < 0x0A010000) + return; + + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM9, 32, adr, val); + return; + } + + switch (adr) + { + case REG_SQRTCNT: + MMU_new.sqrt.write16(val & 0xFFFF); return; - } - // Set texture parameteres - Parameters:1 - case 0x040004A8: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4A8>>2] = val; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_TexImage(val); - } + case REG_DIVCNT: + MMU_new.div.write16(val & 0xFFFF); return; - } - // Set palette base address - Parameters:1 - case 0x040004AC: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4AC>>2] = val&0x1FFF; - if(proc==ARMCPU_ARM9) - { - gpu3D->NDS_3D_TexPalette(val&0x1FFFF); - } + + case REG_VRAMCNTA: + case REG_VRAMCNTE: + MMU_VRAMmapControl(adr - REG_VRAMCNTA, val & 0xFF); + MMU_VRAMmapControl(adr - REG_VRAMCNTA + 1, (val >> 8) & 0xFF); + MMU_VRAMmapControl(adr - REG_VRAMCNTA + 2, (val >> 16) & 0xFF); + MMU_VRAMmapControl(adr - REG_VRAMCNTA + 3, (val >> 24) & 0xFF); + break; + case REG_VRAMCNTH: + MMU_VRAMmapControl(adr - REG_VRAMCNTA, val & 0xFF); + MMU_VRAMmapControl(adr - REG_VRAMCNTA + 1, (val >> 8) & 0xFF); + break; + + case REG_IME: + NDS_Reschedule(); + MMU.reg_IME[ARMCPU_ARM9] = val & 0x01; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x208, val); return; - } - // Set material diffuse/ambient parameters - Parameters:1 - case 0x040004C0: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4C0>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Material0 (val); - } + + case REG_IE: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM9] = val; return; - } - // Set material reflection/emission parameters - Parameters:1 - case 0x040004C4: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4C4>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Material1 (val); - } + + case REG_IF: + REG_IF_WriteLong(ARMCPU_ARM9, val); return; - } - // Light direction vector - Parameters:1 - case 0x040004C8: + + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4C8>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_LightDirection (val); - } + int timerIndex = (adr >> 2) & 0x3; + MMU.timerReload[ARMCPU_ARM9][timerIndex] = val & 0xFFFF; + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][0x40], adr & 0xFFF, val & 0xFFFF); + write_timer(ARMCPU_ARM9, timerIndex, val >> 16); return; } - // Light color - Parameters:1 - case 0x040004CC: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4CC>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_LightColor(val); - } + + case REG_DIVNUMER: + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x290, val); + execdiv(); return; - } - // Material Shininess - Parameters:32 - case 0x040004D0: - { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x4D0>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Shininess(val); - } + case REG_DIVNUMER + 4: + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x294, val); + execdiv(); return; - } - // Begin vertex list - Parameters:1 - case 0x04000500: + + case REG_DIVDENOM: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x500>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Begin(val); - } + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x298, val); + execdiv(); return; } - // End vertex list - Parameters:0 - case 0x04000504: + case REG_DIVDENOM + 4: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x504>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_End(); - } + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x29C, val); + execdiv(); return; } - // Swap rendering engine buffers - Parameters:1 - case 0x04000540: + + case REG_SQRTPARAM: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x540>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_Flush(val); - } + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2B8, val); + execsqrt(); return; } - // Set viewport coordinates - Parameters:1 - case 0x04000580: + case REG_SQRTPARAM + 4: { - ((u32 *)(MMU.MMU_MEM[proc][0x40]))[0x580>>2] = val; - if(proc == ARMCPU_ARM9) - { - gpu3D->NDS_3D_ViewPort(val); - } + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2BC, val); + execsqrt(); return; } -#endif - - case REG_DISPA_WININ: - { - if(proc == ARMCPU_ARM9) - { - GPU_setWININ (MainScreen.gpu, val & 0xFFFF) ; - GPU_setWINOUT16 (MainScreen.gpu, (val >> 16) & 0xFFFF) ; - } - break; - } - case REG_DISPB_WININ: - { - if(proc == ARMCPU_ARM9) - { - GPU_setWININ (SubScreen.gpu, val & 0xFFFF) ; - GPU_setWINOUT16 (SubScreen.gpu, (val >> 16) & 0xFFFF) ; - } - break; - } - case REG_DISPA_BLDCNT: - { - if (proc == ARMCPU_ARM9) - { - GPU_setBLDCNT (MainScreen.gpu,val&0xffff); - GPU_setBLDALPHA (MainScreen.gpu,val>>16); - } - break; - } - case REG_DISPB_BLDCNT: - { - if (proc == ARMCPU_ARM9) - { - GPU_setBLDCNT (SubScreen.gpu,val&0xffff); - GPU_setBLDALPHA (SubScreen.gpu,val>>16); - } - break; - } -/* - // Commented out, as this doesn't use the plug-in system, neither works - case cmd_3D_MTX_MODE // 0x04000440 : - if (proc == ARMCPU_ARM9) gl_MTX_MODE(val); - return; - case cmd_3D_MTX_PUSH // 0x04000444 : - case cmd_3D_MTX_POP // 0x04000448 : - case cmd_3D_MTX_STORE // 0x0400044C : - case cmd_3D_MTX_RESTORE // 0x04000450 : - if (proc == ARMCPU_ARM9) gl_print_cmd(adr); - return; - case cmd_3D_MTX_IDENTITY // 0x04000454 : - if (proc == ARMCPU_ARM9) gl_MTX_IDENTITY(); - return; - case cmd_3D_MTX_LOAD_4x4 // 0x04000458 : - if (proc == ARMCPU_ARM9) gl_MTX_LOAD_4x4(val); - return; - case cmd_3D_MTX_LOAD_4x3 // 0x0400045C : - if (proc == ARMCPU_ARM9) gl_MTX_LOAD_4x3(val); - return; - case cmd_3D_MTX_MULT_4x4 // 0x04000460 : - if (proc == ARMCPU_ARM9) gl_MTX_MULT_4x4(val); - return; - case cmd_3D_MTX_MULT_4x3 // 0x04000464 : - if (proc == ARMCPU_ARM9) gl_MTX_MULT_4x3(val); - return; - case cmd_3D_MTX_MULT_3x3 // 0x04000468 : - if (proc == ARMCPU_ARM9) gl_MTX_MULT_3x3(val); - return; - case cmd_3D_MTX_SCALE // 0x0400046C : - case cmd_3D_MTX_TRANS // 0x04000470 : - case cmd_3D_COLOR // 0x04000480 : - case cmd_3D_NORMA // 0x04000484 : - if (proc == ARMCPU_ARM9) gl_print_cmd(adr); - return; - case cmd_3D_TEXCOORD // 0x04000488 : - if (proc == ARMCPU_ARM9) gl_TEXCOORD(val); - return; - case cmd_3D_VTX_16 // 0x0400048C : - if (proc == ARMCPU_ARM9) gl_VTX_16(val); - return; - case cmd_3D_VTX_10 // 0x04000490 : - if (proc == ARMCPU_ARM9) gl_VTX_10(val); - return; - case cmd_3D_VTX_XY // 0x04000494 : - if (proc == ARMCPU_ARM9) gl_VTX_XY(val); - return; - case cmd_3D_VTX_XZ // 0x04000498 : - if (proc == ARMCPU_ARM9) gl_VTX_XZ(val); - return; - case cmd_3D_VTX_YZ // 0x0400049C : - if (proc == ARMCPU_ARM9) gl_VTX_YZ(val); - return; - case cmd_3D_VTX_DIFF // 0x040004A0 : - if (proc == ARMCPU_ARM9) gl_VTX_DIFF(val); - return; - case cmd_3D_POLYGON_ATTR // 0x040004A4 : - case cmd_3D_TEXIMAGE_PARAM // 0x040004A8 : - case cmd_3D_PLTT_BASE // 0x040004AC : - case cmd_3D_DIF_AMB // 0x040004C0 : - case cmd_3D_SPE_EMI // 0x040004C4 : - case cmd_3D_LIGHT_VECTOR // 0x040004C8 : - case cmd_3D_LIGHT_COLOR // 0x040004CC : - case cmd_3D_SHININESS // 0x040004D0 : - if (proc == ARMCPU_ARM9) gl_print_cmd(adr); - return; - case cmd_3D_BEGIN_VTXS // 0x04000500 : - if (proc == ARMCPU_ARM9) gl_VTX_begin(val); - return; - case cmd_3D_END_VTXS // 0x04000504 : - if (proc == ARMCPU_ARM9) gl_VTX_end(); - return; - case cmd_3D_SWAP_BUFFERS // 0x04000540 : - case cmd_3D_VIEWPORT // 0x04000580 : - case cmd_3D_BOX_TEST // 0x040005C0 : - case cmd_3D_POS_TEST // 0x040005C4 : - case cmd_3D_VEC_TEST // 0x040005C8 : - if (proc == ARMCPU_ARM9) gl_print_cmd(adr); + case REG_IPCSYNC: + MMU_IPCSync(ARMCPU_ARM9, val); return; -*/ - case REG_DISPA_DISPCNT : - if(proc == ARMCPU_ARM9) GPU_setVideoProp(MainScreen.gpu, val); - - //GPULOG("MAIN INIT 32B %08X\r\n", val); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0, val); + case REG_IPCFIFOCNT: + IPC_FIFOcnt(ARMCPU_ARM9, val & 0xFFFF); return; - - case REG_DISPB_DISPCNT : - if (proc == ARMCPU_ARM9) GPU_setVideoProp(SubScreen.gpu, val); - //GPULOG("SUB INIT 32B %08X\r\n", val); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x1000, val); + case REG_IPCFIFOSEND: + IPC_FIFOsend(ARMCPU_ARM9, val); return; - case REG_VRAMCNTA: - case REG_VRAMCNTE: - MMU_write8(proc,adr,val & 0xFF) ; - MMU_write8(proc,adr+1,val >> 8) ; - MMU_write8(proc,adr+2,val >> 16) ; - MMU_write8(proc,adr+3,val >> 24) ; - return ; - case REG_VRAMCNTI: - MMU_write8(proc,adr,val & 0xFF) ; - return ; - case REG_IME : { - u32 old_val = MMU.reg_IME[proc]; - u32 new_val = val & 1; - MMU.reg_IME[proc] = new_val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x208, val); - if ( new_val && old_val != new_val) { - /* raise an interrupt request to the CPU if needed */ - if ( MMU.reg_IE[proc] & MMU.reg_IF[proc]) { - NDS_ARM7.wIRQ = true; - NDS_ARM7.waitIRQ = false; - } - } + case REG_GCROMCTRL: + MMU_writeToGCControl(ARMCPU_ARM9, val); return; - } - - case REG_IE : - MMU.reg_IE[proc] = val; - if ( MMU.reg_IME[proc]) { - /* raise an interrupt request to the CPU if needed */ - if ( MMU.reg_IE[proc] & MMU.reg_IF[proc]) { - NDS_ARM7.wIRQ = true; - NDS_ARM7.waitIRQ = false; - } - } + case REG_DISPA_DISPCAPCNT: + T1WriteLong(MMU.ARM9_REG, 0x64, val); return; - case REG_IF : - MMU.reg_IF[proc] &= (~val); - return; - case REG_TM0CNTL : - case REG_TM1CNTL : - case REG_TM2CNTL : - case REG_TM3CNTL : - MMU.timerReload[proc][(adr>>2)&0x3] = (u16)val; - if(val&0x800000) - { - MMU.timer[proc][(adr>>2)&0x3] = MMU.timerReload[proc][(adr>>2)&0x3]; - } - MMU.timerON[proc][(adr>>2)&0x3] = val & 0x800000; - switch((val>>16)&7) - { - case 0 : - MMU.timerMODE[proc][(adr>>2)&0x3] = 0+1;//proc; - break; - case 1 : - MMU.timerMODE[proc][(adr>>2)&0x3] = 6+1;//proc; - break; - case 2 : - MMU.timerMODE[proc][(adr>>2)&0x3] = 8+1;//proc; - break; - case 3 : - MMU.timerMODE[proc][(adr>>2)&0x3] = 10+1;//proc; - break; - default : - MMU.timerMODE[proc][(adr>>2)&0x3] = 0xFFFF; - break; - } - if(!(val & 0x800000)) - { - MMU.timerRUN[proc][(adr>>2)&0x3] = false; - } - T1WriteLong(MMU.MMU_MEM[proc][0x40], adr & 0xFFF, val); + case REG_GCDATAIN: + slot1_device.write32(ARMCPU_ARM9, REG_GCDATAIN, val); return; - case REG_DIVDENOM : - { - u16 cnt; - s64 num = 0; - s64 den = 1; - s64 res; - s64 mod; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x298, val); - cnt = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x280); - switch(cnt&3) - { - case 0: - { - num = (s64) (s32) T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x290); - den = (s64) (s32) T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x298); - } - break; - case 1: - { - num = (s64) T1ReadQuad(MMU.MMU_MEM[proc][0x40], 0x290); - den = (s64) (s32) T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x298); - } + } + + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20], val); + return; + } + + bool unmapped, restricted; + adr = MMU_LCDmap(ARMCPU_ARM9, adr, unmapped, restricted); + if (unmapped) + return; + + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20], val); +} + +// ================================================= MMU ARM9 read 08 +uint8_t FASTCALL _MMU_ARM9_read08(uint32_t adr) +{ + adr &= 0x0FFFFFFF; + + if (adr<0x02000000) + return T1ReadByte(MMU.ARM9_ITCM, adr & 0x7FFF); + + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; + + if ((adr >> 24) == 4) + { + //Address is an IO register + + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM9, 8, adr) & 0xFF; + + switch (adr) + { + case REG_IF: + return MMU.gen_IF() & 0xFF; + case REG_IF + 1: + return (MMU.gen_IF() >> 8) & 0xFF; + case REG_IF + 2: + return (MMU.gen_IF() >> 16) & 0xFF; + case REG_IF + 3: + return (MMU.gen_IF() >> 24) & 0xFF; + + case REG_WRAMCNT: + return MMU.WRAMCNT; + + case REG_SQRTCNT: + return MMU_new.sqrt.read16() & 0xFF; + case REG_SQRTCNT + 1: + return (MMU_new.sqrt.read16() >> 8) & 0xFF; + + // sqrtcnt isnt big enough for these to exist. but they'd probably return 0 so its ok + case REG_SQRTCNT + 2: + fprintf(stderr, "ERROR 8bit SQRTCNT+2 READ\n"); + return 0; + case REG_SQRTCNT + 3: + fprintf(stderr, "ERROR 8bit SQRTCNT+3 READ\n"); + return 0; + + // Nostalgia's options menu requires that these work + case REG_DIVCNT: + return MMU_new.div.read16() & 0xFF; + case REG_DIVCNT + 1: + return (MMU_new.div.read16() >> 8) & 0xFF; + + // divcnt isnt big enough for these to exist. but they'd probably return 0 so its ok + case REG_DIVCNT + 2: + fprintf(stderr, "ERROR 8bit DIVCNT+2 READ\n"); + return 0; + case REG_DIVCNT + 3: + fprintf(stderr, "ERROR 8bit DIVCNT+3 READ\n"); + return 0; + } + } + + bool unmapped, restricted; + adr = MMU_LCDmap(ARMCPU_ARM9, adr, unmapped, restricted); + if (unmapped) + return 0; + + return MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF][adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]]; +} + +// ================================================= MMU ARM9 read 16 +uint16_t FASTCALL _MMU_ARM9_read16(uint32_t adr) +{ + adr &= 0x0FFFFFFE; + + if (adr < 0x02000000) + return T1ReadWord_guaranteedAligned(MMU.ARM9_ITCM, adr & 0x7FFE); + + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; + + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM9, 16, adr) & 0xFFFF; + + // Address is an IO register + switch (adr) + { + case REG_SQRTCNT: + return MMU_new.sqrt.read16(); + // sqrtcnt isnt big enough for this to exist. but it'd probably return 0 so its ok + case REG_SQRTCNT + 2: + fprintf(stderr, "ERROR 16bit SQRTCNT+2 READ\n"); + return 0; + + case REG_DIVCNT: + return MMU_new.div.read16(); + // divcnt isnt big enough for this to exist. but it'd probably return 0 so its ok + case REG_DIVCNT + 2: + fprintf(stderr, "ERROR 16bit DIVCNT+2 READ\n"); + return 0; + + case REG_IME: + return MMU.reg_IME[ARMCPU_ARM9] & 0xFFFF; + + // WRAMCNT is readable but VRAMCNT is not, so just return WRAM's value + case REG_VRAMCNTG: + return MMU.WRAMCNT << 8; + + case REG_IE: + return MMU.reg_IE[ARMCPU_ARM9] & 0xFFFF; + case REG_IE + 2: + return (MMU.reg_IE[ARMCPU_ARM9] >> 16) & 0xFFFF; + + case REG_IF: + return MMU.gen_IF() & 0xFFFF; + case REG_IF + 2: + return (MMU.gen_IF() >> 16) & 0xFFFF; + + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + return read_timer(ARMCPU_ARM9, (adr & 0xF) >> 2); + + case REG_AUXSPICNT: + return MMU.AUX_SPI_CNT; + } + + return T1ReadWord_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]); + } + + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF + return T1ReadWord_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]); +} + +// ================================================= MMU ARM9 read 32 +uint32_t FASTCALL _MMU_ARM9_read32(uint32_t adr) +{ + adr &= 0x0FFFFFFC; + + if (adr < 0x02000000) + return T1ReadLong_guaranteedAligned(MMU.ARM9_ITCM, adr & 0x7FFC); + + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; + + // Address is an IO register + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM9, 32, adr); + + switch (adr) + { + case REG_DSIMODE: + if (!nds.Is_DSI()) break; - case 2: - { - return; - } + return 1; + case 0x04004008: + if (!nds.Is_DSI()) break; - default: - break; - } - if(den==0) - { - res = 0; - mod = 0; - cnt |= 0x4000; - cnt &= 0x7FFF; - } - else - { - res = num / den; - mod = num % den; - cnt &= 0x3FFF; - } - DIVLOG("BOUT1 %08X%08X / %08X%08X = %08X%08X\r\n", (u32)(num>>32), (u32)num, - (u32)(den>>32), (u32)den, - (u32)(res>>32), (u32)res); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A0, (u32) res); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A4, (u32) (res >> 32)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A8, (u32) mod); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2AC, (u32) (mod >> 32)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x280, cnt); - } - return; - case REG_DIVDENOM+4 : + return 0x8000; + + // WRAMCNT is readable but VRAMCNT is not, so just return WRAM's value + case REG_VRAMCNTE: + return MMU.WRAMCNT << 24; + + // despite these being 16bit regs, + // Dolphin Island Underwater Adventures uses this amidst seemingly reasonable divs so we're going to emulate it. + // well, it's pretty reasonable to read them as 32bits though, isnt it? + case REG_DIVCNT: + return MMU_new.div.read16(); + case REG_SQRTCNT: + return MMU_new.sqrt.read16(); // I guess we'll do this also + + case REG_IME: + return MMU.reg_IME[ARMCPU_ARM9]; + case REG_IE: + return MMU.reg_IE[ARMCPU_ARM9]; + + case REG_IF: + return MMU.gen_IF(); + + case REG_IPCFIFORECV: + return IPC_FIFOrecv(ARMCPU_ARM9); + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: { - u16 cnt; - s64 num = 0; - s64 den = 1; - s64 res; - s64 mod; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x29C, val); - cnt = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x280); - switch(cnt&3) - { - case 0: - { - return; - } - break; - case 1: - { - return; - } - break; - case 2: - { - num = (s64) T1ReadQuad(MMU.MMU_MEM[proc][0x40], 0x290); - den = (s64) T1ReadQuad(MMU.MMU_MEM[proc][0x40], 0x298); - } - break; - default: - break; - } - if(den==0) - { - res = 0; - mod = 0; - cnt |= 0x4000; - cnt &= 0x7FFF; - } - else - { - res = num / den; - mod = num % den; - cnt &= 0x3FFF; - } - DIVLOG("BOUT2 %08X%08X / %08X%08X = %08X%08X\r\n", (u32)(num>>32), (u32)num, - (u32)(den>>32), (u32)den, - (u32)(res>>32), (u32)res); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A0, (u32) res); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A4, (u32) (res >> 32)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2A8, (u32) mod); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2AC, (u32) (mod >> 32)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x280, cnt); + uint32_t val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x40], (adr + 2) & 0xFFF); + return MMU.timer[ARMCPU_ARM9][(adr & 0xF) >> 2] | (val << 16); } - return; - case REG_SQRTPARAM : - { - u16 cnt; - u64 v = 1; - //execute = false; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2B8, val); - cnt = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x2B0); - switch(cnt&1) - { - case 0: - v = (u64) T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x2B8); - break; - case 1: - return; - } - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2B4, (u32) sqrt((s64)v)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2B0, cnt & 0x7FFF); - SQRTLOG("BOUT1 sqrt(%08X%08X) = %08X\r\n", (u32)(v>>32), (u32)v, - T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x2B4)); - } - return; - case REG_SQRTPARAM+4 : - { - u16 cnt; - u64 v = 1; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2BC, val); - cnt = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x2B0); - switch(cnt&1) - { - case 0: - return; - //break; - case 1: - v = T1ReadQuad(MMU.MMU_MEM[proc][0x40], 0x2B8); - break; - } - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2B4, (u32) sqrt((s64)v)); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x2B0, cnt & 0x7FFF); - SQRTLOG("BOUT2 sqrt(%08X%08X) = %08X\r\n", (u32)(v>>32), (u32)v, - T1ReadLong(MMU.MMU_MEM[proc][0x40], 0x2B4)); - } - return; - case REG_IPCSYNC : - { - //execute=false; - u32 remote = (proc+1)&1; - u32 IPCSYNC_remote = T1ReadLong(MMU.MMU_MEM[remote][0x40], 0x180); - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0x180, (val&0xFFF0)|((IPCSYNC_remote>>8)&0xF)); - T1WriteLong(MMU.MMU_MEM[remote][0x40], 0x180, (IPCSYNC_remote&0xFFF0)|((val>>8)&0xF)); - MMU.reg_IF[remote] |= ((IPCSYNC_remote & (1<<14))<<2) & ((val & (1<<13))<<3);// & (MMU.reg_IME[remote] << 16);// & (MMU.reg_IE[remote] & (1<<16));// - } - return; - case REG_IPCFIFOCNT : - { - u32 cnt_l = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184) ; - u32 cnt_r = T1ReadWord(MMU.MMU_MEM[(proc+1) & 1][0x40], 0x184) ; - if ((val & 0x8000) && !(cnt_l & 0x8000)) - { - /* this is the first init, the other side didnt init yet */ - /* so do a complete init */ - FIFOInit(MMU.fifos + (IPCFIFO+proc)); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184,0x8101) ; - /* and then handle it as usual */ - } - if(val & 0x4008) - { - FIFOInit(MMU.fifos + (IPCFIFO+((proc+1)&1))); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, (cnt_l & 0x0301) | (val & 0x8404) | 1); - T1WriteWord(MMU.MMU_MEM[proc^1][0x40], 0x184, (cnt_r & 0xC507) | 0x100); - MMU.reg_IF[proc] |= ((val & 4)<<15);// & (MMU.reg_IME[proc]<<17);// & (MMU.reg_IE[proc]&0x20000);// - return; - } - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, val & 0xBFF4); - //execute = false; - return; - } - case REG_IPCFIFOSEND : - { - u16 IPCFIFO_CNT = T1ReadWord(MMU.MMU_MEM[proc][0x40], 0x184); - if(IPCFIFO_CNT&0x8000) - { - //if(val==43) execute = false; - u32 remote = (proc+1)&1; - u32 fifonum = IPCFIFO+remote; - u16 IPCFIFO_CNT_remote; - FIFOAdd(MMU.fifos + fifonum, val); - IPCFIFO_CNT = (IPCFIFO_CNT & 0xFFFC) | (MMU.fifos[fifonum].full<<1); - IPCFIFO_CNT_remote = T1ReadWord(MMU.MMU_MEM[remote][0x40], 0x184); - IPCFIFO_CNT_remote = (IPCFIFO_CNT_remote & 0xFCFF) | (MMU.fifos[fifonum].full<<10); - T1WriteWord(MMU.MMU_MEM[proc][0x40], 0x184, IPCFIFO_CNT); - T1WriteWord(MMU.MMU_MEM[remote][0x40], 0x184, IPCFIFO_CNT_remote); - MMU.reg_IF[remote] |= ((IPCFIFO_CNT_remote & (1<<10))<<8);// & (MMU.reg_IME[remote] << 18);// & (MMU.reg_IE[remote] & 0x40000);// - //execute = false; - } - } - return; - case REG_DMA0CNTL : - //LOG("32 bit dma0 %04X\r\n", val); - DMASrc[proc][0] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB0); - DMADst[proc][0] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB4); - MMU.DMAStartTime[proc][0] = (proc ? (val>>28) & 0x3 : (val>>27) & 0x7); - MMU.DMACrt[proc][0] = val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0xB8, val); - if( MMU.DMAStartTime[proc][0] == 0 || - MMU.DMAStartTime[proc][0] == 7) // Start Immediately - MMU_doDMA(proc, 0); - #ifdef LOG_DMA2 - else - { - LOG("proc %d, dma %d src %08X dst %08X start taille %d %d\r\n", proc, 0, DMASrc[proc][0], DMADst[proc][0], 0, ((MMU.DMACrt[proc][0]>>27)&7)); - } - #endif - //execute = false; - return; - case REG_DMA1CNTL: - //LOG("32 bit dma1 %04X\r\n", val); - DMASrc[proc][1] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xBC); - DMADst[proc][1] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xC0); - MMU.DMAStartTime[proc][1] = (proc ? (val>>28) & 0x3 : (val>>27) & 0x7); - MMU.DMACrt[proc][1] = val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0xC4, val); - if(MMU.DMAStartTime[proc][1] == 0 || - MMU.DMAStartTime[proc][1] == 7) // Start Immediately - MMU_doDMA(proc, 1); - #ifdef LOG_DMA2 - else - { - LOG("proc %d, dma %d src %08X dst %08X start taille %d %d\r\n", proc, 1, DMASrc[proc][1], DMADst[proc][1], 0, ((MMU.DMACrt[proc][1]>>27)&7)); - } - #endif - return; - case REG_DMA2CNTL : - //LOG("32 bit dma2 %04X\r\n", val); - DMASrc[proc][2] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xC8); - DMADst[proc][2] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xCC); - MMU.DMAStartTime[proc][2] = (proc ? (val>>28) & 0x3 : (val>>27) & 0x7); - MMU.DMACrt[proc][2] = val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0xD0, val); - if(MMU.DMAStartTime[proc][2] == 0 || - MMU.DMAStartTime[proc][2] == 7) // Start Immediately - MMU_doDMA(proc, 2); - #ifdef LOG_DMA2 - else - { - LOG("proc %d, dma %d src %08X dst %08X start taille %d %d\r\n", proc, 2, DMASrc[proc][2], DMADst[proc][2], 0, ((MMU.DMACrt[proc][2]>>27)&7)); - } - #endif - return; - case 0x040000DC : - //LOG("32 bit dma3 %04X\r\n", val); - DMASrc[proc][3] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xD4); - DMADst[proc][3] = T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xD8); - MMU.DMAStartTime[proc][3] = (proc ? (val>>28) & 0x3 : (val>>27) & 0x7); - MMU.DMACrt[proc][3] = val; - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0xDC, val); - if( MMU.DMAStartTime[proc][3] == 0 || - MMU.DMAStartTime[proc][3] == 7) // Start Immediately - MMU_doDMA(proc, 3); - #ifdef LOG_DMA2 - else - { - LOG("proc %d, dma %d src %08X dst %08X start taille %d %d\r\n", proc, 3, DMASrc[proc][3], DMADst[proc][3], 0, ((MMU.DMACrt[proc][3]>>27)&7)); - } - #endif - return; - case REG_GCROMCTRL : - { - u32 i; - if(MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT) == 0xB7) - { - MMU.dscard[proc].adress = (MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT+1) << 24) | (MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT+2) << 16) | (MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT+3) << 8) | (MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT+4)); - MMU.dscard[proc].transfer_count = 0x80;// * ((val>>24)&7)); - } - else if (MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT) == 0xB8) - { - // Get ROM chip ID - val |= 0x800000; // Data-Word Status - T1WriteLong(MMU.MMU_MEM[proc][(REG_GCROMCTRL >> 20) & 0xff], REG_GCROMCTRL & 0xfff, val); - MMU.dscard[proc].adress = 0; - } - else - { - LOG("CARD command: %02X\n", MEM_8(MMU.MMU_MEM[proc], REG_GCCMDOUT)); - } + case REG_GCDATAIN: + return MMU_readFromGC(ARMCPU_ARM9); + } + return T1ReadLong_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]); + } - //CARDLOG("%08X : %08X %08X\r\n", adr, val, adresse[proc]); - val |= 0x00800000; + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [zeromus, inspired by shash] + return T1ReadLong_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM9][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM9][adr >> 20]); +} - if(MMU.dscard[proc].adress == 0) - { - val &= ~0x80000000; - T1WriteLong(MMU.MMU_MEM[proc][(REG_GCROMCTRL >> 20) & 0xff], REG_GCROMCTRL & 0xfff, val); - return; - } - T1WriteLong(MMU.MMU_MEM[proc][(REG_GCROMCTRL >> 20) & 0xff], REG_GCROMCTRL & 0xfff, val); +// ================================================================================================== ARM7 * +// ========================================================================================================= +// ========================================================================================================= +// ================================================= MMU ARM7 write 08 +void FASTCALL _MMU_ARM7_write08(uint32_t adr, uint8_t val) +{ + adr &= 0x0FFFFFFF; + + if (adr < 0x02000000) + return; // can't write to bios or entire area below main memory + + if (adr >= 0x08000000 && adr < 0x0A010000) + return; + + if (adr >= 0x04000400 && adr < 0x04000520) + { + SPU_WriteByte(adr, val); + return; + } + + if ((adr & 0xFFFF0000) == 0x04800000) + /* is wifi hardware, dont intermix with regular hardware registers */ + // 8-bit writes to wifi I/O and RAM are ignored + // Reference: http://nocash.emubase.de/gbatek.htm#dswifiiomap + return; - /* launch DMA if start flag was set to "DS Cart" */ - if(proc == ARMCPU_ARM7) i = 2; - else i = 5; + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM7, 8, adr, val); + return; + } + + switch (adr) + { + case REG_IF: + REG_IF_WriteByte(ARMCPU_ARM7, 0, val); + break; + case REG_IF + 1: + REG_IF_WriteByte(ARMCPU_ARM7, 1, val); + break; + case REG_IF + 2: + REG_IF_WriteByte(ARMCPU_ARM7, 2, val); + break; + case REG_IF + 3: + REG_IF_WriteByte(ARMCPU_ARM7, 3, val); + break; - if(proc == ARMCPU_ARM9 && MMU.DMAStartTime[proc][0] == i) /* dma0/1 on arm7 can't start on ds cart event */ - { - MMU_doDMA(proc, 0); - return; - } - else if(proc == ARMCPU_ARM9 && MMU.DMAStartTime[proc][1] == i) - { - MMU_doDMA(proc, 1); - return; - } - else if(MMU.DMAStartTime[proc][2] == i) - { - MMU_doDMA(proc, 2); - return; - } - else if(MMU.DMAStartTime[proc][3] == i) - { - MMU_doDMA(proc, 3); - return; - } + case REG_POSTFLG: + // The NDS7 register can be written to only from code executed in BIOS. + if (NDS_ARM7.instruct_adr > 0x3FFF) return; - } - return; - case REG_DISPA_DISPCAPCNT : - if(proc == ARMCPU_ARM9) + // hack for patched firmwares + if (val == 1) { - GPU_set_DISPCAPCNT(MainScreen.gpu,val); - T1WriteLong(ARM9Mem.ARM9_REG, 0x64, val); + if (_MMU_ARM7_read08(REG_POSTFLG)) + break; + _MMU_write32(0x27FFE24, gameInfo.header.ARM9exe); + _MMU_write32(0x27FFE34, gameInfo.header.ARM7exe); } - return; + break; - case REG_DISPA_BG0CNT : - if (proc == ARMCPU_ARM9) - { - GPU_setBGProp(MainScreen.gpu, 0, (val&0xFFFF)); - GPU_setBGProp(MainScreen.gpu, 1, (val>>16)); - } - //if((val>>16)==0x400) execute = false; - T1WriteLong(ARM9Mem.ARM9_REG, 8, val); - return; - case REG_DISPA_BG2CNT : - if (proc == ARMCPU_ARM9) - { - GPU_setBGProp(MainScreen.gpu, 2, (val&0xFFFF)); - GPU_setBGProp(MainScreen.gpu, 3, (val>>16)); - } - T1WriteLong(ARM9Mem.ARM9_REG, 0xC, val); - return; - case REG_DISPB_BG0CNT : - if (proc == ARMCPU_ARM9) - { - GPU_setBGProp(SubScreen.gpu, 0, (val&0xFFFF)); - GPU_setBGProp(SubScreen.gpu, 1, (val>>16)); - } - T1WriteLong(ARM9Mem.ARM9_REG, 0x1008, val); - return; - case REG_DISPB_BG2CNT : - if (proc == ARMCPU_ARM9) + case REG_HALTCNT: + //fprintf(stderr, "halt 0x%02X\n", val); + switch (val) { - GPU_setBGProp(SubScreen.gpu, 2, (val&0xFFFF)); - GPU_setBGProp(SubScreen.gpu, 3, (val>>16)); + case 0xC0: + NDS_Sleep(); + break; + case 0x80: + armcpu_Wait4IRQ(&NDS_ARM7); } - T1WriteLong(ARM9Mem.ARM9_REG, 0x100C, val); - return; - case REG_DISPA_DISPMMEMFIFO: - { - // NOTE: right now, the capture unit is not taken into account, - // I don't know is it should be handled here or - - FIFOAdd(MMU.fifos + MAIN_MEMORY_DISP_FIFO, val); break; - } - //case 0x21FDFF0 : if(val==0) execute = false; - //case 0x21FDFB0 : if(val==0) execute = false; - default : - T1WriteLong(MMU.MMU_MEM[proc][0x40], adr & MMU.MMU_MASK[proc][(adr>>20)&0xFF], val); - return; } + MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]] = val; + return; } - T1WriteLong(MMU.MMU_MEM[proc][(adr>>20)&0xFF], adr&MMU.MMU_MASK[proc][(adr>>20)&0xFF], val); -} + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]] = val; +} -void FASTCALL MMU_doDMA(u32 proc, u32 num) +// ================================================= MMU ARM7 write 16 +void FASTCALL _MMU_ARM7_write16(uint32_t adr, uint16_t val) { - u32 src = DMASrc[proc][num]; - u32 dst = DMADst[proc][num]; - u32 taille; + adr &= 0x0FFFFFFE; - if(src==dst) - { - T1WriteLong(MMU.MMU_MEM[proc][0x40], 0xB8 + (0xC*num), T1ReadLong(MMU.MMU_MEM[proc][0x40], 0xB8 + (0xC*num)) & 0x7FFFFFFF); + if (adr < 0x02000000) + return; // can't write to bios or entire area below main memory + + if (adr >= 0x08000000 && adr < 0x0A010000) return; - } - if((!(MMU.DMACrt[proc][num]&(1<<31)))&&(!(MMU.DMACrt[proc][num]&(1<<25)))) - { /* not enabled and not to be repeated */ - MMU.DMAStartTime[proc][num] = 0; - MMU.DMACycle[proc][num] = 0; - //MMU.DMAing[proc][num] = false; + if (adr >= 0x04000400 && adr < 0x04000520) + { + SPU_WriteWord(adr, val); return; } + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM7, 16, adr, val); + return; + } - /* word count */ - taille = (MMU.DMACrt[proc][num]&0xFFFF); - - // If we are in "Main memory display" mode just copy an entire - // screen (256x192 pixels). - // Reference: http://nocash.emubase.de/gbatek.htm#dsvideocaptureandmainmemorydisplaymode - // (under DISP_MMEM_FIFO) - if ((MMU.DMAStartTime[proc][num]==4) && // Must be in main memory display mode - (taille==4) && // Word must be 4 - (((MMU.DMACrt[proc][num]>>26)&1) == 1)) // Transfer mode must be 32bit wide - taille = 256*192/2; + // Address is an IO register + switch (adr) + { + case REG_DISPA_VCOUNT: + if (nds.VCount >= 202 && nds.VCount <= 212) + { + fprintf(stderr, "VCOUNT set to %i (previous value %i)\n", val, nds.VCount); + nds.VCount = val; + } + else + fprintf(stderr, "Attempt to set VCOUNT while not within 202-212 (%i), ignored\n", nds.VCount); + return; - if(MMU.DMAStartTime[proc][num] == 5) - taille *= 0x80; + case REG_EXMEMCNT: + { + uint16_t remote_proc = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x204); + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x204, (val & 0x7F) | (remote_proc & 0xFF80)); + return; + } - MMU.DMACycle[proc][num] = taille + nds.cycles; - MMU.DMAing[proc][num] = true; + case REG_SPICNT: + { + bool reset_firmware = true; - DMALOG("proc %d, dma %d src %08X dst %08X start %d taille %d repeat %s %08X\r\n", - proc, num, src, dst, MMU.DMAStartTime[proc][num], taille, - (MMU.DMACrt[proc][num]&(1<<25))?"on":"off",MMU.DMACrt[proc][num]); + if (((MMU.SPI_CNT >> 8) & 0x3) == 1 && ((val >> 8) & 0x3) == 1 && BIT11(MMU.SPI_CNT)) + // select held + reset_firmware = false; - if(!(MMU.DMACrt[proc][num]&(1<<25))) - MMU.DMAStartTime[proc][num] = 0; + //MMU.fw.com == 0; // reset fw device communication + if (reset_firmware) + // reset fw device communication + fw_reset_com(&MMU.fw); + MMU.SPI_CNT = val; - // transfer - { - u32 i=0; - // 32 bit or 16 bit transfer ? - int sz = ((MMU.DMACrt[proc][num]>>26)&1)? 4 : 2; - int dstinc,srcinc; - int u=(MMU.DMACrt[proc][num]>>21); - switch(u & 0x3) { - case 0 : dstinc = sz; break; - case 1 : dstinc = -sz; break; - case 2 : dstinc = 0; break; - case 3 : dstinc = sz; break; //reload - } - switch((u >> 2)&0x3) { - case 0 : srcinc = sz; break; - case 1 : srcinc = -sz; break; - case 2 : srcinc = 0; break; - case 3 : // reserved + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][(REG_SPICNT >> 20) & 0xff], REG_SPICNT & 0xfff, val); return; - } - if ((MMU.DMACrt[proc][num]>>26)&1) - for(; i < taille; ++i) - { - MMU_write32(proc, dst, MMU_read32(proc, src)); - dst += dstinc; - src += srcinc; } - else - for(; i < taille; ++i) + + case REG_SPIDATA: { - MMU_write16(proc, dst, MMU_read16(proc, src)); - dst += dstinc; - src += srcinc; - } - } -} + if (val) + MMU.SPI_CMD = val; -#ifdef MMU_ENABLE_ACL + uint16_t spicnt = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][(REG_SPICNT >> 20) & 0xff], REG_SPICNT & 0xfff); -INLINE void check_access(u32 adr, u32 access) { - /* every other mode: sys */ - access |= 1; - if ((NDS_ARM9.CPSR.val & 0x1F) == 0x10) { - /* is user mode access */ - access ^= 1 ; - } - if (armcp15_isAccessAllowed((armcp15_t *)NDS_ARM9.coproc[15],adr,access)==false) { - execute = false ; - } -} -INLINE void check_access_write(u32 adr) { - u32 access = CP15_ACCESS_WRITE; - check_access(adr, access) -} + switch ((spicnt >> 8) & 0x3) + { + case 0: + { + if (!MMU.powerMan_CntRegWritten) + { + MMU.powerMan_CntReg = val & 0xFF; + MMU.powerMan_CntRegWritten = true; + } + else + { + uint16_t reg = MMU.powerMan_CntReg & 0x7F; + reg &= 0x7; + if (reg == 5 || reg == 6 || reg == 7) + reg = 4; + + // (let's start with emulating a DS lite, since it is the more complex case) + if (MMU.powerMan_CntReg & 0x80) + // read + val = MMU.powerMan_Reg[reg]; + else + { + // write + MMU.powerMan_Reg[reg] = val & 0xFF; -u8 FASTCALL MMU_read8_acl(u32 proc, u32 adr, u32 access) -{ - /* on arm9 we need to check the MPU regions */ - if (proc == ARMCPU_ARM9) - check_access(u32 adr, u32 access); - return MMU_read8(proc,adr); -} -u16 FASTCALL MMU_read16_acl(u32 proc, u32 adr, u32 access) -{ - /* on arm9 we need to check the MPU regions */ - if (proc == ARMCPU_ARM9) - check_access(u32 adr, u32 access); - return MMU_read16(proc,adr); -} -u32 FASTCALL MMU_read32_acl(u32 proc, u32 adr, u32 access) -{ - /* on arm9 we need to check the MPU regions */ - if (proc == ARMCPU_ARM9) - check_access(u32 adr, u32 access); - return MMU_read32(proc,adr); -} + static const uint32_t PM_SYSTEM_PWR = BIT(6); /*!< \brief Turn the power *off* if set */ -void FASTCALL MMU_write8_acl(u32 proc, u32 adr, u8 val) -{ - /* check MPU region on ARM9 */ - if (proc == ARMCPU_ARM9) - check_access_write(adr); - MMU_write8(proc,adr,val); -} -void FASTCALL MMU_write16_acl(u32 proc, u32 adr, u16 val) -{ - /* check MPU region on ARM9 */ - if (proc == ARMCPU_ARM9) - check_access_write(adr); - MMU_write16(proc,adr,val) ; -} -void FASTCALL MMU_write32_acl(u32 proc, u32 adr, u32 val) -{ - /* check MPU region on ARM9 */ - if (proc == ARMCPU_ARM9) - check_access_write(adr); - MMU_write32(proc,adr,val) ; -} -#endif + // our totally pathetic register handling, only the one thing we've wanted so far + if (MMU.powerMan_Reg[0] & PM_SYSTEM_PWR) + { + fprintf(stderr, "SYSTEM POWERED OFF VIA ARM7 SPI POWER DEVICE\n"); + execute = false; + } + } + + MMU.powerMan_CntRegWritten = false; + } + break; + } + case 1: /* firmware memory device */ + if (spicnt & 0x3) /* check SPI baudrate (must be 4mhz) */ + { + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, 0); + break; + } + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, fw_transfer(&MMU.fw, val & 0xFF)); + return; + case 2: + { + if (nds.Is_DSI()) + { + // pass data to TSC + val = MMU_new.dsi_tsc.write16(val); + + // apply reset command if appropriate + if (!BIT11(MMU.SPI_CNT)) + MMU_new.dsi_tsc.reset_command(); -#ifdef PROFILE_MEMORY_ACCESS + break; + } -#define PROFILE_PREFETCH 0 -#define PROFILE_READ 1 -#define PROFILE_WRITE 2 - -struct mem_access_profile { - u64 num_accesses; - u32 address_mask; - u32 masked_value; -}; + int channel = (MMU.SPI_CMD & 0x70) >> 4; + //fprintf(stderr, "%08X\n",channel); + switch (channel) + { + case TSC_MEASURE_TEMP1: + if (spicnt & 0x800) + { + if (partie) + { + val = 1632; + partie = 0; + break; + } + val = 716 >> 5; + partie = 1; + break; + } + val = 1632; + partie = 1; + break; + case TSC_MEASURE_TEMP2: + if(spicnt & 0x800) + { + if(partie) + { + val = 776; + partie = 0; + break; + } + val = 865 >> 5; + partie = 1; + break; + } + val = 776; + partie = 1; + break; + case TSC_MEASURE_Y: + if (MMU.SPI_CNT & (1 << 11)) + { + if (partie) + { + partie = 0; + break; + } + partie = 1; + break; + } + partie = 1; + break; + case TSC_MEASURE_Z1: // Z1 + if (spicnt & 0x800) + { + if (partie) + { + val = (val << 3) & 0x7FF; + partie = 0; + break; + } + val >>= 5; + partie = 1; + break; + } + val = (val << 3) & 0x7FF; + partie = 1; + break; + case TSC_MEASURE_Z2: // Z2 + if (spicnt & 0x800) + { + if (partie) + { + val = (val << 3) & 0x7FF; + partie = 0; + break; + } + val >>= 5; + partie = 1; + break; + } + val = (val << 3) & 0x7FF; + partie = 1; + break; + case TSC_MEASURE_X: + if (spicnt & 0x800) + { + if (partie) + { + partie = 0; + break; + } + partie = 1; + break; + } + partie = 1; + } + } + } -#define PROFILE_NUM_MEM_ACCESS_PROFILES 4 + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][(REG_SPIDATA >> 20) & 0xff], REG_SPIDATA & 0xfff, val); + return; + } -static u64 profile_num_accesses[2][3]; -static u64 profile_unknown_addresses[2][3]; -static struct mem_access_profile -profile_memory_accesses[2][3][PROFILE_NUM_MEM_ACCESS_PROFILES]; - -static void -setup_profiling( void) { - int i; - - for ( i = 0; i < 2; i++) { - int access_type; - - for ( access_type = 0; access_type < 3; access_type++) { - profile_num_accesses[i][access_type] = 0; - profile_unknown_addresses[i][access_type] = 0; - - /* - * Setup the access testing structures - */ - profile_memory_accesses[i][access_type][0].address_mask = 0x0e000000; - profile_memory_accesses[i][access_type][0].masked_value = 0x00000000; - profile_memory_accesses[i][access_type][0].num_accesses = 0; - - /* main memory */ - profile_memory_accesses[i][access_type][1].address_mask = 0x0f000000; - profile_memory_accesses[i][access_type][1].masked_value = 0x02000000; - profile_memory_accesses[i][access_type][1].num_accesses = 0; - - /* shared memory */ - profile_memory_accesses[i][access_type][2].address_mask = 0x0f800000; - profile_memory_accesses[i][access_type][2].masked_value = 0x03000000; - profile_memory_accesses[i][access_type][2].num_accesses = 0; - - /* arm7 memory */ - profile_memory_accesses[i][access_type][3].address_mask = 0x0f800000; - profile_memory_accesses[i][access_type][3].masked_value = 0x03800000; - profile_memory_accesses[i][access_type][3].num_accesses = 0; - } - } -} - -static void -profile_memory_access( int arm9, u32 adr, int access_type) { - static int first = 1; - int mem_profile; - int address_found = 0; - - if ( first) { - setup_profiling(); - first = 0; - } - - profile_num_accesses[arm9][access_type] += 1; - - for ( mem_profile = 0; - mem_profile < PROFILE_NUM_MEM_ACCESS_PROFILES && - !address_found; - mem_profile++) { - if ( (adr & profile_memory_accesses[arm9][access_type][mem_profile].address_mask) == - profile_memory_accesses[arm9][access_type][mem_profile].masked_value) { - /*printf( "adr %08x mask %08x res %08x expected %08x\n", - adr, - profile_memory_accesses[arm9][access_type][mem_profile].address_mask, - adr & profile_memory_accesses[arm9][access_type][mem_profile].address_mask, - profile_memory_accesses[arm9][access_type][mem_profile].masked_value);*/ - address_found = 1; - profile_memory_accesses[arm9][access_type][mem_profile].num_accesses += 1; - } - } - - if ( !address_found) { - profile_unknown_addresses[arm9][access_type] += 1; - } -} - - -static const char *access_type_strings[] = { - "prefetch", - "read ", - "write " -}; + /* NOTICE: Perhaps we have to use gbatek-like reg names instead of libnds-like ones ...*/ -void -print_memory_profiling( void) { - int arm; - - printf("------ Memory access profile ------\n"); - - for ( arm = 0; arm < 2; arm++) { - int access_type; - - for ( access_type = 0; access_type < 3; access_type++) { - int mem_profile; - printf("ARM%c: num of %s %lld\n", - arm ? '9' : '7', - access_type_strings[access_type], - profile_num_accesses[arm][access_type]); - - for ( mem_profile = 0; - mem_profile < PROFILE_NUM_MEM_ACCESS_PROFILES; - mem_profile++) { - printf( "address %08lx: %llu\n", - profile_memory_accesses[arm][access_type][mem_profile].masked_value, - profile_memory_accesses[arm][access_type][mem_profile].num_accesses); - } - - printf( "unknown addresses %lld\n", - profile_unknown_addresses[arm][access_type]); - - printf( "\n"); - } - } - - printf("------ End of Memory access profile ------\n\n"); -} -#else -void -print_memory_profiling( void) { -} -#endif /* End of PROFILE_MEMORY_ACCESS area */ - -static u16 FASTCALL -arm9_prefetch16( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_PREFETCH); -#endif + case REG_IME: + NDS_Reschedule(); + MMU.reg_IME[ARMCPU_ARM7] = val & 0x01; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x208, val); + return; + case REG_IE: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM7] = (MMU.reg_IE[ARMCPU_ARM7] & 0xFFFF0000) | val; + return; + case REG_IE + 2: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM7] = (MMU.reg_IE[ARMCPU_ARM7] & 0xFFFF) | (val << 16); + return; -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadWord(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); - } - /* access to main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - return T1ReadWord( MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]); - } -#endif + case REG_IF: + REG_IF_WriteWord(ARMCPU_ARM7, 0, val); + return; + case REG_IF + 2: + REG_IF_WriteWord(ARMCPU_ARM7, 2, val); + return; - return MMU_read16( ARMCPU_ARM9, adr); -} -static u32 FASTCALL -arm9_prefetch32( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_PREFETCH); -#endif + case REG_IPCSYNC: + MMU_IPCSync(ARMCPU_ARM7, val); + return; -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadLong(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); - } - /* access to main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - return T1ReadLong( MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]); - } -#endif + case REG_IPCFIFOCNT: + IPC_FIFOcnt(ARMCPU_ARM7, val); + return; + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + MMU.timerReload[ARMCPU_ARM7][(adr >> 2) & 3] = val; + return; + case REG_TM0CNTH: + case REG_TM1CNTH: + case REG_TM2CNTH: + case REG_TM3CNTH: + { + int timerIndex = ((adr - 2) >> 2) & 0x3; + write_timer(ARMCPU_ARM7, timerIndex, val); + return; + } + + case REG_GCROMCTRL: + MMU_writeToGCControl(ARMCPU_ARM7, (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x1A4) & 0xFFFF0000) | val); + return; + case REG_GCROMCTRL + 2: + MMU_writeToGCControl(ARMCPU_ARM7, (T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x1A4) & 0xFFFF) | (val << 16)); + return; + } + + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20], val); + return; + } - return MMU_read32( ARMCPU_ARM9, adr); + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20], val); } -static u8 FASTCALL -arm9_read8( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_READ); -#endif +// ================================================= MMU ARM7 write 32 +void FASTCALL _MMU_ARM7_write32(uint32_t adr, uint32_t val) +{ + adr &= 0x0FFFFFFC; -#ifdef EARLY_MEMORY_ACCESS - if( (adr&(~0x3FFF)) == MMU.DTCMRegion) - { - return ARM9Mem.ARM9_DTCM[adr&0x3FFF]; - } - /* access to main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - return MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF] - [adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]]; - } -#endif + if (adr < 0x02000000) + return; // can't write to bios or entire area below main memory - return MMU_read8( ARMCPU_ARM9, adr); -} -static u16 FASTCALL -arm9_read16( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_READ); -#endif + if (adr >= 0x08000000 && adr < 0x0A010000) + return; -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadWord(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); - } - - /* access to main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - return T1ReadWord( MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]); - } -#endif + if (adr >= 0x04000400 && adr < 0x04000520) + { + SPU_WriteLong(adr, val); + return; + } - return MMU_read16( ARMCPU_ARM9, adr); -} -static u32 FASTCALL -arm9_read32( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_READ); -#endif + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + { + MMU_new.write_dma(ARMCPU_ARM7, 32, adr, val); + return; + } -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Returns data from DTCM (ARM9 only) */ - return T1ReadLong(ARM9Mem.ARM9_DTCM, adr & 0x3FFF); - } - /* access to main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - return T1ReadLong( MMU.MMU_MEM[ARMCPU_ARM9][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM9][(adr >> 20) & 0xFF]); - } -#endif + switch (adr) + { + case REG_IME: + NDS_Reschedule(); + MMU.reg_IME[ARMCPU_ARM7] = val & 0x01; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x208, val); + return; - return MMU_read32( ARMCPU_ARM9, adr); -} + case REG_IE: + NDS_Reschedule(); + MMU.reg_IE[ARMCPU_ARM7] = val; + return; + case REG_IF: + REG_IF_WriteLong(ARMCPU_ARM7, val); + return; -static void FASTCALL -arm9_write8(void *data, u32 adr, u8 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_WRITE); -#endif + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + { + int timerIndex = (adr >> 2) & 0x3; + MMU.timerReload[ARMCPU_ARM7][timerIndex] = val & 0xFFFF; + T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][0x40], adr & 0xFFF, val & 0xFFFF); + write_timer(ARMCPU_ARM7, timerIndex, val >> 16); + return; + } -#ifdef EARLY_MEMORY_ACCESS - if( (adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Writes data in DTCM (ARM9 only) */ - ARM9Mem.ARM9_DTCM[adr&0x3FFF] = val; - return ; - } - /* main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - MMU.MMU_MEM[ARMCPU_ARM9][(adr>>20)&0xFF] - [adr&MMU.MMU_MASK[ARMCPU_ARM9][(adr>>20)&0xFF]] = val; - return; - } -#endif + case REG_IPCSYNC: + MMU_IPCSync(ARMCPU_ARM7, val); + return; + case REG_IPCFIFOCNT: + IPC_FIFOcnt(ARMCPU_ARM7, val & 0xFFFF); + return; + case REG_IPCFIFOSEND: + IPC_FIFOsend(ARMCPU_ARM7, val); + return; - MMU_write8( ARMCPU_ARM9, adr, val); -} -static void FASTCALL -arm9_write16(void *data, u32 adr, u16 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_WRITE); -#endif + case REG_GCROMCTRL: + MMU_writeToGCControl(ARMCPU_ARM7, val); + return; -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Writes in DTCM (ARM9 only) */ - T1WriteWord(ARM9Mem.ARM9_DTCM, adr & 0x3FFF, val); - return; - } - /* main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - T1WriteWord( MMU.MMU_MEM[ARMCPU_ARM9][(adr>>20)&0xFF], - adr&MMU.MMU_MASK[ARMCPU_ARM9][(adr>>20)&0xFF], val); - return; - } -#endif + case REG_GCDATAIN: + slot1_device.write32(ARMCPU_ARM7, REG_GCDATAIN,val); + return; + } + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20], val); + return; + } - MMU_write16( ARMCPU_ARM9, adr, val); + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [shash] + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20], val); } -static void FASTCALL -arm9_write32(void *data, u32 adr, u32 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 1, adr, PROFILE_WRITE); -#endif -#ifdef EARLY_MEMORY_ACCESS - if((adr & ~0x3FFF) == MMU.DTCMRegion) - { - /* Writes in DTCM (ARM9 only) */ - T1WriteLong(ARM9Mem.ARM9_DTCM, adr & 0x3FFF, val); - return; - } - /* main memory */ - if ( (adr & 0x0f000000) == 0x02000000) { - T1WriteLong( MMU.MMU_MEM[ARMCPU_ARM9][(adr>>20)&0xFF], - adr&MMU.MMU_MASK[ARMCPU_ARM9][(adr>>20)&0xFF], val); - return; - } -#endif +// ================================================= MMU ARM7 read 08 +uint8_t FASTCALL _MMU_ARM7_read08(uint32_t adr) +{ + adr &= 0x0FFFFFFF; - MMU_write32( ARMCPU_ARM9, adr, val); -} + if (adr < 0x4000) + { + // How accurate is this? our R[15] may not be exactly what the hardware uses (may use something less by up to 0x08) + // This may be inaccurate at the very edge cases. + if (NDS_ARM7.instruct_adr > 0x3FFF) + return 0xFF; + } + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; + if (adr >= 0x04000400 && adr < 0x04000520) + return SPU_ReadByte(adr); + if ((adr >> 24) == 4) + { + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM7, 8, adr) & 0xFF; -static u16 FASTCALL -arm7_prefetch16( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_PREFETCH); -#endif + // Address is an IO register -#ifdef EARLY_MEMORY_ACCESS - /* ARM7 private memory */ - if ( (adr & 0x0f800000) == 0x03800000) { - T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM7][(adr >> 20) & 0xFF]); - } -#endif + switch (adr) + { + case REG_IF: + return MMU.gen_IF() & 0xFF; + case REG_IF + 1: + return (MMU.gen_IF() >> 8) & 0xFF; + case REG_IF + 2: + return (MMU.gen_IF() >> 16) & 0xFF; + case REG_IF + 3: + return (MMU.gen_IF() >> 24) & 0xFF; - return MMU_read16( ARMCPU_ARM7, adr); -} -static u32 FASTCALL -arm7_prefetch32( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_PREFETCH); -#endif + case REG_WRAMSTAT: + return MMU.WRAMCNT; + } -#ifdef EARLY_MEMORY_ACCESS - /* ARM7 private memory */ - if ( (adr & 0x0f800000) == 0x03800000) { - T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM7][(adr >> 20) & 0xFF], - adr & MMU.MMU_MASK[ARMCPU_ARM7][(adr >> 20) & 0xFF]); - } -#endif + return MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]]; + } - return MMU_read32( ARMCPU_ARM7, adr); + return MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20][adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]]; } -static u8 FASTCALL -arm7_read8( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_READ); -#endif +// ================================================= MMU ARM7 read 16 +uint16_t FASTCALL _MMU_ARM7_read16(uint32_t adr) +{ + adr &= 0x0FFFFFFE; - return MMU_read8( ARMCPU_ARM7, adr); -} -static u16 FASTCALL -arm7_read16( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_READ); -#endif + if (adr < 0x4000) + { + if (NDS_ARM7.instruct_adr > 0x3FFF) + return 0xFFFF; + } - return MMU_read16( ARMCPU_ARM7, adr); -} -static u32 FASTCALL -arm7_read32( void *data, u32 adr) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_READ); -#endif + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; - return MMU_read32( ARMCPU_ARM7, adr); -} + if (adr >= 0x04000400 && adr < 0x04000520) + return SPU_ReadWord(adr); + if ((adr >> 24) == 4) + { + // Address is an IO register -static void FASTCALL -arm7_write8(void *data, u32 adr, u8 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_WRITE); -#endif + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM7, 16, adr) & 0xFFFF; - MMU_write8( ARMCPU_ARM7, adr, val); -} -static void FASTCALL -arm7_write16(void *data, u32 adr, u16 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_WRITE); -#endif + switch (adr) + { + case REG_IME: + return MMU.reg_IME[ARMCPU_ARM7] & 0xFFFF; - MMU_write16( ARMCPU_ARM7, adr, val); -} -static void FASTCALL -arm7_write32(void *data, u32 adr, u32 val) { -#ifdef PROFILE_MEMORY_ACCESS - profile_memory_access( 0, adr, PROFILE_WRITE); -#endif + case REG_IE: + return MMU.reg_IE[ARMCPU_ARM7] & 0xFFFF; + case REG_IE + 2: + return (MMU.reg_IE[ARMCPU_ARM7] >> 16) & 0xFFFF; + + case REG_IF: + return MMU.gen_IF() & 0xFFFF; + case REG_IF + 2: + return (MMU.gen_IF() >> 16) & 0xFFFF; + + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + return read_timer(ARMCPU_ARM7, (adr & 0xF) >> 2); + + case REG_VRAMSTAT: + // make sure WRAMSTAT is stashed and then fallthrough to return the value from memory. i know, gross. + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x241, MMU.WRAMCNT); + break; + } + return T1ReadWord_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]); + } - MMU_write32( ARMCPU_ARM7, adr, val); + /* Returns data from memory */ + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF + return T1ReadWord_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]); } +// ================================================= MMU ARM7 read 32 +uint32_t FASTCALL _MMU_ARM7_read32(uint32_t adr) +{ + adr &= 0x0FFFFFFC; + if (adr < 0x4000) + { + if (NDS_ARM7.instruct_adr > 0x3FFF) + return 0xFFFFFFFF; + } -/* - * the base memory interfaces - */ -struct armcpu_memory_iface arm9_base_memory_iface = { - arm9_prefetch32, - arm9_prefetch16, - - arm9_read8, - arm9_read16, - arm9_read32, - - arm9_write8, - arm9_write16, - arm9_write32 -}; + if (adr >= 0x08000000 && adr < 0x0A010000) + return 0; -struct armcpu_memory_iface arm7_base_memory_iface = { - arm7_prefetch32, - arm7_prefetch16, - - arm7_read8, - arm7_read16, - arm7_read32, - - arm7_write8, - arm7_write16, - arm7_write32 -}; + if (adr >= 0x04000400 && adr < 0x04000520) + return SPU_ReadLong(adr); -/* - * The direct memory interface for the ARM9. - * This avoids the ARM9 protection unit when accessing - * memory. - */ -struct armcpu_memory_iface arm9_direct_memory_iface = { - /* the prefetch is not used */ - nullptr, - nullptr, - - arm9_read8, - arm9_read16, - arm9_read32, - - arm9_write8, - arm9_write16, - arm9_write32 -}; + if ((adr >> 24) == 4) + { + // Address is an IO register + + if (MMU_new.is_dma(adr)) + return MMU_new.read_dma(ARMCPU_ARM7, 32, adr); + + switch (adr) + { + case REG_IME: + return MMU.reg_IME[ARMCPU_ARM7]; + case REG_IE: + return MMU.reg_IE[ARMCPU_ARM7]; + case REG_IF: + return MMU.gen_IF(); + case REG_IPCFIFORECV: + return IPC_FIFOrecv(ARMCPU_ARM7); + case REG_TM0CNTL: + case REG_TM1CNTL: + case REG_TM2CNTL: + case REG_TM3CNTL: + { + uint32_t val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][0x40], (adr + 2) & 0xFFF); + return MMU.timer[ARMCPU_ARM7][(adr & 0xF) >> 2] | (val << 16); + } + case REG_GCROMCTRL: + break; + case REG_GCDATAIN: + return MMU_readFromGC(ARMCPU_ARM7); + + case REG_VRAMSTAT: + // make sure WRAMSTAT is stashed and then fallthrough return the value from memory. i know, gross. + T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM7][0x40], 0x241, MMU.WRAMCNT); + break; + } + + return T1ReadLong_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]); + } + + // Returns data from memory + // Removed the &0xFF as they are implicit with the adr&0x0FFFFFFF [zeromus, inspired by shash] + return T1ReadLong_guaranteedAligned(MMU.MMU_MEM[ARMCPU_ARM7][adr >> 20], adr & MMU.MMU_MASK[ARMCPU_ARM7][adr >> 20]); +} + +// ========================================================================================================= + +// these templates needed to be instantiated manually +template uint32_t MMU_struct::gen_IF(); +template uint32_t MMU_struct::gen_IF(); diff -Nru audacious-plugins-4.1/src/xsf/desmume/MMU.h audacious-plugins-4.2/src/xsf/desmume/MMU.h --- audacious-plugins-4.1/src/xsf/desmume/MMU.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/MMU.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,181 +1,804 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - +/* + Copyright (C) 2006 yopyop Copyright (C) 2007 shash + Copyright (C) 2007-2012 DeSmuME team - This file is part of DeSmuME + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef MMU_H -#define MMU_H +#pragma once #include "FIFO.h" -#include "dscard.h" - -#include "ARM9.h" +#include "mem.h" +#include "registers.h" #include "mc.h" +#include "bits.h" +#include "readwrite.h" -extern char szRomPath[512]; -extern char szRomBaseName[512]; +#ifdef HAVE_LUA +#include "lua-engine.h" +#endif -/* theses macros are designed for reading/writing in memory (m is a pointer to memory, like MMU.MMU_MEM[proc], and a is an adress, like 0x04000000 */ -#define MEM_8(m, a) (((u8*)(m[((a)>>20)&0xff]))[((a)&0xfff)]) +#define ARMCPU_ARM7 1 +#define ARMCPU_ARM9 0 +#define ARMPROC (PROCNUM ? NDS_ARM7 : NDS_ARM9) + +typedef const uint8_t TWaitState; + +enum EDMAMode +{ + EDMAMode_Immediate = 0, + EDMAMode_VBlank = 1, + EDMAMode_HBlank = 2, + EDMAMode_HStart = 3, + EDMAMode_MemDisplay = 4, + EDMAMode_Card = 5, + EDMAMode_GBASlot = 6, + EDMAMode_GXFifo = 7, + EDMAMode7_Wifi = 8, + EDMAMode7_GBASlot = 9 +}; -/* theses ones for reading in rom data */ -#define ROM_8(m, a) (((u8*)(m))[(a)]) +enum EDMABitWidth +{ + EDMABitWidth_16 = 0, + EDMABitWidth_32 = 1 +}; -#define IPCFIFO 0 -#define MAIN_MEMORY_DISP_FIFO 2 +enum EDMASourceUpdate +{ + EDMASourceUpdate_Increment = 0, + EDMASourceUpdate_Decrement = 1, + EDMASourceUpdate_Fixed = 2, + EDMASourceUpdate_Invalid = 3 +}; -typedef struct { - //ARM7 mem - u8 ARM7_BIOS[0x4000]; - u8 ARM7_ERAM[0x10000]; - u8 ARM7_REG[0x10000]; - u8 ARM7_WIRAM[0x10000]; +enum EDMADestinationUpdate +{ + EDMADestinationUpdate_Increment = 0, + EDMADestinationUpdate_Decrement = 1, + EDMADestinationUpdate_Fixed = 2, + EDMADestinationUpdate_IncrementReload = 3 +}; - u8 vram_mode[9]; - u8 vScreen; +// TODO +// n.b. this may be a bad idea, for complex registers like the dma control register. +// we need to know exactly what part was written to, instead of assuming all 32bits were written. +class TRegister_32 +{ +public: + virtual ~TRegister_32() { } + + virtual uint32_t read32() = 0; + virtual void write32(uint32_t val) = 0; + void write(int size, uint32_t adr, uint32_t val) + { + if (size == 32) + this->write32(val); + else + { + uint32_t offset = adr & 3; + if (size == 8) + { + printf("WARNING! 8BIT DMA ACCESS\n"); + uint32_t mask = 0xFF << (offset << 3); + this->write32((this->read32() & ~mask) | (val << (offset << 3))); + } + else if (size == 16) + { + uint32_t mask = 0xFFFF << (offset << 3); + this->write32((this->read32() & ~mask) | (val << (offset << 3))); + } + } + } + + uint32_t read(int size, uint32_t adr) + { + if (size == 32) + return this->read32(); + else + { + uint32_t offset = adr & 3; + if (size == 8) + { + printf("WARNING! 8BIT DMA ACCESS\n"); + return (this->read32() >> (offset << 3)) & 0xFF; + } + else + return (this->read32() >> (offset << 3)) & 0xFFFF; + } + } +}; - //Shared ram - u8 SWIRAM[0x8000]; +struct TGXSTAT : public TRegister_32 +{ + TGXSTAT() + { + this->gxfifo_irq = this->se = this->tr = this->tb = this->sb = 0; + this->fifo_empty = true; + this->fifo_low = false; + } + virtual ~TGXSTAT() { } + uint8_t tb; // test busy + uint8_t tr; // test result + uint8_t se; // stack error + uint8_t sb; // stack busy + uint8_t gxfifo_irq; // irq configuration - //Card rom & ram - u8 * CART_ROM; - u8 CART_RAM[0x10000]; + bool fifo_empty, fifo_low; - //Unused ram - u8 UNUSED_RAM[4]; + virtual uint32_t read32(); + virtual void write32(uint32_t val); +}; - u8 * * MMU_MEM[2]; - u32 * MMU_MASK[2]; +void triggerDma(EDMAMode mode); - u8 ARM9_RW_MODE; +class DivController +{ +public: + DivController() : mode(0), busy(0) { } + void exec(); + uint8_t mode, busy, div0; + uint16_t read16() { return this->mode | (this->busy << 15) | (this->div0 << 14); } + void write16(uint16_t val) + { + this->mode = val & 3; + // todo - do we clear the div0 flag here or is that strictly done by the divider unit? + } +}; - FIFO fifos[16]; +class SqrtController +{ +public: + SqrtController() : mode(0), busy(0) { } + void exec(); + uint8_t mode, busy; + uint16_t read16() { return this->mode | (this->busy << 15); } + void write16(uint16_t val) { this->mode = val & 1; } +}; - u32 * MMU_WAIT16[2]; - u32 * MMU_WAIT32[2]; +class DmaController +{ +public: + uint8_t enable, irq, repeatMode, _startmode; + uint8_t userEnable; + uint32_t wordcount; + EDMAMode startmode; + EDMABitWidth bitWidth; + EDMASourceUpdate sar; + EDMADestinationUpdate dar; + uint32_t saddr, daddr; + uint32_t saddr_user, daddr_user; + + // indicates whether the dma needs to be checked for triggering + bool dmaCheck; + + // indicates whether the dma right now is logically running + // (though for now we copy all the data when it triggers) + bool running; + + bool paused; + + // this flag will sometimes be set when a start condition is triggered + // other conditions may be automatically triggered based on scanning conditions + bool triggered; + + uint64_t nextEvent; + + int procnum, chan; + + void exec(); + template void doCopy(); + void doPause(); + void doStop(); + void doSchedule(); + void tryTrigger(EDMAMode mode); + + DmaController() : + enable(0), irq(0), repeatMode(0), _startmode(0), + wordcount(0), startmode(EDMAMode_Immediate), + bitWidth(EDMABitWidth_16), + sar(EDMASourceUpdate_Increment), dar(EDMADestinationUpdate_Increment), + // if saddr isnt cleared then rings of fate will trigger copy protection + // by inspecting dma3 saddr when it boots + saddr(0), daddr(0), + saddr_user(0), daddr_user(0), + dmaCheck(false), + running(false), + paused(false), + triggered(false), + nextEvent(0), + sad(&saddr_user), + dad(&daddr_user) + { + this->sad.controller = this; + this->dad.controller = this; + this->ctrl.controller = this; + this->regs[0] = &this->sad; + this->regs[1] = &this->dad; + this->regs[2] = &this->ctrl; + } + + class AddressRegister : public TRegister_32 + { + public: + // we pass in a pointer to the controller here so we can alert it if anything changes + DmaController *controller; + uint32_t *const ptr; + AddressRegister(uint32_t *_ptr) : ptr(_ptr) { } + virtual ~AddressRegister() { } + virtual uint32_t read32() + { + return *this->ptr; + } + virtual void write32(uint32_t val) + { + *this->ptr = val; + } + }; + + class ControlRegister : public TRegister_32 + { + public: + // we pass in a pointer to the controller here so we can alert it if anything changes + DmaController *controller; + ControlRegister() { } + virtual ~ControlRegister() { } + virtual uint32_t read32() + { + return this->controller->read32(); + } + virtual void write32(uint32_t val) + { + return this->controller->write32(val); + } + }; + + AddressRegister sad, dad; + ControlRegister ctrl; + TRegister_32 *regs[3]; - u32 DTCMRegion; - u32 ITCMRegion; + void write32(uint32_t val); + uint32_t read32(); +}; - u16 timer[2][4]; - s32 timerMODE[2][4]; - u32 timerON[2][4]; - u32 timerRUN[2][4]; - u16 timerReload[2][4]; +enum ECardMode +{ + CardMode_Normal = 0, + CardMode_KEY1, + CardMode_KEY2 +}; + +struct nds_dscard +{ + uint8_t command[8]; + + uint32_t address; + uint32_t transfer_count; + + ECardMode mode; + + // NJSD stuff + int blocklen; +}; - u32 reg_IME[2]; - u32 reg_IE[2]; - u32 reg_IF[2]; +#define DUP2(x) x, x +#define DUP4(x) x, x, x, x +#define DUP8(x) x, x, x, x, x, x, x, x +#define DUP16(x) x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x + +struct MMU_struct +{ + //ARM9 mem + uint8_t ARM9_ITCM[0x8000]; + uint8_t ARM9_DTCM[0x4000]; + + //u8 MAIN_MEM[4*1024*1024]; // expanded from 4MB to 8MB to support debug consoles + //u8 MAIN_MEM[8*1024*1024]; // expanded from 8MB to 16MB to support dsi + uint8_t MAIN_MEM[16*1024*1024]; // expanded from 8MB to 16MB to support dsi + uint8_t ARM9_REG[0x1000000]; + uint8_t ARM9_BIOS[0x8000]; + uint8_t ARM9_VMEM[0x800]; + +#include "PACKED.h" + struct + { + uint8_t ARM9_LCD[0xA4000]; + // an extra 128KB for blank memory, directly after arm9_lcd, so that + // we can easily map things to the end of arm9_lcd to represent + // an unmapped state + uint8_t blank_memory[0x100000 - 0xA4000]; + }; +#include "PACKED_END.h" + + uint8_t ARM9_OAM[0x800]; + + uint8_t *ExtPal[2][4]; + uint8_t *ObjExtPal[2][2]; + + struct TextureInfo + { + uint8_t *texPalSlot[6]; + uint8_t *textureSlotAddr[4]; + } texInfo; + + // ARM7 mem + uint8_t ARM7_BIOS[0x4000]; + uint8_t ARM7_ERAM[0x10000]; // 64KB of exclusive WRAM + uint8_t ARM7_REG[0x10000]; + uint8_t ARM7_WIRAM[0x10000]; // WIFI ram + + // VRAM mapping + uint8_t VRAM_MAP[4][32]; + uint32_t LCD_VRAM_ADDR[10]; + uint8_t LCDCenable[10]; + + // 32KB of shared WRAM - can be switched between ARM7 & ARM9 in two blocks + uint8_t SWIRAM[0x8000]; + + // Card rom & ram + uint8_t * CART_ROM; + + // Unused ram + uint8_t UNUSED_RAM[4]; + + // this is here so that we can trap glitchy emulator code + // which is accessing offsets 5,6,7 of unused ram due to unaligned accesses + // (also since the emulator doesn't prevent unaligned accesses) + uint8_t MORE_UNUSED_RAM[4]; + + static uint8_t *MMU_MEM[2][256]; + static uint32_t MMU_MASK[2][256]; + + uint8_t ARM9_RW_MODE; + + uint32_t DTCMRegion; + uint32_t ITCMRegion; + + uint16_t timer[2][4]; + int32_t timerMODE[2][4]; + uint32_t timerON[2][4]; + uint32_t timerRUN[2][4]; + uint16_t timerReload[2][4]; + + uint32_t reg_IME[2]; + uint32_t reg_IE[2]; + + // these are the user-controlled IF bits. some IF bits are generated as necessary from hardware conditions + uint32_t reg_IF_bits[2]; + // these flags are set occasionally to indicate that an irq should have entered the pipeline, and processing will be deferred a tiny bit to help emulate things + uint32_t reg_IF_pending[2]; + + template uint32_t gen_IF(); + + bool divRunning; + int64_t divResult; + int64_t divMod; + uint64_t divCycles; + + bool sqrtRunning; + uint32_t sqrtResult; + uint64_t sqrtCycles; + + uint16_t SPI_CNT; + uint16_t SPI_CMD; + uint16_t AUX_SPI_CNT; + uint16_t AUX_SPI_CMD; + + uint8_t WRAMCNT; + + uint8_t powerMan_CntReg; + bool powerMan_CntRegWritten; + uint8_t powerMan_Reg[5]; - u32 DMAStartTime[2][4]; - s32 DMACycle[2][4]; - u32 DMACrt[2][4]; - BOOL DMAing[2][4]; + memory_chip_t fw; - memory_chip_t fw; - memory_chip_t bupmem; + nds_dscard dscard[2]; +}; - nds_dscard dscard[2]; +// everything in here is derived from libnds behaviours. no hardware tests yet +class DSI_TSC +{ +public: + DSI_TSC(); + void reset_command(); + uint16_t write16(uint16_t val); +private: + uint16_t read16(); + uint8_t reg_selection; + uint8_t read_flag; + int32_t state; + int32_t readcount; + + // registers[0] contains the current page. + // we are going to go ahead and save these out in case we want to change the way this is emulated in the future.. + // we may want to poke registers in here at more convenient times and have the TSC dumbly pluck them out, + // rather than generate the values on the fly + uint8_t registers[0x80]; +}; -} MMU_struct; +// this contains things which can't be memzeroed because they are smarter classes +struct MMU_struct_new +{ + MMU_struct_new(); + BackupDevice backupDevice; + DmaController dma[2][4]; + TGXSTAT gxstat; + SqrtController sqrt; + DivController div; + DSI_TSC dsi_tsc; + + void write_dma(int proc, int size, uint32_t adr, uint32_t val); + uint32_t read_dma(int proc, int size, uint32_t adr); + bool is_dma(uint32_t adr) { return adr >= _REG_DMA_CONTROL_MIN && adr <= _REG_DMA_CONTROL_MAX; } +}; extern MMU_struct MMU; +extern MMU_struct_new MMU_new; +void MMU_Init(); +void MMU_DeInit(); + +void MMU_Reset(); + +void MMU_setRom(uint8_t *rom, uint32_t mask); +void MMU_unsetRom(); + +#define VRAM_BANKS 9 +#define VRAM_BANK_A 0 +#define VRAM_BANK_B 1 +#define VRAM_BANK_C 2 +#define VRAM_BANK_D 3 +#define VRAM_BANK_E 4 +#define VRAM_BANK_F 5 +#define VRAM_BANK_G 6 +#define VRAM_BANK_H 7 +#define VRAM_BANK_I 8 + +#define VRAM_PAGE_ABG 0 +#define VRAM_PAGE_BBG 128 +#define VRAM_PAGE_AOBJ 256 +#define VRAM_PAGE_BOBJ 384 + +struct VramConfiguration +{ + enum Purpose + { + OFF, + INVALID, + ABG, + BBG, + AOBJ, + BOBJ, + LCDC, + ARM7, + TEX, + TEXPAL, + ABGEXTPAL, + BBGEXTPAL, + AOBJEXTPAL, + BOBJEXTPAL + }; + + struct BankInfo + { + Purpose purpose; + int ofs; + } banks[VRAM_BANKS]; + + void clear() + { + for (int i = 0; i < VRAM_BANKS; ++i) + { + banks[i].ofs = 0; + banks[i].purpose = OFF; + } + } +}; -struct armcpu_memory_iface { - /** the 32 bit instruction prefetch */ - u32 FASTCALL (*prefetch32)( void *data, u32 adr); - - /** the 16 bit instruction prefetch */ - u16 FASTCALL (*prefetch16)( void *data, u32 adr); - - /** read 8 bit data value */ - u8 FASTCALL (*read8)( void *data, u32 adr); - /** read 16 bit data value */ - u16 FASTCALL (*read16)( void *data, u32 adr); - /** read 32 bit data value */ - u32 FASTCALL (*read32)( void *data, u32 adr); - - /** write 8 bit data value */ - void FASTCALL (*write8)( void *data, u32 adr, u8 val); - /** write 16 bit data value */ - void FASTCALL (*write16)( void *data, u32 adr, u16 val); - /** write 32 bit data value */ - void FASTCALL (*write32)( void *data, u32 adr, u32 val); - - void *data; -}; - - -void MMU_Init(void); -void MMU_DeInit(void); - -void MMU_clearMem( void); - -void MMU_setRom(u8 * rom, u32 mask); -void MMU_unsetRom( void); - - -/** - * Memory reading - */ -u8 FASTCALL MMU_read8(u32 proc, u32 adr); -u16 FASTCALL MMU_read16(u32 proc, u32 adr); -u32 FASTCALL MMU_read32(u32 proc, u32 adr); - -#ifdef MMU_ENABLE_ACL - u8 FASTCALL MMU_read8_acl(u32 proc, u32 adr, u32 access); - u16 FASTCALL MMU_read16_acl(u32 proc, u32 adr, u32 access); - u32 FASTCALL MMU_read32_acl(u32 proc, u32 adr, u32 access); -#else - #define MMU_read8_acl(proc,adr,access) MMU_read8(proc,adr) - #define MMU_read16_acl(proc,adr,access) MMU_read16(proc,adr) - #define MMU_read32_acl(proc,adr,access) MMU_read32(proc,adr) -#endif - -/** - * Memory writing - */ -void FASTCALL MMU_write8(u32 proc, u32 adr, u8 val); -void FASTCALL MMU_write16(u32 proc, u32 adr, u16 val); -void FASTCALL MMU_write32(u32 proc, u32 adr, u32 val); - -#ifdef MMU_ENABLE_ACL - void FASTCALL MMU_write8_acl(u32 proc, u32 adr, u8 val); - void FASTCALL MMU_write16_acl(u32 proc, u32 adr, u16 val); - void FASTCALL MMU_write32_acl(u32 proc, u32 adr, u32 val); -#else - #define MMU_write8_acl MMU_write8 - #define MMU_write16_acl MMU_write16 - #define MMU_write32_acl MMU_write32 +extern VramConfiguration vramConfiguration; + +const int VRAM_ARM9_PAGES = 512; +extern uint8_t vram_arm9_map[VRAM_ARM9_PAGES]; + +template uint8_t _MMU_read08(uint32_t addr); +template uint16_t _MMU_read16(uint32_t addr); +template uint32_t _MMU_read32(uint32_t addr); +template void _MMU_write08(uint32_t addr, uint8_t val); +template void _MMU_write16(uint32_t addr, uint16_t val); +template void _MMU_write32(uint32_t addr, uint32_t val); + +template inline uint8_t _MMU_read08(uint32_t addr) { return _MMU_read08(addr); } +template inline uint16_t _MMU_read16(uint32_t addr) { return _MMU_read16(addr); } +template inline uint32_t _MMU_read32(uint32_t addr) { return _MMU_read32(addr); } +template inline void _MMU_write08(uint32_t addr, uint8_t val) { _MMU_write08(addr,val); } +template inline void _MMU_write16(uint32_t addr, uint16_t val) { _MMU_write16(addr,val); } +template inline void _MMU_write32(uint32_t addr, uint32_t val) { _MMU_write32(addr,val); } + +void FASTCALL _MMU_ARM9_write08(uint32_t adr, uint8_t val); +void FASTCALL _MMU_ARM9_write16(uint32_t adr, uint16_t val); +void FASTCALL _MMU_ARM9_write32(uint32_t adr, uint32_t val); +uint8_t FASTCALL _MMU_ARM9_read08(uint32_t adr); +uint16_t FASTCALL _MMU_ARM9_read16(uint32_t adr); +uint32_t FASTCALL _MMU_ARM9_read32(uint32_t adr); + +void FASTCALL _MMU_ARM7_write08(uint32_t adr, uint8_t val); +void FASTCALL _MMU_ARM7_write16(uint32_t adr, uint16_t val); +void FASTCALL _MMU_ARM7_write32(uint32_t adr, uint32_t val); +uint8_t FASTCALL _MMU_ARM7_read08(uint32_t adr); +uint16_t FASTCALL _MMU_ARM7_read16(uint32_t adr); +uint32_t FASTCALL _MMU_ARM7_read32(uint32_t adr); + +extern uint32_t partie; + +extern uint32_t _MMU_MAIN_MEM_MASK; +extern uint32_t _MMU_MAIN_MEM_MASK16; +extern uint32_t _MMU_MAIN_MEM_MASK32; +void SetupMMU(bool debugConsole, bool dsi); + +// ALERT!!!!!!!!!!!!!! +// the following inline functions dont do the 0x0FFFFFFF mask. +// this may result in some unexpected behavior + +inline uint8_t _MMU_read08(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr) +{ + // special handling for DMA: read 0 from TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return 0; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return 0; // dtcm + } + +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 1, /*FIXME*/ 0, LUAMEMHOOK_READ); #endif -void FASTCALL MMU_doDMA(u32 proc, u32 num); + if (PROCNUM == ARMCPU_ARM9 && (addr & ~0x3FFF) == MMU.DTCMRegion) + // Returns data from DTCM (ARM9 only) + return T1ReadByte(MMU.ARM9_DTCM, addr & 0x3FFF); + + if ((addr & 0x0F000000) == 0x02000000) + return T1ReadByte(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK); + + if (PROCNUM == ARMCPU_ARM9) + return _MMU_ARM9_read08(addr); + else + return _MMU_ARM7_read08(addr); +} + +inline uint16_t _MMU_read16(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr) +{ + // special handling for DMA: read 0 from TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return 0; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return 0; // dtcm + } +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 2, /*FIXME*/ 0, LUAMEMHOOK_READ); +#endif -/* - * The base ARM memory interfaces - */ -extern struct armcpu_memory_iface arm9_base_memory_iface; -extern struct armcpu_memory_iface arm7_base_memory_iface; -extern struct armcpu_memory_iface arm9_direct_memory_iface; + // special handling for execution from arm9, since we spend so much time in there + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_CODE) + { + if ((addr & 0x0F000000) == 0x02000000) + return T1ReadWord_guaranteedAligned(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK16); + + if (addr < 0x02000000) + return T1ReadWord_guaranteedAligned(MMU.ARM9_ITCM, addr&0x7FFE); + + goto dunno; + } + + if (PROCNUM == ARMCPU_ARM9 && (addr & ~0x3FFF) == MMU.DTCMRegion) + // Returns data from DTCM (ARM9 only) + return T1ReadWord_guaranteedAligned(MMU.ARM9_DTCM, addr & 0x3FFE); + + if ((addr & 0x0F000000) == 0x02000000) + return T1ReadWord_guaranteedAligned(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK16); + +dunno: + if (PROCNUM == ARMCPU_ARM9) + return _MMU_ARM9_read16(addr); + else + return _MMU_ARM7_read16(addr); +} + +inline uint32_t _MMU_read32(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr) +{ + // special handling for DMA: read 0 from TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return 0; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return 0; // dtcm + } + +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 4, /*FIXME*/ 0, LUAMEMHOOK_READ); +#endif + + //s pecial handling for execution from arm9, since we spend so much time in there + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_CODE) + { + if ((addr & 0x0F000000) == 0x02000000) + return T1ReadLong_guaranteedAligned(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK32); + + if (addr < 0x02000000) + return T1ReadLong_guaranteedAligned(MMU.ARM9_ITCM, addr&0x7FFC); + + // what happens when we execute from DTCM? nocash makes it look like we get 0xFFFFFFFF but i can't seem to verify it + // historically, desmume would fall through to its old memory map struct + // which would return unused memory (0) + // it seems the hardware returns 0 or something benign because in actuality 0xFFFFFFFF is an undefined opcode + // and we know our handling for that is solid + + goto dunno; + } + + // special handling for execution from arm7. try reading from main memory first + if (PROCNUM == ARMCPU_ARM7 && (addr & 0x0F000000) == 0x02000000) + return T1ReadLong_guaranteedAligned(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK32); + + // for other arm9 cases, we have to check from dtcm first because it is patched on top of the main memory range + if (PROCNUM == ARMCPU_ARM9) + { + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + // Returns data from DTCM (ARM9 only) + return T1ReadLong_guaranteedAligned(MMU.ARM9_DTCM, addr & 0x3FFC); + + if ((addr & 0x0F000000) == 0x02000000) + return T1ReadLong_guaranteedAligned(MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK32); + } + +dunno: + if (PROCNUM == ARMCPU_ARM9) + return _MMU_ARM9_read32(addr); + else + return _MMU_ARM7_read32(addr); +} + +inline void _MMU_write08(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr, uint8_t val) +{ + // special handling for DMA: discard writes to TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return; // dtcm + } + + if (PROCNUM == ARMCPU_ARM9 && (addr & ~0x3FFF) == MMU.DTCMRegion) + { + T1WriteByte(MMU.ARM9_DTCM, addr & 0x3FFF, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 1, val, LUAMEMHOOK_WRITE); +#endif + return; + } + + if ((addr & 0x0F000000) == 0x02000000) + { + T1WriteByte( MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 1, val, LUAMEMHOOK_WRITE); +#endif + return; + } + + if (PROCNUM == ARMCPU_ARM9) + _MMU_ARM9_write08(addr, val); + else + _MMU_ARM7_write08(addr, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 1, val, LUAMEMHOOK_WRITE); +#endif +} + +inline void _MMU_write16(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr, uint16_t val) +{ + // special handling for DMA: discard writes to TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return; // dtcm + } + + if (PROCNUM == ARMCPU_ARM9 && (addr & ~0x3FFF) == MMU.DTCMRegion) + { + T1WriteWord(MMU.ARM9_DTCM, addr & 0x3FFE, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 2, val, LUAMEMHOOK_WRITE); +#endif + return; + } + + if ((addr & 0x0F000000) == 0x02000000) + { + T1WriteWord( MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK16, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 2, val, LUAMEMHOOK_WRITE); +#endif + return; + } + + if (PROCNUM == ARMCPU_ARM9) + _MMU_ARM9_write16(addr, val); + else + _MMU_ARM7_write16(addr, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 2, val, LUAMEMHOOK_WRITE); +#endif +} + +inline void _MMU_write32(int PROCNUM, MMU_ACCESS_TYPE AT, uint32_t addr, uint32_t val) +{ + // special handling for DMA: discard writes to TCM + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DMA) + { + if (addr < 0x02000000) + return; // itcm + if ((addr & ~0x3FFF) == MMU.DTCMRegion) + return; // dtcm + } + + if (PROCNUM == ARMCPU_ARM9 && (addr & ~0x3FFF) == MMU.DTCMRegion) + { + T1WriteLong(MMU.ARM9_DTCM, addr & 0x3FFC, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 4, val, LUAMEMHOOK_WRITE); +#endif + return; + } + if ((addr & 0x0F000000) == 0x02000000) + { + T1WriteLong( MMU.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK32, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 4, val, LUAMEMHOOK_WRITE); #endif + return; + } + + if (PROCNUM == ARMCPU_ARM9) + _MMU_ARM9_write32(addr, val); + else + _MMU_ARM7_write32(addr, val); +#ifdef HAVE_LUA + CallRegisteredLuaMemHook(addr, 4, val, LUAMEMHOOK_WRITE); +#endif +} + +#define READ32(a,b) _MMU_read32((b) & 0xFFFFFFFC) +#define WRITE32(a,b,c) _MMU_write32((b) & 0xFFFFFFFC,c) +#define READ16(a,b) _MMU_read16((b) & 0xFFFFFFFE) +#define WRITE16(a,b,c) _MMU_write16((b) & 0xFFFFFFFE,c) +#define READ8(a,b) _MMU_read08(b) +#define WRITE8(a,b,c) _MMU_write08(b, c) + +template inline uint8_t _MMU_read08(uint32_t addr) { return _MMU_read08(PROCNUM, AT, addr); } +template inline uint16_t _MMU_read16(uint32_t addr) { return _MMU_read16(PROCNUM, AT, addr); } +template inline uint32_t _MMU_read32(uint32_t addr) { return _MMU_read32(PROCNUM, AT, addr); } +template inline void _MMU_write08(uint32_t addr, uint8_t val) { _MMU_write08(PROCNUM, AT, addr, val); } +template inline void _MMU_write16(uint32_t addr, uint16_t val) { _MMU_write16(PROCNUM, AT, addr, val); } +template inline void _MMU_write32(uint32_t addr, uint32_t val) { _MMU_write32(PROCNUM, AT, addr, val); } diff -Nru audacious-plugins-4.1/src/xsf/desmume/MMU_timing.h audacious-plugins-4.2/src/xsf/desmume/MMU_timing.h --- audacious-plugins-4.1/src/xsf/desmume/MMU_timing.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/MMU_timing.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,383 @@ +/* + Copyright (C) 2006 yopyop + Copyright (C) 2007 shash + Copyright (C) 2007-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +// this file is split from MMU.h for the purpose of avoiding ridiculous recompile times +// when changing it, because practically everything includes MMU.h. + +#pragma once + +#include +#include +#include "MMU.h" +#include "cp15.h" +#include "readwrite.h" +#include "NDSSystem.h" + +//////////////////////////////////////////////////////////////// +// MEMORY TIMING ACCURACY CONFIGURATION +// +// the more of these are enabled, +// the more accurate memory access timing _should_ become. +// they should be listed roughly in order of most to least important. +// it's reasonable to disable some of these as a speed hack. +// obviously, these defines don't cover all the variables or features needed, +// and in particular, DMA or code+data access bus contention is still missing. + +// disable this to prevent the advanced timing logic from ever running at all +//#define ENABLE_ADVANCED_TIMING + +#ifdef ENABLE_ADVANCED_TIMING +// makes non-sequential accesses slower than sequential ones. +#define ACCOUNT_FOR_NON_SEQUENTIAL_ACCESS +// (SOMETIMES THIS IS A BIG SPEED HIT!) + +// enables emulation of code fetch waits. +#define ACCOUNT_FOR_CODE_FETCH_CYCLES + +// makes access to DTCM (arm9 only) fast. +#define ACCOUNT_FOR_DATA_TCM_SPEED + +// enables simulation of cache hits and cache misses. +#define ENABLE_CACHE_CONTROLLER_EMULATION + +#endif //ENABLE_ADVANCED_TIMING + +// +//////////////////////////////////////////////////////////////// + +inline bool USE_TIMING() +{ +#ifdef ENABLE_ADVANCED_TIMING + return CommonSettings.advanced_timing; +#else + return false; +#endif +} + +enum MMU_ACCESS_DIRECTION +{ + MMU_AD_READ, MMU_AD_WRITE +}; + +// note that we don't actually emulate the cache contents here, +// only enough to guess what would be a cache hit or a cache miss. +// this doesn't really get used unless ENABLE_CACHE_CONTROLLER_EMULATION is defined. +template class CacheController +{ +public: + template bool Cached(uint32_t addr) + { + uint32_t blockMasked = addr & BLOCKMASK; + if (blockMasked == this->m_cacheCache) + return true; + else + return this->CachedInternal(addr, blockMasked); + } + + void Reset() + { + for (int blockIndex = 0; blockIndex < NUMBLOCKS; ++blockIndex) + this->m_blocks[blockIndex].Reset(); + this->m_cacheCache = ~0U; + } + CacheController() + { + this->Reset(); + } + +private: + template bool CachedInternal(uint32_t addr, uint32_t blockMasked) + { + uint32_t blockIndex = blockMasked >> BLOCKSIZESHIFT; + CacheBlock &block = this->m_blocks[blockIndex]; + addr &= TAGMASK; + + for (int way = 0; way < ASSOCIATIVITY; ++way) + if (addr == block.tag[way]) + { + // found it, already allocated + this->m_cacheCache = blockMasked; + return true; + } + if (DIR == MMU_AD_READ) + { + // TODO: support other allocation orders? + block.tag[block.nextWay++] = addr; + block.nextWay %= ASSOCIATIVITY; + this->m_cacheCache = blockMasked; + } + return false; + } + + enum { SIZE = 1 << SIZESHIFT }; + enum { ASSOCIATIVITY = 1 << ASSOCIATIVESHIFT }; + enum { BLOCKSIZE = 1 << BLOCKSIZESHIFT }; + enum { TAGSHIFT = SIZESHIFT - ASSOCIATIVESHIFT }; + enum { TAGMASK = ~0U << TAGSHIFT }; + enum { BLOCKMASK = (~0U >> (32 - TAGSHIFT)) & (~0U << BLOCKSIZESHIFT) }; + enum { WORDSIZE = sizeof(uint32_t) }; + enum { WORDSPERBLOCK = (1 << BLOCKSIZESHIFT) / WORDSIZE }; + enum { DATAPERWORD = WORDSIZE * ASSOCIATIVITY }; + enum { DATAPERBLOCK = DATAPERWORD * WORDSPERBLOCK }; + enum { NUMBLOCKS = SIZE / DATAPERBLOCK }; + + struct CacheBlock + { + uint32_t tag[ASSOCIATIVITY]; + uint32_t nextWay; + + void Reset() + { + this->nextWay = 0; + for (int way = 0; way < ASSOCIATIVITY; ++way) + this->tag[way] = 0; + } + }; + + uint32_t m_cacheCache; // optimization + + CacheBlock m_blocks[NUMBLOCKS]; +}; + +template inline uint32_t _MMU_accesstime(uint32_t addr, bool sequential); + +template class FetchAccessUnit +{ +public: + template uint32_t Fetch(uint32_t address) + { +#ifdef ACCOUNT_FOR_CODE_FETCH_CYCLES + bool prohibit = TIMING; +#else + bool prohibit = false; +#endif + + if (AT == MMU_AT_CODE && !prohibit) + return 1; + + uint32_t time = _MMU_accesstime(address, +#ifdef ACCOUNT_FOR_NON_SEQUENTIAL_ACCESS + TIMING ? (address == m_lastAddress + (READSIZE >> 3)) : true +#else + true +#endif + ); + +#ifdef ACCOUNT_FOR_NON_SEQUENTIAL_ACCESS + this->m_lastAddress = address; +#endif + + return time; + } + + void Reset() + { + this->m_lastAddress = ~0U; + } + FetchAccessUnit() + { + this->Reset(); + } + +private: + uint32_t m_lastAddress; +}; + +struct MMU_struct_timing +{ + // technically part of the cp15, but I didn't want the dereferencing penalty. + // these template values correspond with the value of armcp15->cacheType. + CacheController<13, 2, 5> arm9codeCache; // 8192 bytes, 4-way associative, 32-byte blocks + CacheController<12, 2, 5> arm9dataCache; // 4096 bytes, 4-way associative, 32-byte blocks + + // technically part of armcpu_t, but that struct isn't templated on PROCNUM + FetchAccessUnit<0, MMU_AT_CODE> arm9codeFetch; + FetchAccessUnit<0, MMU_AT_DATA> arm9dataFetch; + FetchAccessUnit<1, MMU_AT_CODE> arm7codeFetch; + FetchAccessUnit<1, MMU_AT_DATA> arm7dataFetch; + + template FetchAccessUnit &armCodeFetch(); + template FetchAccessUnit &armDataFetch(); +}; +template<> inline FetchAccessUnit<0, MMU_AT_CODE> &MMU_struct_timing::armCodeFetch<0>() { return this->arm9codeFetch; } +template<> inline FetchAccessUnit<1, MMU_AT_CODE> &MMU_struct_timing::armCodeFetch<1>() { return this->arm7codeFetch; } +template<> inline FetchAccessUnit<0, MMU_AT_DATA> &MMU_struct_timing::armDataFetch<0>() { return this->arm9dataFetch; } +template<> inline FetchAccessUnit<1, MMU_AT_DATA> &MMU_struct_timing::armDataFetch<1>() { return this->arm7dataFetch; } + +extern MMU_struct_timing MMU_timing; + +// calculates the time a single memory access takes, +// in units of cycles of the current processor. +// this function replaces what used to be MMU_WAIT16 and MMU_WAIT32. +// this may have side effects, so don't call it more than necessary. +template inline uint32_t _MMU_accesstime(uint32_t addr, bool /*sequential*/) +{ + static const int MC = 1; // cached or tcm memory speed + static const int M32 = PROCNUM == ARMCPU_ARM9 ? 2 : 1; // access through 32-bit bus + static const int M16 = M32 * (READSIZE > 16 ? 2 : 1); // access through 16-bit bus + static const int MSLW = M16 * 8; // this needs tuning + + if (PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_CODE && addr < 0x02000000) + return MC; // ITCM + +#ifdef ACCOUNT_FOR_DATA_TCM_SPEED + if (TIMING && PROCNUM == ARMCPU_ARM9 && AT == MMU_AT_DATA && (addr & ~0x3FFF) == MMU.DTCMRegion) + return MC; // DTCM +#endif + + // for now, assume the cache is always enabled for all of main memory + if (AT != MMU_AT_DMA && TIMING && PROCNUM == ARMCPU_ARM9 && (addr & 0x0F000000) == 0x02000000) + { +#ifdef ENABLE_CACHE_CONTROLLER_EMULATION + bool cached = false; + if (AT == MMU_AT_CODE) + cached = MMU_timing.arm9codeCache.Cached(addr); + if (AT == MMU_AT_DATA) + cached = MMU_timing.arm9dataCache.Cached(addr); + if (cached) + return MC; + uint32_t c; + if (sequential && AT == MMU_AT_DATA) + c = M16; // bonus for sequential data access + else if (DIRECTION == MMU_AD_READ) + c = M16 * 5; + else + c = M16 * 2; // should be 4, but write buffer isn't emulated yet. + if (DIRECTION == MMU_AD_READ) + // cache miss while reading means it has to fill a whole cache line + // by reading 32 bytes... + c += 8 * M32 * 2; + return c; +#elif defined(ACCOUNT_FOR_NON_SEQUENTIAL_ACCESS) + // this is the closest approximation I could find + // to the with-cache-controller timing + // that doesn't do any actual caching logic. + return sequential ? MC : M16; +#endif + } + + static const TWaitState MMU_WAIT[] = + { + // ITCM, ITCM, MAIN, SWI, REG, VMEM, LCD, OAM, ROM, ROM, RAM, U, U, U, U, BIOS +#define X MC, MC, M16, M32, M32, M16, M16, M32, MSLW, MSLW, MSLW, M32,M32,M32,M32, M32, + // duplicate it 16 times (this was somehow faster than using a mask of 0xF) + X X X X X X X X X X X X X X X X +#undef X + }; + + uint32_t c = MMU_WAIT[addr >> 24]; + +#ifdef ACCOUNT_FOR_NON_SEQUENTIAL_ACCESS + if (TIMING && !sequential) + { + //if(c != MC || PROCNUM==ARMCPU_ARM7) // check not needed anymore because ITCM/DTCM return earlier + { + c += PROCNUM == ARMCPU_ARM9 ? 6 : 1; + } + } +#endif + + return c; +} + +// calculates the cycle time of a single memory access in the MEM stage. +// to be used to calculate the memCycles argument for MMU_aluMemCycles. +// this may have side effects, so don't call it more than necessary. +template inline uint32_t MMU_memAccessCycles(uint32_t addr) +{ + if (TIMING) + return MMU_timing.armDataFetch().template Fetch(addr & (~((READSIZE >> 3) - 1))); + else + return MMU_timing.armDataFetch().template Fetch(addr & (~((READSIZE >> 3) - 1))); +} + +template inline uint32_t MMU_memAccessCycles(uint32_t addr) +{ + if (USE_TIMING()) + return MMU_memAccessCycles(addr); + else + return MMU_memAccessCycles(addr); +} + +// calculates the cycle time of a single code fetch in the FETCH stage +// to be used to calculate the fetchCycles argument for MMU_fetchExecuteCycles. +// this may have side effects, so don't call it more than necessary. +template inline uint32_t MMU_codeFetchCycles(uint32_t addr) +{ + if (USE_TIMING()) + return MMU_timing.armCodeFetch().template Fetch(addr & (~((READSIZE >> 3) - 1))); + else + return MMU_timing.armCodeFetch().template Fetch(addr & (~((READSIZE >> 3) - 1))); +} + +// calculates the cycle contribution of ALU + MEM stages (= EXECUTE) +// given ALU cycle time and the summation of multiple memory access cycle times. +// this function might belong more in armcpu, but I don't think it matters. +template inline uint32_t MMU_aluMemCycles(uint32_t aluCycles, uint32_t memCycles) +{ + if (PROCNUM == ARMCPU_ARM9) + // ALU and MEM are different stages of the 5-stage pipeline. + // we approximate the pipeline throughput using max, + // since simply adding the cycles of each instruction together + // fails to take into account the parallelism of the arm pipeline + // and would make the emulated system unnaturally slow. + return std::max(aluCycles, memCycles); + else + // ALU and MEM are part of the same stage of the 3-stage pipeline, + // thus they occur in sequence and we can simply add the counts together. + return aluCycles + memCycles; +} + +// calculates the cycle contribution of ALU + MEM stages (= EXECUTE) +// given ALU cycle time and the description of a single memory access. +// this may have side effects, so don't call it more than necessary. +template inline uint32_t MMU_aluMemAccessCycles(uint32_t aluCycles, uint32_t addr) +{ + uint32_t memCycles; + if (USE_TIMING()) + memCycles = MMU_memAccessCycles(addr); + else + memCycles = MMU_memAccessCycles(addr); + return MMU_aluMemCycles(aluCycles, memCycles); +} + +// calculates the cycle contribution of FETCH + EXECUTE stages +// given executeCycles = the combined ALU+MEM cycles +// and fetchCycles = the cycle time of the FETCH stage +// this function might belong more in armcpu, but I don't think it matters. +template inline uint32_t MMU_fetchExecuteCycles(uint32_t executeCycles, uint32_t fetchCycles) +{ +#ifdef ACCOUNT_FOR_CODE_FETCH_CYCLES + bool allow = true; +#else + bool allow = false; +#endif + + if (USE_TIMING() && allow) + { + // execute and fetch are different stages of the pipeline for both arm7 and arm9. + // again, we approximate the pipeline throughput using max. + return std::max(executeCycles, fetchCycles); + // TODO: add an option to support conflict between MEM and FETCH cycles + // if they're both using the same data bus. + // in the case of a conflict this should be: + // return std::max(aluCycles, memCycles + fetchCycles); + } + return executeCycles; +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/NDSSystem.cc audacious-plugins-4.2/src/xsf/desmume/NDSSystem.cc --- audacious-plugins-4.1/src/xsf/desmume/NDSSystem.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/NDSSystem.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,208 +1,78 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ +/* + Copyright (C) 2006 yopyop + Copyright (C) 2008-2013 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. -#include -#include + You should have received a copy of the GNU General Public License + along with the this software. If not, see . +*/ +#include +#include +#include +#include +#include #include "NDSSystem.h" #include "MMU.h" -//#include "cflash.h" +#include "cp15.h" +#include "bios.h" +#include "readwrite.h" +#include "firmware.h" +#include "slot1.h" -//#include "ROMReader.h" +// =============================================================== -/* the count of bytes copied from the firmware into memory */ -#define NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT 0x70 +TCommonSettings CommonSettings; +GameInfo gameInfo; NDSSystem nds; +static std::unique_ptr firmware; +volatile bool execute = false; -static u32 -calc_CRC16( u32 start, const u8 *data, int count) { - int i,j; - u32 crc = start & 0xffff; - static u16 val[] = { 0xC0C1,0xC181,0xC301,0xC601,0xCC01,0xD801,0xF001,0xA001 }; - for(i = 0; i < count; i++) - { - crc = crc ^ data[i]; - - for(j = 0; j < 8; j++) { - int do_bit = 0; - - if ( crc & 0x1) - do_bit = 1; - - crc = crc >> 1; - - if ( do_bit) { - crc = crc ^ (val[j] << (7-j)); - } - } - } - return crc; -} - -static int -copy_firmware_user_data( u8 *dest_buffer, const u8 *fw_data) { - /* - * Determine which of the two user settings in the firmware is the current - * and valid one and then copy this into the destination buffer. - * - * The current setting will have a greater count. - * Settings are only valid if its CRC16 is correct. - */ - int user1_valid = 0; - int user2_valid = 0; - u32 user_settings_offset; - u32 fw_crc; - u32 crc; - int copy_good = 0; - - user_settings_offset = fw_data[0x20]; - user_settings_offset |= fw_data[0x21] << 8; - user_settings_offset <<= 3; - - if ( user_settings_offset <= 0x3FE00) { - s32 copy_settings_offset = -1; - - crc = calc_CRC16( 0xffff, &fw_data[user_settings_offset], - NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); - fw_crc = fw_data[user_settings_offset + 0x72]; - fw_crc |= fw_data[user_settings_offset + 0x73] << 8; - if ( crc == fw_crc) { - user1_valid = 1; - } - - crc = calc_CRC16( 0xffff, &fw_data[user_settings_offset + 0x100], - NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); - fw_crc = fw_data[user_settings_offset + 0x100 + 0x72]; - fw_crc |= fw_data[user_settings_offset + 0x100 + 0x73] << 8; - if ( crc == fw_crc) { - user2_valid = 1; - } - - if ( user1_valid) { - if ( user2_valid) { - u16 count1, count2; - - count1 = fw_data[user_settings_offset + 0x70]; - count1 |= fw_data[user_settings_offset + 0x71] << 8; - - count2 = fw_data[user_settings_offset + 0x100 + 0x70]; - count2 |= fw_data[user_settings_offset + 0x100 + 0x71] << 8; - - if ( count2 > count1) { - copy_settings_offset = user_settings_offset + 0x100; - } - else { - copy_settings_offset = user_settings_offset; - } - } - else { - copy_settings_offset = user_settings_offset; - } - } - else if ( user2_valid) { - /* copy the second user settings */ - copy_settings_offset = user_settings_offset + 0x100; - } - - if ( copy_settings_offset > 0) { - memcpy( dest_buffer, &fw_data[copy_settings_offset], - NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT); - copy_good = 1; - } - } - - return copy_good; -} - - -#ifdef GDB_STUB -int NDS_Init( struct armcpu_memory_iface *arm9_mem_if, - struct armcpu_ctrl_iface **arm9_ctrl_iface, - struct armcpu_memory_iface *arm7_mem_if, - struct armcpu_ctrl_iface **arm7_ctrl_iface) { -#else -int NDS_Init( void) { -#endif - nds.ARM9Cycle = 0; - nds.ARM7Cycle = 0; - nds.cycles = 0; - MMU_Init(); - nds.nextHBlank = 3168; - nds.VCount = 0; - nds.lignerendu = false; - - if (Screen_Init(GFXCORE_DUMMY) != 0) - return -1; - - #ifdef GDB_STUB - armcpu_new(&NDS_ARM7,1, arm7_mem_if, arm7_ctrl_iface); - armcpu_new(&NDS_ARM9,0, arm9_mem_if, arm9_ctrl_iface); -#else - armcpu_new(&NDS_ARM7,1); - armcpu_new(&NDS_ARM9,0); -#endif +int NDS_Init() +{ + MMU_Init(); + nds.VCount = 0; - if (SPU_Init(SNDCORE_DUMMY, 735) != 0) - return -1; + armcpu_new(&NDS_ARM7, 1); + armcpu_new(&NDS_ARM9, 0); -#ifdef EXPERIMENTAL_WIFI - WIFI_Init(&wifiMac) ; -#endif + if (SPU_Init(SNDCORE_DUMMY, 740)) + return -1; - return 0; + return 0; } -static void armcpu_deinit(armcpu_t *armcpu) +void NDS_DeInit() { - if(armcpu->coproc[15]) - { - free(armcpu->coproc[15]); - armcpu->coproc[15] = 0; - } -} - -void NDS_DeInit(void) { - if(MMU.CART_ROM != MMU.UNUSED_RAM) - NDS_FreeROM(); - - armcpu_deinit(&NDS_ARM7); - armcpu_deinit(&NDS_ARM9); + if (MMU.CART_ROM != MMU.UNUSED_RAM) + NDS_FreeROM(); - nds.nextHBlank = 3168; - SPU_DeInit(); - Screen_DeInit(); - MMU_DeInit(); + SPU_DeInit(); + MMU_DeInit(); } -BOOL NDS_SetROM(u8 * rom, u32 mask) +bool NDS_SetROM(uint8_t *rom, uint32_t mask) { - MMU_setRom(rom, mask); + MMU_setRom(rom, mask); - return true; + return true; } -NDS_header * NDS_getROMHeader(void) +std::unique_ptr NDS_getROMHeader() { - NDS_header * header = (NDS_header *) malloc(sizeof(NDS_header)); + if (MMU.CART_ROM == MMU.UNUSED_RAM) + return std::unique_ptr(); + auto header = std::unique_ptr(new NDS_header); memcpy(header->gameTile, MMU.CART_ROM, 12); memcpy(header->gameCode, MMU.CART_ROM + 12, 4); @@ -212,6 +82,7 @@ header->cardSize = MMU.CART_ROM[20]; memcpy(header->cardInfo, MMU.CART_ROM + 21, 8); header->flags = MMU.CART_ROM[29]; + header->romversion = MMU.CART_ROM[30]; header->ARM9src = T1ReadLong(MMU.CART_ROM, 32); header->ARM9exe = T1ReadLong(MMU.CART_ROM, 36); header->ARM9cpy = T1ReadLong(MMU.CART_ROM, 40); @@ -242,507 +113,1048 @@ memcpy(header->logo, MMU.CART_ROM + 192, 156); header->logoCRC16 = T1ReadWord(MMU.CART_ROM, 348); header->headerCRC16 = T1ReadWord(MMU.CART_ROM, 350); - memcpy(header->reserved, MMU.CART_ROM + 352, 160); + memcpy(header->reserved, MMU.CART_ROM + 352, std::min(160, gameInfo.romsize - 352)); return header; - - //return (NDS_header *)MMU.CART_ROM; } - - -void NDS_FreeROM(void) +RomBanner::RomBanner(bool defaultInit) { - if (MMU.CART_ROM != MMU.UNUSED_RAM) - free(MMU.CART_ROM); - MMU_unsetRom(); -// if (MMU.bupmem.fp) -// fclose(MMU.bupmem.fp); -// MMU.bupmem.fp = nullptr; + if (!defaultInit) + return; + this->version = 1; //Version (0001h) + this->crc16 = 0; //CRC16 across entries 020h..83Fh + memset(this->reserved, 0, sizeof(this->reserved)); + memset(this->bitmap, 0, sizeof(this->bitmap)); + memset(this->palette, 0, sizeof(this->palette)); + memset(this->titles, 0, sizeof(this->titles)); + memset(this->end0xFF, 0, sizeof(this->end0xFF)); } +void NDS_FreeROM() +{ + if (MMU.CART_ROM == reinterpret_cast(&gameInfo.romdata[0])) + gameInfo.romdata.reset(); + if (MMU.CART_ROM != MMU.UNUSED_RAM) + delete [] MMU.CART_ROM; + MMU_unsetRom(); +} +void NDS_Sleep() { nds.sleeping = true; } -void NDS_Reset( void) +enum ESI_DISPCNT { - BOOL oldexecute=execute; - u32 i; - u32 src; - u32 dst; - NDS_header * header = NDS_getROMHeader(); + ESI_DISPCNT_HStart, ESI_DISPCNT_HStartIRQ, ESI_DISPCNT_HDraw, ESI_DISPCNT_HBlank +}; - if (!header) return ; +uint64_t nds_timer; +static uint64_t nds_arm9_timer, nds_arm7_timer; - execute = false; +struct TSequenceItem +{ + uint64_t timestamp; + uint32_t param; + bool enabled; - MMU_clearMem(); + virtual ~TSequenceItem() { } - src = header->ARM9src; - dst = header->ARM9cpy; + virtual bool isTriggered() const + { + return this->enabled && nds_timer >= this->timestamp; + } - for(i = 0; i < (header->ARM9binSize>>2); ++i) - { - MMU_write32(0, dst, T1ReadLong(MMU.CART_ROM, src)); - dst += 4; - src += 4; - } + virtual uint64_t next() const + { + return this->timestamp; + } +}; - src = header->ARM7src; - dst = header->ARM7cpy; +template struct TSequenceItem_Timer : public TSequenceItem +{ + bool isTriggered() const + { + return this->enabled && nds_timer >= nds.timerCycle[procnum][num]; + } - for(i = 0; i < (header->ARM7binSize>>2); ++i) - { - MMU_write32(1, dst, T1ReadLong(MMU.CART_ROM, src)); - dst += 4; - src += 4; - } + void schedule() + { + this->enabled = MMU.timerON[procnum][num] && MMU.timerMODE[procnum][num] != 0xFFFF; + } - armcpu_init(&NDS_ARM7, header->ARM7exe); - armcpu_init(&NDS_ARM9, header->ARM9exe); + uint64_t next() const + { + return nds.timerCycle[procnum][num]; + } - nds.ARM9Cycle = 0; - nds.ARM7Cycle = 0; - nds.cycles = 0; - memset(nds.timerCycle, 0, sizeof(s32) * 2 * 4); - memset(nds.timerOver, 0, sizeof(BOOL) * 2 * 4); - nds.nextHBlank = 3168; - nds.VCount = 0; - nds.old = 0; - nds.diff = 0; - nds.lignerendu = false; - nds.touchX = nds.touchY = 0; + void exec() + { + uint8_t *regs = !procnum ? MMU.ARM9_REG : MMU.ARM7_REG; + bool first = true, over; + // we'll need to check chained timers.. + for (int i = num; i < 4; ++i) + { + // maybe too many checks if this is here, but we need it here for now + if (!MMU.timerON[procnum][i]) + return; - MMU_write16(0, 0x04000130, 0x3FF); - MMU_write16(1, 0x04000130, 0x3FF); - MMU_write8(1, 0x04000136, 0x43); + if (MMU.timerMODE[procnum][i] == 0xFFFF) + { + ++MMU.timer[procnum][i]; + over = !MMU.timer[procnum][i]; + } + else + { + if (!first) + break; // this timer isn't chained. break the chain + first = false; + + over = true; + int remain = 65536 - MMU.timerReload[procnum][i]; + int ctr = 0; + while (nds.timerCycle[procnum][i] <= nds_timer) + { + nds.timerCycle[procnum][i] += remain << MMU.timerMODE[procnum][i]; + ++ctr; + } +#ifndef NDEBUG + if (ctr > 1) + fprintf(stderr, "yikes!!!!! please report!\n"); +#endif + } - /* - * Setup a copy of the firmware user settings in memory. - * (this is what the DS firmware would do). - */ - { - u8 temp_buffer[NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT]; - int fw_index; + if (over) + { + MMU.timer[procnum][i] = MMU.timerReload[procnum][i]; + if (T1ReadWord(regs, 0x102 + i * 4) & 0x40) + NDS_makeIrq(procnum, IRQ_BIT_TIMER_0 + i); + } + else + break; // no more chained timers to trigger. we're done here + } + } +}; - if ( copy_firmware_user_data( temp_buffer, MMU.fw.data)) { - for ( fw_index = 0; fw_index < NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT; fw_index++) { - MMU_write8( 0, 0x027FFC80 + fw_index, temp_buffer[fw_index]); - } - } - } +template struct TSequenceItem_DMA : public TSequenceItem +{ + DmaController *controller; - // Copy the whole header to Main RAM 0x27FFE00 on startup. - // Reference: http://nocash.emubase.de/gbatek.htm#dscartridgeheader - for (i = 0; i < ((0x170+0x90)/4); i++) + bool isTriggered() const { - MMU_write32 (0, 0x027FFE00+i*4, LE_TO_LOCAL_32(((u32*)MMU.CART_ROM)[i])); + return this->controller->dmaCheck && nds_timer>= this->controller->nextEvent; } - MainScreen.offset = 0; - SubScreen.offset = 192; - - //MMU_write32(0, 0x02007FFC, 0xE92D4030); + bool isEnabled() const + { + return this->controller->dmaCheck; + } - //ARM7 BIOS IRQ HANDLER - MMU_write32(1, 0x00, 0xE25EF002); - MMU_write32(1, 0x04, 0xEAFFFFFE); - MMU_write32(1, 0x18, 0xEA000000); - MMU_write32(1, 0x20, 0xE92D500F); - MMU_write32(1, 0x24, 0xE3A00301); - MMU_write32(1, 0x28, 0xE28FE000); - MMU_write32(1, 0x2C, 0xE510F004); - MMU_write32(1, 0x30, 0xE8BD500F); - MMU_write32(1, 0x34, 0xE25EF004); + uint64_t next() const + { + return this->controller->nextEvent; + } - //ARM9 BIOS IRQ HANDLER - MMU_write32(0, 0xFFFF0018, 0xEA000000); - MMU_write32(0, 0xFFFF0020, 0xE92D500F); - MMU_write32(0, 0xFFFF0024, 0xEE190F11); - MMU_write32(0, 0xFFFF0028, 0xE1A00620); - MMU_write32(0, 0xFFFF002C, 0xE1A00600); - MMU_write32(0, 0xFFFF0030, 0xE2800C40); - MMU_write32(0, 0xFFFF0034, 0xE28FE000); - MMU_write32(0, 0xFFFF0038, 0xE510F004); - MMU_write32(0, 0xFFFF003C, 0xE8BD500F); - MMU_write32(0, 0xFFFF0040, 0xE25EF004); + void exec() + { + //fprintf(stderr, "exec from TSequenceItem_DMA: %d %d\n",procnum,chan); + this->controller->exec(); + } +}; - MMU_write32(0, 0x0000004, 0xE3A0010E); - MMU_write32(0, 0x0000008, 0xE3A01020); -// MMU_write32(0, 0x000000C, 0xE1B02110); - MMU_write32(0, 0x000000C, 0xE1B02040); - MMU_write32(0, 0x0000010, 0xE3B02020); -// MMU_write32(0, 0x0000010, 0xE2100202); +struct TSequenceItem_divider : public TSequenceItem +{ + bool isTriggered() const + { + return MMU.divRunning && nds_timer >= MMU.divCycles; + } - free(header); + bool isEnabled() + { + return MMU.divRunning; + } - GPU_Reset(MainScreen.gpu, 0); - GPU_Reset(SubScreen.gpu, 1); - SPU_Reset(); + uint64_t next() const + { + return MMU.divCycles; + } - execute = oldexecute; -} + void exec() + { + MMU_new.div.busy = 0; +#ifdef _WIN64 + T1WriteQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A0, MMU.divResult); + T1WriteQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A8, MMU.divMod); +#else + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A0, MMU.divResult & 0xFFFFFFFF); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A4, (MMU.divResult >> 32) & 0xFFFFFFFF); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A8, MMU.divMod & 0xFFFFFFFF); + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2AC, (MMU.divMod >> 32) & 0xFFFFFFFF); +#endif + MMU.divRunning = false; + } +}; -static void dma_check(void) +struct TSequenceItem_sqrtunit : public TSequenceItem { - if((MMU.DMAing[0][0])&&(MMU.DMACycle[0][0]<=nds.cycles)) + bool isTriggered() const { - T1WriteLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*0), T1ReadLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*0)) & 0x7FFFFFFF); - if((MMU.DMACrt[0][0])&(1<<30)) NDS_makeARM9Int(8); - MMU.DMAing[0][0] = false; + return MMU.sqrtRunning && nds_timer >= MMU.sqrtCycles; } - if((MMU.DMAing[0][1])&&(MMU.DMACycle[0][1]<=nds.cycles)) + bool isEnabled() { - T1WriteLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*1), T1ReadLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*1)) & 0x7FFFFFFF); - if((MMU.DMACrt[0][1])&(1<<30)) NDS_makeARM9Int(9); - MMU.DMAing[0][1] = false; + return MMU.sqrtRunning; } - if((MMU.DMAing[0][2])&&(MMU.DMACycle[0][2]<=nds.cycles)) + uint64_t next() const { - T1WriteLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*2), T1ReadLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*2)) & 0x7FFFFFFF); - if((MMU.DMACrt[0][2])&(1<<30)) NDS_makeARM9Int(10); - MMU.DMAing[0][2] = false; + return MMU.sqrtCycles; } - if((MMU.DMAing[0][3])&&(MMU.DMACycle[0][3]<=nds.cycles)) + void exec() { - T1WriteLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*3), T1ReadLong(ARM9Mem.ARM9_REG, 0xB8 + (0xC*3)) & 0x7FFFFFFF); - if((MMU.DMACrt[0][3])&(1<<30)) NDS_makeARM9Int(11); - MMU.DMAing[0][3] = false; + MMU_new.sqrt.busy = 0; + T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2B4, MMU.sqrtResult); + MMU.sqrtRunning = false; } +}; - if((MMU.DMAing[1][0])&&(MMU.DMACycle[1][0]<=nds.cycles)) +static struct Sequencer +{ + bool nds_vblankEnded; + bool reschedule; + TSequenceItem dispcnt; + TSequenceItem wifi; + TSequenceItem_divider divider; + TSequenceItem_sqrtunit sqrtunit; + TSequenceItem/*_GXFIFO*/ gxfifo; + TSequenceItem_DMA<0, 0> dma_0_0; TSequenceItem_DMA<0, 1> dma_0_1; + TSequenceItem_DMA<0, 2> dma_0_2; TSequenceItem_DMA<0, 3> dma_0_3; + TSequenceItem_DMA<1, 0> dma_1_0; TSequenceItem_DMA<1, 1> dma_1_1; + TSequenceItem_DMA<1, 2> dma_1_2; TSequenceItem_DMA<1, 3> dma_1_3; + TSequenceItem_Timer<0, 0> timer_0_0; TSequenceItem_Timer<0, 1> timer_0_1; + TSequenceItem_Timer<0, 2> timer_0_2; TSequenceItem_Timer<0, 3> timer_0_3; + TSequenceItem_Timer<1, 0> timer_1_0; TSequenceItem_Timer<1, 1> timer_1_1; + TSequenceItem_Timer<1, 2> timer_1_2; TSequenceItem_Timer<1, 3> timer_1_3; + + void init(); + + void execHardware(); + uint64_t findNext(); +} sequencer; + +void NDS_RescheduleTimers() +{ +#define check(X, Y) sequencer.timer_##X##_##Y .schedule(); + check(0, 0); check(0, 1); check(0, 2); check(0, 3); + check(1, 0); check(1, 1); check(1, 2); check(1, 3); +#undef check + + NDS_Reschedule(); +} + +void NDS_RescheduleDMA() +{ + //TBD + NDS_Reschedule(); +} + +static void initSchedule() +{ + sequencer.init(); + + // begin at the very end of the last scanline + // so that at t=0 we can increment to scanline=0 + nds.VCount = 262; + + sequencer.nds_vblankEnded = false; +} + +// 2196372 ~= (ARM7_CLOCK << 16) / 1000000 +// This value makes more sense to me, because: +// ARM7_CLOCK = 33.51 mhz +// = 33513982 cycles per second +// = 33.513982 cycles per microsecond +//const uint64_t kWifiCycles = 34*2; +//(this isn't very precise. I don't think it needs to be) + +void Sequencer::init() +{ + NDS_RescheduleTimers(); + NDS_RescheduleDMA(); + + this->reschedule = false; + nds_timer = 0; + nds_arm9_timer = 0; + nds_arm7_timer = 0; + + this->dispcnt.enabled = true; + this->dispcnt.param = ESI_DISPCNT_HStart; + this->dispcnt.timestamp = 0; + + this->dma_0_0.controller = &MMU_new.dma[0][0]; + this->dma_0_1.controller = &MMU_new.dma[0][1]; + this->dma_0_2.controller = &MMU_new.dma[0][2]; + this->dma_0_3.controller = &MMU_new.dma[0][3]; + this->dma_1_0.controller = &MMU_new.dma[1][0]; + this->dma_1_1.controller = &MMU_new.dma[1][1]; + this->dma_1_2.controller = &MMU_new.dma[1][2]; + this->dma_1_3.controller = &MMU_new.dma[1][3]; +} + +static void execHardware_hblank() +{ + // this logic keeps moving around. + // now, we try and give the game as much time as possible to finish doing its work for the scanline, + // by drawing scanline N at the end of drawing time (but before subsequent interrupt or hdma-driven events happen) + // don't try to do this at the end of the scanline, because some games (sonic classics) may use hblank IRQ to set + // scroll regs for the next scanline + if (nds.VCount < 192) + // trigger hblank dmas + // but notice, we do that just after we finished drawing the line + // (values copied by this hdma should not be used until the next scanline) + triggerDma(EDMAMode_HBlank); + + // turn on hblank status bit + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) | 2); + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) | 2); + + // fire hblank interrupts if necessary + if (T1ReadWord(MMU.ARM9_REG, 4) & 0x10) + NDS_makeIrq(ARMCPU_ARM9, IRQ_BIT_LCD_HBLANK); + if (T1ReadWord(MMU.ARM7_REG, 4) & 0x10) + NDS_makeIrq(ARMCPU_ARM7, IRQ_BIT_LCD_HBLANK); + + // emulation housekeeping. for some reason we always do this at hblank, + // even though it sounds more reasonable to do it at hstart + SPU_Emulate_core(); +} + +static void execHardware_hstart_vblankEnd() +{ + sequencer.nds_vblankEnded = true; + sequencer.reschedule = true; + + // turn off vblank status bit + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) & ~1); + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & ~1); +} + +static void execHardware_hstart_vblankStart() +{ + //fprintf(stderr, "--------VBLANK!!!--------\n"); + + // fire vblank interrupts if necessary + for (int i = 0; i < 2; ++i) + if (MMU.reg_IF_pending[i] & (1 << IRQ_BIT_LCD_VBLANK)) + { + MMU.reg_IF_pending[i] &= ~(1 << IRQ_BIT_LCD_VBLANK); + NDS_makeIrq(i, IRQ_BIT_LCD_VBLANK); + } + + // trigger vblank dmas + triggerDma(EDMAMode_VBlank); +} + +static uint16_t execHardware_gen_vmatch_goal() +{ + uint16_t vmatch = T1ReadWord(MMU.ARM9_REG, 4); + vmatch = (vmatch >> 8) | ((vmatch << 1) & (1 << 8)); + return vmatch; +} + +static void execHardware_hstart_vcount_irq() +{ + // trigger pending VMATCH irqs + if (MMU.reg_IF_pending[ARMCPU_ARM9] & (1 << IRQ_BIT_LCD_VMATCH)) { - T1WriteLong(MMU.ARM7_REG, 0xB8 + (0xC*0), T1ReadLong(MMU.ARM7_REG, 0xB8 + (0xC*0)) & 0x7FFFFFFF); - if((MMU.DMACrt[1][0])&(1<<30)) NDS_makeARM7Int(8); - MMU.DMAing[1][0] = false; + MMU.reg_IF_pending[ARMCPU_ARM9] &= ~(1 << IRQ_BIT_LCD_VMATCH); + NDS_makeIrq(ARMCPU_ARM9, IRQ_BIT_LCD_VMATCH); } - - if((MMU.DMAing[1][1])&&(MMU.DMACycle[1][1]<=nds.cycles)) + if(MMU.reg_IF_pending[ARMCPU_ARM7] & (1 << IRQ_BIT_LCD_VMATCH)) { - T1WriteLong(MMU.ARM7_REG, 0xB8 + (0xC*1), T1ReadLong(MMU.ARM7_REG, 0xB8 + (0xC*1)) & 0x7FFFFFFF); - if((MMU.DMACrt[1][1])&(1<<30)) NDS_makeARM7Int(9); - MMU.DMAing[1][1] = false; + MMU.reg_IF_pending[ARMCPU_ARM7] &= ~(1 << IRQ_BIT_LCD_VMATCH); + NDS_makeIrq(ARMCPU_ARM7, IRQ_BIT_LCD_VMATCH); } +} - if((MMU.DMAing[1][2])&&(MMU.DMACycle[1][2]<=nds.cycles)) +static void execHardware_hstart_vcount() +{ + uint16_t vmatch = execHardware_gen_vmatch_goal(); + if (nds.VCount == vmatch) { - T1WriteLong(MMU.ARM7_REG, 0xB8 + (0xC*2), T1ReadLong(MMU.ARM7_REG, 0xB8 + (0xC*2)) & 0x7FFFFFFF); - if((MMU.DMACrt[1][2])&(1<<30)) NDS_makeARM7Int(10); - MMU.DMAing[1][2] = false; + // arm9 vmatch + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) | 4); + if (T1ReadWord(MMU.ARM9_REG, 4) & 32) + MMU.reg_IF_pending[ARMCPU_ARM9] |= 1 << IRQ_BIT_LCD_VMATCH; } + else + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) & 0xFFFB); - if((MMU.DMAing[1][3])&&(MMU.DMACycle[1][3]<=nds.cycles)) + vmatch = T1ReadWord(MMU.ARM7_REG, 4); + vmatch = (vmatch >> 8) | ((vmatch << 1) & (1 << 8)); + if (nds.VCount == vmatch) { - T1WriteLong(MMU.ARM7_REG, 0xB8 + (0xC*3), T1ReadLong(MMU.ARM7_REG, 0xB8 + (0xC*3)) & 0x7FFFFFFF); - if((MMU.DMACrt[1][3])&(1<<30)) NDS_makeARM7Int(11); - MMU.DMAing[1][3] = false; + // arm7 vmatch + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) | 4); + if (T1ReadWord(MMU.ARM7_REG, 4) & 32) + MMU.reg_IF_pending[ARMCPU_ARM7] |= 1 << IRQ_BIT_LCD_VMATCH; } + else + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & 0xFFFB); +} + +static void execHardware_hstart_irq() +{ + // this function very soon after the registers get updated to trigger IRQs + // this is necessary to fix "egokoro kyoushitsu" which idles waiting for vcount=192, which never happens due to a long vblank irq + // 100% accurate emulation would require the read of VCOUNT to be in the pipeline already with the irq coming in behind it, thus + // allowing the vcount to register as 192 occasionally (maybe about 1 out of 28 frames) + // the actual length of the delay is in execHardware() where the events are scheduled + sequencer.reschedule = true; + if (nds.VCount == 192) + // when the vcount hits 192, vblank begins + execHardware_hstart_vblankStart(); + + execHardware_hstart_vcount_irq(); +} + +static void execHardware_hstart() +{ + ++nds.VCount; - if((MMU.reg_IF[0]&MMU.reg_IE[0]) && (MMU.reg_IME[0])) + if (nds.VCount == 263) + // when the vcount hits 263 it rolls over to 0 + nds.VCount = 0; + if (nds.VCount == 262) + // when the vcount hits 262, vblank ends (oam pre-renders by one scanline) + execHardware_hstart_vblankEnd(); + else if (nds.VCount == 192) { -#ifdef GDB_STUB - if ( armcpu_flagIrq( &NDS_ARM9)) -#else - if ( armcpu_irqExeption(&NDS_ARM9)) -#endif - { - nds.ARM9Cycle = nds.cycles; - } + // turn on vblank status bit + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) | 1); + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) | 1); + + // check whether we'll need to fire vblank irqs + if (T1ReadWord(MMU.ARM9_REG, 4) & 0x8) + MMU.reg_IF_pending[ARMCPU_ARM9] |= 1 << IRQ_BIT_LCD_VBLANK; + if (T1ReadWord(MMU.ARM7_REG, 4) & 0x8) + MMU.reg_IF_pending[ARMCPU_ARM7] |= 1 << IRQ_BIT_LCD_VBLANK; } - if((MMU.reg_IF[1]&MMU.reg_IE[1]) && (MMU.reg_IME[1])) + // write the new vcount + T1WriteWord(MMU.ARM9_REG, 6, nds.VCount & 0xFFFF); + T1WriteWord(MMU.ARM9_REG, 0x1006, nds.VCount & 0xFFFF); + T1WriteWord(MMU.ARM7_REG, 6, nds.VCount & 0xFFFF); + T1WriteWord(MMU.ARM7_REG, 0x1006, nds.VCount & 0xFFFF); + + // turn off hblank status bit + T1WriteWord(MMU.ARM9_REG, 4, T1ReadWord(MMU.ARM9_REG, 4) & 0xFFFD); + T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & 0xFFFD); + + // handle vcount status + execHardware_hstart_vcount(); + + // trigger hstart dmas + triggerDma(EDMAMode_HStart); + + if (nds.VCount < 192) + // this is hacky. + // there is a corresponding hack in doDMA. + // it should be driven by a fifo (and generate just in time as the scanline is displayed) + // but that isnt even possible until we have some sort of sub-scanline timing. + // it may not be necessary. + triggerDma(EDMAMode_MemDisplay); +} + +void NDS_Reschedule() +{ + sequencer.reschedule = true; +} + +static inline uint64_t _fast_min(uint64_t a, uint64_t b) +{ + // you might find that this is faster on a 64bit system; someone should try it + // http://aggregate.org/MAGIC/#Integer%20Selection + //uint64_t ret = (((((s64)(a-b)) >> (64-1)) & (a^b)) ^ b); + //assert(ret==min(a,b)); + //return ret; + + // but this ends up being the fastest on 32bits + return a>= 63; //no 64bit shra in sse2, what a disappointment + //temp = _mm_and_si128(temp,xorval); + //temp = _mm_xor_si128(temp,__b); + //return temp.m128i_u64[0]; +} + +uint64_t Sequencer::findNext() +{ + // this one is always enabled so dont bother to check it + uint64_t next = this->dispcnt.next(); + + if (this->divider.isEnabled()) + next = _fast_min(next, this->divider.next()); + if (this->sqrtunit.isEnabled()) + next = _fast_min(next, this->sqrtunit.next()); + +#define test(X, Y) \ + if (this->dma_##X##_##Y .isEnabled()) \ + next = _fast_min(next, this->dma_##X##_##Y .next()); + test(0, 0); test(0, 1); test(0, 2); test(0, 3); + test(1, 0); test(1, 1); test(1, 2); test(1, 3); +#undef test +#define test(X, Y) \ + if (this->timer_##X##_##Y .enabled) \ + next = _fast_min(next, this->timer_##X##_##Y .next()); + test(0, 0); test(0, 1); test(0, 2); test(0, 3); + test(1, 0); test(1, 1); test(1, 2); test(1, 3); +#undef test + + return next; +} + +void Sequencer::execHardware() +{ + if (this->dispcnt.isTriggered()) { -#ifdef GDB_STUB - if ( armcpu_flagIrq( &NDS_ARM7)) -#else - if ( armcpu_irqExeption(&NDS_ARM7)) -#endif + switch (this->dispcnt.param) { - nds.ARM7Cycle = nds.cycles; + case ESI_DISPCNT_HStart: + execHardware_hstart(); + // (used to be 3168) + // hstart is actually 8 dots before the visible drawing begins + // we're going to run 1 here and then run 7 in the next case + this->dispcnt.timestamp += 12; + this->dispcnt.param = ESI_DISPCNT_HStartIRQ; + break; + case ESI_DISPCNT_HStartIRQ: + execHardware_hstart_irq(); + this->dispcnt.timestamp += 84; + this->dispcnt.param = ESI_DISPCNT_HDraw; + break; + case ESI_DISPCNT_HDraw: + // duration of non-blanking period is ~1606 clocks (gbatek agrees) [but says its different on arm7] + // im gonna call this 267 dots = 267*6=1602 + // so, this event lasts 267 dots minus the 8 dot preroll + this->dispcnt.timestamp += 3108; + this->dispcnt.param = ESI_DISPCNT_HBlank; + break; + case ESI_DISPCNT_HBlank: + execHardware_hblank(); + // (once this was 1092 or 1092/12=91 dots.) + // there are surely 355 dots per scanline, less 267 for non-blanking period. the rest is hblank and then after that is hstart + this->dispcnt.timestamp += 1056; + this->dispcnt.param = ESI_DISPCNT_HStart; } } + if (this->divider.isTriggered()) + this->divider.exec(); + if (this->sqrtunit.isTriggered()) + this->sqrtunit.exec(); + +#define test(X, Y) \ + if (this->dma_##X##_##Y .isTriggered()) \ + this->dma_##X##_##Y .exec(); + test(0, 0); test(0, 1); test(0, 2); test(0, 3); + test(1, 0); test(1, 1); test(1, 2); test(1, 3); +#undef test +#define test(X, Y) \ + if (this->timer_##X##_##Y .enabled && this->timer_##X##_##Y .isTriggered()) \ + this->timer_##X##_##Y .exec(); + test(0, 0); test(0, 1); test(0, 2); test(0, 3); + test(1, 0); test(1, 1); test(1, 2); test(1, 3); +#undef test +} + +void execHardware_interrupts(); + +// these have not been tuned very well yet. +static const int kMaxWork = 4000; +static const int kIrqWait = 4000; + +template static inline int32_t minarmtime(int32_t arm9, int32_t arm7) +{ + if (doarm9) + { + if (doarm7) + return std::min(arm9, arm7); + else + return arm9; + } + else + return arm7; } -static void timer_check(void) +template +static std::pair armInnerLoop(uint64_t nds_timer_base, int32_t s32next, int32_t arm9, int32_t arm7) { - int p, t; - for (p = 0; p < 2; p++) + int32_t timer = minarmtime(arm9, arm7); + while (timer < s32next && !sequencer.reschedule && execute) { - for (t = 0; t < 4; t++) + if (doarm9 && (!doarm7 || arm9 <= timer)) { - nds.timerOver[p][t] = 0; - if(MMU.timerON[p][t]) + if (!NDS_ARM9.waitIRQ && !nds.freezeBus) { - if(MMU.timerRUN[p][t]) - { - switch(MMU.timerMODE[p][t]) - { - case 0xFFFF : - if(t > 0 && nds.timerOver[p][t - 1]) - { - ++(MMU.timer[p][t]); - nds.timerOver[p][t] = !MMU.timer[p][t]; - if (nds.timerOver[p][t]) - { - if (p == 0) - { - if(T1ReadWord(ARM9Mem.ARM9_REG, 0x102 + (t << 2)) & 0x40) - NDS_makeARM9Int(3 + t); - } - else - { - if(T1ReadWord(MMU.ARM7_REG, 0x102 + (t << 2)) & 0x40) - NDS_makeARM7Int(3 + t); - } - MMU.timer[p][t] = MMU.timerReload[p][t]; - } - } - break; - default : - { - nds.diff = (nds.cycles >> MMU.timerMODE[p][t]) - (nds.timerCycle[p][t] >> MMU.timerMODE[p][t]); - nds.old = MMU.timer[p][t]; - MMU.timer[p][t] += nds.diff; - nds.timerCycle[p][t] += nds.diff << MMU.timerMODE[p][t]; - nds.timerOver[p][t] = nds.old >= MMU.timer[p][t]; - if(nds.timerOver[p][t]) - { - if (p == 0) - { - if(T1ReadWord(ARM9Mem.ARM9_REG, 0x102 + (t << 2)) & 0x40) - NDS_makeARM9Int(3 + t); - } - else - { - if(T1ReadWord(MMU.ARM7_REG, 0x102 + (t << 2)) & 0x40) - NDS_makeARM7Int(3 + t); - } - MMU.timer[p][t] = MMU.timerReload[p][t] + MMU.timer[p][t] - nds.old; - } - } - break; - } - } - else + arm9 += armcpu_exec(); + } + else + arm9 = std::min(s32next, arm9 + kIrqWait); + } + if (doarm7 && (!doarm9 || arm7 <= timer)) + { + if (!NDS_ARM7.waitIRQ && !nds.freezeBus) + { + arm7 += armcpu_exec() << 1; + } + else + { + arm7 = std::min(s32next, arm7 + kIrqWait); + if (arm7 == s32next) { - MMU.timerRUN[p][t] = true; - nds.timerCycle[p][t] = nds.cycles; + nds_timer = nds_timer_base + minarmtime(arm9, arm7); + return armInnerLoop(nds_timer_base, s32next, arm9, arm7); } } } + + timer = minarmtime(arm9, arm7); + nds_timer = nds_timer_base + timer; + } + + return std::make_pair(arm9, arm7); +} + +template void NDS_exec(int32_t) +{ + sequencer.nds_vblankEnded = false; + + if (nds.sleeping) + { + // speculative code: if ANY irq happens, wake up the arm7. + // I think the arm7 program analyzes the system and may decide not to wake up + // if it is dissatisfied with the conditions + if (MMU.reg_IE[1] & MMU.gen_IF<1>()) + nds.sleeping = false; + } + else + { + for (;;) + { + sequencer.execHardware(); + + // break out once per frame + if (sequencer.nds_vblankEnded) + break; + // it should be benign to execute execHardware in the next frame, + // since there won't be anything for it to do (everything should be scheduled in the future) + + // bail in case the system halted + if (!execute) + break; + + execHardware_interrupts(); + + // find next work unit: + uint64_t next = sequencer.findNext(); + next = std::min(next, nds_timer + kMaxWork); // lets set an upper limit for now + + //fprintf(stderr, "%d\n", next - nds_timer); + + sequencer.reschedule = false; + + // cast these down to 32bits so that things run faster on 32bit procs + uint64_t nds_timer_base = nds_timer; + int32_t arm9 = (nds_arm9_timer - nds_timer) & 0xFFFFFFFF; + int32_t arm7 = (nds_arm7_timer - nds_timer) & 0xFFFFFFFF; + int32_t s32next = (next - nds_timer) & 0xFFFFFFFF; + + auto arm9arm7 = armInnerLoop(nds_timer_base, s32next, arm9, arm7); + + arm9 = arm9arm7.first; + arm7 = arm9arm7.second; + nds_arm7_timer = nds_timer_base + arm7; + nds_arm9_timer = nds_timer_base + arm9; + + // if we were waiting for an irq, don't wait too long: + // let's re-analyze it after this hardware event (this rolls back a big burst of irq waiting which may have been interrupted by a resynch) + if (NDS_ARM9.waitIRQ) + nds_arm9_timer = nds_timer; + if (NDS_ARM7.waitIRQ) + nds_arm7_timer = nds_timer; + } + } +} + +template static void execHardware_interrupts_core() +{ + uint32_t IF = MMU.gen_IF(); + uint32_t IE = MMU.reg_IE[PROCNUM]; + uint32_t masked = IF & IE; + if (ARMPROC.halt_IE_and_IF && masked) + { + ARMPROC.halt_IE_and_IF = false; + ARMPROC.waitIRQ = false; + } + + if (masked && MMU.reg_IME[PROCNUM] && !ARMPROC.CPSR.bits.I) + { + //fprintf(stderr, "Executing IRQ on procnum %d with IF = %08X and IE = %08X\n",PROCNUM,IF,IE); + armcpu_irqException(&ARMPROC); + } +} + +void execHardware_interrupts() +{ + execHardware_interrupts_core(); + execHardware_interrupts_core(); +} + +static void PrepareBiosARM7() +{ + NDS_ARM7.BIOS_loaded = false; + memset(MMU.ARM7_BIOS, 0, sizeof(MMU.ARM7_BIOS)); + if (CommonSettings.UseExtBIOS) + { + // read arm7 bios from inputfile and flag it if it succeeds + FILE *arm7inf = fopen(CommonSettings.ARM7BIOS, "rb"); + if (fread(MMU.ARM7_BIOS, 1, 16384, arm7inf) == 16384) + NDS_ARM7.BIOS_loaded = true; + fclose(arm7inf); + } + + // choose to use SWI emulation or routines from bios + if (CommonSettings.SWIFromBIOS && NDS_ARM7.BIOS_loaded) + { + NDS_ARM7.swi_tab = 0; + + // if we used routines from bios, apply patches + if (CommonSettings.PatchSWI3) + _MMU_write16(0x00002F08, 0x4770); + } + else + NDS_ARM7.swi_tab = ARM_swi_tab[ARMCPU_ARM7]; + + if (!NDS_ARM7.BIOS_loaded) + { + // fake bios content, critical to normal operations, since we dont have a real bios. + +#if 0 + // someone please document what is in progress here + // TODO + T1WriteLong(MMU.ARM7_BIOS, 0x0000, 0xEAFFFFFE); // loop for Reset !!! + T1WriteLong(MMU.ARM7_BIOS, 0x0004, 0xEAFFFFFE); // loop for Undef instr expection + T1WriteLong(MMU.ARM7_BIOS, 0x0008, 0xEA00009C); // SWI + T1WriteLong(MMU.ARM7_BIOS, 0x000C, 0xEAFFFFFE); // loop for Prefetch Abort + T1WriteLong(MMU.ARM7_BIOS, 0x0010, 0xEAFFFFFE); // loop for Data Abort + T1WriteLong(MMU.ARM7_BIOS, 0x0014, 0x00000000); // Reserved + T1WriteLong(MMU.ARM7_BIOS, 0x001C, 0x00000000); // Fast IRQ +#endif + T1WriteLong(MMU.ARM7_BIOS, 0x0000, 0xE25EF002); + T1WriteLong(MMU.ARM7_BIOS, 0x0018, 0xEA000000); + T1WriteLong(MMU.ARM7_BIOS, 0x0020, 0xE92D500F); + T1WriteLong(MMU.ARM7_BIOS, 0x0024, 0xE3A00301); + T1WriteLong(MMU.ARM7_BIOS, 0x0028, 0xE28FE000); + T1WriteLong(MMU.ARM7_BIOS, 0x002C, 0xE510F004); + T1WriteLong(MMU.ARM7_BIOS, 0x0030, 0xE8BD500F); + T1WriteLong(MMU.ARM7_BIOS, 0x0034, 0xE25EF004); + } +} + +static void PrepareBiosARM9() +{ + memset(MMU.ARM9_BIOS, 0, sizeof(MMU.ARM9_BIOS)); + NDS_ARM9.BIOS_loaded = false; + if (CommonSettings.UseExtBIOS) + { + // read arm9 bios from inputfile and flag it if it succeeds + FILE *arm9inf = fopen(CommonSettings.ARM9BIOS, "rb"); + if (fread(MMU.ARM9_BIOS, 1, 4096, arm9inf) == 4096) + NDS_ARM9.BIOS_loaded = true; + fclose(arm9inf); + } + + // choose to use SWI emulation or routines from bios + if (CommonSettings.SWIFromBIOS && NDS_ARM9.BIOS_loaded) + { + NDS_ARM9.swi_tab = 0; + + // if we used routines from bios, apply patches + if (CommonSettings.PatchSWI3) + _MMU_write16(0xFFFF07CC, 0x4770); + } + else + NDS_ARM9.swi_tab = ARM_swi_tab[ARMCPU_ARM9]; + + if (!NDS_ARM9.BIOS_loaded) + { + // fake bios content, critical to normal operations, since we dont have a real bios. + // it'd be cool if we could write this in some kind of assembly language, inline or otherwise, without some bulky dependencies + // perhaps we could build it with devkitarm? but thats bulky (offline) dependencies, to be sure.. + + // reminder: bios chains data abort to fast irq + + // exception vectors: + T1WriteLong(MMU.ARM9_BIOS, 0x0000, 0xEAFFFFFE); // (infinite loop for) Reset !!! + //T1WriteLong(MMU.ARM9_BIOS, 0x0004, 0xEAFFFFFE); // (infinite loop for) Undefined instruction + T1WriteLong(MMU.ARM9_BIOS, 0x0004, 0xEA000004); // Undefined instruction -> Fast IRQ (just guessing) + T1WriteLong(MMU.ARM9_BIOS, 0x0008, 0xEA00009C); // SWI -> ????? + T1WriteLong(MMU.ARM9_BIOS, 0x000C, 0xEAFFFFFE); // (infinite loop for) Prefetch Abort + T1WriteLong(MMU.ARM9_BIOS, 0x0010, 0xEA000001); // Data Abort -> Fast IRQ + T1WriteLong(MMU.ARM9_BIOS, 0x0014, 0x00000000); // Reserved + T1WriteLong(MMU.ARM9_BIOS, 0x0018, 0xEA000095); // Normal IRQ -> 0x0274 + T1WriteLong(MMU.ARM9_BIOS, 0x001C, 0xEA00009D); // Fast IRQ -> 0x0298 + + static const uint8_t logo_data[] = + { + 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD, + 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20, + 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF, + 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC, + 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76, + 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD, + 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25, + 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44, + 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF, + 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 + }; + + // logo (do some games fail to boot without this? example?) + for (int t = 0; t < 0x9C; ++t) + MMU.ARM9_BIOS[t + 0x20] = logo_data[t]; + + //...0xBC: + + // (now what goes in this gap??) + + // IRQ handler: get dtcm address and jump to a vector in it + T1WriteLong(MMU.ARM9_BIOS, 0x0274, 0xE92D500F); //STMDB SP!, {R0-R3,R12,LR} + T1WriteLong(MMU.ARM9_BIOS, 0x0278, 0xEE190F11); //MRC CP15, 0, R0, CR9, CR1, 0 + T1WriteLong(MMU.ARM9_BIOS, 0x027C, 0xE1A00620); //MOV R0, R0, LSR #C + T1WriteLong(MMU.ARM9_BIOS, 0x0280, 0xE1A00600); //MOV R0, R0, LSL #C + T1WriteLong(MMU.ARM9_BIOS, 0x0284, 0xE2800C40); //ADD R0, R0, #4000 + T1WriteLong(MMU.ARM9_BIOS, 0x0288, 0xE28FE000); //ADD LR, PC, #0 + T1WriteLong(MMU.ARM9_BIOS, 0x028C, 0xE510F004); //LDR PC, [R0, -#4] + + // ???? + T1WriteLong(MMU.ARM9_BIOS, 0x0290, 0xE8BD500F); // LDMIA SP!, {R0-R3,R12,LR} + T1WriteLong(MMU.ARM9_BIOS, 0x0294, 0xE25EF004); // SUBS PC, LR, #4 + + // ------- + // FIQ and abort exception handler + // TODO - this code is copied from the bios. refactor it + // friendly reminder: to calculate an immediate offset: encoded = (desired_address-cur_address-8) + + T1WriteLong(MMU.ARM9_BIOS, 0x0298, 0xE10FD000); // MRS SP, CPSR + T1WriteLong(MMU.ARM9_BIOS, 0x029C, 0xE38DD0C0); // ORR SP, SP, #C0 + + T1WriteLong(MMU.ARM9_BIOS, 0x02A0, 0xE12FF00D); // MSR CPSR_fsxc, SP + T1WriteLong(MMU.ARM9_BIOS, 0x02A4, 0xE59FD028); // LDR SP, [FFFF02D4] + T1WriteLong(MMU.ARM9_BIOS, 0x02A8, 0xE28DD001); // ADD SP, SP, #1 + T1WriteLong(MMU.ARM9_BIOS, 0x02AC, 0xE92D5000); // STMDB SP!, {R12,LR} + + T1WriteLong(MMU.ARM9_BIOS, 0x02B0, 0xE14FE000); // MRS LR, SPSR + T1WriteLong(MMU.ARM9_BIOS, 0x02B4, 0xEE11CF10); // MRC CP15, 0, R12, CR1, CR0, 0 + T1WriteLong(MMU.ARM9_BIOS, 0x02B8, 0xE92D5000); // STMDB SP!, {R12,LR} + T1WriteLong(MMU.ARM9_BIOS, 0x02BC, 0xE3CCC001); // BIC R12, R12, #1 + + T1WriteLong(MMU.ARM9_BIOS, 0x02C0, 0xEE01CF10); // MCR CP15, 0, R12, CR1, CR0, 0 + T1WriteLong(MMU.ARM9_BIOS, 0x02C4, 0xE3CDC001); // BIC R12, SP, #1 + T1WriteLong(MMU.ARM9_BIOS, 0x02C8, 0xE59CC010); // LDR R12, [R12, #10] + T1WriteLong(MMU.ARM9_BIOS, 0x02CC, 0xE35C0000); // CMP R12, #0 + + T1WriteLong(MMU.ARM9_BIOS, 0x02D0, 0x112FFF3C); // BLXNE R12 + T1WriteLong(MMU.ARM9_BIOS, 0x02D4, 0x027FFD9C); // 0x027FFD9C + // --------- } } -void NDS_exec_hframe(int cpu_clockdown_level_arm9, int cpu_clockdown_level_arm7) +void NDS_Reset() { - int h; - for (h = 0; h < 2; h++) + bool fw_success = false; + auto header = NDS_getROMHeader(); + + if (!header) + return; + + nds.sleeping = false; + nds.cardEjected = false; + nds.freezeBus = 0; + + nds_timer = 0; + nds_arm9_timer = 0; + nds_arm7_timer = 0; + + SPU_DeInit(); + + MMU_Reset(); + + PrepareBiosARM7(); + PrepareBiosARM9(); + + // according to smea, this is initialized to 3 by the time we get into a user game program. who does this? + // well, the firmware load process is about to write a boot program into SIWRAM for the arm7. so we need it setup by now. + // but, this is a bit weird.. I would be expecting the bioses to do that. maybe we have some more detail to emulate. + // * is this setting the default, or does the bios do it before loading the firmware programs? + // at any, it's important that this be done long before the user code ever runs + _MMU_write08(REG_WRAMCNT, 3); + + firmware.reset(new CFIRMWARE()); + fw_success = firmware->load(); + + if (NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded && CommonSettings.BootFromFirmware && fw_success) { - s32 nb = nds.cycles + (h ? (99 * 12) : (256 * 12)); + // Copy secure area to memory if needed. + // could we get a comment about what's going on here? + // how does this stuff get copied before anything ever even runs? + // does it get mapped straight to the rom somehow? + // This code could be made more clear too. + if (header->ARM9src >= 0x4000 && header->ARM9src < 0x8000) + { + uint32_t src = header->ARM9src; + uint32_t dst = header->ARM9cpy; - while (nb > nds.ARM9Cycle && !NDS_ARM9.waitIRQ) - nds.ARM9Cycle += armcpu_exec(&NDS_ARM9) << (cpu_clockdown_level_arm9); - if (NDS_ARM9.waitIRQ) nds.ARM9Cycle = nb; - while (nb > nds.ARM7Cycle && !NDS_ARM7.waitIRQ) - nds.ARM7Cycle += armcpu_exec(&NDS_ARM7) << (1 + (cpu_clockdown_level_arm7)); - if (NDS_ARM7.waitIRQ) nds.ARM7Cycle = nb; - nds.cycles = (nds.ARM9Cycle> 2; - if(nds.VCount<192) + for (uint32_t i = 0; i < size; ++i) { - if(MMU.DMAStartTime[0][0] == 2) - MMU_doDMA(0, 0); - if(MMU.DMAStartTime[0][1] == 2) - MMU_doDMA(0, 1); - if(MMU.DMAStartTime[0][2] == 2) - MMU_doDMA(0, 2); - if(MMU.DMAStartTime[0][3] == 2) - MMU_doDMA(0, 3); + _MMU_write32(dst, T1ReadLong(MMU.CART_ROM, src)); + src += 4; + dst += 4; } } + + // TODO someone describe why here + if (firmware->patched) + { + armcpu_init(&NDS_ARM7, 0x00000008); + armcpu_init(&NDS_ARM9, 0xFFFF0008); + } else { - /* HDISP */ - u32 vmatch; + // set the cpus to an initial state with their respective firmware program entrypoints + armcpu_init(&NDS_ARM7, firmware->ARM7bootAddr); + armcpu_init(&NDS_ARM9, firmware->ARM9bootAddr); + } - nds.nextHBlank += 4260; - ++nds.VCount; - T1WriteWord(ARM9Mem.ARM9_REG, 4, T1ReadWord(ARM9Mem.ARM9_REG, 4) & 0xFFFD); - T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & 0xFFFD); - - if(MMU.DMAStartTime[0][0] == 3) - MMU_doDMA(0, 0); - if(MMU.DMAStartTime[0][1] == 3) - MMU_doDMA(0, 1); - if(MMU.DMAStartTime[0][2] == 3) - MMU_doDMA(0, 2); - if(MMU.DMAStartTime[0][3] == 3) - MMU_doDMA(0, 3); + // set REG_POSTFLG to the value indicating pre-firmware status + MMU.ARM9_REG[0x300] = 0; + MMU.ARM7_REG[0x300] = 0; + } + else + { + // fake firmware boot-up process - // Main memory display - if(MMU.DMAStartTime[0][0] == 4) - { - MMU_doDMA(0, 0); - MMU.DMAStartTime[0][0] = 0; - } - if(MMU.DMAStartTime[0][1] == 4) - { - MMU_doDMA(0, 1); - MMU.DMAStartTime[0][1] = 0; - } - if(MMU.DMAStartTime[0][2] == 4) - { - MMU_doDMA(0, 2); - MMU.DMAStartTime[0][2] = 0; - } - if(MMU.DMAStartTime[0][3] == 4) - { - MMU_doDMA(0, 3); - MMU.DMAStartTime[0][3] = 0; - } + // copy the arm9 program to the address specified by rom header + uint32_t src = header->ARM9src; + uint32_t dst = header->ARM9cpy; + for (uint32_t i = 0; i < (header->ARM9binSize >> 2); ++i) + { + _MMU_write32(dst, T1ReadLong(MMU.CART_ROM, src)); + dst += 4; + src += 4; + } - if(MMU.DMAStartTime[1][0] == 4) - { - MMU_doDMA(1, 0); - MMU.DMAStartTime[1][0] = 0; - } - if(MMU.DMAStartTime[1][1] == 4) - { - MMU_doDMA(1, 1); - MMU.DMAStartTime[0][1] = 0; - } - if(MMU.DMAStartTime[1][2] == 4) - { - MMU_doDMA(1, 2); - MMU.DMAStartTime[1][2] = 0; - } - if(MMU.DMAStartTime[1][3] == 4) - { - MMU_doDMA(1, 3); - MMU.DMAStartTime[1][3] = 0; - } + // copy the arm7 program to the address specified by rom header + src = header->ARM7src; + dst = header->ARM7cpy; - if(nds.VCount == 192) - { - /* VBLANK */ - T1WriteWord(ARM9Mem.ARM9_REG, 4, T1ReadWord(ARM9Mem.ARM9_REG, 4) | 1); - T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) | 1); - NDS_ARM9VBlankInt(); - NDS_ARM7VBlankInt(); - - if(MMU.DMAStartTime[0][0] == 1) - MMU_doDMA(0, 0); - if(MMU.DMAStartTime[0][1] == 1) - MMU_doDMA(0, 1); - if(MMU.DMAStartTime[0][2] == 1) - MMU_doDMA(0, 2); - if(MMU.DMAStartTime[0][3] == 1) - MMU_doDMA(0, 3); - - if(MMU.DMAStartTime[1][0] == 1) - MMU_doDMA(1, 0); - if(MMU.DMAStartTime[1][1] == 1) - MMU_doDMA(1, 1); - if(MMU.DMAStartTime[1][2] == 1) - MMU_doDMA(1, 2); - if(MMU.DMAStartTime[1][3] == 1) - MMU_doDMA(1, 3); - } - else if(nds.VCount == 263) - { - const int cycles_per_frame = (263 * (99 * 12 + 256 * 12)); - /* VDISP */ - nds.nextHBlank = 3168; - nds.VCount = 0; - T1WriteWord(ARM9Mem.ARM9_REG, 4, T1ReadWord(ARM9Mem.ARM9_REG, 4) & 0xFFFE); - T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & 0xFFFE); - - nds.cycles -= cycles_per_frame; - nds.ARM9Cycle -= cycles_per_frame; - nds.ARM7Cycle -= cycles_per_frame; - nb -= cycles_per_frame; - if(MMU.timerON[0][0]) - nds.timerCycle[0][0] -= cycles_per_frame; - if(MMU.timerON[0][1]) - nds.timerCycle[0][1] -= cycles_per_frame; - if(MMU.timerON[0][2]) - nds.timerCycle[0][2] -= cycles_per_frame; - if(MMU.timerON[0][3]) - nds.timerCycle[0][3] -= cycles_per_frame; - - if(MMU.timerON[1][0]) - nds.timerCycle[1][0] -= cycles_per_frame; - if(MMU.timerON[1][1]) - nds.timerCycle[1][1] -= cycles_per_frame; - if(MMU.timerON[1][2]) - nds.timerCycle[1][2] -= cycles_per_frame; - if(MMU.timerON[1][3]) - nds.timerCycle[1][3] -= cycles_per_frame; - if(MMU.DMAing[0][0]) - MMU.DMACycle[0][0] -= cycles_per_frame; - if(MMU.DMAing[0][1]) - MMU.DMACycle[0][1] -= cycles_per_frame; - if(MMU.DMAing[0][2]) - MMU.DMACycle[0][2] -= cycles_per_frame; - if(MMU.DMAing[0][3]) - MMU.DMACycle[0][3] -= cycles_per_frame; - if(MMU.DMAing[1][0]) - MMU.DMACycle[1][0] -= cycles_per_frame; - if(MMU.DMAing[1][1]) - MMU.DMACycle[1][1] -= cycles_per_frame; - if(MMU.DMAing[1][2]) - MMU.DMACycle[1][2] -= cycles_per_frame; - if(MMU.DMAing[1][3]) - MMU.DMACycle[1][3] -= cycles_per_frame; + for (uint32_t i = 0; i < (header->ARM7binSize >> 2); ++i) + { + _MMU_write32(dst, T1ReadLong(MMU.CART_ROM, src)); + dst += 4; + src += 4; + } - } + // set the cpus to an initial state with their respective programs entrypoints + armcpu_init(&NDS_ARM7, header->ARM7exe); + armcpu_init(&NDS_ARM9, header->ARM9exe); + + // set REG_POSTFLG to the value indicating post-firmware status + MMU.ARM9_REG[0x300] = 1; + MMU.ARM7_REG[0x300] = 1; + } - T1WriteWord(ARM9Mem.ARM9_REG, 6, nds.VCount); - T1WriteWord(MMU.ARM7_REG, 6, nds.VCount); + // only ARM9 have co-processor + reconstruct(&cp15); + cp15.reset(&NDS_ARM9); + + // bitbox 4k demo is so stripped down it relies on default stack values + // otherwise the arm7 will crash before making a sound + // (these according to gbatek softreset bios docs) + NDS_ARM7.R13_svc = 0x0380FFDC; + NDS_ARM7.R13_irq = 0x0380FFB0; + NDS_ARM7.R13_usr = 0x0380FF00; + NDS_ARM7.R[13] = NDS_ARM7.R13_usr; + // and let's set these for the arm9 while we're at it, though we have no proof + NDS_ARM9.R13_svc = 0x00803FC0; + NDS_ARM9.R13_irq = 0x00803FA0; + NDS_ARM9.R13_usr = 0x00803EC0; + NDS_ARM9.R13_abt = NDS_ARM9.R13_usr; // ????? + // I think it is wrong to take gbatek's "SYS" and put it in USR--maybe USR doesnt matter. + // i think SYS is all the misc modes. please verify by setting nonsensical stack values for USR here + NDS_ARM9.R[13] = NDS_ARM9.R13_usr; + // n.b.: im not sure about all these, I dont know enough about arm9 svc/irq/etc modes + // and how theyre named in desmume to match them up correctly. i just guessed. + + memset(nds.timerCycle, 0, sizeof(uint64_t) * 8); + nds.old = 0; + SetupMMU(false, nds.Is_DSI()); + + _MMU_write16(REG_KEYINPUT, 0x3FF); + _MMU_write16(REG_KEYINPUT, 0x3FF); + _MMU_write08(REG_EXTKEYIN, 0x43); - vmatch = T1ReadWord(ARM9Mem.ARM9_REG, 4); - if(nds.VCount== ((vmatch >> 8) | ((vmatch << 1) & 256))) - { - T1WriteWord(ARM9Mem.ARM9_REG, 4, T1ReadWord(ARM9Mem.ARM9_REG, 4) | 4); - if(T1ReadWord(ARM9Mem.ARM9_REG, 4) & 32) - NDS_makeARM9Int(2); - } - else - T1WriteWord(ARM9Mem.ARM9_REG, 4, T1ReadWord(ARM9Mem.ARM9_REG, 4) & 0xFFFB); + // Setup a copy of the firmware user settings in memory. + // (this is what the DS firmware would do). + { + uint8_t temp_buffer[NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT]; - vmatch = T1ReadWord(MMU.ARM7_REG, 4); - if(nds.VCount== ((vmatch >> 8) | ((vmatch <<1 ) & 256))) - { - T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) | 4); - if(T1ReadWord(MMU.ARM7_REG, 4) & 32) - NDS_makeARM7Int(2); - } - else - T1WriteWord(MMU.ARM7_REG, 4, T1ReadWord(MMU.ARM7_REG, 4) & 0xFFFB); + if (copy_firmware_user_data(temp_buffer, &MMU.fw.data[0])) + for (int fw_index = 0; fw_index < NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT; ++fw_index) + _MMU_write08(0x027FFC80 + fw_index, temp_buffer[fw_index]); + } - timer_check(); - dma_check(); - } + // Copy the whole header to Main RAM 0x27FFE00 on startup. (http://nocash.emubase.de/gbatek.htm#dscartridgeheader) + // once upon a time this copied 0x90 more. this was thought to be wrong, and changed. + if (nds.Is_DSI()) + { + // dsi needs this copied later in memory. there are probably a number of things that get copied to a later location in memory.. thats where the NDS consoles tend to stash stuff. + for (int i = 0; i < 92; ++i) + _MMU_write32(0x02FFFE00 + i * 4, LE_TO_LOCAL_32(reinterpret_cast(MMU.CART_ROM)[i])); + } + else + { + for (int i = 0; i < 92; ++i) + _MMU_write32(0x027FFE00 + i * 4, LE_TO_LOCAL_32(reinterpret_cast(MMU.CART_ROM)[i])); } -} -void NDS_exec_frame(int cpu_clockdown_level_arm9, int cpu_clockdown_level_arm7) -{ - int v; - for (v = 0; v < 263; v++) + // Write the header checksum to memory (the firmware needs it to see the cart) + _MMU_write16(0x027FF808, T1ReadWord(MMU.CART_ROM, 0x15E)); + + if (firmware->patched && CommonSettings.UseExtBIOS && CommonSettings.BootFromFirmware && fw_success) { - NDS_exec_hframe(cpu_clockdown_level_arm9, cpu_clockdown_level_arm7); + // HACK! for flashme + _MMU_write32(0x27FFE24, firmware->ARM9bootAddr); + _MMU_write32(0x27FFE34, firmware->ARM7bootAddr); } + + // make system think it's booted from card -- EXTREMELY IMPORTANT!!! Thanks to cReDiAr + _MMU_write08(0x02FFFC40, 0x1); + _MMU_write08(0x02FFFC40, 0x1); + + initSchedule(); + + SPU_ReInit(); } +// these templates needed to be instantiated manually +template void NDS_exec(int32_t nb); +template void NDS_exec(int32_t nb); diff -Nru audacious-plugins-4.1/src/xsf/desmume/NDSSystem.h audacious-plugins-4.2/src/xsf/desmume/NDSSystem.h --- audacious-plugins-4.1/src/xsf/desmume/NDSSystem.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/NDSSystem.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,248 +1,348 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2008-2013 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -#ifndef NDSSYSTEM_H -#define NDSSYSTEM_H +#pragma once +#include +#include +#include +#include #include "armcpu.h" #include "MMU.h" - -#include "GPU.h" #include "SPU.h" - #include "mem.h" -//#include "wifi.h" +#include "emufile.h" +#include "firmware.h" -extern volatile BOOL execute; -extern BOOL click; +template struct buttonstruct +{ + union + { + struct + { + // changing the order of these fields would break stuff + //fRLDUTSBAYXWEg + Type G; // debug + Type E; // right shoulder + Type W; // left shoulder + Type X; + Type Y; + Type A; + Type B; + Type S; // start + Type T; // select + Type U; // up + Type D; // down + Type L; // left + Type R; // right + Type F; // lid + }; + Type array[14]; + }; +}; -/* - * The firmware language values - */ -#define NDS_FW_LANG_JAP 0 -#define NDS_FW_LANG_ENG 1 -#define NDS_FW_LANG_FRE 2 -#define NDS_FW_LANG_GER 3 -#define NDS_FW_LANG_ITA 4 -#define NDS_FW_LANG_SPA 5 -#define NDS_FW_LANG_CHI 6 -#define NDS_FW_LANG_RES 7 - - -//#define LOG_ARM9 -//#define LOG_ARM7 - -typedef struct -{ - char gameTile[12]; - char gameCode[4]; - u16 makerCode; - u8 unitCode; - u8 deviceCode; - u8 cardSize; - u8 cardInfo[8]; - u8 flags; - - u32 ARM9src; - u32 ARM9exe; - u32 ARM9cpy; - u32 ARM9binSize; - - u32 ARM7src; - u32 ARM7exe; - u32 ARM7cpy; - u32 ARM7binSize; - - u32 FNameTblOff; - u32 FNameTblSize; - - u32 FATOff; - u32 FATSize; - - u32 ARM9OverlayOff; - u32 ARM9OverlaySize; - u32 ARM7OverlayOff; - u32 ARM7OverlaySize; - - u32 unknown2a; - u32 unknown2b; - - u32 IconOff; - u16 CRC16; - u16 ROMtimeout; - u32 ARM9unk; - u32 ARM7unk; - - u8 unknown3c[8]; - u32 ROMSize; - u32 HeaderSize; - u8 unknown5[56]; - u8 logo[156]; - u16 logoCRC16; - u16 headerCRC16; - u8 reserved[160]; -} NDS_header; - -extern void debug(); - -typedef struct -{ - s32 ARM9Cycle; - s32 ARM7Cycle; - s32 cycles; - s32 timerCycle[2][4]; - BOOL timerOver[2][4]; - s32 nextHBlank; - u32 VCount; - u32 old; - s32 diff; - BOOL lignerendu; - - u16 touchX; - u16 touchY; -} NDSSystem; - -/** /brief A touchscreen calibration point. - */ -struct NDS_fw_touchscreen_cal { - u16 adc_x; - u16 adc_y; - - u8 screen_x; - u8 screen_y; -}; - -/** /brief The type of DS - */ -enum nds_fw_ds_type { - NDS_FW_DS_TYPE_FAT, - NDS_FW_DS_TYPE_LITE +extern volatile bool execute; + +struct NDS_header +{ + char gameTile[12]; + char gameCode[4]; + uint16_t makerCode; + uint8_t unitCode; + uint8_t deviceCode; + uint8_t cardSize; + uint8_t cardInfo[8]; + uint8_t flags; + uint8_t romversion; + + uint32_t ARM9src; + uint32_t ARM9exe; + uint32_t ARM9cpy; + uint32_t ARM9binSize; + + uint32_t ARM7src; + uint32_t ARM7exe; + uint32_t ARM7cpy; + uint32_t ARM7binSize; + + uint32_t FNameTblOff; + uint32_t FNameTblSize; + + uint32_t FATOff; + uint32_t FATSize; + + uint32_t ARM9OverlayOff; + uint32_t ARM9OverlaySize; + uint32_t ARM7OverlayOff; + uint32_t ARM7OverlaySize; + + uint32_t unknown2a; + uint32_t unknown2b; + + uint32_t IconOff; + uint16_t CRC16; + uint16_t ROMtimeout; + uint32_t ARM9unk; + uint32_t ARM7unk; + + uint8_t unknown3c[8]; + uint32_t ROMSize; + uint32_t HeaderSize; + uint8_t unknown5[56]; + uint8_t logo[156]; + uint16_t logoCRC16; + uint16_t headerCRC16; + uint8_t reserved[160]; +}; + +extern uint64_t nds_timer; +void NDS_Reschedule(); +void NDS_RescheduleDMA(); +void NDS_RescheduleTimers(); + +enum NDS_CONSOLE_TYPE +{ + NDS_CONSOLE_TYPE_FAT, + NDS_CONSOLE_TYPE_LITE, + NDS_CONSOLE_TYPE_IQUE, + NDS_CONSOLE_TYPE_DSI +}; + +struct NDSSystem +{ + int32_t cycles; + uint64_t timerCycle[2][4]; + uint32_t VCount; + uint32_t old; + + uint8_t *FW_ARM9BootCode; + uint8_t *FW_ARM7BootCode; + uint32_t FW_ARM9BootCodeAddr; + uint32_t FW_ARM7BootCodeAddr; + uint32_t FW_ARM9BootCodeSize; + uint32_t FW_ARM7BootCodeSize; + + bool sleeping; + bool cardEjected; + uint32_t freezeBus; + + // console type must be copied in when the system boots. it can't be changed on the fly. + int ConsoleType; + bool Is_DSI() { return this->ConsoleType == NDS_CONSOLE_TYPE_DSI; } + + bool isInVblank() const { return this->VCount >= 192; } + bool isIn3dVblank() const { return this->VCount >= 192 && this->VCount < 215; } }; #define MAX_FW_NICKNAME_LENGTH 10 #define MAX_FW_MESSAGE_LENGTH 26 -struct NDS_fw_config_data { - enum nds_fw_ds_type ds_type; - - u8 fav_colour; - u8 birth_month; - u8 birth_day; +struct NDS_fw_config_data +{ + NDS_CONSOLE_TYPE ds_type; - u16 nickname[MAX_FW_NICKNAME_LENGTH]; - u8 nickname_len; + uint8_t fav_colour; + uint8_t birth_month; + uint8_t birth_day; - u16 message[MAX_FW_MESSAGE_LENGTH]; - u8 message_len; + uint16_t nickname[MAX_FW_NICKNAME_LENGTH]; + uint8_t nickname_len; - u8 language; + uint16_t message[MAX_FW_MESSAGE_LENGTH]; + uint8_t message_len; - /* touchscreen calibration */ - struct NDS_fw_touchscreen_cal touch_cal[2]; + uint8_t language; }; extern NDSSystem nds; -#ifdef GDB_STUB -int NDS_Init( struct armcpu_memory_iface *arm9_mem_if, - struct armcpu_ctrl_iface **arm9_ctrl_iface, - struct armcpu_memory_iface *arm7_mem_if, - struct armcpu_ctrl_iface **arm7_ctrl_iface); -#else -int NDS_Init ( void); -#endif - -void NDS_DeInit(void); -void -NDS_FillDefaultFirmwareConfigData( struct NDS_fw_config_data *fw_config); - -BOOL NDS_SetROM(u8 * rom, u32 mask); -NDS_header * NDS_getROMHeader(void); - -void NDS_setTouchPos(u16 x, u16 y); -void NDS_releasTouch(void); - -int NDS_LoadROM(const char *filename, int bmtype, u32 bmsize, - const char *cflash_disk_image_file); -void NDS_FreeROM(void); -void NDS_Reset(void); -int NDS_ImportSave(const char *filename); - -int NDS_WriteBMP(const char *filename); -int NDS_LoadFirmware(const char *filename); -int NDS_CreateDummyFirmware( struct NDS_fw_config_data *user_settings); -u32 -NDS_exec(s32 nb, BOOL force); - - static INLINE void NDS_ARM9HBlankInt(void) - { - if(T1ReadWord(ARM9Mem.ARM9_REG, 4) & 0x10) - { - MMU.reg_IF[0] |= 2;// & (MMU.reg_IME[0] << 1);// (MMU.reg_IE[0] & (1<<1)); - NDS_ARM9.wIRQ = true; - } - } - - static INLINE void NDS_ARM7HBlankInt(void) - { - if(T1ReadWord(MMU.ARM7_REG, 4) & 0x10) - { - MMU.reg_IF[1] |= 2;// & (MMU.reg_IME[1] << 1);// (MMU.reg_IE[1] & (1<<1)); - NDS_ARM7.wIRQ = true; - } - } - - static INLINE void NDS_ARM9VBlankInt(void) - { - if(T1ReadWord(ARM9Mem.ARM9_REG, 4) & 0x8) - { - MMU.reg_IF[0] |= 1;// & (MMU.reg_IME[0]);// (MMU.reg_IE[0] & 1); - NDS_ARM9.wIRQ = true; - //execute = false; - /*logcount++;*/ - } - } - - static INLINE void NDS_ARM7VBlankInt(void) - { - if(T1ReadWord(MMU.ARM7_REG, 4) & 0x8) - { - MMU.reg_IF[1] |= 1;// & (MMU.reg_IME[1]);// (MMU.reg_IE[1] & 1); - NDS_ARM7.wIRQ = true; - //execute = false; - } - } - - static INLINE void NDS_swapScreen(void) - { - u16 tmp = MainScreen.offset; - MainScreen.offset = SubScreen.offset; - SubScreen.offset = tmp; - } +int NDS_Init (); +void NDS_DeInit(); +bool NDS_SetROM(uint8_t * rom, uint32_t mask); -void NDS_exec_frame(int cpu_clockdown_level_arm9, int cpu_clockdown_level_arm7); -void NDS_exec_hframe(int cpu_clockdown_level_arm9, int cpu_clockdown_level_arm7); +struct RomBanner +{ + RomBanner(bool defaultInit); + uint16_t version; //Version (0001h) + uint16_t crc16; //CRC16 across entries 020h..83Fh + uint8_t reserved[0x1C]; //Reserved (zero-filled) + uint8_t bitmap[0x200]; //Icon Bitmap (32x32 pix) (4x4 tiles, each 4x8 bytes, 4bit depth) + uint16_t palette[0x10]; //Icon Palette (16 colors, 16bit, range 0000h-7FFFh) (Color 0 is transparent, so the 1st palette entry is ignored) + enum { NUM_TITLES = 6 }; + union + { + struct + { + uint16_t title_jp[0x80]; // Title 0 Japanese (128 characters, 16bit Unicode) + uint16_t title_en[0x80]; // Title 1 English ("") + uint16_t title_fr[0x80]; // Title 2 French ("") + uint16_t title_de[0x80]; // Title 3 German ("") + uint16_t title_it[0x80]; // Title 4 Italian ("") + uint16_t title_es[0x80]; // Title 5 Spanish ("") + }; + uint16_t titles[NUM_TITLES][0x80]; + }; + uint8_t end0xFF[0x1C0]; + //840h ? (Maybe newer/chinese firmware do also support chinese title?) + //840h - End of Icon/Title structure (next 1C0h bytes usually FFh-filled) +}; -#endif +struct GameInfo +{ + GameInfo() : romdata() { } + + void loadData(char *buf, int size) + { + this->resize(size); + memcpy(&this->romdata[0], buf, size); + this->romsize = size; + this->fillGap(); + } + + void fillGap() + { + memset(&this->romdata[this->romsize], 0xFF, this->allocatedSize - this->romsize); + } + + void resize(int size) + { + // calculate the necessary mask for the requested size + mask = size - 1; + mask |= mask >> 1; + mask |= mask >> 2; + mask |= mask >> 4; + mask |= mask >> 8; + mask |= mask >> 16; + + // now, we actually need to over-allocate, because bytes from anywhere protected by that mask + // could be read from the rom + this->allocatedSize = mask + 4; + + this->romdata.reset(new char[allocatedSize]); + this->romsize = size; + } + uint32_t crc; + NDS_header header; + char ROMserial[20]; + char ROMname[20]; + std::unique_ptr romdata; + uint32_t romsize; + uint32_t allocatedSize; + uint32_t mask; + bool isHomebrew; +}; +extern GameInfo gameInfo; +struct UserButtons : buttonstruct +{ +}; +struct UserTouch +{ + uint16_t touchX; + uint16_t touchY; + bool isTouch; +}; +struct UserMicrophone +{ + uint32_t micButtonPressed; +}; +struct UserInput +{ + UserButtons buttons; + UserTouch touch; + UserMicrophone mic; +}; + +void NDS_FreeROM(); +void NDS_Reset(); + +void NDS_Sleep(); + +void execHardware_doAllDma(EDMAMode modeNum); + +template void NDS_exec(int32_t nb = 560190 << 1); + +extern struct TCommonSettings +{ + TCommonSettings() : UseExtBIOS(false), SWIFromBIOS(false), PatchSWI3(false), UseExtFirmware(false), BootFromFirmware(false), ConsoleType(NDS_CONSOLE_TYPE_FAT), rigorous_timing(false), advanced_timing(true), + spuInterpolationMode(SPUInterpolation_Linear), manualBackupType(0), spu_captureMuted(false), spu_advanced(false) + { + strcpy(this->ARM9BIOS, "biosnds9.bin"); + strcpy(this->ARM7BIOS, "biosnds7.bin"); + strcpy(this->Firmware, "firmware.bin"); + NDS_FillDefaultFirmwareConfigData(&this->InternalFirmConf); + + bool solo = false; + static char* soloEnv = strdup("SOLO_2SF_n"); + static char* muteEnv = strdup("MUTE_2SF_n"); + for (int i = 0; i < 16; ++i) { + if (i < 10) { + soloEnv[9] = '0' + i; + } else { + soloEnv[9] = 'A' + (i - 10); + } + char* soloVal = getenv(soloEnv); + if (soloVal && soloVal[0] == '1') { + solo = true; + this->spu_muteChannels[i] = false; + } else { + this->spu_muteChannels[i] = true; + } + } + if (!solo) { + for (int i = 0; i < 16; ++i) { + if (i < 10) { + muteEnv[9] = '0' + i; + } else { + muteEnv[9] = 'A' + (i - 10); + } + char* muteVal = getenv(muteEnv); + this->spu_muteChannels[i] = muteVal && muteVal[0] == '1'; + } + } + } + + bool UseExtBIOS; + char ARM9BIOS[256]; + char ARM7BIOS[256]; + bool SWIFromBIOS; + bool PatchSWI3; + + bool UseExtFirmware; + char Firmware[256]; + bool BootFromFirmware; + struct NDS_fw_config_data InternalFirmConf; + + NDS_CONSOLE_TYPE ConsoleType; + + bool rigorous_timing; + + bool advanced_timing; + + SPUInterpolationMode spuInterpolationMode; + + // this is the user's choice of manual backup type, for cases when the autodetection can't be trusted + int manualBackupType; + + bool spu_muteChannels[16]; + bool spu_captureMuted; + bool spu_advanced; +} CommonSettings; diff -Nru audacious-plugins-4.1/src/xsf/desmume/PACKED_END.h audacious-plugins-4.2/src/xsf/desmume/PACKED_END.h --- audacious-plugins-4.1/src/xsf/desmume/PACKED_END.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/PACKED_END.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,3 @@ +#ifndef __GNUC__ +#pragma pack(pop) +#endif diff -Nru audacious-plugins-4.1/src/xsf/desmume/PACKED.h audacious-plugins-4.2/src/xsf/desmume/PACKED.h --- audacious-plugins-4.1/src/xsf/desmume/PACKED.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/PACKED.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,12 @@ +#ifndef __GNUC__ +# pragma pack(push, 1) +# pragma warning(disable : 4103) +#endif + +#ifndef __PACKED +# ifdef __GNUC__ +# define __PACKED __attribute__((__packed__)) +# else +# define __PACKED +# endif +#endif diff -Nru audacious-plugins-4.1/src/xsf/desmume/readwrite.cc audacious-plugins-4.2/src/xsf/desmume/readwrite.cc --- audacious-plugins-4.1/src/xsf/desmume/readwrite.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/readwrite.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,84 @@ +/* + Copyright (C) 2006-2009 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#include "readwrite.h" +#include "types.h" + +int read8le(uint8_t *Bufo, EMUFILE *is) +{ + if (is->_fread(Bufo, 1) != 1) + return 0; + return 1; +} + +int read32le(uint32_t *Bufo, EMUFILE *fp) +{ + uint32_t buf; + if (fp->_fread(&buf, 4) < 4) + return 0; +#ifdef LOCAL_LE + *Bufo = buf; +#else + *Bufo = ((buf & 0xFF) << 24) | ((buf & 0xFF00) << 8) | ((buf & 0xFF0000) >> 8) | ((buf & 0xFF000000) >> 24); +#endif + return 1; +} + +int read16le(uint16_t *Bufo, EMUFILE *is) +{ + uint16_t buf; + if (is->_fread(&buf, 2) != 2) + return 0; +#ifdef LOCAL_LE + *Bufo = buf; +#else + *Bufo = LE_TO_LOCAL_16(buf); +#endif + return 1; +} + +int read64le(uint64_t *Bufo, EMUFILE *is) +{ + uint64_t buf; + if (is->_fread(&buf, 8) != 8) + return 0; +#ifdef LOCAL_LE + *Bufo = buf; +#else + *Bufo = LE_TO_LOCAL_64(buf); +#endif + return 1; +} + +int readbool(bool *b, EMUFILE *is) +{ + uint32_t temp = 0; + int ret = read32le(&temp, is); + *b = !!temp; + return ret; +} + +int readbuffer(std::vector &vec, EMUFILE *is) +{ + uint32_t size; + if (read32le(&size, is) != 1) + return 0; + vec.resize(size); + if (size > 0) + is->fread(&vec[0], size); + return 1; +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/readwrite.h audacious-plugins-4.2/src/xsf/desmume/readwrite.h --- audacious-plugins-4.1/src/xsf/desmume/readwrite.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/readwrite.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,43 @@ +/* + Copyright (C) 2008-2009 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +#include +#include +#include +#include "types.h" +#include "emufile.h" + +int read8le(uint8_t *Bufo, EMUFILE *is); +int read16le(uint16_t *Bufo, EMUFILE *is); +inline int read16le(int16_t *Bufo, EMUFILE *is) { return read16le(reinterpret_cast(Bufo), is); } +int read32le(uint32_t *Bufo, EMUFILE *is); +inline int read32le(int32_t *Bufo, EMUFILE *is) { return read32le(reinterpret_cast(Bufo), is); } +int read64le(uint64_t *Bufo, EMUFILE *is); +inline int read_double_le(double *Bufo, EMUFILE *is) +{ + uint64_t temp; + int ret = read64le(&temp,is); + *Bufo = u64_to_double(temp); + return ret; +} +int read16le(uint16_t *Bufo, std::istream *is); + +int readbool(bool *b, EMUFILE *is); + +int readbuffer(std::vector &vec, EMUFILE *is); diff -Nru audacious-plugins-4.1/src/xsf/desmume/registers.h audacious-plugins-4.2/src/xsf/desmume/registers.h --- audacious-plugins-4.1/src/xsf/desmume/registers.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/registers.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,26 +1,22 @@ -/* Copyright (C) 2006 Theo Berkau +/* + Copyright (C) 2006 Theo Berkau + Copyright (C) 2006-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - Ideas borrowed from Stephane Dallongeville's SCSP core - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef REGISTERS_H -#define REGISTERS_H +#pragma once #define REG_REGION_MASK 0x0FFFEF80 #define REG_BASE_DISPx 0x04000000 @@ -78,22 +74,40 @@ #define REG_DISPA_MASTERBRIGHT 0x0400006C // DMA +#define _REG_DMA_CONTROL_MIN 0x040000B0 #define REG_DMA0SAD 0x040000B0 +#define REG_DMA0SADL 0x040000B0 +#define REG_DMA0SADH 0x040000B2 #define REG_DMA0DAD 0x040000B4 +#define REG_DMA0DADL 0x040000B4 +#define REG_DMA0DADH 0x040000B6 #define REG_DMA0CNTL 0x040000B8 #define REG_DMA0CNTH 0x040000BA #define REG_DMA1SAD 0x040000BC +#define REG_DMA1SADL 0x040000BC +#define REG_DMA1SADH 0x040000BE #define REG_DMA1DAD 0x040000C0 +#define REG_DMA1DADL 0x040000C0 +#define REG_DMA1DADH 0x040000C2 #define REG_DMA1CNTL 0x040000C4 #define REG_DMA1CNTH 0x040000C6 #define REG_DMA2SAD 0x040000C8 +#define REG_DMA2SADL 0x040000C8 +#define REG_DMA2SADH 0x040000CA #define REG_DMA2DAD 0x040000CC +#define REG_DMA2DADL 0x040000CC +#define REG_DMA2DADH 0x040000CE #define REG_DMA2CNTL 0x040000D0 #define REG_DMA2CNTH 0x040000D2 #define REG_DMA3SAD 0x040000D4 +#define REG_DMA3SADL 0x040000D4 +#define REG_DMA3SADH 0x040000D6 #define REG_DMA3DAD 0x040000D8 +#define REG_DMA3DADL 0x040000D8 +#define REG_DMA3DADH 0x040000DA #define REG_DMA3CNTL 0x040000DC #define REG_DMA3CNTH 0x040000DE +#define _REG_DMA_CONTROL_MAX 0x040000DF #define REG_DMA0FILL 0x040000E0 #define REG_DMA1FILL 0x040000E4 #define REG_DMA2FILL 0x040000E8 @@ -164,7 +178,7 @@ #define REG_SQRTRESULT 0x040002B4 #define REG_SQRTPARAM 0x040002B8 -// Other +// Other #define REG_POSTFLG 0x04000300 #define REG_HALTCNT 0x04000301 #define REG_POWCNT1 0x04000304 @@ -269,6 +283,10 @@ #define REG_DISPA_DISPCAPCNT 0x04000064 #define REG_DISPA_DISPMMEMFIFO 0x04000068 +#define REG_DISPA_DISP3DCNT_BIT_RDLINES_UNDERFLOW 0x1000 +#define REG_DISPA_DISP3DCNT_BIT_RAM_OVERFLOW 0x2000 +#define REG_DISPA_DISP3DCNT_BITS_ACK (REG_DISPA_DISP3DCNT_BIT_RDLINES_UNDERFLOW|REG_DISPA_DISP3DCNT_BIT_RAM_OVERFLOW) + #define eng_3D_RDLINES_COUNT 0x04000320 #define eng_3D_EDGE_COLOR 0x04000330 @@ -282,6 +300,9 @@ #define eng_3D_TOON_TABLE 0x04000380 #define eng_3D_GXFIFO 0x04000400 +//DSI +#define REG_DSIMODE 0x04004000 + // 3d commands #define cmd_3D_MTX_MODE 0x04000440 #define cmd_3D_MTX_PUSH 0x04000444 @@ -328,6 +349,80 @@ #define eng_3D_VEC_RESULT 0x04000630 #define eng_3D_CLIPMTX_RESULT 0x04000640 #define eng_3D_VECMTX_RESULT 0x04000680 - -#endif +#define IPCFIFOCNT_SENDEMPTY 0x0001 +#define IPCFIFOCNT_SENDFULL 0x0002 +#define IPCFIFOCNT_SENDIRQEN 0x0004 +#define IPCFIFOCNT_SENDCLEAR 0x0008 +#define IPCFIFOCNT_RECVEMPTY 0x0100 +#define IPCFIFOCNT_RECVFULL 0x0200 +#define IPCFIFOCNT_RECVIRQEN 0x0400 +#define IPCFIFOCNT_FIFOERROR 0x4000 +#define IPCFIFOCNT_FIFOENABLE 0x8000 +#define IPCFIFOCNT_WRITEABLE (IPCFIFOCNT_SENDIRQEN | IPCFIFOCNT_RECVIRQEN | IPCFIFOCNT_FIFOENABLE) + +#define IPCSYNC_IRQ_SEND 0x2000 +#define IPCSYNC_IRQ_RECV 0x4000 + +#define IRQ_BIT_LCD_VBLANK 0 +#define IRQ_BIT_LCD_HBLANK 1 +#define IRQ_BIT_LCD_VMATCH 2 +#define IRQ_BIT_TIMER_0 3 +#define IRQ_BIT_TIMER_1 4 +#define IRQ_BIT_TIMER_2 5 +#define IRQ_BIT_TIMER_3 6 +#define IRQ_BIT_ARM7_SIO 7 +#define IRQ_BIT_DMA_0 8 +#define IRQ_BIT_DMA_2 9 +#define IRQ_BIT_DMA_3 10 +#define IRQ_BIT_DMA_4 11 +#define IRQ_BIT_KEYPAD 12 +#define IRQ_BIT_GAMEPAK 13 +#define IRQ_BIT_IPCSYNC 16 +#define IRQ_BIT_IPCFIFO_SENDEMPTY 17 +#define IRQ_BIT_IPCFIFO_RECVNONEMPTY 18 +#define IRQ_BIT_GC_TRANSFER_COMPLETE 19 +#define IRQ_BIT_GC_IREQ_MC 20 +#define IRQ_BIT_ARM9_GXFIFO 21 +#define IRQ_BIT_ARM7_FOLD 22 +#define IRQ_BIT_ARM7_SPI 23 +#define IRQ_BIT_ARM7_WIFI 24 + +#define IRQ_MASK_LCD_VBLANK (1<<0) +#define IRQ_MASK_LCD_HBLANK (1<<1) +#define IRQ_MASK_LCD_VMATCH (1<<2) +#define IRQ_MASK_TIMER_0 (1<<3) +#define IRQ_MASK_TIMER_1 (1<<4) +#define IRQ_MASK_TIMER_2 (1<<5) +#define IRQ_MASK_TIMER_3 (1<<6) +#define IRQ_MASK_ARM7_SIO (1<<7) +#define IRQ_MASK_DMA_0 (1<<8) +#define IRQ_MASK_DMA_2 (1<<9) +#define IRQ_MASK_DMA_3 (1<<10) +#define IRQ_MASK_DMA_4 (1<<11) +#define IRQ_MASK_KEYPAD (1<<12) +#define IRQ_MASK_GAMEPAK (1<<13) +#define IRQ_MASK_IPCSYNC (1<<16) +#define IRQ_MASK_IPCFIFO_SENDEMPTY (1<<17) +#define IRQ_MASK_IPCFIFO_RECVNONEMPTY (1<<18) +#define IRQ_MASK_GC_TRANSFER_COMPLETE (1<<19) +#define IRQ_MASK_GC_IREQ_MC (1<<20) +#define IRQ_MASK_ARM9_GXFIFO (1<<21) +#define IRQ_MASK_ARM7_FOLD (1<<22) +#define IRQ_MASK_ARM7_SPI (1<<23) +#define IRQ_MASK_ARM7_WIFI (1<<24) + +#define TSC_MEASURE_TEMP1 0 +#define TSC_MEASURE_Y 1 +#define TSC_MEASURE_BATTERY 2 +#define TSC_MEASURE_Z1 3 +#define TSC_MEASURE_Z2 4 +#define TSC_MEASURE_X 5 +#define TSC_MEASURE_AUX 6 +#define TSC_MEASURE_TEMP2 7 + +#define EXMEMCNT_MASK_SLOT2_ARM7 (1<<7) +#define EXMEMCNT_MASK_SLOT2_SRAM_TIME (3) +#define EXMEMCNT_MASK_SLOT2_ROM_1ST_TIME (3<<2) +#define EXMEMCNT_MASK_SLOT2_ROM_2ND_TIME (1<<4) +#define EXMEMCNT_MASK_SLOT2_CLOCKRATE (3<<5) diff -Nru audacious-plugins-4.1/src/xsf/desmume/slot1.cc audacious-plugins-4.2/src/xsf/desmume/slot1.cc --- audacious-plugins-4.1/src/xsf/desmume/slot1.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/slot1.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,22 @@ +/* + Copyright (C) 2010-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#include "slot1.h" + +extern SLOT1INTERFACE slot1Retail; + +SLOT1INTERFACE slot1_device = slot1Retail; // default for frontends that dont even configure this diff -Nru audacious-plugins-4.1/src/xsf/desmume/slot1.h audacious-plugins-4.2/src/xsf/desmume/slot1.h --- audacious-plugins-4.1/src/xsf/desmume/slot1.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/slot1.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,59 @@ +/* + Copyright (C) 2010-2011 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +#include "types.h" + +struct SLOT1INTERFACE +{ + // The name of the plugin, this name will appear in the plugins list + const char *name; + + // called once when the plugin starts up + bool (*init)(); + + // called when the emulator resets + void (*reset)(); + + // called when the plugin shuts down + void (*close)(); + + // called when the user configurating plugin + void (*config)(); + + // called when the emulator write to addon + void (*write08)(uint8_t PROCNUM, uint32_t adr, uint8_t val); + void (*write16)(uint8_t PROCNUM, uint32_t adr, uint16_t val); + void (*write32)(uint8_t PROCNUM, uint32_t adr, uint32_t val); + + // called when the emulator read from addon + uint8_t (*read08)(uint8_t PROCNUM, uint32_t adr); + uint16_t (*read16)(uint8_t PROCNUM, uint32_t adr); + uint32_t (*read32)(uint8_t PROCNUM, uint32_t adr); + + // called when the user get info about addon pak (description) + void (*info)(char *info); +}; + +extern SLOT1INTERFACE slot1_device; // current slot1 device + +enum NDS_SLOT1_TYPE +{ + NDS_SLOT1_RETAIL, + NDS_SLOT1_COUNT // use for counter addons - MUST TO BE LAST!!! +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/slot1_retail.cc audacious-plugins-4.2/src/xsf/desmume/slot1_retail.cc --- audacious-plugins-4.1/src/xsf/desmume/slot1_retail.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/slot1_retail.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,167 @@ +/* Copyright (C) 2010-2011 DeSmuME team + + This file is part of DeSmuME + + DeSmuME 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. + + DeSmuME 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 DeSmuME; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "slot1.h" +#include "registers.h" +#include "MMU.h" +#include "NDSSystem.h" + +static void info(char *info) { strcpy(info, "Slot1 Retail card emulation"); } +static void config() {} + +static bool init() { return true; } + +static void reset() {} + +static void close() {} + +static void write08(uint8_t, uint32_t, uint8_t) {} +static void write16(uint8_t, uint32_t, uint16_t) {} + +static void write32_GCROMCTRL(uint8_t PROCNUM, uint32_t) +{ + nds_dscard &card = MMU.dscard[PROCNUM]; + + switch (card.command[0]) + { + case 0x00: // Data read + case 0xB7: + card.address = (card.command[1] << 24) | (card.command[2] << 16) | (card.command[3] << 8) | card.command[4]; + card.transfer_count = 0x80; + break; + + case 0xB8: // Chip ID + card.address = 0; + card.transfer_count = 1; + break; + + default: + card.address = 0; + card.transfer_count = 0; + } +} + +static void write32(uint8_t PROCNUM, uint32_t adr, uint32_t val) +{ + switch (adr) + { + case REG_GCROMCTRL: + write32_GCROMCTRL(PROCNUM, val); + } +} + +static uint8_t read08(uint8_t, uint32_t) +{ + return 0xFF; +} + +static uint16_t read16(uint8_t, uint32_t) +{ + return 0xFFFF; +} + +static uint32_t read32_GCDATAIN(uint8_t PROCNUM) +{ + nds_dscard &card = MMU.dscard[PROCNUM]; + + switch (card.command[0]) + { + // Get ROM chip ID + case 0x90: + case 0xB8: + { + // Note: the BIOS stores the chip ID in main memory + // Most games continuously compare the chip ID with + // the value in memory, probably to know if the card + // was removed. + // As DeSmuME normally boots directly from the game, the chip + // ID in main mem is zero and this value needs to be + // zero too. + + // note that even if desmume was booting from firmware, and reading this chip ID to store in main memory, + // this still works, since it will have read 00 originally and then read 00 to validate. + + // staff of kings verifies this (it also uses the arm7 IRQ 20) + if (nds.cardEjected) // TODO - handle this with ejected card slot1 device (and verify using this case) + return 0xFFFFFFFF; + else + return 0; + } + + // Data read + case 0x00: + case 0xB7: + { + // it seems that etrian odyssey 3 doesnt work unless we mask this to cart size. + // but, a thought: does the internal rom address counter register wrap around? we may be making a mistake by keeping the extra precision + // but there is no test case yet + uint32_t address = card.address & gameInfo.mask; + + // Make sure any reads below 0x8000 redirect to 0x8000+(adr&0x1FF) as on real cart + if (card.command[0] == 0xB7 && address < 0x8000) + { + // TODO - refactor this to include the PROCNUM, for debugging purposes if nothing else + // (can refactor gbaslot also) + + //INFO("Read below 0x8000 (0x%04X) from: ARM%s %08X\n", card.address, (PROCNUM ? "7":"9"), (PROCNUM ? NDS_ARM7:NDS_ARM9).instruct_adr); + + address = 0x8000 + (address & 0x1FF); + } + + // as a sanity measure for funny-sized roms (homebrew and perhaps truncated retail roms) + // we need to protect ourselves by returning 0xFF for things still out of range + if (address >= gameInfo.romsize) + { + //DEBUG_Notify.ReadBeyondEndOfCart(address, gameInfo. romsize); + return 0xFFFFFFFF; + } + + return T1ReadLong(MMU.CART_ROM, address); + } + default: + return 0; + } //switch(card.command[0]) +} //read32_GCDATAIN + +static uint32_t read32(uint8_t PROCNUM, uint32_t adr) +{ + switch (adr) + { + case REG_GCDATAIN: + return read32_GCDATAIN(PROCNUM); + default: + return 0; + } +} + +SLOT1INTERFACE slot1Retail = +{ + "Retail", + init, + reset, + close, + config, + write08, + write16, + write32, + read08, + read16, + read32, + info +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/SPU.cc audacious-plugins-4.2/src/xsf/desmume/SPU.cc --- audacious-plugins-4.1/src/xsf/desmume/SPU.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/SPU.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,963 +1,1462 @@ -/* Copyright (C) 2006 Theo Berkau - - Ideas borrowed from Stephane Dallongeville's SCSP core - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ +/* + Copyright (C) 2006 yopyop + Copyright (C) 2006 Theo Berkau + Copyright (C) 2008-2017 DeSmuME team + + Ideas borrowed from Stephane Dallongeville's SCSP core + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . + */ + +//#include "XSFCommon.h" +#include "../spu/samplecache.h" +#include "../spu/interpolator.h" + +#define _USE_MATH_DEFINES +#include +#ifndef M_PI +#define M_PI 3.1415926535897932386 +#endif #include #include +#include +#include -#include "ARM9.h" #include "MMU.h" #include "SPU.h" #include "mem.h" - +#include "readwrite.h" #include "armcpu.h" +#include "NDSSystem.h" +#include "emufile.h" +#include "matrix.h" +#include "bits.h" + +static inline s16 read16(u32 addr) { return (s16)_MMU_read16(addr); } +static inline u8 read08(u32 addr) { return _MMU_read08(addr); } + +#define K_ADPCM_LOOPING_RECOVERY_INDEX 99999 +#define COSINE_INTERPOLATION_RESOLUTION 8192 + +SPU_struct *SPU_core = 0; +int SPU_currentCoreNum = SNDCORE_DUMMY; +static int volume = 100; +SampleCache spuSampleCache; + +static size_t buffersize = 0; +static ESynchMode synchmode = ESynchMode_Synchronous; +static ESynchMethod synchmethod = ESynchMethod_0; +static ISynchronizingAudioBuffer* synchronizer = metaspu_construct(synchmethod); -enum -{ - FORMAT_PCM8 = 0, - FORMAT_PCM16 = 1, - FORMAT_ADPCM = 2, - FORMAT_PSG = 3 +static int SNDCoreId=-1; +static SoundInterface_struct *SNDCore=NULL; +extern SoundInterface_struct *SNDCoreList[]; + +static const int format_shift[] = { 2, 1, 3, 0 }; +static const u8 volume_shift[] = { 0, 1, 2, 4 }; + +static const s16 wavedutytbl[8][8] = { + { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF }, + { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF } }; -#define VOL_SHIFT 10 +static const double ARM7_CLOCK = 33513982; + +double DESMUME_SAMPLE_RATE = 48000; +static double samples_per_hline = (DESMUME_SAMPLE_RATE / 59.8261f) / 263.0f; +static double sampleLength = DESMUME_SAMPLE_RATE / 32728.498; + +void SetDesmumeSampleRate(double rate) { + DESMUME_SAMPLE_RATE = rate; + sampleLength = DESMUME_SAMPLE_RATE / 32728.498; + samples_per_hline = (DESMUME_SAMPLE_RATE / 59.8261f) / 263.0f; +} + +static double samples = 0; -typedef struct +template +static FORCEINLINE T MinMax(T val, T min, T max) { - int id; - int status; - int format; - u8 *buf8; s16 *buf16; - double pos, inc; - int loopend, looppos; - int loop, length; - s32 adpcm; - int adpcm_pos, adpcm_index; - s32 adpcm_loop; - int adpcm_loop_pos, adpcm_loop_index; - int psg_duty; - int timer; - int volume; - int pan; - int shift; - int repeat, hold; - u32 addr; - s32 volumel; - s32 volumer; - s16 output; -} SChannel; - -typedef struct -{ - s32 *pmixbuf; - s16 *pclipingbuf; - u32 buflen; - SChannel ch[16]; -} SPU_struct; + if (val < min) + return min; + else if (val > max) + return max; -static SPU_struct spu = { 0, 0, 0 }; + return val; +} -static SoundInterface_struct *SNDCore=nullptr; -extern SoundInterface_struct *SNDCoreList[]; +//--------------external spu interface--------------- int SPU_ChangeSoundCore(int coreid, int buffersize) { - int i; - SPU_DeInit(); + int i; - // Allocate memory for sound buffer - spu.buflen = buffersize * 2; /* stereo */ - spu.pmixbuf = (s32 *) malloc(spu.buflen * sizeof(s32)); - if (!spu.pmixbuf) - { - SPU_DeInit(); - return -1; - } - - spu.pclipingbuf = (s16 *) malloc(spu.buflen * sizeof(s16)); - if (!spu.pclipingbuf) - { - SPU_DeInit(); - return -1; - } - - // So which core do we want? - if (coreid == SNDCORE_DEFAULT) - coreid = 0; // Assume we want the first one - - // Go through core list and find the id - for (i = 0; SNDCoreList[i] != nullptr; i++) - { - if (SNDCoreList[i]->id == coreid) - { - // Set to current core - SNDCore = SNDCoreList[i]; - break; - } - } - - if (SNDCore == nullptr) - { - SPU_DeInit(); - return -1; - } - - if (SNDCore->Init(spu.buflen) == -1) - { - // Since it failed, instead of it being fatal, we'll just use the dummy - // core instead - SNDCore = &SNDDummy; - } + ::buffersize = buffersize; - return 0; -} -int SPU_Init(int coreid, int buffersize) -{ - SPU_DeInit(); - SPU_Reset(); - return SPU_ChangeSoundCore(coreid, buffersize); + // Make sure the old core is freed + if (SNDCore) + SNDCore->DeInit(); + + // So which core do we want? + if (coreid == SNDCORE_DEFAULT) + coreid = 0; // Assume we want the first one + + SPU_currentCoreNum = coreid; + + // Go through core list and find the id + for (i = 0; SNDCoreList[i] != NULL; i++) + { + if (SNDCoreList[i]->id == coreid) + { + // Set to current core + SNDCore = SNDCoreList[i]; + break; + } + } + + SNDCoreId = coreid; + + //If the user picked the dummy core, disable the user spu + if(SNDCore == &SNDDummy) + return 0; + + //If the core wasnt found in the list for some reason, disable the user spu + if (SNDCore == NULL) + return -1; + + // Since it failed, instead of it being fatal, disable the user spu + if (SNDCore->Init(buffersize * 2) == -1) + { + SNDCore = 0; + return -1; + } + + SNDCore->SetVolume(volume); + + SPU_SetSynchMode(synchmode,synchmethod); + + return 0; } -void SPU_Pause(int pause) + +SoundInterface_struct *SPU_SoundCore() { - if(pause) - SNDCore->MuteAudio(); - else - SNDCore->UnMuteAudio(); + return SNDCore; } -void SPU_SetVolume(int volume) + +void SPU_ReInit(bool fakeBoot) { - if (SNDCore) - SNDCore->SetVolume(volume); + SPU_Init(SNDCoreId, buffersize); + + // Firmware set BIAS to 0x200 + if (fakeBoot) + SPU_WriteWord(0x04000504, 0x0200); } -void SPU_DeInit(void) -{ - spu.buflen = 0; - if (spu.pmixbuf) - { - free(spu.pmixbuf); - spu.pmixbuf = 0; - } - if (spu.pclipingbuf) - { - free(spu.pclipingbuf); - spu.pclipingbuf = 0; - } - if (SNDCore) - { - SNDCore->DeInit(); - } - SNDCore = &SNDDummy; -} - -static const short g_adpcm_index[16] = { -1, -1, -1, -1, -1, -1, -1, -1, 2, 2, 4, 4, 6, 6, 8, 8 }; - -static const int g_adpcm_mult[89] = -{ - 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011, - 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D, - 0x0032, 0x0037, 0x003C, 0x0042, 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, - 0x0082, 0x008F, 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133, - 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292, 0x02D4, 0x031C, - 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583, 0x0610, 0x06AB, 0x0756, 0x0812, - 0x08E0, 0x09C3, 0x0ABD, 0x0BD0, 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE, - 0x1706, 0x1954, 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B, - 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF, -}; -static const s16 g_psg_duty[8][8] = { - { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, -0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF, +0x7FFF }, - { -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF }, -}; +int SPU_Init(int coreid, int buffersize) +{ + SPU_core = new SPU_struct((int)ceil(samples_per_hline)); + SPU_Reset(); + SPU_SetSynchMode(synchmode, synchmethod); -static void reset_channel(SChannel *ch, int id) -{ - ch->status = 0; - ch->id = id; + return SPU_ChangeSoundCore(coreid, buffersize); } -void SPU_Reset(void) +void SPU_Pause(int pause) { - int i; - for (i = 0;i < 16; i++) - reset_channel(&spu.ch[i], i); - - for (i = 0x400; i < 0x51D; i++) - T1WriteByte(MMU.ARM7_REG, i, 0); -} -void SPU_KeyOn(int channel) -{ -} - -static INLINE void adjust_channel_timer(SChannel *ch) -{ - ch->inc = (((double)33512000) / (44100 * 2)) / (double)(0x10000 - ch->timer); -} - -static int check_valid(u32 addr, u32 size) -{ - u32 t1, t2; - - if(size > MMU.MMU_MASK[1][(addr >> 20) & 0xff]) return 0; - - t1 = addr; - t2 = (addr + size); - t1 &= MMU.MMU_MASK[1][(addr >> 20) & 0xff]; - t2 &= MMU.MMU_MASK[1][(addr >> 20) & 0xff]; - - if(t2 < t1) return 0; - - return 1; -} - -static void start_channel(SChannel *ch) -{ - - switch(ch->format) - { - case FORMAT_PCM8: - { - u8 *p = MMU.MMU_MEM[1][(ch->addr >> 20) & 0xff]; - u32 ofs = MMU.MMU_MASK[1][(ch->addr >> 20) & 0xff] & ch->addr; - u32 size = ((ch->length + ch->loop) << 2); - if((p != nullptr) && check_valid(ch->addr, size)) - { - ch->buf8 = p + ofs; - ch->looppos = ch->loop << 2; - ch->loopend = size; - ch->pos = 0; - ch->status = 1; - } - } - break; - case FORMAT_PCM16: - { - u8 *p = MMU.MMU_MEM[1][(ch->addr >> 20) & 0xff]; - u32 ofs = MMU.MMU_MASK[1][(ch->addr >> 20) & 0xff] & ch->addr; - u32 size = ((ch->length + ch->loop) << 1); - if((p != nullptr) && check_valid(ch->addr, size << 1)) - { - ch->buf16 = (s16 *)(p + ofs - (ofs & 1)); - ch->looppos = ch->loop << 1; - ch->loopend = size; - ch->pos = 0; - ch->status = 1; - } - } - break; - case FORMAT_ADPCM: - { - u8 *p = MMU.MMU_MEM[1][(ch->addr >> 20) & 0xff]; - u32 ofs = MMU.MMU_MASK[1][(ch->addr >> 20) & 0xff] & ch->addr; - u32 size = ((ch->length + ch->loop) << 3); - if((p != nullptr) && check_valid(ch->addr, size >> 1)) - { - ch->buf8 = p + ofs; -#ifdef WORDS_BIGENDIAN - ch->adpcm = ((s32)(s16)T1ReadWord((u8 *)ch->buf8, 0)) << 3; -#else - ch->adpcm = ((s32)*(s16 *)ch->buf8) << 3; -#endif - ch->adpcm_index = (ch->buf8[2] & 0x7F); - ch->adpcm_pos = 8; - ch->pos = 9; - ch->looppos = ch->loop << 3; - ch->loopend = size; - ch->adpcm_loop_index = -1; - ch->status = 1; - } - } - break; - case FORMAT_PSG: - ch->status = 1; - if(ch->id < 14) - { - ch->pos = 0; - } - else - { - ch->pos = 0x7FFF; - } - break; - } -} - -static void stop_channel(SChannel *ch) -{ - u32 addr = 0x400 + (ch->id << 4) + 3; - ch->status = 0; - T1WriteByte(MMU.ARM7_REG, addr, (u8)(T1ReadByte(MMU.ARM7_REG, addr) & ~0x80)); -} -static void set_channel_volume(SChannel *ch) -{ - s32 vol1 = (T1ReadByte(MMU.ARM7_REG, 0x500) & 0x7F) * ch->volume; - s32 vol2; - vol2 = vol1 * ch->pan; - vol1 = vol1 * (127-ch->pan); - ch->volumel = vol1 >> (21 - VOL_SHIFT + ch->shift); - ch->volumer = vol2 >> (21 - VOL_SHIFT + ch->shift); -} - -void SPU_WriteByte(u32 addr, u8 x) -{ - addr &= 0x00000FFF; - T1WriteByte(MMU.ARM7_REG, addr, x); - - if(addr < 0x500) - { - SChannel *ch; - switch(addr & 0x0F) - { - case 0x0: - ch = spu.ch + (addr >> 4 & 0xF); - ch->volume = (x & 0x7F); - set_channel_volume(ch); - break; - case 0x1: - ch = spu.ch + (addr >> 4 & 0xF); - ch->shift = (x & 0x03); - ch->hold = (x >> 7 & 0x01); - set_channel_volume(ch); - break; - case 0x2: - ch = spu.ch + (addr >> 4 & 0xF); - ch->pan = (x & 0x7F); - set_channel_volume(ch); - break; - case 0x3: - ch = spu.ch + (addr >> 4 & 0xF); - ch->psg_duty = (x & 0x07); - ch->repeat = (x >> 3 & 0x03); - ch->format = (x >> 5 & 0x03); - if(x & 0x80) start_channel(ch); else stop_channel(ch); - break; -#if !DISABLE_XSF_TESTS - case 0x04: - case 0x05: - case 0x06: - case 0x07: - ch = spu.ch + (addr >> 4 & 0xF); - ch->addr = (T1ReadLong(MMU.ARM7_REG, addr & ~3) & 0x07FFFFFF); - break; - case 0x08: - case 0x09: - ch = spu.ch + (addr >> 4 & 0xF); - ch->timer = T1ReadWord(MMU.ARM7_REG, addr & ~1); - adjust_channel_timer(ch); - break; - case 0x0a: - case 0x0b: - ch = spu.ch + (addr >> 4 & 0xF); - ch->loop = T1ReadWord(MMU.ARM7_REG, addr & ~1); - break; - case 0x0c: - case 0x0e: - case 0x0d: - case 0x0f: - ch = spu.ch + (addr >> 4 & 0xF); - ch->length = (T1ReadLong(MMU.ARM7_REG, addr & ~3) & 0x003FFFFF); - break; -#endif - } - } + if (SNDCore == NULL) return; + if(pause) + SNDCore->MuteAudio(); + else + SNDCore->UnMuteAudio(); } - -void SPU_WriteWord(u32 addr, u16 x) +void SPU_SetSynchMode(int mode, int method) { - addr &= 0x00000FFF; - T1WriteWord(MMU.ARM7_REG, addr, x); - - if(addr < 0x500) - { - SChannel *ch; - switch(addr & 0x00F) - { - case 0x0: - ch = spu.ch + (addr >> 4 & 0xF); - ch->volume = (x & 0x007F); - ch->shift = (x >> 8 & 0x0003); - ch->hold = (x >> 15 & 0x0001); - set_channel_volume(ch); - break; - case 0x2: - ch = spu.ch + (addr >> 4 & 0xF); - ch->pan = (x & 0x007F); - ch->psg_duty = (x >> 8 & 0x0007); - ch->repeat = (x >> 11 & 0x0003); - ch->format = (x >> 13 & 0x0003); - set_channel_volume(ch); - if(x & 0x8000) start_channel(ch); else stop_channel(ch); - break; - case 0x08: - ch = spu.ch + (addr >> 4 & 0xF); - ch->timer = x; - adjust_channel_timer(ch); - break; - case 0x0a: - ch = spu.ch + (addr >> 4 & 0xF); - ch->loop = x; - break; -#if !DISABLE_XSF_TESTS - case 0x04: - case 0x06: - ch = spu.ch + (addr >> 4 & 0xF); - ch->addr = (T1ReadLong(MMU.ARM7_REG, addr & ~3) & 0x07FFFFFF); - break; - case 0x0c: - case 0x0e: - ch = spu.ch + (addr >> 4 & 0xF); - ch->length = (T1ReadLong(MMU.ARM7_REG, addr & ~3) & 0x003FFFFF); - break; -#endif - } - } + synchmode = (ESynchMode)mode; + if(synchmethod != (ESynchMethod)method) + { + synchmethod = (ESynchMethod)method; + delete synchronizer; + //grr does this need to be locked? spu might need a lock method + // or maybe not, maybe the platform-specific code that calls this function can deal with it. + synchronizer = metaspu_construct(synchmethod); + } } +void SPU_ClearOutputBuffer() +{ + if(SNDCore && SNDCore->ClearBuffer) + SNDCore->ClearBuffer(); +} -void SPU_WriteLong(u32 addr, u32 x) +void SPU_SetVolume(int volume) { - addr &= 0x00000FFF; - T1WriteLong(MMU.ARM7_REG, addr, x); - - if(addr < 0x500) - { - SChannel *ch; - switch(addr & 0x00F) - { - case 0x0: - ch = spu.ch + (addr >> 4 & 0xF); - ch->volume = (x & 0x7F); - ch->shift = (x >> 8 & 0x00000003); - ch->hold = (x >> 15 & 0x00000001); - ch->pan = (x >> 16 & 0x0000007F); - ch->psg_duty = (x >> 24 & 0x00000007); - ch->repeat = (x >> 27 & 0x00000003); - ch->format = (x >> 29 & 0x00000003); - set_channel_volume(ch); - if(x & 0x80000000) start_channel(ch); else stop_channel(ch); - break; - case 0x04: - ch = spu.ch + (addr >> 4 & 0xF); - ch->addr = (x & 0x07FFFFFF); - break; - case 0x08: - ch = spu.ch + (addr >> 4 & 0xF); - ch->timer = (x & 0x0000FFFF); - ch->loop = (x >> 16 & 0x0000FFFF); - adjust_channel_timer(ch); - break; - case 0x0C: - ch = spu.ch + (addr >> 4 & 0xF); - ch->length = (x & 0x003FFFFF); - break; - } - } + ::volume = volume; + if (SNDCore) + SNDCore->SetVolume(volume); } -////////////////////////////////////////////////////////////////////////////// -u32 SPU_ReadLong(u32 addr) +void SPU_Reset(void) { - addr &= 0xFFF; - return T1ReadLong(MMU.ARM7_REG, addr); -} + int i; -static INLINE s32 clipping(s32 x, s32 min, s32 max) { -#if 1 || defined(SIGNED_IS_NOT_2S_COMPLEMENT) - if (x < min) - { - return (min); - } - else if (x > max) - { - return (max); - } - return (x); -#else - return x ^ ((-(x < min)) & (x ^ min)) ^ ((-(x > max)) & (x ^ max)); -#endif -} + SPU_core->reset(); -extern unsigned long dwChannelMute; + //zero - 09-apr-2010: this concerns me, regarding savestate synch. + //After 0.9.6, lets experiment with removing it and just properly zapping the spu instead + // Reset Registers + for (i = 0x400; i < 0x51D; i++) + T1WriteByte(MMU.ARM7_REG, i, 0); -static void decode_pcm8(SChannel *ch, s32 *out, int length) -{ - int oi; - double pos, inc, len; - if (!ch->buf8) return; - - pos = ch->pos; inc = ch->inc; len = ch->loopend; - - for(oi = 0; oi < length; oi++) - { - ch->output = ((s16)(s8)ch->buf8[(int)pos]) << 8; -#if 0 - if (dwChannelMute & (1 << ch->id)) - { - out++; - out++; - } - else -#endif - { - *(out++) += (ch->output * ch->volumel) >> VOL_SHIFT; - *(out++) += (ch->output * ch->volumer) >> VOL_SHIFT; - } - pos += inc; - if(pos >= len) - { - switch(ch->repeat) - { -#if !DISABLE_XSF_TESTS - case 0: -#endif - case 1: - pos += ch->looppos - len; - break; - default: - stop_channel(ch); - oi = length; - break; - } - } - } - - ch->pos = pos; - return; -} - -static void decode_pcm16(SChannel *ch, s32 *out, int length) -{ - int oi; - double pos, inc, len; - - if (!ch->buf16) return; - - pos = ch->pos; inc = ch->inc; len = ch->loopend; - - for(oi = 0; oi < length; oi++) - { -#ifdef WORDS_BIGENDIAN - ch->output = (s16)T1ReadWord((u8 *)ch->buf16, (int)pos << 1); -#else - ch->output = (s16)ch->buf16[(int)pos]; -#endif -#if 0 - if (dwChannelMute & (1 << ch->id)) - { - out++; - out++; - } - else -#endif - { - *(out++) += (ch->output * ch->volumel) >> VOL_SHIFT; - *(out++) += (ch->output * ch->volumer) >> VOL_SHIFT; - } - pos += inc; - if(pos >= len) - { - switch(ch->repeat) - { -#if !DISABLE_XSF_TESTS - case 0: -#endif - case 1: - pos += ch->looppos - len; - break; - default: - stop_channel(ch); - oi = length; - break; - } - } - } - - ch->pos = pos; -} - -static INLINE void decode_adpcmone_P4(SChannel *ch, int m) -{ - int i, ci0; - u8 *p; - s32 s; - int N; - - i = ch->adpcm_pos; - p = (ch->buf8 + (i >> 1)); - ci0 = ch->adpcm_index; - s = ch->adpcm; - - if (ch->adpcm_loop_index < 0 && m >= ch->looppos) - { - ch->adpcm_loop_index = ci0; - ch->adpcm_loop = s; - ch->adpcm_loop_pos = i; - } - - if(i++ & 1) - { - s32 x1, d1; - x1 = ((*(p++) >> 3) & 0x1F) | 1; - d1 = ((x1 & 0xF) * g_adpcm_mult[ci0] & ~7); - ci0 = clipping((ci0 + g_adpcm_index[x1 & 0xE]), 0, 88); -#if 1 || defined(SIGNED_IS_NOT_2S_COMPLEMENT) - if(x1 & 0x10) d1 = -d1; -#else - d1 -= (d1 + d1) & (-(((x1 >> 4) & 1))); -#endif + samples = 0; +} - s = clipping((s + d1), (-32768 << 3), (32767 << 3)); - } +//------------------------------------------ - N = (((m & ~1) - (i & ~1)) >> 1); - for(i = 0; i < N; i++) - { - s32 x0, d0; - s32 x1, d1; - int ci1; - x0 = ((*p << 1) & 0x1F) | 1; - x1 = ((*p >> 3) & 0x1F) | 1; - ci1 = clipping((ci0 + g_adpcm_index[x0 & 0xE]), 0, 88); - d0 = ((x0 & 0xF) * g_adpcm_mult[ci0] & ~7); - ci0 = clipping((ci1 + g_adpcm_index[x1 & 0xE]), 0, 88); - d1 = ((x1 & 0xF) * g_adpcm_mult[ci1] & ~7); -#if 1 || defined(SIGNED_IS_NOT_2S_COMPLEMENT) - if(x0 & 0x10) d0 = -d0; - if(x1 & 0x10) d1 = -d1; -#else - d0 -= (d0 + d0) & (-(((x0 >> 4) & 1))); - d1 -= (d1 + d1) & (-(((x1 >> 4) & 1))); -#endif - s = clipping((s + d0), (-32768 << 3), (32767 << 3)); - s = clipping((s + d1), (-32768 << 3), (32767 << 3)); - p++; - } - if(m & 1) - { - s32 x0, d0; - x0 = ((*p << 1) & 0x1F) | 1; - d0 = ((x0 & 0xF) * g_adpcm_mult[ci0] & ~7); - ci0 = clipping((ci0 + g_adpcm_index[x0 & 0xE]), 0, 88); -#if 1 || defined(SIGNED_IS_NOT_2S_COMPLEMENT) - if(x0 & 0x10) d0 = -d0; -#else - d0 -= (d0 + d0) & (-(((x0 >> 4) & 1))); -#endif - s = clipping((s + d0), (-32768 << 3), (32767 << 3)); - } +void SPU_struct::reset() +{ + memset(sndbuf,0,bufsize*2*4); + memset(outbuf,0,bufsize*2*2); - ch->output = (s16)(s >> 3); + memset((void *)channels, 0, sizeof(channel_struct) * 16); - ch->adpcm = s; - ch->adpcm_index = ci0; - ch->adpcm_pos = m; -} - -#if 0 // not used -static INLINE void decode_adpcmone_XX(SChannel *ch, int m) -{ - int i, ci0; - u8 *p; - s32 s; - - i = ch->adpcm_pos; - p = (ch->buf8 + (i >> 1)); - ci0 = ch->adpcm_index; - s = ch->adpcm; - - if (ch->adpcm_loop_index < 0 && m >= ch->looppos) - { - ch->adpcm_loop_index = ci0; - ch->adpcm_loop = s; - ch->adpcm_loop_pos = i; - } - - while (i < m) - { - s32 x1, d1; - x1 = ((s32)*p) >> ((i & 1) << 2) & 0xf; - x1 = x1 + x1 + 1; - d1 = ((x1 & 0xF) * g_adpcm_mult[ci0] & ~7); - ci0 = clipping((ci0 + g_adpcm_index[x1 & 0xE]), 0, 88); -#if 1 || defined(SIGNED_IS_NOT_2S_COMPLEMENT) - if(x1 & 0x10) d1 = -d1; -#else - d1 -= (d1 + d1) & (-(((x1 >> 4) & 1))); -#endif + reconstruct(®s); - s = clipping((s + d1), (-32768 << 3), (32767 << 3)); - p += (i & 1); - i++; - } - - ch->output = (s16)(s >> 3); - - ch->adpcm = s; - ch->adpcm_index = ci0; - ch->adpcm_pos = m; + for(int i = 0; i < 16; i++) + { + channels[i].num = i; + } } -#endif - -#define decode_adpcmone decode_adpcmone_P4 -static void decode_adpcm(SChannel *ch, s32 *out, int length) +SPU_struct::SPU_struct(int buffersize) + : bufpos(0) + , buflength(0) + , sndbuf(0) + , outbuf(0) + , bufsize(buffersize) { - int oi; - double pos, inc, len; - if (!ch->buf8) return; - - pos = ch->pos; inc = ch->inc; len = ch->loopend; - - for(oi = 0; oi < length; oi++) - { - int m = (int)pos; - int i = ch->adpcm_pos; - if(i < m) - decode_adpcmone(ch, m); - -#if 0 - if (dwChannelMute & (1 << ch->id)) - { - out++; - out++; - } - else -#endif - { - *(out++) += (ch->output * ch->volumel) >> VOL_SHIFT; - *(out++) += (ch->output * ch->volumer) >> VOL_SHIFT; - } - pos += inc; - if(pos >= len) - { - switch(ch->repeat) - { - case 1: - if (ch->adpcm_loop_index >= 0) - { - pos += ch->looppos - len; - ch->adpcm_pos = ch->adpcm_loop_pos; - ch->adpcm_index = ch->adpcm_loop_index; - ch->adpcm = ch->adpcm_loop; - break; - } -#if !DISABLE_XSF_TESTS - case 0: - pos = 9 - len; -#ifdef WORDS_BIGENDIAN - ch->adpcm = ((s32)(s16)T1ReadWord((u8 *)ch->buf8, 0)) << 3; -#else - ch->adpcm = ((s32)*(s16 *)ch->buf8) << 3; -#endif - ch->adpcm_index = (ch->buf8[2] & 0x7F); - ch->adpcm_pos = 8; - break; -#endif - default: - stop_channel(ch); - oi = length; - break; - } - } - } - ch->pos = pos; -} - -static void decode_psg(SChannel *ch, s32 *out, int length) -{ - int oi; - - if(ch->id < 14) - { - // NOTE: square wave. - double pos, inc; - pos = ch->pos; inc = ch->inc; - for(oi = 0; oi < length; oi++) - { - ch->output = (s16)g_psg_duty[ch->psg_duty][(int)pos & 0x00000007]; -#if 0 - if (dwChannelMute & (1 << ch->id)) - { - out++; - out++; - } - else -#endif - { - *(out++) += (ch->output * ch->volumel) >> VOL_SHIFT; - *(out++) += (ch->output * ch->volumer) >> VOL_SHIFT; - } - pos += inc; - } - ch->pos = pos; - } - else - { - // NOTE: noise. - u16 X; - X = (u16)ch->pos; - for(oi = 0; oi < length; oi++) - { - if(X & 1) - { - X >>= 1; - X ^= 0x6000; - ch->output = -0x8000; - } - else - { - X >>= 1; - ch->output = +0x7FFF; - } - } -#if 0 - if (dwChannelMute & (1 << ch->id)) - { - out++; - out++; - } - else -#endif - { - *(out++) += (ch->output * ch->volumel) >> VOL_SHIFT; - *(out++) += (ch->output * ch->volumer) >> VOL_SHIFT; - } - ch->pos = X; - } + sndbuf = new s32[buffersize*2]; + outbuf = new s16[buffersize*2]; + reset(); } +SPU_struct::~SPU_struct() +{ + if(sndbuf) delete[] sndbuf; + if(outbuf) delete[] outbuf; +} +void SPU_DeInit(void) +{ + if(SNDCore) + SNDCore->DeInit(); + SNDCore = 0; -void SPU_EmulateSamples(u32 numsamples) -{ - u32 sizesmp = numsamples; - u32 sizebyte = sizesmp << 2; - if (sizebyte > spu.buflen * sizeof(s16)) sizebyte = spu.buflen * sizeof(s16); - sizesmp = sizebyte >> 2; - sizebyte = sizesmp << 2; - if (sizesmp > 0) - { - unsigned i; - SChannel *ch = spu.ch; - memset(spu.pmixbuf, 0, spu.buflen * sizeof(s32)); - for (i = 0; i < 16; i++) - { - if (ch->status) - { - switch (ch->format) - { - case 0: - decode_pcm8(ch, spu.pmixbuf, sizesmp); - break; - case 1: - decode_pcm16(ch, spu.pmixbuf, sizesmp); - break; - case 2: - decode_adpcm(ch, spu.pmixbuf, sizesmp); - break; - case 3: - decode_psg(ch, spu.pmixbuf, sizesmp); - break; - } - } - ch++; - } - for (i = 0; i < sizesmp * 2; i++) - spu.pclipingbuf[i] = (s16)clipping(spu.pmixbuf[i], -0x8000, 0x7fff); - SNDCore->UpdateAudio(spu.pclipingbuf, sizesmp); - } + delete SPU_core; SPU_core=0; } -void SPU_Emulate(void) +////////////////////////////////////////////////////////////////////////////// + +void SPU_struct::ShutUp() { - SPU_EmulateSamples(SNDCore->GetAudioSpace()); + for(int i=0;i<16;i++) + channels[i].status = CHANSTAT_STOPPED; } +static FORCEINLINE void adjust_channel_timer(channel_struct *chan) +{ + chan->sampinc = (((double)ARM7_CLOCK) / (DESMUME_SAMPLE_RATE * 2)) / (double)(0x10000 - chan->timer); +} + +void SPU_struct::KeyProbe(int chan_num) +{ + channel_struct &thischan = channels[chan_num]; + if(thischan.status == CHANSTAT_STOPPED) + { + if(thischan.keyon && regs.masteren) + KeyOn(chan_num); + } + else if(thischan.status == CHANSTAT_PLAY) + { + if(!thischan.keyon || !regs.masteren) + KeyOff(chan_num); + } +} + +void SPU_struct::KeyOff(int channel) +{ + channel_struct &thischan = channels[channel]; + thischan.status = CHANSTAT_STOPPED; +} + +void SPU_struct::KeyOn(int channel) +{ + channel_struct &thischan = channels[channel]; + thischan.status = CHANSTAT_PLAY; + + thischan.totlength = thischan.length + thischan.loopstart; + adjust_channel_timer(&thischan); + + switch(thischan.format) + { + case 0: // 8-bit + thischan.sampcnt = -3; + break; + case 1: // 16-bit + thischan.sampcnt = -3; + break; + case 2: // ADPCM + { + thischan.pcm16b = (s16)read16(thischan.addr); + thischan.pcm16b_last = thischan.pcm16b; + thischan.index = read08(thischan.addr + 2) & 0x7F;; + thischan.lastsampcnt = 7; + thischan.sampcnt = -3; + thischan.loop_index = K_ADPCM_LOOPING_RECOVERY_INDEX; + break; + } + case 3: // PSG + { + thischan.sampcnt = -1; + thischan.x = 0x7FFF; + break; + } + default: break; + } + + thischan.double_totlength_shifted = (double)(thischan.totlength << format_shift[thischan.format]); + + if(thischan.format != 3) + { + if(thischan.double_totlength_shifted == 0) + { + thischan.status = CHANSTAT_STOPPED; + } + } +} ////////////////////////////////////////////////////////////////////////////// -// Dummy Sound Interface -////////////////////////////////////////////////////////////////////////////// -static int SNDDummyInit(int buffersize) +u8 SPU_struct::ReadByte(u32 addr) { - return 0; + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u32 chan_num = (addr >> 4) & 0xF; + const channel_struct& thischan = channels[chan_num]; + + switch (addr & 0xF) + { + case 0x0: return thischan.vol; + case 0x1: return (thischan.volumeDiv | (thischan.hold << 7)); + case 0x2: return thischan.pan; + case 0x3: return ( thischan.waveduty + | (thischan.repeat << 3) + | (thischan.format << 5) + | ((thischan.status == CHANSTAT_PLAY)?0x80:0) + ); + case 0x8: return thischan.timer >> 0; + case 0x9: return thischan.timer >> 8; + case 0xA: return thischan.loopstart >> 0; + case 0xB: return thischan.loopstart >> 8; + } + return 0; + } + + switch(addr) + { + //SOUNDCNT + case 0x500: return regs.mastervol; + case 0x501: return (regs.ctl_left + | (regs.ctl_right << 2) + | (regs.ctl_ch1bypass << 4) + | (regs.ctl_ch3bypass << 5) + | (regs.masteren << 7) + ); + + //SOUNDBIAS + case 0x504: return regs.soundbias >> 0; + case 0x505: return regs.soundbias >> 8; + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + case 0x509: + { + u32 which = (addr - 0x508); + return regs.cap[which].add + | (regs.cap[which].source << 1) + | (regs.cap[which].oneshot << 2) + | (regs.cap[which].bits8 << 3) + | (regs.cap[which].runtime.running << 7); + } + + //SNDCAP0DAD + case 0x510: return regs.cap[0].dad >> 0; + case 0x511: return regs.cap[0].dad >> 8; + case 0x512: return regs.cap[0].dad >> 16; + case 0x513: return regs.cap[0].dad >> 24; + + //SNDCAP0LEN + case 0x514: return regs.cap[0].len >> 0; + case 0x515: return regs.cap[0].len >> 8; + + //SNDCAP1DAD + case 0x518: return regs.cap[1].dad >> 0; + case 0x519: return regs.cap[1].dad >> 8; + case 0x51A: return regs.cap[1].dad >> 16; + case 0x51B: return regs.cap[1].dad >> 24; + + //SNDCAP1LEN + case 0x51C: return regs.cap[1].len >> 0; + case 0x51D: return regs.cap[1].len >> 8; + } //switch on address + + return 0; +} + +u16 SPU_struct::ReadWord(u32 addr) +{ + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u32 chan_num = (addr >> 4) & 0xF; + const channel_struct& thischan = channels[chan_num]; + + switch (addr & 0xF) + { + case 0x0: return (thischan.vol + | (thischan.volumeDiv << 8) + | (thischan.hold << 15) + ); + case 0x2: return (thischan.pan + | (thischan.waveduty << 8) + | (thischan.repeat << 11) + | (thischan.format << 13) + | ((thischan.status == CHANSTAT_PLAY)?(1 << 15):0) + ); + case 0x8: return thischan.timer; + case 0xA: return thischan.loopstart; + } //switch on individual channel regs + return 0; + } + + switch(addr) + { + //SOUNDCNT + case 0x500: return (regs.mastervol + | (regs.ctl_left << 8) + | (regs.ctl_right << 10) + | (regs.ctl_ch1bypass << 12) + | (regs.ctl_ch3bypass << 13) + | (regs.masteren << 15) + ); + + //SOUNDBIAS + case 0x504: return regs.soundbias; + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + { + u8 val0 = regs.cap[0].add + | (regs.cap[0].source << 1) + | (regs.cap[0].oneshot << 2) + | (regs.cap[0].bits8 << 3) + | (regs.cap[0].runtime.running << 7); + u8 val1 = regs.cap[1].add + | (regs.cap[1].source << 1) + | (regs.cap[1].oneshot << 2) + | (regs.cap[1].bits8 << 3) + | (regs.cap[1].runtime.running << 7); + return (u16)(val0 | (val1 << 8)); + } + + //SNDCAP0DAD + case 0x510: return regs.cap[0].dad >> 0; + case 0x512: return regs.cap[0].dad >> 16; + + //SNDCAP0LEN + case 0x514: return regs.cap[0].len; + + //SNDCAP1DAD + case 0x518: return regs.cap[1].dad >> 0; + case 0x51A: return regs.cap[1].dad >> 16; + + //SNDCAP1LEN + case 0x51C: return regs.cap[1].len; + } //switch on address + + return 0; +} + +u32 SPU_struct::ReadLong(u32 addr) +{ + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u32 chan_num = (addr >> 4) & 0xF; + channel_struct &thischan=channels[chan_num]; + + switch (addr & 0xF) + { + case 0x0: return (thischan.vol + | (thischan.volumeDiv << 8) + | (thischan.hold << 15) + | (thischan.pan << 16) + | (thischan.waveduty << 24) + | (thischan.repeat << 27) + | (thischan.format << 29) + | ((thischan.status == CHANSTAT_PLAY)?(1 << 31):0) + ); + case 0x8: return (thischan.timer | (thischan.loopstart << 16)); + } //switch on individual channel regs + return 0; + } + + switch(addr) + { + //SOUNDCNT + case 0x500: return (regs.mastervol + | (regs.ctl_left << 8) + | (regs.ctl_right << 10) + | (regs.ctl_ch1bypass << 12) + | (regs.ctl_ch3bypass << 13) + | (regs.masteren << 15) + ); + + //SOUNDBIAS + case 0x504: return (u32)regs.soundbias; + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + { + u8 val0 = regs.cap[0].add + | (regs.cap[0].source << 1) + | (regs.cap[0].oneshot << 2) + | (regs.cap[0].bits8 << 3) + | (regs.cap[0].runtime.running << 7); + u8 val1 = regs.cap[1].add + | (regs.cap[1].source << 1) + | (regs.cap[1].oneshot << 2) + | (regs.cap[1].bits8 << 3) + | (regs.cap[1].runtime.running << 7); + return (u32)(val0 | (val1 << 8)); + } + + //SNDCAP0DAD + case 0x510: return regs.cap[0].dad; + + //SNDCAP0LEN + case 0x514: return (u32)regs.cap[0].len; + + //SNDCAP1DAD + case 0x518: return regs.cap[1].dad; + + //SNDCAP1LEN + case 0x51C: return (u32)regs.cap[1].len; + } //switch on address + + return 0; +} + +SPUFifo::SPUFifo() +{ + reset(); +} + +void SPUFifo::reset() +{ + head = tail = size = 0; +} + +void SPUFifo::enqueue(s16 val) +{ + if(size==16) return; + buffer[tail] = val; + tail++; + tail &= 15; + size++; +} + +s16 SPUFifo::dequeue() +{ + if(size==0) return 0; + head++; + head &= 15; + s16 ret = buffer[head]; + size--; + return ret; +} + +void SPU_struct::ProbeCapture(int which) +{ + //VERY UNTESTED -- HOW MUCH OF THIS RESETS, AND WHEN? + + if(!regs.cap[which].active) + { + regs.cap[which].runtime.running = 0; + return; + } + + REGS::CAP &cap = regs.cap[which]; + cap.runtime.running = 1; + cap.runtime.curdad = cap.dad; + u32 len = cap.len; + if(len==0) len=1; + cap.runtime.maxdad = cap.dad + len*4; + cap.runtime.sampcnt = 0; + cap.runtime.fifo.reset(); +} + +void SPU_struct::WriteByte(u32 addr, u8 val) +{ + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u8 chan_num = (addr >> 4) & 0xF; + channel_struct &thischan = channels[chan_num]; + + switch (addr & 0x000F) + { + case 0x0: thischan.vol = (val & 0x7F); break; + case 0x1: + thischan.volumeDiv = (val & 0x03); + thischan.hold = (val >> 7) & 0x01; + break; + case 0x2: thischan.pan = (val & 0x7F); break; + case 0x3: + thischan.waveduty = (val & 0x07); + thischan.repeat = (val >> 3) & 0x03; + thischan.format = (val >> 5) & 0x03; + thischan.keyon = (val >> 7) & 0x01; + KeyProbe(chan_num); + break; + case 0x4: thischan.addr &= 0xFFFFFF00; thischan.addr |= (val & 0xFC); break; + case 0x5: thischan.addr &= 0xFFFF00FF; thischan.addr |= (val << 8); break; + case 0x6: thischan.addr &= 0xFF00FFFF; thischan.addr |= (val << 16); break; + case 0x7: thischan.addr &= 0x00FFFFFF; thischan.addr |= ((val&7) << 24); break; //only 27 bits of this register are used + case 0x8: thischan.timer &= 0xFF00; thischan.timer |= (val << 0); adjust_channel_timer(&thischan); break; + case 0x9: thischan.timer &= 0x00FF; thischan.timer |= (val << 8); adjust_channel_timer(&thischan); break; + + case 0xA: thischan.loopstart &= 0xFF00; thischan.loopstart |= (val << 0); break; + case 0xB: thischan.loopstart &= 0x00FF; thischan.loopstart |= (val << 8); break; + case 0xC: thischan.length &= 0xFFFFFF00; thischan.length |= (val << 0); break; + case 0xD: thischan.length &= 0xFFFF00FF; thischan.length |= (val << 8); break; + case 0xE: thischan.length &= 0xFF00FFFF; thischan.length |= ((val & 0x3F) << 16); //only 22 bits of this register are used + case 0xF: break; + + } //switch on individual channel regs + + return; + } + + switch(addr) + { + //SOUNDCNT + case 0x500: regs.mastervol = (val & 0x7F); break; + case 0x501: + regs.ctl_left = (val >> 0) & 3; + regs.ctl_right = (val >> 2) & 3; + regs.ctl_ch1bypass = (val >> 4) & 1; + regs.ctl_ch3bypass = (val >> 5) & 1; + regs.masteren = (val >> 7) & 1; + break; + + //SOUNDBIAS + case 0x504: regs.soundbias &= 0xFF00; regs.soundbias |= (val << 0); break; + case 0x505: regs.soundbias &= 0x00FF; regs.soundbias |= ((val&3) << 8); break; + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + case 0x509: + { + u32 which = (addr - 0x508); + regs.cap[which].add = BIT0(val); + regs.cap[which].source = BIT1(val); + regs.cap[which].oneshot = BIT2(val); + regs.cap[which].bits8 = BIT3(val); + regs.cap[which].active = BIT7(val); + ProbeCapture(which); + break; + } + + //SNDCAP0DAD + case 0x510: regs.cap[0].dad &= 0xFFFFFF00; regs.cap[0].dad |= (val & 0xFC); break; + case 0x511: regs.cap[0].dad &= 0xFFFF00FF; regs.cap[0].dad |= (val << 8); break; + case 0x512: regs.cap[0].dad &= 0xFF00FFFF; regs.cap[0].dad |= (val << 16); break; + case 0x513: regs.cap[0].dad &= 0x00FFFFFF; regs.cap[0].dad |= ((val&7) << 24); break; + + //SNDCAP0LEN + case 0x514: regs.cap[0].len &= 0xFF00; regs.cap[0].len |= (val << 0); break; + case 0x515: regs.cap[0].len &= 0x00FF; regs.cap[0].len |= (val << 8); break; + + //SNDCAP1DAD + case 0x518: regs.cap[1].dad &= 0xFFFFFF00; regs.cap[1].dad |= (val & 0xFC); break; + case 0x519: regs.cap[1].dad &= 0xFFFF00FF; regs.cap[1].dad |= (val << 8); break; + case 0x51A: regs.cap[1].dad &= 0xFF00FFFF; regs.cap[1].dad |= (val << 16); break; + case 0x51B: regs.cap[1].dad &= 0xFF000000; regs.cap[1].dad |= ((val&7) << 24); break; + + //SNDCAP1LEN + case 0x51C: regs.cap[1].len &= 0xFF00; regs.cap[1].len |= (val << 0); break; + case 0x51D: regs.cap[1].len &= 0x00FF; regs.cap[1].len |= (val << 8); break; + } //switch on address +} + +void SPU_struct::WriteWord(u32 addr, u16 val) +{ + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u32 chan_num = (addr >> 4) & 0xF; + channel_struct &thischan=channels[chan_num]; + + switch (addr & 0xF) + { + case 0x0: + thischan.vol = (val & 0x7F); + thischan.volumeDiv = (val >> 8) & 0x3; + thischan.hold = (val >> 15) & 0x1; + break; + case 0x2: + thischan.pan = (val & 0x7F); + thischan.waveduty = (val >> 8) & 0x7; + thischan.repeat = (val >> 11) & 0x3; + thischan.format = (val >> 13) & 0x3; + thischan.keyon = (val >> 15) & 0x1; + KeyProbe(chan_num); + break; + case 0x4: thischan.addr &= 0xFFFF0000; thischan.addr |= (val & 0xFFFC); break; + case 0x6: thischan.addr &= 0x0000FFFF; thischan.addr |= ((val & 0x07FF) << 16); break; + case 0x8: thischan.timer = val; adjust_channel_timer(&thischan); break; + case 0xA: thischan.loopstart = val; break; + case 0xC: thischan.length &= 0xFFFF0000; thischan.length |= (val << 0); break; + case 0xE: thischan.length &= 0x0000FFFF; thischan.length |= ((val & 0x003F) << 16); break; + } //switch on individual channel regs + return; + } + + switch (addr) + { + //SOUNDCNT + case 0x500: + regs.mastervol = (val & 0x7F); + regs.ctl_left = (val >> 8) & 0x03; + regs.ctl_right = (val >> 10) & 0x03; + regs.ctl_ch1bypass = (val >> 12) & 0x01; + regs.ctl_ch3bypass = (val >> 13) & 0x01; + regs.masteren = (val >> 15) & 0x01; + for(u8 i=0; i<16; i++) + KeyProbe(i); + break; + + //SOUNDBIAS + case 0x504: regs.soundbias = (val & 0x3FF); break; + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + { + regs.cap[0].add = BIT0(val); + regs.cap[0].source = BIT1(val); + regs.cap[0].oneshot = BIT2(val); + regs.cap[0].bits8 = BIT3(val); + regs.cap[0].active = BIT7(val); + ProbeCapture(0); + + regs.cap[1].add = BIT8(val); + regs.cap[1].source = BIT9(val); + regs.cap[1].oneshot = BIT10(val); + regs.cap[1].bits8 = BIT11(val); + regs.cap[1].active = BIT15(val); + ProbeCapture(1); + break; + } + + //SNDCAP0DAD + case 0x510: regs.cap[0].dad &= 0xFFFF0000; regs.cap[0].dad |= (val & 0xFFFC); break; + case 0x512: regs.cap[0].dad &= 0x0000FFFF; regs.cap[0].dad |= ((val & 0x07FF) << 16); break; + + //SNDCAP0LEN + case 0x514: regs.cap[0].len = val; break; + + //SNDCAP1DAD + case 0x518: regs.cap[1].dad &= 0xFFFF0000; regs.cap[1].dad |= (val & 0xFFFC); break; + case 0x51A: regs.cap[1].dad &= 0x0000FFFF; regs.cap[1].dad |= ((val & 0x07FF) << 16); break; + + //SNDCAP1LEN + case 0x51C: regs.cap[1].len = val; break; + } //switch on address +} + +void SPU_struct::WriteLong(u32 addr, u32 val) +{ + //individual channel regs + if ((addr & 0x0F00) == 0x0400) + { + u32 chan_num = (addr >> 4) & 0xF; + channel_struct &thischan=channels[chan_num]; + + switch (addr & 0xF) + { + case 0x0: + thischan.vol = val & 0x7F; + thischan.volumeDiv = (val >> 8) & 0x3; + thischan.hold = (val >> 15) & 0x1; + thischan.pan = (val >> 16) & 0x7F; + thischan.waveduty = (val >> 24) & 0x7; + thischan.repeat = (val >> 27) & 0x3; + thischan.format = (val >> 29) & 0x3; + thischan.keyon = (val >> 31) & 0x1; + KeyProbe(chan_num); + break; + + case 0x4: thischan.addr = (val & 0x07FFFFFC); break; + case 0x8: + thischan.timer = (val & 0xFFFF); + thischan.loopstart = ((val >> 16) & 0xFFFF); + adjust_channel_timer(&thischan); + break; + + case 0xC: thischan.length = (val & 0x003FFFFF); break; //only 22 bits of this register are used + } //switch on individual channel regs + return; + } + + switch(addr) + { + //SOUNDCNT + case 0x500: + regs.mastervol = (val & 0x7F); + regs.ctl_left = ((val >> 8) & 3); + regs.ctl_right = ((val>>10) & 3); + regs.ctl_ch1bypass = ((val >> 12) & 1); + regs.ctl_ch3bypass = ((val >> 13) & 1); + regs.masteren = ((val >> 15) & 1); + for(u8 i=0; i<16; i++) + KeyProbe(i); + break; + + //SOUNDBIAS + case 0x504: regs.soundbias = (val & 0x3FF); + + //SNDCAP0CNT/SNDCAP1CNT + case 0x508: + regs.cap[0].add = BIT0(val); + regs.cap[0].source = BIT1(val); + regs.cap[0].oneshot = BIT2(val); + regs.cap[0].bits8 = BIT3(val); + regs.cap[0].active = BIT7(val); + ProbeCapture(0); + + regs.cap[1].add = BIT8(val); + regs.cap[1].source = BIT9(val); + regs.cap[1].oneshot = BIT10(val); + regs.cap[1].bits8 = BIT11(val); + regs.cap[1].active = BIT15(val); + ProbeCapture(1); + break; + + //SNDCAP0DAD + case 0x510: regs.cap[0].dad = (val & 0x07FFFFFC); break; + + //SNDCAP0LEN + case 0x514: regs.cap[0].len = (val & 0xFFFF); break; + + //SNDCAP1DAD + case 0x518: regs.cap[1].dad = (val & 0x07FFFFFC); break; + + //SNDCAP1LEN + case 0x51C: regs.cap[1].len = (val & 0xFFFF); break; + } //switch on address } ////////////////////////////////////////////////////////////////////////////// -static void SNDDummyDeInit() +static FORCEINLINE void FetchPSGData(channel_struct *chan, s32 *data) { + if (chan->sampcnt < 0) + { + *data = 0; + return; + } + + if(chan->num < 8) + { + *data = 0; + } + else if(chan->num < 14) + { + *data = (s32)wavedutytbl[chan->waveduty][(sputrunc(chan->sampcnt)) & 0x7]; + } + else + { + if(chan->lastsampcnt == sputrunc(chan->sampcnt)) + { + *data = (s32)chan->psgnoise_last; + return; + } + + u32 max = sputrunc(chan->sampcnt); + for(u32 i = chan->lastsampcnt; i < max; i++) + { + if(chan->x & 0x1) + { + chan->x = (chan->x >> 1) ^ 0x6000; + chan->psgnoise_last = -0x7FFF; + } + else + { + chan->x >>= 1; + chan->psgnoise_last = 0x7FFF; + } + } + + chan->lastsampcnt = sputrunc(chan->sampcnt); + + *data = (s32)chan->psgnoise_last; + } } ////////////////////////////////////////////////////////////////////////////// -static void SNDDummyUpdateAudio(s16 *buffer, u32 num_samples) +static FORCEINLINE void MixL(SPU_struct* SPU, channel_struct *chan, s32 data) { + data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv]; + SPU->sndbuf[SPU->bufpos<<1] += data; } -////////////////////////////////////////////////////////////////////////////// +static FORCEINLINE void MixR(SPU_struct* SPU, channel_struct *chan, s32 data) +{ + data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv]; + SPU->sndbuf[(SPU->bufpos<<1)+1] += data; +} -static u32 SNDDummyGetAudioSpace() +static FORCEINLINE void MixLR(SPU_struct* SPU, channel_struct *chan, s32 data) { - return 735; + data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv]; + SPU->sndbuf[SPU->bufpos<<1] += spumuldiv7(data, 127 - chan->pan); + SPU->sndbuf[(SPU->bufpos<<1)+1] += spumuldiv7(data, chan->pan); } ////////////////////////////////////////////////////////////////////////////// -static void SNDDummyMuteAudio() +template static FORCEINLINE void TestForLoop(SPU_struct *SPU, channel_struct *chan) { + const int shift = (FORMAT == 0 ? 2 : 1); + + chan->sampcnt += chan->sampinc; + + if (chan->sampcnt > chan->double_totlength_shifted) + { + // Do we loop? Or are we done? + if (chan->repeat == 1) + { + while (chan->sampcnt > chan->double_totlength_shifted) { + chan->sampcnt -= chan->double_totlength_shifted - (double)(chan->loopstart << shift); + } + } + else + { + SPU->KeyOff(chan->num); + SPU->bufpos = SPU->buflength; + } + } +} + +static FORCEINLINE void TestForLoop2(SPU_struct *SPU, channel_struct *chan) +{ + // Minimum length (the sum of PNT+LEN) is 4 words (16 bytes), + // smaller values (0..3 words) are causing hang-ups + // (busy bit remains set infinite, but no sound output occurs). + // fix: 7th Dragon (JP) - http://sourceforge.net/p/desmume/bugs/1357/ + if (chan->totlength < 4) return; + + chan->sampcnt += chan->sampinc; + + if (chan->sampcnt > chan->double_totlength_shifted) + { + // Do we loop? Or are we done? + if (chan->repeat == 1) + { + double step = (chan->double_totlength_shifted - (double)(chan->loopstart << 3)); + + while (chan->sampcnt > chan->double_totlength_shifted) chan->sampcnt -= step; + + if(chan->loop_index == K_ADPCM_LOOPING_RECOVERY_INDEX) + { + chan->pcm16b = (s16)read16(chan->addr); + chan->index = read08(chan->addr+2) & 0x7F; + chan->lastsampcnt = 7; + } + else + { + chan->pcm16b = chan->loop_pcm16b; + chan->index = chan->loop_index; + chan->lastsampcnt = (chan->loopstart << 3); + } + } + else + { + chan->status = CHANSTAT_STOPPED; + SPU->KeyOff(chan->num); + SPU->bufpos = SPU->buflength; + } + } +} + +template FORCEINLINE static void SPU_Mix(SPU_struct* SPU, channel_struct *chan, s32 data) +{ + switch(CHANNELS) + { + case -1: break; // not reached + case 0: MixL(SPU, chan, data); break; + case 1: MixLR(SPU, chan, data); break; + case 2: MixR(SPU, chan, data); break; + } + SPU->lastdata = data; +} + +//WORK + template +FORCEINLINE static void ____SPU_ChanUpdate(SPU_struct* const SPU, channel_struct* const chan) +{ + for (; SPU->bufpos < SPU->buflength; SPU->bufpos++) + { + if(CHANNELS != -1) + { + s32 data; + if (chan->sampcnt < 0) { + data = 0; + } else if (FORMAT == 3) { + FetchPSGData(chan, &data); + } else { + const SampleData& sample = spuSampleCache.getSample(chan->addr, chan->loopstart, chan->length, SampleData::Format(FORMAT)); + data = sample.sampleAt(chan->sampcnt, IInterpolator::allInterpolators[CommonSettings.spuInterpolationMode]); + } + SPU_Mix(SPU, chan, data); + } + + switch(FORMAT) { + case 0: case 1: TestForLoop(SPU, chan); break; + case 2: TestForLoop2(SPU, chan); break; + case 3: chan->sampcnt += chan->sampinc; break; + } + } +} + +template +FORCEINLINE static void ___SPU_ChanUpdate(const bool actuallyMix, SPU_struct* const SPU, channel_struct* const chan) +{ + if(!actuallyMix) + ____SPU_ChanUpdate(SPU,chan); + else if (chan->pan == 0) + ____SPU_ChanUpdate(SPU,chan); + else if (chan->pan == 127) + ____SPU_ChanUpdate(SPU,chan); + else + ____SPU_ChanUpdate(SPU,chan); +} + +FORCEINLINE static void _SPU_ChanUpdate(const bool actuallyMix, SPU_struct* const SPU, channel_struct* const chan) +{ + switch(chan->format) + { + case 0: ___SPU_ChanUpdate<0>(actuallyMix, SPU, chan); break; + case 1: ___SPU_ChanUpdate<1>(actuallyMix, SPU, chan); break; + case 2: ___SPU_ChanUpdate<2>(actuallyMix, SPU, chan); break; + case 3: ___SPU_ChanUpdate<3>(actuallyMix, SPU, chan); break; + default: assert(false); + } +} + +//ENTERNEW +static void SPU_MixAudio_Advanced(bool actuallyMix, SPU_struct *SPU, int length) +{ + //the advanced spu function correctly handles all sound control mixing options, as well as capture + //this code is not entirely optimal, as it relies on sort of manhandling the core mixing functions + //in order to get the results it needs. + + //THIS IS MAX HACKS!!!! + //AND NEEDS TO BE REWRITTEN ALONG WITH THE DEEPEST PARTS OF THE SPU + //ONCE WE KNOW THAT IT WORKS + + //BIAS gets ignored since our spu is still not bit perfect, + //and it doesnt matter for purposes of capture + + //-----------DEBUG CODE + bool skipcap = false; + //----------------- + + s32 samp0[2] = {0,0}; + + //believe it or not, we are going to do this one sample at a time. + //like i said, it is slower. + for (int samp = 0; samp < length; samp++) + { + SPU->sndbuf[0] = 0; + SPU->sndbuf[1] = 0; + SPU->buflength = 1; + + s32 capmix[2] = {0,0}; + s32 mix[2] = {0,0}; + s32 chanout[16]; + s32 submix[32]; + static int tsamp = 0; + ++tsamp; + + //generate each channel, and helpfully mix it at the same time + for (int i = 0; i < 16; i++) + { + channel_struct *chan = &SPU->channels[i]; + + if (chan->status == CHANSTAT_PLAY) + { + SPU->bufpos = 0; + + bool bypass = false; + if (i==1 && SPU->regs.ctl_ch1bypass) bypass=true; + if (i==3 && SPU->regs.ctl_ch3bypass) bypass=true; + + + //output to mixer unless we are bypassed. + //dont output to mixer if the user muted us + bool outputToMix = true; + if (CommonSettings.spu_muteChannels[i]) outputToMix = false; + if (bypass) outputToMix = false; + bool outputToCap = outputToMix; + if (CommonSettings.spu_captureMuted && !bypass) outputToCap = true; + + //channels 1 and 3 should probably always generate their audio + //internally at least, just in case they get used by the spu output + bool domix = outputToCap || outputToMix || i==1 || i==3; + + //clear the output buffer since this is where _SPU_ChanUpdate wants to accumulate things + SPU->sndbuf[0] = SPU->sndbuf[1] = 0; + + //get channel's next output sample. + _SPU_ChanUpdate(domix, SPU, chan); + chanout[i] = SPU->lastdata >> volume_shift[chan->volumeDiv]; + + //save the panned results + submix[i*2] = SPU->sndbuf[0]; + submix[i*2+1] = SPU->sndbuf[1]; + + //send sample to our capture mix + if (outputToCap) + { + capmix[0] += submix[i*2]; + capmix[1] += submix[i*2+1]; + } + + //send sample to our main mixer + if (outputToMix) + { + mix[0] += submix[i*2]; + mix[1] += submix[i*2+1]; + } + } + else + { + chanout[i] = 0; + submix[i*2] = 0; + submix[i*2+1] = 0; + } + } //foreach channel + + s32 mixout[2] = {mix[0],mix[1]}; + s32 capmixout[2] = {capmix[0],capmix[1]}; + s32 sndout[2] = { 0, 0 }; + s32 capout[2]; + + //create SPU output + switch (SPU->regs.ctl_left) + { + case SPU_struct::REGS::LOM_LEFT_MIXER: sndout[0] = mixout[0]; break; + case SPU_struct::REGS::LOM_CH1: sndout[0] = submix[1*2+0]; break; + case SPU_struct::REGS::LOM_CH3: sndout[0] = submix[3*2+0]; break; + case SPU_struct::REGS::LOM_CH1_PLUS_CH3: sndout[0] = submix[1*2+0] + submix[3*2+0]; break; + } + switch (SPU->regs.ctl_right) + { + case SPU_struct::REGS::ROM_RIGHT_MIXER: sndout[1] = mixout[1]; break; + case SPU_struct::REGS::ROM_CH1: sndout[1] = submix[1*2+1]; break; + case SPU_struct::REGS::ROM_CH3: sndout[1] = submix[3*2+1]; break; + case SPU_struct::REGS::ROM_CH1_PLUS_CH3: sndout[1] = submix[1*2+1] + submix[3*2+1]; break; + } + + + //generate capture output ("capture bugs" from gbatek are not emulated) + if (SPU->regs.cap[0].source == 0) + capout[0] = capmixout[0]; //cap0 = L-mix + else if (SPU->regs.cap[0].add) + capout[0] = chanout[0] + chanout[1]; //cap0 = ch0+ch1 + else capout[0] = chanout[0]; //cap0 = ch0 + + if (SPU->regs.cap[1].source == 0) + capout[1] = capmixout[1]; //cap1 = R-mix + else if (SPU->regs.cap[1].add) + capout[1] = chanout[2] + chanout[3]; //cap1 = ch2+ch3 + else capout[1] = chanout[2]; //cap1 = ch2 + + capout[0] = MinMax(capout[0],-0x8000,0x7FFF); + capout[1] = MinMax(capout[1],-0x8000,0x7FFF); + + //write the output sample where it is supposed to go + if (samp == 0) + { + samp0[0] = sndout[0]; + samp0[1] = sndout[1]; + } + else + { + SPU->sndbuf[samp*2+0] = sndout[0]; + SPU->sndbuf[samp*2+1] = sndout[1]; + } + + for (int capchan = 0; capchan < 2; capchan++) + { + if (SPU->regs.cap[capchan].runtime.running) + { + SPU_struct::REGS::CAP& cap = SPU->regs.cap[capchan]; + u32 last = sputrunc(cap.runtime.sampcnt); + cap.runtime.sampcnt += SPU->channels[1+2*capchan].sampinc; + u32 curr = sputrunc(cap.runtime.sampcnt); + for (u32 j = last; j < curr; j++) + { + //so, this is a little strange. why go through a fifo? + //it seems that some games will set up a reverb effect by capturing + //to the nearly same address as playback, but ahead by a couple. + //So, playback will always end up being what was captured a couple of samples ago. + //This system counts on playback always having read ahead 16 samples. + //In that case, playback will end up being what was processed at one entire buffer length ago, + //since the 16 samples would have read ahead before they got captured over + + //It's actually the source channels which should have a fifo, but we are + //not going to take the hit in speed and complexity. Save it for a future rewrite. + //Instead, what we do here is delay the capture by 16 samples to create a similar effect. + //Subjectively, it seems to be working. + + //Don't do anything until the fifo is filled, so as to delay it + if (cap.runtime.fifo.size < 16) + { + cap.runtime.fifo.enqueue(capout[capchan]); + continue; + } + + //(actually capture sample from fifo instead of most recently generated) + u32 multiplier; + s32 sample = cap.runtime.fifo.dequeue(); + cap.runtime.fifo.enqueue(capout[capchan]); + + if (cap.bits8) + { + s8 sample8 = sample >> 8; + if (skipcap) _MMU_write08<1,MMU_AT_DMA>(cap.runtime.curdad,0); + else _MMU_write08<1,MMU_AT_DMA>(cap.runtime.curdad,sample8); + cap.runtime.curdad++; + multiplier = 4; + } + else + { + s16 sample16 = sample; + if (skipcap) _MMU_write16<1,MMU_AT_DMA>(cap.runtime.curdad,0); + else _MMU_write16<1,MMU_AT_DMA>(cap.runtime.curdad,sample16); + cap.runtime.curdad+=2; + multiplier = 2; + } + + if (cap.runtime.curdad >= cap.runtime.maxdad) + { + cap.runtime.curdad = cap.dad; + cap.runtime.sampcnt -= cap.len*multiplier; + } + } //sampinc loop + } //if capchan running + } //capchan loop + } //main sample loop + + SPU->sndbuf[0] = samp0[0]; + SPU->sndbuf[1] = samp0[1]; +} + +//ENTER +static void SPU_MixAudio(bool actuallyMix, SPU_struct *SPU, int length) +{ + if (actuallyMix) + { + memset(SPU->sndbuf, 0, length*4*2); + memset(SPU->outbuf, 0, length*2*2); + } + + SPU_MixAudio_Advanced(actuallyMix, SPU, length); + + //we used to bail out if speakers were disabled. + //this is technically wrong. sound may still be captured, or something. + //in all likelihood, any game doing this probably master disabled the SPU also + //so, optimization of this case is probably not necessary. + //later, we'll just silence the output + bool speakers = T1ReadWord(MMU.ARM7_REG, 0x304) & 0x01; + + u8 vol = SPU->regs.mastervol; + + // convert from 32-bit->16-bit + if (actuallyMix && speakers) { + for (int i = 0; i < length*2; i++) + { + // Apply Master Volume + SPU->sndbuf[i] = spumuldiv7(SPU->sndbuf[i], vol); + s16 outsample = MinMax(SPU->sndbuf[i],-0x8000,0x7FFF); + SPU->outbuf[i] = outsample; + } + } } ////////////////////////////////////////////////////////////////////////////// -static void SNDDummyUnMuteAudio() -{ + +//emulates one hline of the cpu core. +//this will produce a variable number of samples, calculated to keep a 44100hz output +//in sync with the emulator framerate +int spu_core_samples = 0; +void SPU_Emulate_core() +{ + bool needToMix = true; + SoundInterface_struct *soundProcessor = SPU_SoundCore(); + + samples += samples_per_hline; + spu_core_samples = (int)(samples); + samples -= spu_core_samples; + + SPU_MixAudio(needToMix, SPU_core, spu_core_samples); + + if (soundProcessor == NULL) + { + return; + } + + if (soundProcessor->FetchSamples != NULL) + { + soundProcessor->FetchSamples(SPU_core->outbuf, spu_core_samples, synchmode, synchronizer); + } + else + { + SPU_DefaultFetchSamples(SPU_core->outbuf, spu_core_samples, synchmode, synchronizer); + } +} + +void SPU_Emulate_user(bool mix) +{ + static s16 *postProcessBuffer = NULL; + static size_t postProcessBufferSize = 0; + size_t freeSampleCount = 0; + size_t processedSampleCount = 0; + SoundInterface_struct *soundProcessor = SPU_SoundCore(); + + if (soundProcessor == NULL) + { + return; + } + + // Check to see how many free samples are available. + // If there are some, fill up the output buffer. + freeSampleCount = soundProcessor->GetAudioSpace(); + if (freeSampleCount == 0) + { + return; + } + + if (freeSampleCount > buffersize) + { + freeSampleCount = buffersize; + } + + // If needed, resize the post-process buffer to guarantee that + // we can store all the sound data. + if (postProcessBufferSize < freeSampleCount * 2 * sizeof(s16)) + { + postProcessBufferSize = freeSampleCount * 2 * sizeof(s16); + postProcessBuffer = (s16 *)realloc(postProcessBuffer, postProcessBufferSize); + } + + if (soundProcessor->PostProcessSamples != NULL) + { + processedSampleCount = soundProcessor->PostProcessSamples(postProcessBuffer, freeSampleCount, synchmode, synchronizer); + } + else + { + processedSampleCount = SPU_DefaultPostProcessSamples(postProcessBuffer, freeSampleCount, synchmode, synchronizer); + } + + soundProcessor->UpdateAudio(postProcessBuffer, processedSampleCount); } -////////////////////////////////////////////////////////////////////////////// +void SPU_DefaultFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer) +{ + theSynchronizer->enqueue_samples(sampleBuffer, sampleCount); +} -static void SNDDummySetVolume(int volume) +size_t SPU_DefaultPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer) { + return theSynchronizer->output_samples(postProcessBuffer, requestedSampleCount); } ////////////////////////////////////////////////////////////////////////////// +// Dummy Sound Interface +////////////////////////////////////////////////////////////////////////////// -SoundInterface_struct SNDDummy = -{ - SNDCORE_DUMMY, - "Dummy Sound Interface", - SNDDummyInit, - SNDDummyDeInit, - SNDDummyUpdateAudio, - SNDDummyGetAudioSpace, - SNDDummyMuteAudio, - SNDDummyUnMuteAudio, - SNDDummySetVolume +int SNDDummyInit(int buffersize); +void SNDDummyDeInit(); +void SNDDummyUpdateAudio(s16 *buffer, u32 num_samples); +u32 SNDDummyGetAudioSpace(); +void SNDDummyMuteAudio(); +void SNDDummyUnMuteAudio(); +void SNDDummySetVolume(int volume); +void SNDDummyClearBuffer(); +void SNDDummyFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); +size_t SNDDummyPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); + +SoundInterface_struct SNDDummy = { + SNDCORE_DUMMY, + "Dummy Sound Interface", + SNDDummyInit, + SNDDummyDeInit, + SNDDummyUpdateAudio, + SNDDummyGetAudioSpace, + SNDDummyMuteAudio, + SNDDummyUnMuteAudio, + SNDDummySetVolume, + SNDDummyClearBuffer, + SNDDummyFetchSamples, + SNDDummyPostProcessSamples }; +int SNDDummyInit(int buffersize) { return 0; } +void SNDDummyDeInit() {} +void SNDDummyUpdateAudio(s16 *buffer, u32 num_samples) { } +u32 SNDDummyGetAudioSpace() { return DESMUME_SAMPLE_RATE/60 + 5; } +void SNDDummyMuteAudio() {} +void SNDDummyUnMuteAudio() {} +void SNDDummySetVolume(int volume) {} +void SNDDummyClearBuffer() {} +void SNDDummyFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer) {} +size_t SNDDummyPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer) { return 0; } + diff -Nru audacious-plugins-4.1/src/xsf/desmume/SPU.h audacious-plugins-4.2/src/xsf/desmume/SPU.h --- audacious-plugins-4.1/src/xsf/desmume/SPU.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/SPU.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,31 +1,61 @@ -/* Copyright (C) 2006 Theo Berkau +/* + Copyright 2006 Theo Berkau + Copyright (C) 2006-2015 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ #ifndef SPU_H #define SPU_H +#include +#include +#include +#include +#include + #include "types.h" +#include "matrix.h" +#include "metaspu.h" +#include "../spu/samplecache.h" + +class EMUFILE; #define SNDCORE_DEFAULT -1 #define SNDCORE_DUMMY 0 -typedef struct +#define CHANSTAT_STOPPED 0 +#define CHANSTAT_PLAY 1 + + +//who made these static? theyre used in multiple places. +FORCEINLINE u32 sputrunc(float f) { return u32floor(f); } +FORCEINLINE u32 sputrunc(double d) { return u32floor(d); } +FORCEINLINE s32 spumuldiv7(s32 val, u8 multiplier) { + assert(multiplier <= 127); + return (multiplier == 127) ? val : ((val * multiplier) >> 7); +} + +enum SPUInterpolationMode +{ + SPUInterpolation_None = 0, + SPUInterpolation_Linear = 1, + SPUInterpolation_Cosine = 2, + SPUInterpolation_Sharp = 3 +}; + +struct SoundInterface_struct { int id; const char *Name; @@ -36,22 +66,205 @@ void (*MuteAudio)(); void (*UnMuteAudio)(); void (*SetVolume)(int volume); -} SoundInterface_struct; + void (*ClearBuffer)(); + void (*FetchSamples)(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); + size_t (*PostProcessSamples)(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); +}; + extern SoundInterface_struct SNDDummy; +extern SoundInterface_struct SNDFile; +extern int SPU_currentCoreNum; + +struct channel_struct +{ + channel_struct() : num(0), + vol(0), + volumeDiv(0), + hold(0), + pan(0), + waveduty(0), + repeat(0), + format(0), + keyon(0), + status(0), + addr(0), + timer(0), + loopstart(0), + length(0), + totlength(0), + double_totlength_shifted(0.0), + sampcnt(0.0), + sampinc(0.0), + lastsampcnt(0), + pcm16b(0), + pcm16b_last(0), + loop_pcm16b(0), + index(0), + loop_index(0), + x(0), + psgnoise_last(0) + {} + u32 num; + u8 vol; + u8 volumeDiv; + u8 hold; + u8 pan; + u8 waveduty; + u8 repeat; + u8 format; + u8 keyon; + u8 status; + u32 addr; + u16 timer; + u16 loopstart; + u32 length; + u32 totlength; + double double_totlength_shifted; + double sampcnt; + double sampinc; + // ADPCM specific + u32 lastsampcnt; + s16 pcm16b, pcm16b_last; + s16 loop_pcm16b; + s32 index; + int loop_index; + u16 x; + s16 psgnoise_last; +}; + +class SPUFifo +{ +public: + SPUFifo(); + void enqueue(s16 val); + s16 dequeue(); + s16 buffer[16]; + s32 head,tail,size; + void reset(); +}; + +class SPU_struct +{ +public: + SPU_struct(int buffersize); + u32 bufpos; + u32 buflength; + s32 *sndbuf; + s32 lastdata; //the last sample that a channel generated + s16 *outbuf; + u32 bufsize; + channel_struct channels[16]; + + //registers + struct REGS { + REGS() + : mastervol(0) + , ctl_left(0) + , ctl_right(0) + , ctl_ch1bypass(0) + , ctl_ch3bypass(0) + , masteren(0) + , soundbias(0) + {} + + u8 mastervol; + u8 ctl_left, ctl_right; + u8 ctl_ch1bypass, ctl_ch3bypass; + u8 masteren; + u16 soundbias; + + enum LeftOutputMode + { + LOM_LEFT_MIXER=0, LOM_CH1=1, LOM_CH3=2, LOM_CH1_PLUS_CH3=3 + }; + + enum RightOutputMode + { + ROM_RIGHT_MIXER=0, ROM_CH1=1, ROM_CH3=2, ROM_CH1_PLUS_CH3=3 + }; + + struct CAP { + CAP() + : add(0), source(0), oneshot(0), bits8(0), active(0), dad(0), len(0) + {} + u8 add, source, oneshot, bits8, active; + u32 dad; + u16 len; + struct Runtime { + Runtime() + : running(0), curdad(0), maxdad(0) + {} + u8 running; + u32 curdad; + u32 maxdad; + double sampcnt; + SPUFifo fifo; + } runtime; + } cap[2]; + } regs; + + void reset(); + ~SPU_struct(); + void KeyOff(int channel); + void KeyOn(int channel); + void KeyProbe(int channel); + void ProbeCapture(int which); + void WriteByte(u32 addr, u8 val); + void WriteWord(u32 addr, u16 val); + void WriteLong(u32 addr, u32 val); + u8 ReadByte(u32 addr); + u16 ReadWord(u32 addr); + u32 ReadLong(u32 addr); + bool isSPU(u32 addr) { return ((addr >= 0x04000400) && (addr < 0x04000520)); } + + //kills all channels but leaves SPU otherwise running normally + void ShutUp(); +}; +extern SPU_struct *SPU_core; +extern int spu_core_samples; int SPU_ChangeSoundCore(int coreid, int buffersize); +SoundInterface_struct *SPU_SoundCore(); + +void SPU_ReInit(bool fakeBoot = false); int SPU_Init(int coreid, int buffersize); void SPU_Pause(int pause); void SPU_SetVolume(int volume); +void SPU_SetSynchMode(int mode, int method); +void SPU_ClearOutputBuffer(void); void SPU_Reset(void); void SPU_DeInit(void); void SPU_KeyOn(int channel); -void SPU_WriteByte(u32 addr, u8 val); -void SPU_WriteWord(u32 addr, u16 val); -void SPU_WriteLong(u32 addr, u32 val); -u32 SPU_ReadLong(u32 addr); -void SPU_Emulate(void); -void SPU_EmulateSamples(u32 numsamples); +static FORCEINLINE void SPU_WriteByte(u32 addr, u8 val) +{ + addr &= 0xFFF; + + SPU_core->WriteByte(addr,val); +} +static FORCEINLINE void SPU_WriteWord(u32 addr, u16 val) +{ + addr &= 0xFFF; + + SPU_core->WriteWord(addr,val); +} +static FORCEINLINE void SPU_WriteLong(u32 addr, u32 val) +{ + addr &= 0xFFF; + + SPU_core->WriteLong(addr,val); +} +static FORCEINLINE u8 SPU_ReadByte(u32 addr) { return SPU_core->ReadByte(addr & 0x0FFF); } +static FORCEINLINE u16 SPU_ReadWord(u32 addr) { return SPU_core->ReadWord(addr & 0x0FFF); } +static FORCEINLINE u32 SPU_ReadLong(u32 addr) { return SPU_core->ReadLong(addr & 0x0FFF); } +void SPU_Emulate_core(void); +void SPU_Emulate_user(bool mix = true); +void SPU_DefaultFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); +size_t SPU_DefaultPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer); + +extern double DESMUME_SAMPLE_RATE; +void SetDesmumeSampleRate(double rate); + +extern SampleCache spuSampleCache; #endif diff -Nru audacious-plugins-4.1/src/xsf/desmume/thumb_instructions.cc audacious-plugins-4.2/src/xsf/desmume/thumb_instructions.cc --- audacious-plugins-4.1/src/xsf/desmume/thumb_instructions.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/thumb_instructions.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,944 +1,1159 @@ /* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com + Copyright (C) 2008 shash + Copyright (C) 2008-2013 DeSmuME team - Code added on 18/08/2006 by shash - - Missing missaligned addresses correction - (reference in http://nocash.emubase.de/gbatek.htm#cpumemoryalignments) - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ +#include + #include "bios.h" -#include "debug.h" #include "MMU.h" +#include "NDSSystem.h" +#include "MMU_timing.h" -#define REG_NUM(i, n) (((i)>>n)&0x7) - -extern BOOL execute; +#define cpu (&ARMPROC) +#define TEMPLATE template -// Use this macros for reading/writing, so the GDB stub isn't broken -#ifdef GDB_STUB - #define READ32(a,b) cpu->mem_if->read32(a,b) - #define WRITE32(a,b,c) cpu->mem_if->write32(a,b,c) - #define READ16(a,b) cpu->mem_if->read16(a,b) - #define WRITE16(a,b,c) cpu->mem_if->write16(a,b,c) - #define READ8(a,b) cpu->mem_if->read8(a,b) - #define WRITE8(a,b,c) cpu->mem_if->write8(a,b,c) -#else - #define READ32(a,b) MMU_read32(cpu->proc_ID, b) - #define WRITE32(a,b,c) MMU_write32(cpu->proc_ID,b,c) - #define READ16(a,b) MMU_read16(cpu->proc_ID, b) - #define WRITE16(a,b,c) MMU_write16(cpu->proc_ID,b,c) - #define READ8(a,b) MMU_read8(cpu->proc_ID, b) - #define WRITE8(a,b,c) MMU_write8(cpu->proc_ID,b,c) -#endif +static inline uint32_t REG_NUM(uint32_t i, uint32_t n) { return (i >> n) & 0x7; } -static u32 FASTCALL OP_UND_THUMB(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// Undefined instruction +//----------------------------------------------------------------------------- +TEMPLATE static uint32_t FASTCALL OP_UND_THUMB(uint32_t) { - execute = false; - return 1; + //INFO("THUMB%c: Undefined instruction: 0x%08X (%s) PC=0x%08X\n", cpu->proc_ID?'7':'9', cpu->instruction, decodeIntruction(true, cpu->instruction), cpu->instruct_adr); + TRAPUNDEF(cpu); + return 1; } -static u32 FASTCALL OP_LSL_0(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// LSL +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_LSL_0(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] = cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->R[REG_NUM(i, 0)] = cpu->R[REG_NUM(i, 3)]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_LSL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LSL(uint32_t i) { - u32 i = cpu->instruction; - u32 v = (i>>6) & 0x1F; - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], 32-v); - cpu->R[REG_NUM(i, 0)] = (cpu->R[REG_NUM(i, 3)] << v); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t v = (i >> 6) & 0x1F; + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], 32 - v); + cpu->R[REG_NUM(i, 0)] = cpu->R[REG_NUM(i, 3)] << v; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_LSR_0(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LSL_REG(uint32_t i) { - u32 i = cpu->instruction; - // cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 3)]); - cpu->R[REG_NUM(i, 0)] = 0; - cpu->CPSR.bits.N = 0; - cpu->CPSR.bits.Z = 1; + uint32_t v = cpu->R[REG_NUM(i, 3)] & 0xFF; - return 2; -} + if (!v) + { + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + if (v < 32) + { + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], 32 - v); + cpu->R[REG_NUM(i, 0)] <<= v; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + if (v == 32) + cpu->CPSR.bits.C = BIT0(cpu->R[REG_NUM(i, 0)]); + else + cpu->CPSR.bits.C = 0; -static u32 FASTCALL OP_LSR(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 v = (i>>6) & 0x1F; - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v-1); - cpu->R[REG_NUM(i, 0)] = (cpu->R[REG_NUM(i, 3)] >> v); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->R[REG_NUM(i, 0)] = 0; + cpu->CPSR.bits.N = 0; + cpu->CPSR.bits.Z = 1; - return 2; + return 2; } -static u32 FASTCALL OP_ASR_0(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// LSR +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_LSR_0(uint32_t i) { - u32 i = cpu->instruction; - cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 3)]); - cpu->R[REG_NUM(i, 0)] = BIT31(cpu->R[REG_NUM(i, 3)])*0xFFFFFFFF; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 3)]); + cpu->R[REG_NUM(i, 0)] = 0; + cpu->CPSR.bits.N = 0; + cpu->CPSR.bits.Z = 1; - return 2; + return 1; } -static u32 FASTCALL OP_ASR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LSR(uint32_t i) { - u32 i = cpu->instruction; - u32 v = (i>>6) & 0x1F; - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], v-1); - cpu->R[REG_NUM(i, 0)] = (((s32)cpu->R[REG_NUM(i, 3)]) >> v); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t v = (i >> 6) & 0x1F; + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], v - 1); + cpu->R[REG_NUM(i, 0)] = cpu->R[REG_NUM(i, 3)] >> v; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_ADD_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LSR_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 3)]; - u32 b = cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = a + b; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.V = SIGNED_OVERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + uint32_t v = cpu->R[REG_NUM(i, 3)] & 0xFF; - return 3; -} + if (!v) + { + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + if (v < 32) + { + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v - 1); + cpu->R[REG_NUM(i, 0)] >>= v; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + if (v == 32) + cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); + else + cpu->CPSR.bits.C = 0; -static u32 FASTCALL OP_SUB_REG(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 3)]; - u32 b = cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = a - b; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + cpu->R[REG_NUM(i, 0)] = 0; + cpu->CPSR.bits.N = 0; + cpu->CPSR.bits.Z = 1; - return 3; + return 2; } -static u32 FASTCALL OP_ADD_IMM3(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// ASR +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ASR_0(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 3)]; - cpu->R[REG_NUM(i, 0)] = a + REG_NUM(i, 6); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.V = SIGNED_OVERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 3)]); + cpu->R[REG_NUM(i, 0)] = BIT31(cpu->R[REG_NUM(i, 3)]) * 0xFFFFFFFF; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_SUB_IMM3(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ASR(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 3)]; - cpu->R[REG_NUM(i, 0)] = a - REG_NUM(i, 6); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); + uint32_t v = (i >> 6) & 0x1F; + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], v-1); + cpu->R[REG_NUM(i, 0)] = static_cast(static_cast(cpu->R[REG_NUM(i, 3)]) >> v); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_MOV_IMM8(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ASR_REG(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 8)] = i & 0xFF; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 8)] == 0; + uint32_t v = cpu->R[REG_NUM(i, 3)] & 0xFF; + + if (!v) + { + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + if (v < 32) + { + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v - 1); + cpu->R[REG_NUM(i, 0)] = static_cast(static_cast(cpu->R[REG_NUM(i, 0)]) >> v); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + + cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->R[REG_NUM(i, 0)] = BIT31(cpu->R[REG_NUM(i, 0)]) * 0xFFFFFFFF; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 2; } -static u32 FASTCALL OP_CMP_IMM8(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// ADD +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ADD_IMM3(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 8)] - (i & 0xFF); - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + uint32_t imm3 = (i >> 6) & 0x07; + uint32_t Rn = cpu->R[REG_NUM(i, 3)]; + + if (!imm3) // mov 2 + { + cpu->R[REG_NUM(i, 0)] = Rn; + + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.C = cpu->CPSR.bits.V = 0; + return 1; + } - return 2; + cpu->R[REG_NUM(i, 0)] = Rn + imm3; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.C = CarryFrom(Rn, imm3); + cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 0)], Rn, imm3); + + return 1; } -static u32 FASTCALL OP_ADD_IMM8(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_IMM8(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 8)] + (i & 0xFF); - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); - cpu->CPSR.bits.V = SIGNED_OVERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); - cpu->R[REG_NUM(i, 8)] = tmp; + uint32_t imm8 = i & 0xFF; + uint32_t Rd = cpu->R[REG_NUM(i, 8)]; + + cpu->R[REG_NUM(i, 8)] = Rd + imm8; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 8)]; + cpu->CPSR.bits.C = CarryFrom(Rd, imm8); + cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 8)], Rd, imm8); - return 2; + return 1; } -static u32 FASTCALL OP_SUB_IMM8(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 8)] - (i & 0xFF); - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); - cpu->R[REG_NUM(i, 8)] = tmp; + uint32_t Rn = cpu->R[REG_NUM(i, 3)]; + uint32_t Rm = cpu->R[REG_NUM(i, 6)]; + + cpu->R[REG_NUM(i, 0)] = Rn + Rm; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.C = CarryFrom(Rn, Rm); + cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 0)], Rn, Rm); - return 2; + return 1; } -static u32 FASTCALL OP_AND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_SPE(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] &= cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t Rd = REG_NUM(i, 0) | ((i >> 4) & 8); + + cpu->R[Rd] += cpu->R[REG_POS(i, 3)]; + + if (Rd == 15) + { + cpu->next_instruction = cpu->R[15]; + return 3; + } - return 3; + return 1; } -static u32 FASTCALL OP_EOR(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_2PC(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] ^= cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->R[REG_NUM(i, 8)] = (cpu->R[15] & 0xFFFFFFFC) + ((i & 0xFF) << 2); - return 3; + return 1; } -static u32 FASTCALL OP_LSL_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADD_2SP(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; + cpu->R[REG_NUM(i, 8)] = cpu->R[13] + ((i & 0xFF) << 2); - if(!v) - { - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - if(v<32) - { - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], 32-v); - cpu->R[REG_NUM(i, 0)] <<= v; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - if(v==32) - cpu->CPSR.bits.C = BIT0(cpu->R[REG_NUM(i, 0)]); - else - cpu->CPSR.bits.C = 0; - cpu->R[REG_NUM(i, 0)] = 0; - cpu->CPSR.bits.N = 0; - cpu->CPSR.bits.Z = 1; - - return 3; + return 1; } -static u32 FASTCALL OP_LSR_REG(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// SUB +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_SUB_IMM3(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; + uint32_t imm3 = (i >> 6) & 0x07; + uint32_t Rn = cpu->R[REG_NUM(i, 3)]; + uint32_t tmp = Rn - imm3; - if(!v) - { - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - if(v<32) - { - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v-1); - cpu->R[REG_NUM(i, 0)] >>= v; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - if(v==32) - cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); - else - cpu->CPSR.bits.C = 0; - cpu->R[REG_NUM(i, 0)] = 0; - cpu->CPSR.bits.N = 0; - cpu->CPSR.bits.Z = 1; + cpu->R[REG_NUM(i, 0)] = tmp; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(Rn, imm3); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, Rn, imm3); - return 3; + return 1; } -static u32 FASTCALL OP_ASR_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_IMM8(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; - - if(!v) - { - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - if(v<32) - { - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v-1); - cpu->R[REG_NUM(i, 0)] = (u32)(((s32)cpu->R[REG_NUM(i, 0)]) >> v); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } + uint32_t imm8 = i & 0xFF; + uint32_t Rd = cpu->R[REG_NUM(i, 8)]; + uint32_t tmp = Rd - imm8; - cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->R[REG_NUM(i, 0)] = BIT31(cpu->R[REG_NUM(i, 0)])*0xFFFFFFFF; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->R[REG_NUM(i, 8)] = tmp; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(Rd, imm8); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, Rd, imm8); - return 3; + return 1; } -static u32 FASTCALL OP_ADC_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_SUB_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 0)]; - u32 b = cpu->R[REG_NUM(i, 3)]; - u32 tmp = b + cpu->CPSR.bits.C; - u32 res = a + tmp; + uint32_t Rn = cpu->R[REG_NUM(i, 3)]; + uint32_t Rm = cpu->R[REG_NUM(i, 6)]; + uint32_t tmp = Rn - Rm; - cpu->R[REG_NUM(i, 0)] = res; + cpu->R[REG_NUM(i, 0)] = tmp; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(Rn, Rm); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, Rn, Rm); - cpu->CPSR.bits.N = BIT31(res); - cpu->CPSR.bits.Z = res == 0; + return 1; +} + +//----------------------------------------------------------------------------- +// MOV +//----------------------------------------------------------------------------- - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(b, cpu->CPSR.bits.C, tmp) | UNSIGNED_OVERFLOW(tmp, a, res); - cpu->CPSR.bits.V = SIGNED_OVERFLOW(b, cpu->CPSR.bits.C, tmp) | SIGNED_OVERFLOW(tmp, a, res); +TEMPLATE static uint32_t FASTCALL OP_MOV_IMM8(uint32_t i) +{ + cpu->R[REG_NUM(i, 8)] = i & 0xFF; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 8)]; - return 3; + return 1; } -static u32 FASTCALL OP_SBC_REG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_MOV_SPE(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 0)]; - u32 b = cpu->R[REG_NUM(i, 3)]; - u32 tmp = a - (!cpu->CPSR.bits.C); - u32 res = tmp - b; - cpu->R[REG_NUM(i, 0)] = res; + uint32_t Rd = REG_NUM(i, 0) | ((i >> 4) & 8); - cpu->CPSR.bits.N = BIT31(res); - cpu->CPSR.bits.Z = res == 0; + cpu->R[Rd] = cpu->R[REG_POS(i, 3)]; - cpu->CPSR.bits.C = (!UNSIGNED_UNDERFLOW(a, (int)!cpu->CPSR.bits.C, tmp)) & (!UNSIGNED_OVERFLOW(tmp, b, res)); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, (int)!cpu->CPSR.bits.C, tmp) | SIGNED_OVERFLOW(tmp, b, res); + if (Rd == 15) + { + cpu->next_instruction = cpu->R[15]; + return 3; + } - return 3; + return 1; } -static u32 FASTCALL OP_ROR_REG(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// CMP +//----------------------------------------------------------------------------- +TEMPLATE static uint32_t FASTCALL OP_CMP_IMM8(uint32_t i) { - u32 i = cpu->instruction; - u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; + uint32_t tmp = cpu->R[REG_NUM(i, 8)] - (i & 0xFF); - if(v == 0) - { - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - v &= 0xF; - if(v == 0) - { - cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - return 3; - } - cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v-1); - cpu->R[REG_NUM(i, 0)] = ROR(cpu->R[REG_NUM(i, 0)], v); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(cpu->R[REG_NUM(i, 8)], i & 0xFF); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[REG_NUM(i, 8)], i & 0xFF); - return 3; + return 1; } -static u32 FASTCALL OP_TST(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 0)] & cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; + uint32_t tmp = cpu->R[REG_NUM(i, 0)] - cpu->R[REG_NUM(i, 3)]; - return 3; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); + + return 1; } -static u32 FASTCALL OP_NEG(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_CMP_SPE(uint32_t i) { - u32 i = cpu->instruction; - u32 a = cpu->R[REG_NUM(i, 3)]; - cpu->R[REG_NUM(i, 0)] = -((signed int)a); + uint32_t Rn = (i & 7) | ((i >> 4) & 8); + + uint32_t tmp = cpu->R[Rn] - cpu->R[REG_POS(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(0, a, cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(0, a, cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = !BorrowFrom(cpu->R[Rn], cpu->R[REG_POS(i, 3)]); + cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[Rn], cpu->R[REG_POS(i, 3)]); - return 3; + return 1; } -static u32 FASTCALL OP_CMP(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// AND +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_AND(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 0)] -cpu->R[REG_NUM(i, 3)]; + cpu->R[REG_NUM(i, 0)] &= cpu->R[REG_NUM(i, 3)]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 1; +} + +//----------------------------------------------------------------------------- +// EOR +//----------------------------------------------------------------------------- - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); +TEMPLATE static uint32_t FASTCALL OP_EOR(uint32_t i) +{ + cpu->R[REG_NUM(i, 0)] ^= cpu->R[REG_NUM(i, 3)]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 3; + return 1; } -static u32 FASTCALL OP_CMN(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// ADC +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ADC_REG(uint32_t i) { - u32 i = cpu->instruction; - u32 tmp = cpu->R[REG_NUM(i, 0)] + cpu->R[REG_NUM(i, 3)]; + uint32_t Rd = cpu->R[REG_NUM(i, 0)]; + uint32_t Rm = cpu->R[REG_NUM(i, 3)]; - //execute = false; - //log::ajouter("OP_CMN THUMB"); - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); - cpu->CPSR.bits.V = SIGNED_OVERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); + if (!cpu->CPSR.bits.C) + { + cpu->R[REG_NUM(i, 0)] = Rd + Rm; + cpu->CPSR.bits.C = cpu->R[REG_NUM(i, 0)] < Rm; + } + else + { + cpu->R[REG_NUM(i, 0)] = Rd + Rm + 1; + cpu->CPSR.bits.C = cpu->R[REG_NUM(i, 0)] <= Rm; + } + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.V = BIT31((Rd ^ Rm ^ -1) & (Rd ^ cpu->R[REG_NUM(i, 0)])); - return 3; + return 1; } -static u32 FASTCALL OP_ORR(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// SBC +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_SBC_REG(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] |= cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t Rd = cpu->R[REG_NUM(i, 0)]; + uint32_t Rm = cpu->R[REG_NUM(i, 3)]; - return 3; -} + if (!cpu->CPSR.bits.C) + { + cpu->R[REG_NUM(i, 0)] = Rd - Rm - 1; + cpu->CPSR.bits.C = Rd > Rm; + } + else + { + cpu->R[REG_NUM(i, 0)] = Rd - Rm; + cpu->CPSR.bits.C = Rd >= Rm; + } -static u32 FASTCALL OP_MUL_REG(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] *= cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.V = BIT31((Rd ^ Rm) & (Rd ^ cpu->R[REG_NUM(i, 0)])); - return 3; + return 1; } -static u32 FASTCALL OP_BIC(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// ROR +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ROR_REG(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] &= (~cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t v = cpu->R[REG_NUM(i, 3)] & 0xFF; - return 3; + if (!v) + { + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + + v &= 0x1F; + if (!v) + { + cpu->CPSR.bits.C = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + return 2; + } + + cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 0)], v - 1); + cpu->R[REG_NUM(i, 0)] = ROR(cpu->R[REG_NUM(i, 0)], v); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + + return 2; } -static u32 FASTCALL OP_MVN(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// TST +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_TST(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 0)] = (~cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + uint32_t tmp = cpu->R[REG_NUM(i, 0)] & cpu->R[REG_NUM(i, 3)]; + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; - return 3; + return 1; } -static u32 FASTCALL OP_ADD_SPE(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// NEG +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_NEG(uint32_t i) { - u32 i = cpu->instruction; - u32 Rd = (i&7) | ((i>>4)&8); - cpu->R[Rd] += cpu->R[REG_POS(i, 3)]; + uint32_t Rm = cpu->R[REG_NUM(i, 3)]; - if(Rd==15) - cpu->next_instruction = cpu->R[15]; + cpu->R[REG_NUM(i, 0)] = static_cast(-static_cast(Rm)); - return 2; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + cpu->CPSR.bits.C = !BorrowFrom(0, Rm); + cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_NUM(i, 0)], 0, Rm); + + return 1; } -static u32 FASTCALL OP_CMP_SPE(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// CMN +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_CMN(uint32_t i) { - u32 i = cpu->instruction; - u32 Rn = (i&7) | ((i>>4)&8); - u32 tmp = cpu->R[Rn] -cpu->R[REG_POS(i, 3)]; + uint32_t tmp = cpu->R[REG_NUM(i, 0)] + cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[Rn], cpu->R[REG_POS(i, 3)], tmp); - cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[Rn], cpu->R[REG_POS(i, 3)], tmp); + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = !tmp; + cpu->CPSR.bits.C = CarryFrom(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); + cpu->CPSR.bits.V = OverflowFromADD(tmp, cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); - return 3; + return 1; } -static u32 FASTCALL OP_MOV_SPE(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// ORR +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ORR(uint32_t i) { - u32 i = cpu->instruction; - u32 Rd = (i&7) | ((i>>4)&8); - cpu->R[Rd] = cpu->R[REG_POS(i, 3)]; + cpu->R[REG_NUM(i, 0)] |= cpu->R[REG_NUM(i, 3)]; - if(Rd==15) - cpu->next_instruction = cpu->R[15]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 2; + return 1; } -static u32 FASTCALL OP_BX_THUMB(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// BIC +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_BIC(uint32_t i) { - u32 Rm = cpu->R[REG_POS(cpu->instruction, 3)]; + cpu->R[REG_NUM(i, 0)] &= ~cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.T = BIT0(Rm); - cpu->R[15] = (Rm & 0xFFFFFFFE); - cpu->next_instruction = cpu->R[15]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 3; + return 1; } -static u32 FASTCALL OP_BLX_THUMB(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// MVN +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_MVN(uint32_t i) { - u32 Rm = cpu->R[REG_POS(cpu->instruction, 3)]; + cpu->R[REG_NUM(i, 0)] = ~cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.T = BIT0(Rm); - cpu->R[14] = cpu->next_instruction | 1; - cpu->R[15] = (Rm & 0xFFFFFFFE); - cpu->next_instruction = cpu->R[15]; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; - return 3; + return 1; } -static u32 FASTCALL OP_LDR_PCREL(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// MUL +//----------------------------------------------------------------------------- + +#define MUL_Mxx_END_THUMB(c) \ + v >>= 8; \ + if (!v || v == 0xFFFFFF) \ + return c + 1; \ + v >>= 8; \ + if (!v || v == 0xFFFF) \ + return c + 2; \ + v >>= 8; \ + if (!v || v == 0xFF) \ + return c + 3; \ + return c + 4; + +TEMPLATE static uint32_t FASTCALL OP_MUL_REG(uint32_t i) { - u32 adr = (cpu->R[15]&0xFFFFFFFC) + ((cpu->instruction&0xFF)<<2); + uint32_t v = cpu->R[REG_NUM(i, 3)]; + + // FIXME: + //------ Rd = (Rm * Rd)[31:0] + //------ u64 res = ((u64)cpu->R[REG_NUM(i, 0)] * (u64)v)); + //------ cpu->R[REG_NUM(i, 0)] = (uint32_t)(res & 0xFFFFFFFF); + //------ + + cpu->R[REG_NUM(i, 0)] *= v; + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = !cpu->R[REG_NUM(i, 0)]; + //The MUL instruction is defined to leave the C flag unchanged in ARMv5 and above. + //In earlier versions of the architecture, the value of the C flag was UNPREDICTABLE + //after a MUL instruction. - cpu->R[REG_NUM(cpu->instruction, 8)] = READ32(cpu->mem_if->data, adr); + if (PROCNUM == 1) // ARM4T 1S + mI, m = 3 + return 4; - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + MUL_Mxx_END_THUMB(1); } -static u32 FASTCALL OP_STR_REG_OFF(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// STRB / LDRB +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_STRB_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 6)] + cpu->R[REG_NUM(i, 3)]; - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 0)]); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i >> 6) & 0x1F); + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_NUM(i, 0)])); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - WRITE16(cpu->mem_if->data, adr, ((u16)cpu->R[REG_NUM(i, 0)])); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i>>6)&0x1F); + cpu->R[REG_NUM(i, 0)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_STRB_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRB_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - WRITE8(cpu->mem_if->data, adr, ((u8)cpu->R[REG_NUM(i, 0)])); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + WRITE8(cpu->mem_if->data, adr, static_cast(cpu->R[REG_NUM(i, 0)])); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_LDRSB_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRB_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = static_cast(READ8(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDR_REG_OFF(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// LDRSB +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_LDRSB_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = (cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]); - u32 tempValue = READ32(cpu->mem_if->data, adr&0xFFFFFFFC); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = static_cast(static_cast(READ8(cpu->mem_if->data, adr))); - adr = (adr&3)*8; - tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); - cpu->R[REG_NUM(i, 0)] = tempValue; + return MMU_aluMemAccessCycles(3, adr); +} + +//----------------------------------------------------------------------------- +// STRH / LDRH +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_STRH_IMM_OFF(uint32_t i) +{ + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i >> 5) & 0x3E); + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_NUM(i, 0)])); - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_LDRH_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (u32)READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i >> 5) & 0x3E); + cpu->R[REG_NUM(i, 0)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STRH_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (u32)READ8(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + WRITE16(cpu->mem_if->data, adr, static_cast(cpu->R[REG_NUM(i, 0)])); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_LDRSH_REG_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDRH_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = static_cast(READ16(cpu->mem_if->data, adr)); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_STR_IMM_OFF(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// LDRSH +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_LDRSH_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>4)&0x7C); - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 0)]); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = static_cast(static_cast(READ16(cpu->mem_if->data, adr))); - return 2 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDR_IMM_OFF(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// STR / LDR +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_STR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>4)&0x7C); - u32 tempValue = READ32(cpu->mem_if->data, adr&0xFFFFFFFC); - adr = (adr&3)*8; - tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); - cpu->R[REG_NUM(i, 0)] = tempValue; + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i >> 4) & 0x7C); + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 0)]); - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRB_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_IMM_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>6)&0x1F); - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_NUM(i, 0)]); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + ((i >> 4) & 0x7C); + uint32_t tempValue = READ32(cpu->mem_if->data, adr); + adr = (adr & 3) * 8; + tempValue = (tempValue >> adr) | (tempValue << (32 - adr)); + cpu->R[REG_NUM(i, 0)] = tempValue; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRB_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>6)&0x1F); - cpu->R[REG_NUM(i, 0)] = READ8(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[REG_NUM(i, 6)] + cpu->R[REG_NUM(i, 3)]; + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 0)]); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STRH_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_REG_OFF(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>5)&0x3E); - WRITE16(cpu->mem_if->data, adr, (u16)cpu->R[REG_NUM(i, 0)]); + uint32_t adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; + uint32_t tempValue = READ32(cpu->mem_if->data, adr); + adr = (adr & 3) * 8; + tempValue = (tempValue >> adr) | (tempValue << (32 - adr)); + cpu->R[REG_NUM(i, 0)] = tempValue; - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDRH_IMM_OFF(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_STR_SPREL(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>5)&0x3E); - cpu->R[REG_NUM(i, 0)] = READ16(cpu->mem_if->data, adr); + uint32_t adr = cpu->R[13] + ((i & 0xFF) << 2); + WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 8)]); - return 3 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(2, adr); } -static u32 FASTCALL OP_STR_SPREL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_SPREL(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13] + ((i&0xFF)<<2); - WRITE32(cpu->mem_if->data, adr, cpu->R[REG_NUM(i, 8)]); + uint32_t adr = cpu->R[13] + ((i & 0xFF) << 2); + cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); - return 2 + MMU.MMU_WAIT16[cpu->proc_ID][(adr>>24)&0xF]; + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_LDR_SPREL(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDR_PCREL(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13] + ((i&0xFF)<<2); - cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); + uint32_t adr = (cpu->R[15] & 0xFFFFFFFC) + ((i & 0xFF) << 2); - return 3 + MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; + cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); + + return MMU_aluMemAccessCycles(3, adr); } -static u32 FASTCALL OP_ADD_2PC(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// Adjust SP +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_ADJUST_P_SP(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 8)] = (cpu->R[15]&0xFFFFFFFC) + ((i&0xFF)<<2); + cpu->R[13] += (i & 0x7F) << 2; - return 5; + return 1; } -static u32 FASTCALL OP_ADD_2SP(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_ADJUST_M_SP(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[REG_NUM(i, 8)] = cpu->R[13] + ((i&0xFF)<<2); + cpu->R[13] -= (i & 0x7F) << 2; - return 2; + return 1; } -static u32 FASTCALL OP_ADJUST_P_SP(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// PUSH / POP +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_PUSH(uint32_t i) { - cpu->R[13] += ((cpu->instruction&0x7F)<<2); + uint32_t adr = cpu->R[13] - 4; + uint32_t c = 0; - return 1; + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, 7 - j)) + { + WRITE32(cpu->mem_if->data, adr, cpu->R[7 - j]); + c += MMU_memAccessCycles(adr); + adr -= 4; + } + cpu->R[13] = adr + 4; + + return MMU_aluMemCycles(3, c); } -static u32 FASTCALL OP_ADJUST_M_SP(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_PUSH_LR(uint32_t i) { - cpu->R[13] -= ((cpu->instruction&0x7F)<<2); + uint32_t adr = cpu->R[13] - 4; + uint32_t c = 0; + + WRITE32(cpu->mem_if->data, adr, cpu->R[14]); + c += MMU_memAccessCycles(adr); + adr -= 4; - return 1; + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, 7 - j)) + { + WRITE32(cpu->mem_if->data, adr, cpu->R[7 - j]); + c += MMU_memAccessCycles(adr); + adr -= 4; + } + cpu->R[13] = adr + 4; + + return MMU_aluMemCycles(4, c); } -static u32 FASTCALL OP_PUSH(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_POP(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13] - 4; - u32 c = 0, j; + uint32_t adr = cpu->R[13]; + uint32_t c = 0; - for(j = 0; j<8; ++j) - if(BIT_N(i, 7-j)) - { - WRITE32(cpu->mem_if->data, adr, cpu->R[7-j]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr -= 4; - } - cpu->R[13] = adr + 4; + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, j)) + { + cpu->R[j] = READ32(cpu->mem_if->data, adr); + c += MMU_memAccessCycles(adr); + adr += 4; + } + cpu->R[13] = adr; - return c + 3; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_PUSH_LR(armcpu_t *cpu) +// In ARMv5 and above, bit[0] of the loaded value +// determines whether execution continues after this branch in ARM state or in Thumb state, as though the +// following instruction had been executed: +// BX (loaded_value) +// In T variants of ARMv4, bit[0] of the loaded value is ignored and execution continues in Thumb state, as +// though the following instruction had been executed: +// MOV PC,(loaded_value) +TEMPLATE static uint32_t FASTCALL OP_POP_PC(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13] - 4; - u32 c = 0, j; + uint32_t adr = cpu->R[13]; + uint32_t c = 0; + + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, j)) + { + cpu->R[j] = READ32(cpu->mem_if->data, adr); + c += MMU_memAccessCycles(adr); + adr += 4; + } - WRITE32(cpu->mem_if->data, adr, cpu->R[14]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr -= 4; + uint32_t v = READ32(cpu->mem_if->data, adr); + c += MMU_memAccessCycles(adr); + if (!PROCNUM) + cpu->CPSR.bits.T = BIT0(v); - for(j = 0; j<8; ++j) - if(BIT_N(i, 7-j)) - { - WRITE32(cpu->mem_if->data, adr, cpu->R[7-j]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr -= 4; - } - cpu->R[13] = adr + 4; + cpu->R[15] = v & 0xFFFFFFFE; + cpu->next_instruction = cpu->R[15]; - return c + 4; + cpu->R[13] = adr + 4; + return MMU_aluMemCycles(5, c); } -static u32 FASTCALL OP_POP(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// STMIA / LDMIA +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_STMIA_THUMB(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13]; - u32 c = 0, j; + uint32_t adr = cpu->R[REG_NUM(i, 8)]; + uint32_t c = 0; + bool erList = true; //Empty Register List - for(j = 0; j<8; ++j) - if(BIT_N(i, j)) - { - cpu->R[j] = READ32(cpu->mem_if->data, adr); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr += 4; - } - cpu->R[13] = adr; + // ------ ARM_REF: + // ------ If is specified in : + // ------ * If is the lowest-numbered register specified in , the original value of is stored. + // ------ * Otherwise, the stored value of is UNPREDICTABLE. + if (BIT_N(i, REG_NUM(i, 8))) + fprintf(stderr, "STMIA with Rb in Rlist\n"); - return c + 2; + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, j)) + { + WRITE32(cpu->mem_if->data, adr, cpu->R[j]); + c += MMU_memAccessCycles(adr); + adr += 4; + erList = false; //Register List isnt empty + } + + if (erList) + fprintf(stderr, "STMIA with Empty Rlist\n"); + + cpu->R[REG_NUM(i, 8)] = adr; + return MMU_aluMemCycles(2, c); } -static u32 FASTCALL OP_POP_PC(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_LDMIA_THUMB(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[13]; - u32 c = 0, j; - u32 v; + uint32_t regIndex = REG_NUM(i, 8); + uint32_t adr = cpu->R[regIndex]; + uint32_t c = 0; + bool erList = true; //Empty Register List + + //if (BIT_N(i, regIndex)) + // fprintf(stderr, "LDMIA with Rb in Rlist at %08X\n",cpu->instruct_adr); - for(j = 0; j<8; ++j) - if(BIT_N(i, j)) - { - cpu->R[j] = READ32(cpu->mem_if->data, adr); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr += 4; - } + for (uint32_t j = 0; j < 8; ++j) + if (BIT_N(i, j)) + { + cpu->R[j] = READ32(cpu->mem_if->data, adr); + c += MMU_memAccessCycles(adr); + adr += 4; + erList = false; //Register List isnt empty + } - v = READ32(cpu->mem_if->data, adr); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - cpu->R[15] = v & 0xFFFFFFFE; - cpu->next_instruction = v & 0xFFFFFFFE; - if(cpu->proc_ID==0) - cpu->CPSR.bits.T = BIT0(v); - adr += 4; + if (erList) + fprintf(stderr, "LDMIA with Empty Rlist\n"); - cpu->R[13] = adr; - return c + 5; + // ARM_REF: THUMB: Causes base register write-back, and is not optional + // ARM_REF: If the base register is specified in , the final value of is the loaded value + // (not the written-back value). + if (!BIT_N(i, regIndex)) + cpu->R[regIndex] = adr; + + return MMU_aluMemCycles(3, c); } -static u32 FASTCALL OP_BKPT_THUMB(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// BKPT +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_BKPT_THUMB(uint32_t) { - return 1; + fprintf(stderr, "THUMB%c: OP_BKPT triggered\n", PROCNUM?'7':'9'); + Status_Reg tmp = cpu->CPSR; + armcpu_switchMode(cpu, ABT); // enter abt mode + cpu->R[14] = cpu->instruct_adr + 4; + cpu->SPSR = tmp; // save old CPSR as new SPSR + cpu->CPSR.bits.T = 0; // handle as ARM32 code + cpu->CPSR.bits.I = 1; + cpu->changeCPSR(); + cpu->R[15] = cpu->intVector + 0x0C; + cpu->next_instruction = cpu->R[15]; + return 1; } -static u32 FASTCALL OP_STMIA_THUMB(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// SWI +//----------------------------------------------------------------------------- + +TEMPLATE static uint32_t FASTCALL OP_SWI_THUMB(uint32_t i) { - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 8)]; - u32 c = 0, j; + uint32_t swinum = i & 0xFF; - for(j = 0; j<8; ++j) - if(BIT_N(i, j)) - { - WRITE32(cpu->mem_if->data, adr, cpu->R[j]); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr += 4; - } - cpu->R[REG_NUM(i, 8)] = adr; - return c + 2; -} + //ideas-style debug prints (execute this SWI with the null terminated string address in R0) + if (swinum == 0xFC) + { + //IdeasLog(cpu); + return 0; + } -static u32 FASTCALL OP_LDMIA_THUMB(armcpu_t *cpu) -{ - u32 i = cpu->instruction; - u32 adr = cpu->R[REG_NUM(i, 8)]; - u32 c = 0, j; + //if the user has changed the intVector to point away from the nds bioses, + //then it doesn't really make any sense to use the builtin SWI's since + //the bios ones aren't getting called anyway + bool bypassBuiltinSWI = (cpu->intVector == 0x00000000 && !PROCNUM) || (cpu->intVector == 0xFFFF0000 && PROCNUM == 1); - for(j = 0; j<8; ++j) - if(BIT_N(i, j)) - { - cpu->R[j] = READ32(cpu->mem_if->data, adr); - c += MMU.MMU_WAIT32[cpu->proc_ID][(adr>>24)&0xF]; - adr += 4; - } - cpu->R[REG_NUM(i, 8)] = adr; - return c + 3; + if (cpu->swi_tab && !bypassBuiltinSWI) + { + //zero 25-dec-2008 - in arm, we were masking to 0x1F. + //this is probably safer since an invalid opcode could crash the emu + //zero 30-jun-2009 - but they say that the ideas 0xFF should crash the device... + //uint32_t swinum = cpu->instruction & 0xFF; + swinum &= 0x1F; + //fprintf(stderr, "%d ARM SWI %d\n",PROCNUM,swinum); + return cpu->swi_tab[swinum]() + 3; + } + else + { + /* we use an irq thats not in the irq tab, as + it was replaced due to a changed intVector */ + Status_Reg tmp = cpu->CPSR; + armcpu_switchMode(cpu, SVC); /* enter svc mode */ + cpu->R[14] = cpu->next_instruction; /* jump to swi Vector */ + cpu->SPSR = tmp; /* save old CPSR as new SPSR */ + cpu->CPSR.bits.T = 0; /* handle as ARM32 code */ + cpu->CPSR.bits.I = 1; + cpu->changeCPSR(); + cpu->R[15] = cpu->intVector + 0x08; + cpu->next_instruction = cpu->R[15]; + return 3; + } } -static u32 FASTCALL OP_B_COND(armcpu_t *cpu) +//----------------------------------------------------------------------------- +// Branch +//----------------------------------------------------------------------------- + +static inline uint32_t SIGNEEXT_IMM11(uint32_t i) { return (i & 0x7FF) | (BIT10(i) * 0xFFFFF800); } +static inline uint32_t SIGNEXTEND_11(uint32_t i) { return static_cast((static_cast(i) << 21) >> 21); } + +TEMPLATE static uint32_t FASTCALL OP_B_COND(uint32_t i) { - u32 i = cpu->instruction; - if(!TEST_COND((i>>8)&0xF, 0, cpu->CPSR)) - return 1; + if (!TEST_COND((i >> 8) & 0xF, 0, cpu->CPSR)) + return 1; - cpu->R[15] += ((s32)((s8)(i&0xFF)))<<1; - cpu->next_instruction = cpu->R[15]; - return 3; + cpu->R[15] += static_cast(static_cast(i & 0xFF)) << 1; + cpu->next_instruction = cpu->R[15]; + return 3; } -static u32 FASTCALL OP_SWI_THUMB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_B_UNCOND(uint32_t i) { - if (((cpu->intVector != 0) ^ (cpu->proc_ID == ARMCPU_ARM9))) - { - /* we use an irq thats not in the irq tab, as - it was replaced duie to a changed intVector */ - Status_Reg tmp = cpu->CPSR; - armcpu_switchMode(cpu, SVC); /* enter svc mode */ - cpu->R[14] = cpu->R[15] - 4; /* jump to swi Vector */ - cpu->SPSR = tmp; /* save old CPSR as new SPSR */ - cpu->CPSR.bits.T = 0; /* handle as ARM32 code */ - cpu->CPSR.bits.I = cpu->SPSR.bits.I; /* keep int disable flag */ - cpu->R[15] = cpu->intVector + 0x08; - cpu->next_instruction = cpu->R[15]; - return 3; - } - else - { - u32 swinum = cpu->instruction & 0xFF; - return cpu->swi_tab[swinum](cpu) + 3; - } - //return 3; + cpu->R[15] += SIGNEEXT_IMM11(i) << 1; + cpu->next_instruction = cpu->R[15]; + return 1; } -#define SIGNEEXT_IMM11(i) (((i)&0x7FF) | (BIT10(i) * 0xFFFFF800)) +TEMPLATE static uint32_t FASTCALL OP_BLX(uint32_t i) +{ + cpu->R[15] = (cpu->R[14] + ((i & 0x7FF) << 1)) & 0xFFFFFFFC; + cpu->R[14] = cpu->next_instruction | 1; + cpu->next_instruction = cpu->R[15]; + cpu->CPSR.bits.T = 0; + return 3; +} -static u32 FASTCALL OP_B_UNCOND(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BL_10(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[15] += (SIGNEEXT_IMM11(i)<<1); - cpu->next_instruction = cpu->R[15]; - return 3; + cpu->R[14] = cpu->R[15] + (SIGNEXTEND_11(i) << 12); + return 1; } -static u32 FASTCALL OP_BLX(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BL_11(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[15] = (cpu->R[14] + ((i&0x7FF)<<1))&0xFFFFFFFC; - cpu->R[14] = cpu->next_instruction | 1; - cpu->next_instruction = cpu->R[15]; - cpu->CPSR.bits.T = 0; - return 3; + cpu->R[15] = (cpu->R[14] + ((i & 0x7FF) << 1)); + cpu->R[14] = cpu->next_instruction | 1; + cpu->next_instruction = cpu->R[15]; + return 4; } -static u32 FASTCALL OP_BL_10(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BX_THUMB(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[14] = cpu->R[15] + (SIGNEEXT_IMM11(i)<<12); - return 1; + // When using PC as operand with BX opcode, switch to ARM state and jump to (instruct_adr+4) + // Reference: http://nocash.emubase.de/gbatek.htm#thumb5hiregisteroperationsbranchexchange + +#if 0 + if (REG_POS(i, 3) == 15) + { + cpu->CPSR.bits.T = 0; + cpu->R[15] &= 0xFFFFFFFC; + cpu->next_instruction = cpu->R[15]; + } + else + { + uint32_t Rm = cpu->R[REG_POS(i, 3)]; + + cpu->CPSR.bits.T = BIT0(Rm); + cpu->R[15] = (Rm & 0xFFFFFFFE); + cpu->next_instruction = cpu->R[15]; + } +#else + uint32_t Rm = cpu->R[REG_POS(i, 3)]; + //----- ARM_REF: + //----- Register 15 can be specified for . If this is done, R15 is read as normal for Thumb code, + //----- that is, it is the address of the BX instruction itself plus 4. If the BX instruction is at a + //----- word-aligned address, this results in a branch to the next word, executing in ARM state. + //----- However, if the BX instruction is not at a word-aligned address, this means that the results of + //----- the instruction are UNPREDICTABLE (because the value read for R15 has bits[1:0]==0b10). + if (Rm == 15) + { + fprintf(stderr, "THUMB%c: BX using PC as operand\n", PROCNUM?'7':'9'); + //emu_halt(); + } + cpu->CPSR.bits.T = BIT0(Rm); + cpu->R[15] = Rm & (0xFFFFFFFC | (1 << cpu->CPSR.bits.T)); + cpu->next_instruction = cpu->R[15]; +#endif + return 3; } -static u32 FASTCALL OP_BL_THUMB(armcpu_t *cpu) +TEMPLATE static uint32_t FASTCALL OP_BLX_THUMB(uint32_t i) { - u32 i = cpu->instruction; - cpu->R[15] = (cpu->R[14] + ((i&0x7FF)<<1)); - cpu->R[14] = cpu->next_instruction | 1; - cpu->next_instruction = cpu->R[15]; - return 3; + uint32_t Rm = cpu->R[REG_POS(i, 3)]; + cpu->CPSR.bits.T = BIT0(Rm); + cpu->R[15] = Rm & 0xFFFFFFFE; + cpu->R[14] = cpu->next_instruction | 1; + cpu->next_instruction = cpu->R[15]; + + return 4; } -#define TYPE_RETOUR u32 -#define CALLTYPE FASTCALL -#define PARAMETRES armcpu_t *cpu -#define NOM_THUMB_TAB thumb_instructions_set +//----------------------------------------------------------------------------- +// The End +//----------------------------------------------------------------------------- +const OpFunc thumb_instructions_set[2][1024] = +{ + { +#define TABDECL(x) x<0> +#include "thumb_tabdef.inc" +#undef TABDECL + }, { +#define TABDECL(x) x<1> #include "thumb_tabdef.inc" +#undef TABDECL + } +}; diff -Nru audacious-plugins-4.1/src/xsf/desmume/thumb_tabdef.inc audacious-plugins-4.2/src/xsf/desmume/thumb_tabdef.inc --- audacious-plugins-4.1/src/xsf/desmume/thumb_tabdef.inc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/thumb_tabdef.inc 2022-07-10 01:12:34.000000000 +0000 @@ -1,1111 +1,1105 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +/* + Copyright (C) 2006 yopyop + Copyright (C) 2007-2012 DeSmuME team + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . */ -TYPE_RETOUR (* CALLTYPE NOM_THUMB_TAB[1024])(PARAMETRES)={ - OP_LSL_0, //00 0000 0000 - OP_LSL, //00 0000 0001 - OP_LSL, //00 0000 0010 - OP_LSL, //00 0000 0011 - OP_LSL, //00 0000 0100 - OP_LSL, //00 0000 0101 - OP_LSL, //00 0000 0110 - OP_LSL, //00 0000 0111 - OP_LSL, //00 0000 1000 - OP_LSL, //00 0000 1001 - OP_LSL, //00 0000 1010 - OP_LSL, //00 0000 1011 - OP_LSL, //00 0000 1100 - OP_LSL, //00 0000 1101 - OP_LSL, //00 0000 1110 - OP_LSL, //00 0000 1111 - - OP_LSL, //00 0001 0000 - OP_LSL, //00 0001 0001 - OP_LSL, //00 0001 0010 - OP_LSL, //00 0001 0011 - OP_LSL, //00 0001 0100 - OP_LSL, //00 0001 0101 - OP_LSL, //00 0001 0110 - OP_LSL, //00 0001 0111 - OP_LSL, //00 0001 1000 - OP_LSL, //00 0001 1001 - OP_LSL, //00 0001 1010 - OP_LSL, //00 0001 1011 - OP_LSL, //00 0001 1100 - OP_LSL, //00 0001 1101 - OP_LSL, //00 0001 1110 - OP_LSL, //00 0001 1111 - - OP_LSR_0, //00 0010 0000 - OP_LSR, //00 0010 0001 - OP_LSR, //00 0010 0010 - OP_LSR, //00 0010 0011 - OP_LSR, //00 0010 0100 - OP_LSR, //00 0010 0101 - OP_LSR, //00 0010 0110 - OP_LSR, //00 0010 0111 - OP_LSR, //00 0010 1000 - OP_LSR, //00 0010 1001 - OP_LSR, //00 0010 1010 - OP_LSR, //00 0010 1011 - OP_LSR, //00 0010 1100 - OP_LSR, //00 0010 1101 - OP_LSR, //00 0010 1110 - OP_LSR, //00 0010 1111 - - OP_LSR, //00 0011 0000 - OP_LSR, //00 0011 0001 - OP_LSR, //00 0011 0010 - OP_LSR, //00 0011 0011 - OP_LSR, //00 0011 0100 - OP_LSR, //00 0011 0101 - OP_LSR, //00 0011 0110 - OP_LSR, //00 0011 0111 - OP_LSR, //00 0011 1000 - OP_LSR, //00 0011 1001 - OP_LSR, //00 0011 1010 - OP_LSR, //00 0011 1011 - OP_LSR, //00 0011 1100 - OP_LSR, //00 0011 1101 - OP_LSR, //00 0011 1110 - OP_LSR, //00 0011 1111 - - OP_ASR_0, //00 0100 0000 - OP_ASR, //00 0100 0001 - OP_ASR, //00 0100 0010 - OP_ASR, //00 0100 0011 - OP_ASR, //00 0100 0100 - OP_ASR, //00 0100 0101 - OP_ASR, //00 0100 0110 - OP_ASR, //00 0100 0111 - OP_ASR, //00 0100 1000 - OP_ASR, //00 0100 1001 - OP_ASR, //00 0100 1010 - OP_ASR, //00 0100 1011 - OP_ASR, //00 0100 1100 - OP_ASR, //00 0100 1101 - OP_ASR, //00 0100 1110 - OP_ASR, //00 0100 1111 - - OP_ASR, //00 0101 0000 - OP_ASR, //00 0101 0001 - OP_ASR, //00 0101 0010 - OP_ASR, //00 0101 0011 - OP_ASR, //00 0101 0100 - OP_ASR, //00 0101 0101 - OP_ASR, //00 0101 0110 - OP_ASR, //00 0101 0111 - OP_ASR, //00 0101 1000 - OP_ASR, //00 0101 1001 - OP_ASR, //00 0101 1010 - OP_ASR, //00 0101 1011 - OP_ASR, //00 0101 1100 - OP_ASR, //00 0101 1101 - OP_ASR, //00 0101 1110 - OP_ASR, //00 0101 1111 - - OP_ADD_REG, //00 0110 0000 - OP_ADD_REG, //00 0110 0001 - OP_ADD_REG, //00 0110 0010 - OP_ADD_REG, //00 0110 0011 - OP_ADD_REG, //00 0110 0100 - OP_ADD_REG, //00 0110 0101 - OP_ADD_REG, //00 0110 0110 - OP_ADD_REG, //00 0110 0111 - OP_SUB_REG, //00 0110 1000 - OP_SUB_REG, //00 0110 1001 - OP_SUB_REG, //00 0110 1010 - OP_SUB_REG, //00 0110 1011 - OP_SUB_REG, //00 0110 1100 - OP_SUB_REG, //00 0110 1101 - OP_SUB_REG, //00 0110 1110 - OP_SUB_REG, //00 0110 1111 - - OP_ADD_IMM3, //00 0111 0000 - OP_ADD_IMM3, //00 0111 0001 - OP_ADD_IMM3, //00 0111 0010 - OP_ADD_IMM3, //00 0111 0011 - OP_ADD_IMM3, //00 0111 0100 - OP_ADD_IMM3, //00 0111 0101 - OP_ADD_IMM3, //00 0111 0110 - OP_ADD_IMM3, //00 0111 0111 - OP_SUB_IMM3, //00 0111 1000 - OP_SUB_IMM3, //00 0111 1001 - OP_SUB_IMM3, //00 0111 1010 - OP_SUB_IMM3, //00 0111 1011 - OP_SUB_IMM3, //00 0111 1100 - OP_SUB_IMM3, //00 0111 1101 - OP_SUB_IMM3, //00 0111 1110 - OP_SUB_IMM3, //00 0111 1111 - - OP_MOV_IMM8, //00 1000 0000 - OP_MOV_IMM8, //00 1000 0001 - OP_MOV_IMM8, //00 1000 0010 - OP_MOV_IMM8, //00 1000 0011 - OP_MOV_IMM8, //00 1000 0100 - OP_MOV_IMM8, //00 1000 0101 - OP_MOV_IMM8, //00 1000 0110 - OP_MOV_IMM8, //00 1000 0111 - OP_MOV_IMM8, //00 1000 1000 - OP_MOV_IMM8, //00 1000 1001 - OP_MOV_IMM8, //00 1000 1010 - OP_MOV_IMM8, //00 1000 1011 - OP_MOV_IMM8, //00 1000 1100 - OP_MOV_IMM8, //00 1000 1101 - OP_MOV_IMM8, //00 1000 1110 - OP_MOV_IMM8, //00 1000 1111 - - OP_MOV_IMM8, //00 1001 0000 - OP_MOV_IMM8, //00 1001 0001 - OP_MOV_IMM8, //00 1001 0010 - OP_MOV_IMM8, //00 1001 0011 - OP_MOV_IMM8, //00 1001 0100 - OP_MOV_IMM8, //00 1001 0101 - OP_MOV_IMM8, //00 1001 0110 - OP_MOV_IMM8, //00 1001 0111 - OP_MOV_IMM8, //00 1001 1000 - OP_MOV_IMM8, //00 1001 1001 - OP_MOV_IMM8, //00 1001 1010 - OP_MOV_IMM8, //00 1001 1011 - OP_MOV_IMM8, //00 1001 1100 - OP_MOV_IMM8, //00 1001 1101 - OP_MOV_IMM8, //00 1001 1110 - OP_MOV_IMM8, //00 1001 1111 - - OP_CMP_IMM8, //00 1010 0000 - OP_CMP_IMM8, //00 1010 0001 - OP_CMP_IMM8, //00 1010 0010 - OP_CMP_IMM8, //00 1010 0011 - OP_CMP_IMM8, //00 1010 0100 - OP_CMP_IMM8, //00 1010 0101 - OP_CMP_IMM8, //00 1010 0110 - OP_CMP_IMM8, //00 1010 0111 - OP_CMP_IMM8, //00 1010 1000 - OP_CMP_IMM8, //00 1010 1001 - OP_CMP_IMM8, //00 1010 1010 - OP_CMP_IMM8, //00 1010 1011 - OP_CMP_IMM8, //00 1010 1100 - OP_CMP_IMM8, //00 1010 1101 - OP_CMP_IMM8, //00 1010 1110 - OP_CMP_IMM8, //00 1010 1111 - - OP_CMP_IMM8, //00 1011 0000 - OP_CMP_IMM8, //00 1011 0001 - OP_CMP_IMM8, //00 1011 0010 - OP_CMP_IMM8, //00 1011 0011 - OP_CMP_IMM8, //00 1011 0100 - OP_CMP_IMM8, //00 1011 0101 - OP_CMP_IMM8, //00 1011 0110 - OP_CMP_IMM8, //00 1011 0111 - OP_CMP_IMM8, //00 1011 1000 - OP_CMP_IMM8, //00 1011 1001 - OP_CMP_IMM8, //00 1011 1010 - OP_CMP_IMM8, //00 1011 1011 - OP_CMP_IMM8, //00 1011 1100 - OP_CMP_IMM8, //00 1011 1101 - OP_CMP_IMM8, //00 1011 1110 - OP_CMP_IMM8, //00 1011 1111 - - OP_ADD_IMM8, //00 1100 0000 - OP_ADD_IMM8, //00 1100 0001 - OP_ADD_IMM8, //00 1100 0010 - OP_ADD_IMM8, //00 1100 0011 - OP_ADD_IMM8, //00 1100 0100 - OP_ADD_IMM8, //00 1100 0101 - OP_ADD_IMM8, //00 1100 0110 - OP_ADD_IMM8, //00 1100 0111 - OP_ADD_IMM8, //00 1100 1000 - OP_ADD_IMM8, //00 1100 1001 - OP_ADD_IMM8, //00 1100 1010 - OP_ADD_IMM8, //00 1100 1011 - OP_ADD_IMM8, //00 1100 1100 - OP_ADD_IMM8, //00 1100 1101 - OP_ADD_IMM8, //00 1100 1110 - OP_ADD_IMM8, //00 1100 1111 - - OP_ADD_IMM8, //00 1101 0000 - OP_ADD_IMM8, //00 1101 0001 - OP_ADD_IMM8, //00 1101 0010 - OP_ADD_IMM8, //00 1101 0011 - OP_ADD_IMM8, //00 1101 0100 - OP_ADD_IMM8, //00 1101 0101 - OP_ADD_IMM8, //00 1101 0110 - OP_ADD_IMM8, //00 1101 0111 - OP_ADD_IMM8, //00 1101 1000 - OP_ADD_IMM8, //00 1101 1001 - OP_ADD_IMM8, //00 1101 1010 - OP_ADD_IMM8, //00 1101 1011 - OP_ADD_IMM8, //00 1101 1100 - OP_ADD_IMM8, //00 1101 1101 - OP_ADD_IMM8, //00 1101 1110 - OP_ADD_IMM8, //00 1101 1111 - - OP_SUB_IMM8, //00 1110 0000 - OP_SUB_IMM8, //00 1110 0001 - OP_SUB_IMM8, //00 1110 0010 - OP_SUB_IMM8, //00 1110 0011 - OP_SUB_IMM8, //00 1110 0100 - OP_SUB_IMM8, //00 1110 0101 - OP_SUB_IMM8, //00 1110 0110 - OP_SUB_IMM8, //00 1110 0111 - OP_SUB_IMM8, //00 1110 1000 - OP_SUB_IMM8, //00 1110 1001 - OP_SUB_IMM8, //00 1110 1010 - OP_SUB_IMM8, //00 1110 1011 - OP_SUB_IMM8, //00 1110 1100 - OP_SUB_IMM8, //00 1110 1101 - OP_SUB_IMM8, //00 1110 1110 - OP_SUB_IMM8, //00 1110 1111 - - OP_SUB_IMM8, //00 1111 0000 - OP_SUB_IMM8, //00 1111 0001 - OP_SUB_IMM8, //00 1111 0010 - OP_SUB_IMM8, //00 1111 0011 - OP_SUB_IMM8, //00 1111 0100 - OP_SUB_IMM8, //00 1111 0101 - OP_SUB_IMM8, //00 1111 0110 - OP_SUB_IMM8, //00 1111 0111 - OP_SUB_IMM8, //00 1111 1000 - OP_SUB_IMM8, //00 1111 1001 - OP_SUB_IMM8, //00 1111 1010 - OP_SUB_IMM8, //00 1111 1011 - OP_SUB_IMM8, //00 1111 1100 - OP_SUB_IMM8, //00 1111 1101 - OP_SUB_IMM8, //00 1111 1110 - OP_SUB_IMM8, //00 1111 1111 - - OP_AND, //01 0000 0000 - OP_EOR, //01 0000 0001 - OP_LSL_REG, //01 0000 0010 - OP_LSR_REG, //01 0000 0011 - OP_ASR_REG, //01 0000 0100 - OP_ADC_REG, //01 0000 0101 - OP_SBC_REG, //01 0000 0110 - OP_ROR_REG, //01 0000 0111 - OP_TST, //01 0000 1000 - OP_NEG, //01 0000 1001 - OP_CMP, //01 0000 1010 - OP_CMN, //01 0000 1011 - OP_ORR, //01 0000 1100 - OP_MUL_REG, //01 0000 1101 - OP_BIC, //01 0000 1110 - OP_MVN, //01 0000 1111 - - OP_ADD_SPE, //01 0001 0000 - OP_ADD_SPE, //01 0001 0001 - OP_ADD_SPE, //01 0001 0010 - OP_ADD_SPE, //01 0001 0011 - OP_CMP_SPE, //01 0001 0100 - OP_CMP_SPE, //01 0001 0101 - OP_CMP_SPE, //01 0001 0110 - OP_CMP_SPE, //01 0001 0111 - OP_MOV_SPE, //01 0001 1000 - OP_MOV_SPE, //01 0001 1001 - OP_MOV_SPE, //01 0001 1010 - OP_MOV_SPE, //01 0001 1011 - OP_BX_THUMB, //01 0001 1100 - OP_BX_THUMB, //01 0001 1101 - OP_BLX_THUMB, //01 0001 1110 - OP_BLX_THUMB, //01 0001 1111 - - OP_LDR_PCREL, //01 0010 0000 - OP_LDR_PCREL, //01 0010 0001 - OP_LDR_PCREL, //01 0010 0010 - OP_LDR_PCREL, //01 0010 0011 - OP_LDR_PCREL, //01 0010 0100 - OP_LDR_PCREL, //01 0010 0101 - OP_LDR_PCREL, //01 0010 0110 - OP_LDR_PCREL, //01 0010 0111 - OP_LDR_PCREL, //01 0010 1000 - OP_LDR_PCREL, //01 0010 1001 - OP_LDR_PCREL, //01 0010 1010 - OP_LDR_PCREL, //01 0010 1011 - OP_LDR_PCREL, //01 0010 1100 - OP_LDR_PCREL, //01 0010 1101 - OP_LDR_PCREL, //01 0010 1110 - OP_LDR_PCREL, //01 0010 1111 - - OP_LDR_PCREL, //01 0011 0000 - OP_LDR_PCREL, //01 0011 0001 - OP_LDR_PCREL, //01 0011 0010 - OP_LDR_PCREL, //01 0011 0011 - OP_LDR_PCREL, //01 0011 0100 - OP_LDR_PCREL, //01 0011 0101 - OP_LDR_PCREL, //01 0011 0110 - OP_LDR_PCREL, //01 0011 0111 - OP_LDR_PCREL, //01 0011 1000 - OP_LDR_PCREL, //01 0011 1001 - OP_LDR_PCREL, //01 0011 1010 - OP_LDR_PCREL, //01 0011 1011 - OP_LDR_PCREL, //01 0011 1100 - OP_LDR_PCREL, //01 0011 1101 - OP_LDR_PCREL, //01 0011 1110 - OP_LDR_PCREL, //01 0011 1111 - - OP_STR_REG_OFF, //01 0100 0000 - OP_STR_REG_OFF, //01 0100 0001 - OP_STR_REG_OFF, //01 0100 0010 - OP_STR_REG_OFF, //01 0100 0011 - OP_STR_REG_OFF, //01 0100 0100 - OP_STR_REG_OFF, //01 0100 0101 - OP_STR_REG_OFF, //01 0100 0110 - OP_STR_REG_OFF, //01 0100 0111 - OP_STRH_REG_OFF, //01 0100 1000 - OP_STRH_REG_OFF, //01 0100 1001 - OP_STRH_REG_OFF, //01 0100 1010 - OP_STRH_REG_OFF, //01 0100 1011 - OP_STRH_REG_OFF, //01 0100 1100 - OP_STRH_REG_OFF, //01 0100 1101 - OP_STRH_REG_OFF, //01 0100 1110 - OP_STRH_REG_OFF, //01 0100 1111 - - OP_STRB_REG_OFF, //01 0101 0000 - OP_STRB_REG_OFF, //01 0101 0001 - OP_STRB_REG_OFF, //01 0101 0010 - OP_STRB_REG_OFF, //01 0101 0011 - OP_STRB_REG_OFF, //01 0101 0100 - OP_STRB_REG_OFF, //01 0101 0101 - OP_STRB_REG_OFF, //01 0101 0110 - OP_STRB_REG_OFF, //01 0101 0111 - OP_LDRSB_REG_OFF, //01 0101 1000 - OP_LDRSB_REG_OFF, //01 0101 1001 - OP_LDRSB_REG_OFF, //01 0101 1010 - OP_LDRSB_REG_OFF, //01 0101 1011 - OP_LDRSB_REG_OFF, //01 0101 1100 - OP_LDRSB_REG_OFF, //01 0101 1101 - OP_LDRSB_REG_OFF, //01 0101 1110 - OP_LDRSB_REG_OFF, //01 0101 1111 - - OP_LDR_REG_OFF, //01 0110 0000 - OP_LDR_REG_OFF, //01 0110 0001 - OP_LDR_REG_OFF, //01 0110 0010 - OP_LDR_REG_OFF, //01 0110 0011 - OP_LDR_REG_OFF, //01 0110 0100 - OP_LDR_REG_OFF, //01 0110 0101 - OP_LDR_REG_OFF, //01 0110 0110 - OP_LDR_REG_OFF, //01 0110 0111 - OP_LDRH_REG_OFF, //01 0110 1000 - OP_LDRH_REG_OFF, //01 0110 1001 - OP_LDRH_REG_OFF, //01 0110 1010 - OP_LDRH_REG_OFF, //01 0110 1011 - OP_LDRH_REG_OFF, //01 0110 1100 - OP_LDRH_REG_OFF, //01 0110 1101 - OP_LDRH_REG_OFF, //01 0110 1110 - OP_LDRH_REG_OFF, //01 0110 1111 - - OP_LDRB_REG_OFF, //01 0111 0000 - OP_LDRB_REG_OFF, //01 0111 0001 - OP_LDRB_REG_OFF, //01 0111 0010 - OP_LDRB_REG_OFF, //01 0111 0011 - OP_LDRB_REG_OFF, //01 0111 0100 - OP_LDRB_REG_OFF, //01 0111 0101 - OP_LDRB_REG_OFF, //01 0111 0110 - OP_LDRB_REG_OFF, //01 0111 0111 - OP_LDRSH_REG_OFF, //01 0111 1000 - OP_LDRSH_REG_OFF, //01 0111 1001 - OP_LDRSH_REG_OFF, //01 0111 1010 - OP_LDRSH_REG_OFF, //01 0111 1011 - OP_LDRSH_REG_OFF, //01 0111 1100 - OP_LDRSH_REG_OFF, //01 0111 1101 - OP_LDRSH_REG_OFF, //01 0111 1110 - OP_LDRSH_REG_OFF, //01 0111 1111 - - OP_STR_IMM_OFF, //01 1000 0000 - OP_STR_IMM_OFF, //01 1000 0001 - OP_STR_IMM_OFF, //01 1000 0010 - OP_STR_IMM_OFF, //01 1000 0011 - OP_STR_IMM_OFF, //01 1000 0100 - OP_STR_IMM_OFF, //01 1000 0101 - OP_STR_IMM_OFF, //01 1000 0110 - OP_STR_IMM_OFF, //01 1000 0111 - OP_STR_IMM_OFF, //01 1000 1000 - OP_STR_IMM_OFF, //01 1000 1001 - OP_STR_IMM_OFF, //01 1000 1010 - OP_STR_IMM_OFF, //01 1000 1011 - OP_STR_IMM_OFF, //01 1000 1100 - OP_STR_IMM_OFF, //01 1000 1101 - OP_STR_IMM_OFF, //01 1000 1110 - OP_STR_IMM_OFF, //01 1000 1111 - - OP_STR_IMM_OFF, //01 1001 0000 - OP_STR_IMM_OFF, //01 1001 0001 - OP_STR_IMM_OFF, //01 1001 0010 - OP_STR_IMM_OFF, //01 1001 0011 - OP_STR_IMM_OFF, //01 1001 0100 - OP_STR_IMM_OFF, //01 1001 0101 - OP_STR_IMM_OFF, //01 1001 0110 - OP_STR_IMM_OFF, //01 1001 0111 - OP_STR_IMM_OFF, //01 1001 1000 - OP_STR_IMM_OFF, //01 1001 1001 - OP_STR_IMM_OFF, //01 1001 1010 - OP_STR_IMM_OFF, //01 1001 1011 - OP_STR_IMM_OFF, //01 1001 1100 - OP_STR_IMM_OFF, //01 1001 1101 - OP_STR_IMM_OFF, //01 1001 1110 - OP_STR_IMM_OFF, //01 1001 1111 - - OP_LDR_IMM_OFF, //01 1010 0000 - OP_LDR_IMM_OFF, //01 1010 0001 - OP_LDR_IMM_OFF, //01 1010 0010 - OP_LDR_IMM_OFF, //01 1010 0011 - OP_LDR_IMM_OFF, //01 1010 0100 - OP_LDR_IMM_OFF, //01 1010 0101 - OP_LDR_IMM_OFF, //01 1010 0110 - OP_LDR_IMM_OFF, //01 1010 0111 - OP_LDR_IMM_OFF, //01 1010 1000 - OP_LDR_IMM_OFF, //01 1010 1001 - OP_LDR_IMM_OFF, //01 1010 1010 - OP_LDR_IMM_OFF, //01 1010 1011 - OP_LDR_IMM_OFF, //01 1010 1100 - OP_LDR_IMM_OFF, //01 1010 1101 - OP_LDR_IMM_OFF, //01 1010 1110 - OP_LDR_IMM_OFF, //01 1010 1111 - - OP_LDR_IMM_OFF, //01 1011 0000 - OP_LDR_IMM_OFF, //01 1011 0001 - OP_LDR_IMM_OFF, //01 1011 0010 - OP_LDR_IMM_OFF, //01 1011 0011 - OP_LDR_IMM_OFF, //01 1011 0100 - OP_LDR_IMM_OFF, //01 1011 0101 - OP_LDR_IMM_OFF, //01 1011 0110 - OP_LDR_IMM_OFF, //01 1011 0111 - OP_LDR_IMM_OFF, //01 1011 1000 - OP_LDR_IMM_OFF, //01 1011 1001 - OP_LDR_IMM_OFF, //01 1011 1010 - OP_LDR_IMM_OFF, //01 1011 1011 - OP_LDR_IMM_OFF, //01 1011 1100 - OP_LDR_IMM_OFF, //01 1011 1101 - OP_LDR_IMM_OFF, //01 1011 1110 - OP_LDR_IMM_OFF, //01 1011 1111 - - OP_STRB_IMM_OFF, //01 1100 0000 - OP_STRB_IMM_OFF, //01 1100 0001 - OP_STRB_IMM_OFF, //01 1100 0010 - OP_STRB_IMM_OFF, //01 1100 0011 - OP_STRB_IMM_OFF, //01 1100 0100 - OP_STRB_IMM_OFF, //01 1100 0101 - OP_STRB_IMM_OFF, //01 1100 0110 - OP_STRB_IMM_OFF, //01 1100 0111 - OP_STRB_IMM_OFF, //01 1100 1000 - OP_STRB_IMM_OFF, //01 1100 1001 - OP_STRB_IMM_OFF, //01 1100 1010 - OP_STRB_IMM_OFF, //01 1100 1011 - OP_STRB_IMM_OFF, //01 1100 1100 - OP_STRB_IMM_OFF, //01 1100 1101 - OP_STRB_IMM_OFF, //01 1100 1110 - OP_STRB_IMM_OFF, //01 1100 1111 - - OP_STRB_IMM_OFF, //01 1101 0000 - OP_STRB_IMM_OFF, //01 1101 0001 - OP_STRB_IMM_OFF, //01 1101 0010 - OP_STRB_IMM_OFF, //01 1101 0011 - OP_STRB_IMM_OFF, //01 1101 0100 - OP_STRB_IMM_OFF, //01 1101 0101 - OP_STRB_IMM_OFF, //01 1101 0110 - OP_STRB_IMM_OFF, //01 1101 0111 - OP_STRB_IMM_OFF, //01 1101 1000 - OP_STRB_IMM_OFF, //01 1101 1001 - OP_STRB_IMM_OFF, //01 1101 1010 - OP_STRB_IMM_OFF, //01 1101 1011 - OP_STRB_IMM_OFF, //01 1101 1100 - OP_STRB_IMM_OFF, //01 1101 1101 - OP_STRB_IMM_OFF, //01 1101 1110 - OP_STRB_IMM_OFF, //01 1101 1111 - - OP_LDRB_IMM_OFF, //01 1110 0000 - OP_LDRB_IMM_OFF, //01 1110 0001 - OP_LDRB_IMM_OFF, //01 1110 0010 - OP_LDRB_IMM_OFF, //01 1110 0011 - OP_LDRB_IMM_OFF, //01 1110 0100 - OP_LDRB_IMM_OFF, //01 1110 0101 - OP_LDRB_IMM_OFF, //01 1110 0110 - OP_LDRB_IMM_OFF, //01 1110 0111 - OP_LDRB_IMM_OFF, //01 1110 1000 - OP_LDRB_IMM_OFF, //01 1110 1001 - OP_LDRB_IMM_OFF, //01 1110 1010 - OP_LDRB_IMM_OFF, //01 1110 1011 - OP_LDRB_IMM_OFF, //01 1110 1100 - OP_LDRB_IMM_OFF, //01 1110 1101 - OP_LDRB_IMM_OFF, //01 1110 1110 - OP_LDRB_IMM_OFF, //01 1110 1111 - - OP_LDRB_IMM_OFF, //01 1111 0000 - OP_LDRB_IMM_OFF, //01 1111 0001 - OP_LDRB_IMM_OFF, //01 1111 0010 - OP_LDRB_IMM_OFF, //01 1111 0011 - OP_LDRB_IMM_OFF, //01 1111 0100 - OP_LDRB_IMM_OFF, //01 1111 0101 - OP_LDRB_IMM_OFF, //01 1111 0110 - OP_LDRB_IMM_OFF, //01 1111 0111 - OP_LDRB_IMM_OFF, //01 1111 1000 - OP_LDRB_IMM_OFF, //01 1111 1001 - OP_LDRB_IMM_OFF, //01 1111 1010 - OP_LDRB_IMM_OFF, //01 1111 1011 - OP_LDRB_IMM_OFF, //01 1111 1100 - OP_LDRB_IMM_OFF, //01 1111 1101 - OP_LDRB_IMM_OFF, //01 1111 1110 - OP_LDRB_IMM_OFF, //01 1111 1111 - - OP_STRH_IMM_OFF, //10 0000 0000 - OP_STRH_IMM_OFF, //10 0000 0001 - OP_STRH_IMM_OFF, //10 0000 0010 - OP_STRH_IMM_OFF, //10 0000 0011 - OP_STRH_IMM_OFF, //10 0000 0100 - OP_STRH_IMM_OFF, //10 0000 0101 - OP_STRH_IMM_OFF, //10 0000 0110 - OP_STRH_IMM_OFF, //10 0000 0111 - OP_STRH_IMM_OFF, //10 0000 1000 - OP_STRH_IMM_OFF, //10 0000 1001 - OP_STRH_IMM_OFF, //10 0000 1010 - OP_STRH_IMM_OFF, //10 0000 1011 - OP_STRH_IMM_OFF, //10 0000 1100 - OP_STRH_IMM_OFF, //10 0000 1101 - OP_STRH_IMM_OFF, //10 0000 1110 - OP_STRH_IMM_OFF, //10 0000 1111 - - OP_STRH_IMM_OFF, //10 0001 0000 - OP_STRH_IMM_OFF, //10 0001 0001 - OP_STRH_IMM_OFF, //10 0001 0010 - OP_STRH_IMM_OFF, //10 0001 0011 - OP_STRH_IMM_OFF, //10 0001 0100 - OP_STRH_IMM_OFF, //10 0001 0101 - OP_STRH_IMM_OFF, //10 0001 0110 - OP_STRH_IMM_OFF, //10 0001 0111 - OP_STRH_IMM_OFF, //10 0001 1000 - OP_STRH_IMM_OFF, //10 0001 1001 - OP_STRH_IMM_OFF, //10 0001 1010 - OP_STRH_IMM_OFF, //10 0001 1011 - OP_STRH_IMM_OFF, //10 0001 1100 - OP_STRH_IMM_OFF, //10 0001 1101 - OP_STRH_IMM_OFF, //10 0001 1110 - OP_STRH_IMM_OFF, //10 0001 1111 - - OP_LDRH_IMM_OFF, //10 0010 0000 - OP_LDRH_IMM_OFF, //10 0010 0001 - OP_LDRH_IMM_OFF, //10 0010 0010 - OP_LDRH_IMM_OFF, //10 0010 0011 - OP_LDRH_IMM_OFF, //10 0010 0100 - OP_LDRH_IMM_OFF, //10 0010 0101 - OP_LDRH_IMM_OFF, //10 0010 0110 - OP_LDRH_IMM_OFF, //10 0010 0111 - OP_LDRH_IMM_OFF, //10 0010 1000 - OP_LDRH_IMM_OFF, //10 0010 1001 - OP_LDRH_IMM_OFF, //10 0010 1010 - OP_LDRH_IMM_OFF, //10 0010 1011 - OP_LDRH_IMM_OFF, //10 0010 1100 - OP_LDRH_IMM_OFF, //10 0010 1101 - OP_LDRH_IMM_OFF, //10 0010 1110 - OP_LDRH_IMM_OFF, //10 0010 1111 - - OP_LDRH_IMM_OFF, //10 0011 0000 - OP_LDRH_IMM_OFF, //10 0011 0001 - OP_LDRH_IMM_OFF, //10 0011 0010 - OP_LDRH_IMM_OFF, //10 0011 0011 - OP_LDRH_IMM_OFF, //10 0011 0100 - OP_LDRH_IMM_OFF, //10 0011 0101 - OP_LDRH_IMM_OFF, //10 0011 0110 - OP_LDRH_IMM_OFF, //10 0011 0111 - OP_LDRH_IMM_OFF, //10 0011 1000 - OP_LDRH_IMM_OFF, //10 0011 1001 - OP_LDRH_IMM_OFF, //10 0011 1010 - OP_LDRH_IMM_OFF, //10 0011 1011 - OP_LDRH_IMM_OFF, //10 0011 1100 - OP_LDRH_IMM_OFF, //10 0011 1101 - OP_LDRH_IMM_OFF, //10 0011 1110 - OP_LDRH_IMM_OFF, //10 0011 1111 - - OP_STR_SPREL, //10 0100 0000 - OP_STR_SPREL, //10 0100 0001 - OP_STR_SPREL, //10 0100 0010 - OP_STR_SPREL, //10 0100 0011 - OP_STR_SPREL, //10 0100 0100 - OP_STR_SPREL, //10 0100 0101 - OP_STR_SPREL, //10 0100 0110 - OP_STR_SPREL, //10 0100 0111 - OP_STR_SPREL, //10 0100 1000 - OP_STR_SPREL, //10 0100 1001 - OP_STR_SPREL, //10 0100 1010 - OP_STR_SPREL, //10 0100 1011 - OP_STR_SPREL, //10 0100 1100 - OP_STR_SPREL, //10 0100 1101 - OP_STR_SPREL, //10 0100 1110 - OP_STR_SPREL, //10 0100 1111 - - OP_STR_SPREL, //10 0101 0000 - OP_STR_SPREL, //10 0101 0001 - OP_STR_SPREL, //10 0101 0010 - OP_STR_SPREL, //10 0101 0011 - OP_STR_SPREL, //10 0101 0100 - OP_STR_SPREL, //10 0101 0101 - OP_STR_SPREL, //10 0101 0110 - OP_STR_SPREL, //10 0101 0111 - OP_STR_SPREL, //10 0101 1000 - OP_STR_SPREL, //10 0101 1001 - OP_STR_SPREL, //10 0101 1010 - OP_STR_SPREL, //10 0101 1011 - OP_STR_SPREL, //10 0101 1100 - OP_STR_SPREL, //10 0101 1101 - OP_STR_SPREL, //10 0101 1110 - OP_STR_SPREL, //10 0101 1111 - - OP_LDR_SPREL, //10 0110 0000 - OP_LDR_SPREL, //10 0110 0001 - OP_LDR_SPREL, //10 0110 0010 - OP_LDR_SPREL, //10 0110 0011 - OP_LDR_SPREL, //10 0110 0100 - OP_LDR_SPREL, //10 0110 0101 - OP_LDR_SPREL, //10 0110 0110 - OP_LDR_SPREL, //10 0110 0111 - OP_LDR_SPREL, //10 0110 1000 - OP_LDR_SPREL, //10 0110 1001 - OP_LDR_SPREL, //10 0110 1010 - OP_LDR_SPREL, //10 0110 1011 - OP_LDR_SPREL, //10 0110 1100 - OP_LDR_SPREL, //10 0110 1101 - OP_LDR_SPREL, //10 0110 1110 - OP_LDR_SPREL, //10 0110 1111 - - OP_LDR_SPREL, //10 0111 0000 - OP_LDR_SPREL, //10 0111 0001 - OP_LDR_SPREL, //10 0111 0010 - OP_LDR_SPREL, //10 0111 0011 - OP_LDR_SPREL, //10 0111 0100 - OP_LDR_SPREL, //10 0111 0101 - OP_LDR_SPREL, //10 0111 0110 - OP_LDR_SPREL, //10 0111 0111 - OP_LDR_SPREL, //10 0111 1000 - OP_LDR_SPREL, //10 0111 1001 - OP_LDR_SPREL, //10 0111 1010 - OP_LDR_SPREL, //10 0111 1011 - OP_LDR_SPREL, //10 0111 1100 - OP_LDR_SPREL, //10 0111 1101 - OP_LDR_SPREL, //10 0111 1110 - OP_LDR_SPREL, //10 0111 1111 - - OP_ADD_2PC, //10 1000 0000 - OP_ADD_2PC, //10 1000 0001 - OP_ADD_2PC, //10 1000 0010 - OP_ADD_2PC, //10 1000 0011 - OP_ADD_2PC, //10 1000 0100 - OP_ADD_2PC, //10 1000 0101 - OP_ADD_2PC, //10 1000 0110 - OP_ADD_2PC, //10 1000 0111 - OP_ADD_2PC, //10 1000 1000 - OP_ADD_2PC, //10 1000 1001 - OP_ADD_2PC, //10 1000 1010 - OP_ADD_2PC, //10 1000 1011 - OP_ADD_2PC, //10 1000 1100 - OP_ADD_2PC, //10 1000 1101 - OP_ADD_2PC, //10 1000 1110 - OP_ADD_2PC, //10 1000 1111 - - OP_ADD_2PC, //10 1001 0000 - OP_ADD_2PC, //10 1001 0001 - OP_ADD_2PC, //10 1001 0010 - OP_ADD_2PC, //10 1001 0011 - OP_ADD_2PC, //10 1001 0100 - OP_ADD_2PC, //10 1001 0101 - OP_ADD_2PC, //10 1001 0110 - OP_ADD_2PC, //10 1001 0111 - OP_ADD_2PC, //10 1001 1000 - OP_ADD_2PC, //10 1001 1001 - OP_ADD_2PC, //10 1001 1010 - OP_ADD_2PC, //10 1001 1011 - OP_ADD_2PC, //10 1001 1100 - OP_ADD_2PC, //10 1001 1101 - OP_ADD_2PC, //10 1001 1110 - OP_ADD_2PC, //10 1001 1111 - - OP_ADD_2SP, //10 1010 0000 - OP_ADD_2SP, //10 1010 0001 - OP_ADD_2SP, //10 1010 0010 - OP_ADD_2SP, //10 1010 0011 - OP_ADD_2SP, //10 1010 0100 - OP_ADD_2SP, //10 1010 0101 - OP_ADD_2SP, //10 1010 0110 - OP_ADD_2SP, //10 1010 0111 - OP_ADD_2SP, //10 1010 1000 - OP_ADD_2SP, //10 1010 1001 - OP_ADD_2SP, //10 1010 1010 - OP_ADD_2SP, //10 1010 1011 - OP_ADD_2SP, //10 1010 1100 - OP_ADD_2SP, //10 1010 1101 - OP_ADD_2SP, //10 1010 1110 - OP_ADD_2SP, //10 1010 1111 - - OP_ADD_2SP, //10 1011 0000 - OP_ADD_2SP, //10 1011 0001 - OP_ADD_2SP, //10 1011 0010 - OP_ADD_2SP, //10 1011 0011 - OP_ADD_2SP, //10 1011 0100 - OP_ADD_2SP, //10 1011 0101 - OP_ADD_2SP, //10 1011 0110 - OP_ADD_2SP, //10 1011 0111 - OP_ADD_2SP, //10 1011 1000 - OP_ADD_2SP, //10 1011 1001 - OP_ADD_2SP, //10 1011 1010 - OP_ADD_2SP, //10 1011 1011 - OP_ADD_2SP, //10 1011 1100 - OP_ADD_2SP, //10 1011 1101 - OP_ADD_2SP, //10 1011 1110 - OP_ADD_2SP, //10 1011 1111 - - OP_ADJUST_P_SP, //10 1100 0000 - OP_ADJUST_P_SP, //10 1100 0001 - OP_ADJUST_M_SP, //10 1100 0010 - OP_ADJUST_M_SP, //10 1100 0011 - OP_UND_THUMB, //10 1100 0100 - OP_UND_THUMB, //10 1100 0101 - OP_UND_THUMB, //10 1100 0110 - OP_UND_THUMB, //10 1100 0111 - OP_UND_THUMB, //10 1100 1000 - OP_UND_THUMB, //10 1100 1001 - OP_UND_THUMB, //10 1100 1010 - OP_UND_THUMB, //10 1100 1011 - OP_UND_THUMB, //10 1100 1100 - OP_UND_THUMB, //10 1100 1101 - OP_UND_THUMB, //10 1100 1110 - OP_UND_THUMB, //10 1100 1111 - - OP_PUSH, //10 1101 0000 - OP_PUSH, //10 1101 0001 - OP_PUSH, //10 1101 0010 - OP_PUSH, //10 1101 0011 - OP_PUSH_LR, //10 1101 0100 - OP_PUSH_LR, //10 1101 0101 - OP_PUSH_LR, //10 1101 0110 - OP_PUSH_LR, //10 1101 0111 - OP_UND_THUMB, //10 1101 1000 - OP_UND_THUMB, //10 1101 1001 - OP_UND_THUMB, //10 1101 1010 - OP_UND_THUMB, //10 1101 1011 - OP_UND_THUMB, //10 1101 1100 - OP_UND_THUMB, //10 1101 1101 - OP_UND_THUMB, //10 1101 1110 - OP_UND_THUMB, //10 1101 1111 - - OP_UND_THUMB, //10 1110 0000 - OP_UND_THUMB, //10 1110 0001 - OP_UND_THUMB, //10 1110 0010 - OP_UND_THUMB, //10 1110 0011 - OP_UND_THUMB, //10 1110 0100 - OP_UND_THUMB, //10 1110 0101 - OP_UND_THUMB, //10 1110 0110 - OP_UND_THUMB, //10 1110 0111 - OP_UND_THUMB, //10 1110 1000 - OP_UND_THUMB, //10 1110 1001 - OP_UND_THUMB, //10 1110 1010 - OP_UND_THUMB, //10 1110 1011 - OP_UND_THUMB, //10 1110 1100 - OP_UND_THUMB, //10 1110 1101 - OP_UND_THUMB, //10 1110 1110 - OP_UND_THUMB, //10 1110 1111 - - OP_POP, //10 1111 0000 - OP_POP, //10 1111 0001 - OP_POP, //10 1111 0010 - OP_POP, //10 1111 0011 - OP_POP_PC, //10 1111 0100 - OP_POP_PC, //10 1111 0101 - OP_POP_PC, //10 1111 0110 - OP_POP_PC, //10 1111 0111 - OP_BKPT_THUMB, //10 1111 1000 - OP_BKPT_THUMB, //10 1111 1001 - OP_BKPT_THUMB, //10 1111 1010 - OP_BKPT_THUMB, //10 1111 1011 - OP_UND_THUMB, //10 1111 1100 - OP_UND_THUMB, //10 1111 1101 - OP_UND_THUMB, //10 1111 1110 - OP_UND_THUMB, //10 1111 1111 - - OP_STMIA_THUMB, //11 0000 0000 - OP_STMIA_THUMB, //11 0000 0001 - OP_STMIA_THUMB, //11 0000 0010 - OP_STMIA_THUMB, //11 0000 0011 - OP_STMIA_THUMB, //11 0000 0100 - OP_STMIA_THUMB, //11 0000 0101 - OP_STMIA_THUMB, //11 0000 0110 - OP_STMIA_THUMB, //11 0000 0111 - OP_STMIA_THUMB, //11 0000 1000 - OP_STMIA_THUMB, //11 0000 1001 - OP_STMIA_THUMB, //11 0000 1010 - OP_STMIA_THUMB, //11 0000 1011 - OP_STMIA_THUMB, //11 0000 1100 - OP_STMIA_THUMB, //11 0000 1101 - OP_STMIA_THUMB, //11 0000 1110 - OP_STMIA_THUMB, //11 0000 1111 - - OP_STMIA_THUMB, //11 0001 0000 - OP_STMIA_THUMB, //11 0001 0001 - OP_STMIA_THUMB, //11 0001 0010 - OP_STMIA_THUMB, //11 0001 0011 - OP_STMIA_THUMB, //11 0001 0100 - OP_STMIA_THUMB, //11 0001 0101 - OP_STMIA_THUMB, //11 0001 0110 - OP_STMIA_THUMB, //11 0001 0111 - OP_STMIA_THUMB, //11 0001 1000 - OP_STMIA_THUMB, //11 0001 1001 - OP_STMIA_THUMB, //11 0001 1010 - OP_STMIA_THUMB, //11 0001 1011 - OP_STMIA_THUMB, //11 0001 1100 - OP_STMIA_THUMB, //11 0001 1101 - OP_STMIA_THUMB, //11 0001 1110 - OP_STMIA_THUMB, //11 0001 1111 - - OP_LDMIA_THUMB, //11 0010 0000 - OP_LDMIA_THUMB, //11 0010 0001 - OP_LDMIA_THUMB, //11 0010 0010 - OP_LDMIA_THUMB, //11 0010 0011 - OP_LDMIA_THUMB, //11 0010 0100 - OP_LDMIA_THUMB, //11 0010 0101 - OP_LDMIA_THUMB, //11 0010 0110 - OP_LDMIA_THUMB, //11 0010 0111 - OP_LDMIA_THUMB, //11 0010 1000 - OP_LDMIA_THUMB, //11 0010 1001 - OP_LDMIA_THUMB, //11 0010 1010 - OP_LDMIA_THUMB, //11 0010 1011 - OP_LDMIA_THUMB, //11 0010 1100 - OP_LDMIA_THUMB, //11 0010 1101 - OP_LDMIA_THUMB, //11 0010 1110 - OP_LDMIA_THUMB, //11 0010 1111 - - OP_LDMIA_THUMB, //11 0011 0000 - OP_LDMIA_THUMB, //11 0011 0001 - OP_LDMIA_THUMB, //11 0011 0010 - OP_LDMIA_THUMB, //11 0011 0011 - OP_LDMIA_THUMB, //11 0011 0100 - OP_LDMIA_THUMB, //11 0011 0101 - OP_LDMIA_THUMB, //11 0011 0110 - OP_LDMIA_THUMB, //11 0011 0111 - OP_LDMIA_THUMB, //11 0011 1000 - OP_LDMIA_THUMB, //11 0011 1001 - OP_LDMIA_THUMB, //11 0011 1010 - OP_LDMIA_THUMB, //11 0011 1011 - OP_LDMIA_THUMB, //11 0011 1100 - OP_LDMIA_THUMB, //11 0011 1101 - OP_LDMIA_THUMB, //11 0011 1110 - OP_LDMIA_THUMB, //11 0011 1111 - - OP_B_COND, //11 0100 0000 - OP_B_COND, //11 0100 0001 - OP_B_COND, //11 0100 0010 - OP_B_COND, //11 0100 0011 - OP_B_COND, //11 0100 0100 - OP_B_COND, //11 0100 0101 - OP_B_COND, //11 0100 0110 - OP_B_COND, //11 0100 0111 - OP_B_COND, //11 0100 1000 - OP_B_COND, //11 0100 1001 - OP_B_COND, //11 0100 1010 - OP_B_COND, //11 0100 1011 - OP_B_COND, //11 0100 1100 - OP_B_COND, //11 0100 1101 - OP_B_COND, //11 0100 1110 - OP_B_COND, //11 0100 1111 - - OP_B_COND, //11 0101 0000 - OP_B_COND, //11 0101 0001 - OP_B_COND, //11 0101 0010 - OP_B_COND, //11 0101 0011 - OP_B_COND, //11 0101 0100 - OP_B_COND, //11 0101 0101 - OP_B_COND, //11 0101 0110 - OP_B_COND, //11 0101 0111 - OP_B_COND, //11 0101 1000 - OP_B_COND, //11 0101 1001 - OP_B_COND, //11 0101 1010 - OP_B_COND, //11 0101 1011 - OP_B_COND, //11 0101 1100 - OP_B_COND, //11 0101 1101 - OP_B_COND, //11 0101 1110 - OP_B_COND, //11 0101 1111 - - OP_B_COND, //11 0110 0000 - OP_B_COND, //11 0110 0001 - OP_B_COND, //11 0110 0010 - OP_B_COND, //11 0110 0011 - OP_B_COND, //11 0110 0100 - OP_B_COND, //11 0110 0101 - OP_B_COND, //11 0110 0110 - OP_B_COND, //11 0110 0111 - OP_B_COND, //11 0110 1000 - OP_B_COND, //11 0110 1001 - OP_B_COND, //11 0110 1010 - OP_B_COND, //11 0110 1011 - OP_B_COND, //11 0110 1100 - OP_B_COND, //11 0110 1101 - OP_B_COND, //11 0110 1110 - OP_B_COND, //11 0110 1111 - - OP_B_COND, //11 0111 0000 - OP_B_COND, //11 0111 0001 - OP_B_COND, //11 0111 0010 - OP_B_COND, //11 0111 0011 - OP_B_COND, //11 0111 0100 - OP_B_COND, //11 0111 0101 - OP_B_COND, //11 0111 0110 - OP_B_COND, //11 0111 0111 - OP_B_COND, //11 0111 1000 - OP_B_COND, //11 0111 1001 - OP_B_COND, //11 0111 1010 - OP_B_COND, //11 0111 1011 - OP_SWI_THUMB, //11 0111 1100 - OP_SWI_THUMB, //11 0111 1101 - OP_SWI_THUMB, //11 0111 1110 - OP_SWI_THUMB, //11 0111 1111 - - OP_B_UNCOND, //11 1000 0000 - OP_B_UNCOND, //11 1000 0001 - OP_B_UNCOND, //11 1000 0010 - OP_B_UNCOND, //11 1000 0011 - OP_B_UNCOND, //11 1000 0100 - OP_B_UNCOND, //11 1000 0101 - OP_B_UNCOND, //11 1000 0110 - OP_B_UNCOND, //11 1000 0111 - OP_B_UNCOND, //11 1000 1000 - OP_B_UNCOND, //11 1000 1001 - OP_B_UNCOND, //11 1000 1010 - OP_B_UNCOND, //11 1000 1011 - OP_B_UNCOND, //11 1000 1100 - OP_B_UNCOND, //11 1000 1101 - OP_B_UNCOND, //11 1000 1110 - OP_B_UNCOND, //11 1000 1111 - - OP_B_UNCOND, //11 1001 0000 - OP_B_UNCOND, //11 1001 0001 - OP_B_UNCOND, //11 1001 0010 - OP_B_UNCOND, //11 1001 0011 - OP_B_UNCOND, //11 1001 0100 - OP_B_UNCOND, //11 1001 0101 - OP_B_UNCOND, //11 1001 0110 - OP_B_UNCOND, //11 1001 0111 - OP_B_UNCOND, //11 1001 1000 - OP_B_UNCOND, //11 1001 1001 - OP_B_UNCOND, //11 1001 1010 - OP_B_UNCOND, //11 1001 1011 - OP_B_UNCOND, //11 1001 1100 - OP_B_UNCOND, //11 1001 1101 - OP_B_UNCOND, //11 1001 1110 - OP_B_UNCOND, //11 1001 1111 - - OP_BLX, //11 1010 0000 - OP_BLX, //11 1010 0001 - OP_BLX, //11 1010 0010 - OP_BLX, //11 1010 0011 - OP_BLX, //11 1010 0100 - OP_BLX, //11 1010 0101 - OP_BLX, //11 1010 0110 - OP_BLX, //11 1010 0111 - OP_BLX, //11 1010 1000 - OP_BLX, //11 1010 1001 - OP_BLX, //11 1010 1010 - OP_BLX, //11 1010 1011 - OP_BLX, //11 1010 1100 - OP_BLX, //11 1010 1101 - OP_BLX, //11 1010 1110 - OP_BLX, //11 1010 1111 - - OP_BLX, //11 1011 0000 - OP_BLX, //11 1011 0001 - OP_BLX, //11 1011 0010 - OP_BLX, //11 1011 0011 - OP_BLX, //11 1011 0100 - OP_BLX, //11 1011 0101 - OP_BLX, //11 1011 0110 - OP_BLX, //11 1011 0111 - OP_BLX, //11 1011 1000 - OP_BLX, //11 1011 1001 - OP_BLX, //11 1011 1010 - OP_BLX, //11 1011 1011 - OP_BLX, //11 1011 1100 - OP_BLX, //11 1011 1101 - OP_BLX, //11 1011 1110 - OP_BLX, //11 1011 1111 - - OP_BL_10, //11 1100 0000 - OP_BL_10, //11 1100 0001 - OP_BL_10, //11 1100 0010 - OP_BL_10, //11 1100 0011 - OP_BL_10, //11 1100 0100 - OP_BL_10, //11 1100 0101 - OP_BL_10, //11 1100 0110 - OP_BL_10, //11 1100 0111 - OP_BL_10, //11 1100 1000 - OP_BL_10, //11 1100 1001 - OP_BL_10, //11 1100 1010 - OP_BL_10, //11 1100 1011 - OP_BL_10, //11 1100 1100 - OP_BL_10, //11 1100 1101 - OP_BL_10, //11 1100 1110 - OP_BL_10, //11 1100 1111 - - OP_BL_10, //11 1101 0000 - OP_BL_10, //11 1101 0001 - OP_BL_10, //11 1101 0010 - OP_BL_10, //11 1101 0011 - OP_BL_10, //11 1101 0100 - OP_BL_10, //11 1101 0101 - OP_BL_10, //11 1101 0110 - OP_BL_10, //11 1101 0111 - OP_BL_10, //11 1101 1000 - OP_BL_10, //11 1101 1001 - OP_BL_10, //11 1101 1010 - OP_BL_10, //11 1101 1011 - OP_BL_10, //11 1101 1100 - OP_BL_10, //11 1101 1101 - OP_BL_10, //11 1101 1110 - OP_BL_10, //11 1101 1111 - - OP_BL_THUMB, //11 1110 0000 - OP_BL_THUMB, //11 1110 0001 - OP_BL_THUMB, //11 1110 0010 - OP_BL_THUMB, //11 1110 0011 - OP_BL_THUMB, //11 1110 0100 - OP_BL_THUMB, //11 1110 0101 - OP_BL_THUMB, //11 1110 0110 - OP_BL_THUMB, //11 1110 0111 - OP_BL_THUMB, //11 1110 1000 - OP_BL_THUMB, //11 1110 1001 - OP_BL_THUMB, //11 1110 1010 - OP_BL_THUMB, //11 1110 1011 - OP_BL_THUMB, //11 1110 1100 - OP_BL_THUMB, //11 1110 1101 - OP_BL_THUMB, //11 1110 1110 - OP_BL_THUMB, //11 1110 1111 - - OP_BL_THUMB, //11 1111 0000 - OP_BL_THUMB, //11 1111 0001 - OP_BL_THUMB, //11 1111 0010 - OP_BL_THUMB, //11 1111 0011 - OP_BL_THUMB, //11 1111 0100 - OP_BL_THUMB, //11 1111 0101 - OP_BL_THUMB, //11 1111 0110 - OP_BL_THUMB, //11 1111 0111 - OP_BL_THUMB, //11 1111 1000 - OP_BL_THUMB, //11 1111 1001 - OP_BL_THUMB, //11 1111 1010 - OP_BL_THUMB, //11 1111 1011 - OP_BL_THUMB, //11 1111 1100 - OP_BL_THUMB, //11 1111 1101 - OP_BL_THUMB, //11 1111 1110 - OP_BL_THUMB, //11 1111 1111 -}; //1089 - +/* 00 0000 0000 */ TABDECL(OP_LSL_0), // OP_LSL_0 +/* 00 0000 0001 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0010 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0011 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0100 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0101 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0110 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 0111 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1000 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1001 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1010 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1011 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1100 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1101 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1110 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0000 1111 */ TABDECL(OP_LSL), // OP_LSL + +/* 00 0001 0000 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0001 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0010 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0011 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0100 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0101 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0110 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 0111 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1000 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1001 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1010 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1011 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1100 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1101 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1110 */ TABDECL(OP_LSL), // OP_LSL +/* 00 0001 1111 */ TABDECL(OP_LSL), // OP_LSL + +/* 00 0010 0000 */ TABDECL(OP_LSR_0), // OP_LSR_0 +/* 00 0010 0001 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0010 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0011 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0100 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0101 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0110 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 0111 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1000 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1001 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1010 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1011 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1100 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1101 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1110 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0010 1111 */ TABDECL(OP_LSR), // OP_LSR + +/* 00 0011 0000 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0001 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0010 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0011 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0100 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0101 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0110 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 0111 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1000 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1001 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1010 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1011 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1100 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1101 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1110 */ TABDECL(OP_LSR), // OP_LSR +/* 00 0011 1111 */ TABDECL(OP_LSR), // OP_LSR + +/* 00 0100 0000 */ TABDECL(OP_ASR_0), // OP_ASR_0 +/* 00 0100 0001 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0010 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0011 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0100 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0101 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0110 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 0111 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1000 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1001 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1010 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1011 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1100 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1101 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1110 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0100 1111 */ TABDECL(OP_ASR), // OP_ASR + +/* 00 0101 0000 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0001 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0010 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0011 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0100 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0101 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0110 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 0111 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1000 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1001 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1010 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1011 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1100 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1101 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1110 */ TABDECL(OP_ASR), // OP_ASR +/* 00 0101 1111 */ TABDECL(OP_ASR), // OP_ASR + +/* 00 0110 0000 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0001 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0010 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0011 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0100 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0101 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0110 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 0111 */ TABDECL(OP_ADD_REG), // OP_ADD_REG +/* 00 0110 1000 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1001 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1010 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1011 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1100 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1101 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1110 */ TABDECL(OP_SUB_REG), // OP_SUB_REG +/* 00 0110 1111 */ TABDECL(OP_SUB_REG), // OP_SUB_REG + +/* 00 0111 0000 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0001 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0010 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0011 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0100 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0101 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0110 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 0111 */ TABDECL(OP_ADD_IMM3), // OP_ADD_IMM3 +/* 00 0111 1000 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1001 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1010 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1011 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1100 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1101 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1110 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 +/* 00 0111 1111 */ TABDECL(OP_SUB_IMM3), // OP_SUB_IMM3 + +/* 00 1000 0000 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0001 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0010 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0011 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0100 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0101 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0110 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 0111 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1000 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1001 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1010 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1011 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1100 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1101 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1110 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1000 1111 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 + +/* 00 1001 0000 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0001 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0010 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0011 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0100 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0101 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0110 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 0111 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1000 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1001 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1010 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1011 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1100 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1101 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1110 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 +/* 00 1001 1111 */ TABDECL(OP_MOV_IMM8), // OP_MOV_IMM8 + +/* 00 1010 0000 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0001 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0010 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0011 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0100 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0101 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0110 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 0111 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1000 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1001 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1010 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1011 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1100 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1101 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1110 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1010 1111 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 + +/* 00 1011 0000 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0001 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0010 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0011 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0100 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0101 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0110 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 0111 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1000 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1001 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1010 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1011 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1100 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1101 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1110 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 +/* 00 1011 1111 */ TABDECL(OP_CMP_IMM8), // OP_CMP_IMM8 + +/* 00 1100 0000 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0001 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0010 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0011 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0100 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0101 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0110 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 0111 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1000 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1001 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1010 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1011 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1100 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1101 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1110 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1100 1111 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 + +/* 00 1101 0000 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0001 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0010 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0011 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0100 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0101 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0110 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 0111 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1000 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1001 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1010 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1011 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1100 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1101 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1110 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 +/* 00 1101 1111 */ TABDECL(OP_ADD_IMM8), // OP_ADD_IMM8 + +/* 00 1110 0000 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0001 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0010 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0011 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0100 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0101 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0110 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 0111 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1000 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1001 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1010 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1011 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1100 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1101 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1110 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1110 1111 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 + +/* 00 1111 0000 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0001 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0010 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0011 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0100 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0101 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0110 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 0111 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1000 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1001 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1010 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1011 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1100 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1101 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1110 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 +/* 00 1111 1111 */ TABDECL(OP_SUB_IMM8), // OP_SUB_IMM8 + +/* 01 0000 0000 */ TABDECL(OP_AND), // OP_AND +/* 01 0000 0001 */ TABDECL(OP_EOR), // OP_EOR +/* 01 0000 0010 */ TABDECL(OP_LSL_REG), // OP_LSL_REG +/* 01 0000 0011 */ TABDECL(OP_LSR_REG), // OP_LSR_REG +/* 01 0000 0100 */ TABDECL(OP_ASR_REG), // OP_ASR_REG +/* 01 0000 0101 */ TABDECL(OP_ADC_REG), // OP_ADC_REG +/* 01 0000 0110 */ TABDECL(OP_SBC_REG), // OP_SBC_REG +/* 01 0000 0111 */ TABDECL(OP_ROR_REG), // OP_ROR_REG +/* 01 0000 1000 */ TABDECL(OP_TST), // OP_TST +/* 01 0000 1001 */ TABDECL(OP_NEG), // OP_NEG +/* 01 0000 1010 */ TABDECL(OP_CMP), // OP_CMP +/* 01 0000 1011 */ TABDECL(OP_CMN), // OP_CMN +/* 01 0000 1100 */ TABDECL(OP_ORR), // OP_ORR +/* 01 0000 1101 */ TABDECL(OP_MUL_REG), // OP_MUL_REG +/* 01 0000 1110 */ TABDECL(OP_BIC), // OP_BIC +/* 01 0000 1111 */ TABDECL(OP_MVN), // OP_MVN + +/* 01 0001 0000 */ TABDECL(OP_ADD_SPE), // OP_ADD_SPE +/* 01 0001 0001 */ TABDECL(OP_ADD_SPE), // OP_ADD_SPE +/* 01 0001 0010 */ TABDECL(OP_ADD_SPE), // OP_ADD_SPE +/* 01 0001 0011 */ TABDECL(OP_ADD_SPE), // OP_ADD_SPE +/* 01 0001 0100 */ TABDECL(OP_CMP_SPE), // OP_CMP_SPE +/* 01 0001 0101 */ TABDECL(OP_CMP_SPE), // OP_CMP_SPE +/* 01 0001 0110 */ TABDECL(OP_CMP_SPE), // OP_CMP_SPE +/* 01 0001 0111 */ TABDECL(OP_CMP_SPE), // OP_CMP_SPE +/* 01 0001 1000 */ TABDECL(OP_MOV_SPE), // OP_MOV_SPE +/* 01 0001 1001 */ TABDECL(OP_MOV_SPE), // OP_MOV_SPE +/* 01 0001 1010 */ TABDECL(OP_MOV_SPE), // OP_MOV_SPE +/* 01 0001 1011 */ TABDECL(OP_MOV_SPE), // OP_MOV_SPE +/* 01 0001 1100 */ TABDECL(OP_BX_THUMB), // OP_BX_THUMB +/* 01 0001 1101 */ TABDECL(OP_BX_THUMB), // OP_BX_THUMB +/* 01 0001 1110 */ TABDECL(OP_BLX_THUMB), // OP_BLX_THUMB +/* 01 0001 1111 */ TABDECL(OP_BLX_THUMB), // OP_BLX_THUMB + +/* 01 0010 0000 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0001 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0010 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0011 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0100 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0101 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0110 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 0111 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1000 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1001 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1010 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1011 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1100 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1101 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1110 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0010 1111 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL + +/* 01 0011 0000 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0001 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0010 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0011 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0100 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0101 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0110 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 0111 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1000 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1001 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1010 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1011 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1100 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1101 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1110 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL +/* 01 0011 1111 */ TABDECL(OP_LDR_PCREL), // OP_LDR_PCREL + +/* 01 0100 0000 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0001 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0010 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0011 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0100 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0101 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0110 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 0111 */ TABDECL(OP_STR_REG_OFF), // OP_STR_REG_OFF +/* 01 0100 1000 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1001 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1010 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1011 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1100 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1101 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1110 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF +/* 01 0100 1111 */ TABDECL(OP_STRH_REG_OFF), // OP_STRH_REG_OFF + +/* 01 0101 0000 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0001 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0010 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0011 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0100 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0101 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0110 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 0111 */ TABDECL(OP_STRB_REG_OFF), // OP_STRB_REG_OFF +/* 01 0101 1000 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1001 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1010 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1011 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1100 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1101 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1110 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF +/* 01 0101 1111 */ TABDECL(OP_LDRSB_REG_OFF), // OP_LDRSB_REG_OFF + +/* 01 0110 0000 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0001 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0010 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0011 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0100 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0101 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0110 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 0111 */ TABDECL(OP_LDR_REG_OFF), // OP_LDR_REG_OFF +/* 01 0110 1000 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1001 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1010 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1011 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1100 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1101 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1110 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF +/* 01 0110 1111 */ TABDECL(OP_LDRH_REG_OFF), // OP_LDRH_REG_OFF + +/* 01 0111 0000 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0001 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0010 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0011 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0100 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0101 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0110 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 0111 */ TABDECL(OP_LDRB_REG_OFF), // OP_LDRB_REG_OFF +/* 01 0111 1000 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1001 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1010 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1011 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1100 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1101 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1110 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF +/* 01 0111 1111 */ TABDECL(OP_LDRSH_REG_OFF), // OP_LDRSH_REG_OFF + +/* 01 1000 0000 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0001 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0010 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0011 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0100 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0101 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0110 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 0111 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1000 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1001 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1010 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1011 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1100 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1101 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1110 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1000 1111 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF + +/* 01 1001 0000 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0001 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0010 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0011 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0100 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0101 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0110 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 0111 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1000 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1001 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1010 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1011 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1100 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1101 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1110 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF +/* 01 1001 1111 */ TABDECL(OP_STR_IMM_OFF), // OP_STR_IMM_OFF + +/* 01 1010 0000 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0001 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0010 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0011 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0100 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0101 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0110 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 0111 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1000 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1001 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1010 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1011 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1100 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1101 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1110 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1010 1111 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF + +/* 01 1011 0000 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0001 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0010 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0011 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0100 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0101 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0110 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 0111 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1000 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1001 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1010 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1011 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1100 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1101 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1110 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF +/* 01 1011 1111 */ TABDECL(OP_LDR_IMM_OFF), // OP_LDR_IMM_OFF + +/* 01 1100 0000 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0001 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0010 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0011 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0100 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0101 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0110 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 0111 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1000 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1001 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1010 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1011 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1100 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1101 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1110 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1100 1111 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF + +/* 01 1101 0000 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0001 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0010 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0011 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0100 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0101 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0110 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 0111 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1000 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1001 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1010 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1011 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1100 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1101 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1110 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF +/* 01 1101 1111 */ TABDECL(OP_STRB_IMM_OFF), // OP_STRB_IMM_OFF + +/* 01 1110 0000 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0001 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0010 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0011 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0100 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0101 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0110 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 0111 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1000 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1001 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1010 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1011 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1100 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1101 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1110 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1110 1111 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF + +/* 01 1111 0000 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0001 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0010 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0011 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0100 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0101 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0110 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 0111 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1000 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1001 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1010 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1011 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1100 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1101 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1110 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF +/* 01 1111 1111 */ TABDECL(OP_LDRB_IMM_OFF), // OP_LDRB_IMM_OFF + +/* 10 0000 0000 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0001 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0010 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0011 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0100 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0101 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0110 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 0111 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1000 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1001 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1010 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1011 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1100 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1101 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1110 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0000 1111 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF + +/* 10 0001 0000 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0001 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0010 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0011 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0100 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0101 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0110 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 0111 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1000 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1001 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1010 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1011 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1100 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1101 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1110 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF +/* 10 0001 1111 */ TABDECL(OP_STRH_IMM_OFF), // OP_STRH_IMM_OFF + +/* 10 0010 0000 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0001 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0010 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0011 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0100 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0101 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0110 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 0111 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1000 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1001 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1010 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1011 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1100 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1101 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1110 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0010 1111 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF + +/* 10 0011 0000 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0001 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0010 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0011 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0100 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0101 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0110 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 0111 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1000 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1001 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1010 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1011 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1100 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1101 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1110 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF +/* 10 0011 1111 */ TABDECL(OP_LDRH_IMM_OFF), // OP_LDRH_IMM_OFF + +/* 10 0100 0000 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0001 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0010 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0011 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0100 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0101 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0110 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 0111 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1000 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1001 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1010 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1011 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1100 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1101 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1110 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0100 1111 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL + +/* 10 0101 0000 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0001 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0010 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0011 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0100 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0101 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0110 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 0111 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1000 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1001 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1010 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1011 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1100 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1101 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1110 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL +/* 10 0101 1111 */ TABDECL(OP_STR_SPREL), // OP_STR_SPREL + +/* 10 0110 0000 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0001 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0010 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0011 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0100 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0101 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0110 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 0111 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1000 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1001 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1010 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1011 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1100 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1101 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1110 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0110 1111 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL + +/* 10 0111 0000 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0001 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0010 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0011 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0100 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0101 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0110 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 0111 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1000 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1001 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1010 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1011 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1100 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1101 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1110 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL +/* 10 0111 1111 */ TABDECL(OP_LDR_SPREL), // OP_LDR_SPREL + +/* 10 1000 0000 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0001 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0010 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0011 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0100 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0101 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0110 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 0111 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1000 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1001 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1010 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1011 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1100 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1101 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1110 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1000 1111 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC + +/* 10 1001 0000 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0001 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0010 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0011 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0100 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0101 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0110 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 0111 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1000 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1001 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1010 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1011 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1100 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1101 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1110 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC +/* 10 1001 1111 */ TABDECL(OP_ADD_2PC), // OP_ADD_2PC + +/* 10 1010 0000 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0001 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0010 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0011 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0100 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0101 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0110 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 0111 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1000 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1001 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1010 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1011 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1100 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1101 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1110 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1010 1111 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP + +/* 10 1011 0000 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0001 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0010 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0011 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0100 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0101 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0110 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 0111 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1000 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1001 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1010 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1011 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1100 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1101 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1110 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP +/* 10 1011 1111 */ TABDECL(OP_ADD_2SP), // OP_ADD_2SP + +/* 10 1100 0000 */ TABDECL(OP_ADJUST_P_SP), // OP_ADJUST_P_SP +/* 10 1100 0001 */ TABDECL(OP_ADJUST_P_SP), // OP_ADJUST_P_SP +/* 10 1100 0010 */ TABDECL(OP_ADJUST_M_SP), // OP_ADJUST_M_SP +/* 10 1100 0011 */ TABDECL(OP_ADJUST_M_SP), // OP_ADJUST_M_SP +/* 10 1100 0100 */ TABDECL(OP_UND_THUMB), +/* 10 1100 0101 */ TABDECL(OP_UND_THUMB), +/* 10 1100 0110 */ TABDECL(OP_UND_THUMB), +/* 10 1100 0111 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1000 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1001 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1010 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1011 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1100 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1101 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1110 */ TABDECL(OP_UND_THUMB), +/* 10 1100 1111 */ TABDECL(OP_UND_THUMB), + +/* 10 1101 0000 */ TABDECL(OP_PUSH), // OP_PUSH +/* 10 1101 0001 */ TABDECL(OP_PUSH), // OP_PUSH +/* 10 1101 0010 */ TABDECL(OP_PUSH), // OP_PUSH +/* 10 1101 0011 */ TABDECL(OP_PUSH), // OP_PUSH +/* 10 1101 0100 */ TABDECL(OP_PUSH_LR), // OP_PUSH_LR +/* 10 1101 0101 */ TABDECL(OP_PUSH_LR), // OP_PUSH_LR +/* 10 1101 0110 */ TABDECL(OP_PUSH_LR), // OP_PUSH_LR +/* 10 1101 0111 */ TABDECL(OP_PUSH_LR), // OP_PUSH_LR +/* 10 1101 1000 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1001 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1010 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1011 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1100 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1101 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1110 */ TABDECL(OP_UND_THUMB), +/* 10 1101 1111 */ TABDECL(OP_UND_THUMB), + +/* 10 1110 0000 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0001 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0010 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0011 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0100 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0101 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0110 */ TABDECL(OP_UND_THUMB), +/* 10 1110 0111 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1000 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1001 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1010 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1011 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1100 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1101 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1110 */ TABDECL(OP_UND_THUMB), +/* 10 1110 1111 */ TABDECL(OP_UND_THUMB), + +/* 10 1111 0000 */ TABDECL(OP_POP), // OP_POP +/* 10 1111 0001 */ TABDECL(OP_POP), // OP_POP +/* 10 1111 0010 */ TABDECL(OP_POP), // OP_POP +/* 10 1111 0011 */ TABDECL(OP_POP), // OP_POP +/* 10 1111 0100 */ TABDECL(OP_POP_PC), // OP_POP_PC +/* 10 1111 0101 */ TABDECL(OP_POP_PC), // OP_POP_PC +/* 10 1111 0110 */ TABDECL(OP_POP_PC), // OP_POP_PC +/* 10 1111 0111 */ TABDECL(OP_POP_PC), // OP_POP_PC +/* 10 1111 1000 */ TABDECL(OP_BKPT_THUMB), // OP_BKPT_THUMB +/* 10 1111 1001 */ TABDECL(OP_BKPT_THUMB), // OP_BKPT_THUMB +/* 10 1111 1010 */ TABDECL(OP_BKPT_THUMB), // OP_BKPT_THUMB +/* 10 1111 1011 */ TABDECL(OP_BKPT_THUMB), // OP_BKPT_THUMB +/* 10 1111 1100 */ TABDECL(OP_UND_THUMB), +/* 10 1111 1101 */ TABDECL(OP_UND_THUMB), +/* 10 1111 1110 */ TABDECL(OP_UND_THUMB), +/* 10 1111 1111 */ TABDECL(OP_UND_THUMB), + +/* 11 0000 0000 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0001 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0010 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0011 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0100 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0101 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0110 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 0111 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1000 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1001 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1010 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1011 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1100 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1101 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1110 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0000 1111 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB + +/* 11 0001 0000 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0001 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0010 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0011 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0100 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0101 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0110 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 0111 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1000 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1001 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1010 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1011 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1100 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1101 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1110 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB +/* 11 0001 1111 */ TABDECL(OP_STMIA_THUMB), // OP_STMIA_THUMB + +/* 11 0010 0000 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0001 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0010 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0011 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0100 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0101 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0110 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 0111 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1000 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1001 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1010 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1011 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1100 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1101 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1110 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0010 1111 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB + +/* 11 0011 0000 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0001 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0010 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0011 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0100 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0101 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0110 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 0111 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1000 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1001 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1010 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1011 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1100 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1101 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1110 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB +/* 11 0011 1111 */ TABDECL(OP_LDMIA_THUMB), // OP_LDMIA_THUMB + +/* 11 0100 0000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 0111 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0100 1111 */ TABDECL(OP_B_COND), // OP_B_COND + +/* 11 0101 0000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 0111 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0101 1111 */ TABDECL(OP_B_COND), // OP_B_COND + +/* 11 0110 0000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 0111 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0110 1111 */ TABDECL(OP_B_COND), // OP_B_COND + +/* 11 0111 0000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0100 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0101 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0110 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 0111 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 1000 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 1001 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 1010 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 1011 */ TABDECL(OP_B_COND), // OP_B_COND +/* 11 0111 1100 */ TABDECL(OP_SWI_THUMB), // OP_SWI_THUMB +/* 11 0111 1101 */ TABDECL(OP_SWI_THUMB), // OP_SWI_THUMB +/* 11 0111 1110 */ TABDECL(OP_SWI_THUMB), // OP_SWI_THUMB +/* 11 0111 1111 */ TABDECL(OP_SWI_THUMB), // OP_SWI_THUMB + +/* 11 1000 0000 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0001 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0010 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0011 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0100 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0101 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0110 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 0111 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1000 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1001 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1010 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1011 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1100 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1101 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1110 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1000 1111 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND + +/* 11 1001 0000 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0001 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0010 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0011 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0100 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0101 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0110 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 0111 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1000 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1001 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1010 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1011 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1100 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1101 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1110 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND +/* 11 1001 1111 */ TABDECL(OP_B_UNCOND), // OP_B_UNCOND + +/* 11 1010 0000 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0001 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0010 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0011 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0100 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0101 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0110 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 0111 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1000 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1001 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1010 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1011 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1100 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1101 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1110 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1010 1111 */ TABDECL(OP_BLX), // OP_BLX + +/* 11 1011 0000 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0001 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0010 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0011 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0100 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0101 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0110 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 0111 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1000 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1001 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1010 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1011 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1100 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1101 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1110 */ TABDECL(OP_BLX), // OP_BLX +/* 11 1011 1111 */ TABDECL(OP_BLX), // OP_BLX + +/* 11 1100 0000 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0001 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0010 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0011 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0100 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0101 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0110 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 0111 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1000 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1001 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1010 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1011 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1100 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1101 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1110 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1100 1111 */ TABDECL(OP_BL_10), // OP_BL_10 + +/* 11 1101 0000 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0001 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0010 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0011 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0100 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0101 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0110 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 0111 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1000 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1001 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1010 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1011 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1100 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1101 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1110 */ TABDECL(OP_BL_10), // OP_BL_10 +/* 11 1101 1111 */ TABDECL(OP_BL_10), // OP_BL_10 + +/* 11 1110 0000 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0001 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0010 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0011 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0100 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0101 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0110 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 0111 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1000 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1001 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1010 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1011 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1100 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1101 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1110 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1110 1111 */ TABDECL(OP_BL_11), // OP_BL_11 + +/* 11 1111 0000 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0001 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0010 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0011 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0100 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0101 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0110 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 0111 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1000 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1001 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1010 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1011 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1100 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1101 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1110 */ TABDECL(OP_BL_11), // OP_BL_11 +/* 11 1111 1111 */ TABDECL(OP_BL_11), // OP_BL_11 + diff -Nru audacious-plugins-4.1/src/xsf/desmume/types.h audacious-plugins-4.2/src/xsf/desmume/types.h --- audacious-plugins-4.1/src/xsf/desmume/types.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/types.h 2022-07-10 01:12:34.000000000 +0000 @@ -1,139 +1,105 @@ -/* Copyright (C) 2005 Guillaume Duhamel +/* + Copyright (C) 2005 Guillaume Duhamel + Copyright (C) 2008-2012 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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. - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU General Public License + along with the this software. If not, see . */ -#ifndef TYPES_HPP -#define TYPES_HPP +#pragma once -#ifndef FASTCALL -#ifdef __MINGW32__ -#define FASTCALL __attribute__((fastcall)) -#elif defined (__i386__) -#define FASTCALL __attribute__((regparm(3))) -#else -#define FASTCALL -#endif -#endif +#include +#include -#ifndef INLINE -#ifdef _MSC_VER -#define INLINE _inline -#else -#define INLINE inline -#endif +using u64 = uint64_t; +using s64 = int64_t; +using u32 = uint32_t; +using s32 = int32_t; +using u16 = uint16_t; +using s16 = int16_t; +using u8 = uint8_t; +using s8 = int8_t; +#define FORCEINLINE inline + +#ifdef _WINDOWS +# define HAVE_LIBAGG +# define ENABLE_SSE +# define ENABLE_SSE2 #endif -#ifdef DESMUME_COCOA -#ifdef __BIG_ENDIAN__ -#define WORDS_BIGENDIAN -#endif +#ifdef __GNUC__ +# ifdef __SSE__ +# define ENABLE_SSE +# endif +# ifdef __SSE2__ +# define ENABLE_SSE2 +# endif #endif -#if defined(__LP64__) -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; -typedef unsigned long u64; -typedef unsigned long pointer; +#ifdef NOSSE +# undef ENABLE_SSE +#endif -typedef signed char s8; -typedef signed short s16; -typedef signed int s32; -typedef signed long s64; -#else -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; -#ifdef _MSC_VER -typedef unsigned __int64 u64; -#else -typedef unsigned long long u64; +#ifdef NOSSE2 +# undef ENABLE_SSE2 #endif -typedef unsigned long pointer; -typedef signed char s8; -typedef signed short s16; -typedef signed long s32; #ifdef _MSC_VER -typedef __int64 s64; -#else -typedef signed long long s64; -#endif +# define strcasecmp(x, y) _stricmp(x, y) +# define strncasecmp(x, y, l) strnicmp(x, y, l) +# define snprintf _snprintf #endif -typedef u8 uint8; -typedef u16 uint16; +#ifndef MAX_PATH +# ifdef __GNUC__ +# include +# ifndef PATH_MAX +# define MAX_PATH 1024 +# else +# define MAX_PATH PATH_MAX +# endif +# endif +#endif -#ifndef OBJ_C -typedef u32 uint32; +#if defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define DS_ALIGN(X) __declspec(align(X)) +#elif defined(__GNUC__) +# define DS_ALIGN(X) __attribute__ ((aligned (X))) #else -#define uint32 u32 //uint32 is defined in Leopard somewhere, avoid conflicts +# define DS_ALIGN(X) #endif -/*---------- GPU3D fixed-points types -----------*/ - -typedef s32 f32; -#define inttof32(n) ((n) << 12) -#define f32toint(n) ((n) >> 12) -#define floattof32(n) ((int32)((n) * (1 << 12))) -#define f32tofloat(n) (((float)(n)) / (float)(1<<12)) - -typedef s16 t16; -#define f32tot16(n) ((t16)(n >> 8)) -#define inttot16(n) ((n) << 4) -#define t16toint(n) ((n) >> 4) -#define floattot16(n) ((t16)((n) * (1 << 4))) -#define t16ofloat(n) (((float)(n)) / (float)(1<<4)) - -typedef s16 v16; -#define inttov16(n) ((n) << 12) -#define f32tov16(n) (n) -#define floattov16(n) ((v16)((n) * (1 << 12))) -#define v16toint(n) ((n) >> 12) -#define v16tofloat(n) (((float)(n)) / (float)(1<<12)) - -typedef s16 v10; -#define inttov10(n) ((n) << 9) -#define f32tov10(n) ((v10)(n >> 3)) -#define v10toint(n) ((n) >> 9) -#define floattov10(n) ((v10)((n) * (1 << 9))) -#define v10tofloat(n) (((float)(n)) / (float)(1<<9)) +#define CACHE_ALIGN DS_ALIGN(32) -/*----------------------*/ - -#ifndef OBJ_C -typedef int BOOL; +#ifdef __MINGW32__ +# undef FASTCALL +# undef LDM_FASTCALL +# define FASTCALL __attribute__((fastcall)) +# define LDM_FASTCALL +#elif defined (__i386__) && !defined(__clang__) +# define FASTCALL __attribute__((regparm(3))) +# define LDM_FASTCALL #else -//apple also defines BOOL -typedef int desmume_BOOL; -#define BOOL desmume_BOOL +# define FASTCALL +# define LDM_FASTCALL #endif -#ifndef true -#define true 1 -#endif - -#ifndef false -#define false 0 -#endif +/*----------------------*/ -#ifdef __GNUC__ -#define PACKED __attribute__((packed)) +#ifdef __BIG_ENDIAN__ +# ifndef WORDS_BIGENDIAN +# define WORDS_BIGENDIAN +# endif #endif #ifdef WORDS_BIGENDIAN @@ -143,29 +109,40 @@ #endif /* little endian (ds' endianess) to local endianess convert macros */ -#ifdef LOCAL_BE /* local arch is big endian */ -# define LE_TO_LOCAL_16(x) ((((x)&0xff)<<8)|(((x)>>8)&0xff)) -# define LE_TO_LOCAL_32(x) ((((x)&0xff)<<24)|(((x)&0xff00)<<8)|(((x)>>8)&0xff00)|(((x)>>24)&0xff)) -# define LOCAL_TO_LE_16(x) ((((x)&0xff)<<8)|(((x)>>8)&0xff)) -# define LOCAL_TO_LE_32(x) ((((x)&0xff)<<24)|(((x)&0xff00)<<8)|(((x)>>8)&0xff00)|(((x)>>24)&0xff)) -#else /* local arch is little endian */ -# define LE_TO_LOCAL_16(x) (x) -# define LE_TO_LOCAL_32(x) (x) -# define LOCAL_TO_LE_16(x) (x) -# define LOCAL_TO_LE_32(x) (x) -#endif - -/* kilobytes and megabytes macro */ -#define MB(x) ((x)*1024*1024) -#define KB(x) ((x)*1024) - -#define CPU_STR(c) ((c==ARM9)?"ARM9":"ARM7") -typedef enum +#ifdef LOCAL_BE /* local arch is big endian */ +inline uint16_t LE_TO_LOCAL_16(uint16_t x) { return ((x & 0xff) << 8) | ((x >> 8) & 0xff); } +inline uint32_t LE_TO_LOCAL_32(uint32_t x) { return ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff); } +inline uint64_t LE_TO_LOCAL_64(uint64_t x) { - ARM9 = 0, - ARM7 = 1 -} cpu_id_t; + return ((x & 0xff) << 56) | ((x & 0xff00) << 40) | ((x & 0xff0000) << 24) | ((x & 0xff000000) << 8) | + ((x >> 8) & 0xff000000) | ((x >> 24) & 0xff00) | ((x >> 40) & 0xff00) | ((x >> 56) & 0xff); +} +#else /* local arch is little endian */ +inline uint16_t LE_TO_LOCAL_16(uint16_t x) { return x; } +inline uint32_t LE_TO_LOCAL_32(uint32_t x) { return x; } +inline uint64_t LE_TO_LOCAL_64(uint64_t x) { return x; } +#endif -#define __PACKED __attribute__((__packed__)) +template inline size_t ARRAY_SIZE(T (&)[N]) { return N; } -#endif +inline double u64_to_double(uint64_t u) +{ + union + { + uint64_t a; + double b; + } fuxor; + fuxor.a = u; + return fuxor.b; +} + +// fairly standard for loop macros +#define MACRODO1(TRICK, TODO) { int X = TRICK; TODO; } +#define MACRODO2(TRICK, TODO) { MACRODO1((TRICK), TODO) MACRODO1(((TRICK) + 1), TODO) } +#define MACRODO4(TRICK, TODO) { MACRODO2((TRICK), TODO) MACRODO2(((TRICK) + 2), TODO) } + +template inline void reconstruct(T *t) +{ + t->~T(); + new(t) T(); +} diff -Nru audacious-plugins-4.1/src/xsf/desmume/version.h audacious-plugins-4.2/src/xsf/desmume/version.h --- audacious-plugins-4.1/src/xsf/desmume/version.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/desmume/version.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,20 @@ +/* + Copyright (C) 2009-2013 DeSmuME team + + 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 + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file 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 the this software. If not, see . +*/ + +#pragma once + +const char *EMU_DESMUME_NAME_AND_VERSION(); diff -Nru audacious-plugins-4.1/src/xsf/Makefile audacious-plugins-4.2/src/xsf/Makefile --- audacious-plugins-4.1/src/xsf/Makefile 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/Makefile 2022-07-10 01:12:34.000000000 +0000 @@ -1,10 +1,13 @@ PLUGIN = xsf${PLUGIN_SUFFIX} -SRCS = corlett.cc \ - plugin.cc \ - vio2sf.cc \ - desmume/armcpu.cc desmume/bios.cc desmume/FIFO.cc desmume/matrix.cc desmume/MMU.cc desmume/SPU.cc \ - desmume/arm_instructions.cc desmume/cp15.cc desmume/GPU.cc desmume/mc.cc desmume/NDSSystem.cc desmume/thumb_instructions.cc \ +SRCS = plugin.cc \ + sndif2sf.cc \ + XSFFile.cc \ + spu/adpcmdecoder.cc spu/interpolator.cc spu/samplecache.cc spu/sampledata.cc \ + desmume/armcpu.cc desmume/bios.cc desmume/FIFO.cc desmume/metaspu.cc desmume/MMU.cc \ + desmume/arm_instructions.cc desmume/cp15.cc desmume/mc.cc desmume/NDSSystem.cc desmume/SPU.cc \ + desmume/thumb_instructions.cc desmume/readwrite.cc desmume/emufile.cc desmume/firmware.cc \ + desmume/slot1.cc desmume/slot1_retail.cc include ../../buildsys.mk include ../../extra.mk diff -Nru audacious-plugins-4.1/src/xsf/meson.build audacious-plugins-4.2/src/xsf/meson.build --- audacious-plugins-4.1/src/xsf/meson.build 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/meson.build 2022-07-10 01:12:34.000000000 +0000 @@ -1,7 +1,7 @@ plugin_sources = [ - 'corlett.cc', 'plugin.cc', - 'vio2sf.cc' + 'sndif2sf.cc', + 'XSFFile.cc' ] @@ -10,17 +10,29 @@ 'desmume/arm_instructions.cc', 'desmume/bios.cc', 'desmume/cp15.cc', + 'desmume/emufile.cc', 'desmume/FIFO.cc', - 'desmume/GPU.cc', - 'desmume/matrix.cc', + 'desmume/firmware.cc', 'desmume/mc.cc', + 'desmume/metaspu.cc', 'desmume/MMU.cc', 'desmume/NDSSystem.cc', + 'desmume/readwrite.cc', + 'desmume/slot1.cc', + 'desmume/slot1_retail.cc', 'desmume/SPU.cc', 'desmume/thumb_instructions.cc' ] +spu_sources = [ + 'spu/adpcmdecoder.cc', + 'spu/interpolator.cc', + 'spu/samplecache.cc', + 'spu/sampledata.cc' +] + + cpp_args = cxx.get_supported_arguments([ '-Wno-sign-compare', '-Wno-shift-negative-value' @@ -30,6 +42,7 @@ shared_module('xsf', plugin_sources, desmume_sources, + spu_sources, dependencies: [audacious_dep, zlib_dep], cpp_args: cpp_args, name_prefix: '', diff -Nru audacious-plugins-4.1/src/xsf/plugin.cc audacious-plugins-4.2/src/xsf/plugin.cc --- audacious-plugins-4.1/src/xsf/plugin.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/plugin.cc 2022-07-10 01:12:34.000000000 +0000 @@ -1,32 +1,48 @@ /* - Audio Overload SDK - main driver. for demonstration only, not user friendly! - - Copyright (c) 2007-2008 R. Belmont and Richard Bannister. - - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the names of R. Belmont and Richard Bannister nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + * xSF - 2SF Player + * Copyright (c) 2014-2020 Naram Qashat + * Copyright (c) 2020-2021 Adam Higerd + * + * Partially derived from Audio Overload SDK + * Copyright (c) 2007-2008 R. Belmont and Richard Bannister. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the names of R. Belmont and Richard Bannister nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Utilizes a modified DeSmuME v0.9.9 SVN for playback + * http://desmume.org/ + * DeSmuME is licensed under the GNU General Public License, version 2 or later. + * See the accompanying source files for more information. + */ #include #include #include +#include +#include +#include #include #include @@ -34,9 +50,17 @@ #include #include -#include "ao.h" -#include "corlett.h" -#include "vio2sf.h" +#include "desmume/NDSSystem.h" +#include "spu/samplecache.h" +#include "sndif2sf.h" +#include "XSFFile.h" + +#if _WIN32 +#include +#define sleep Sleep +#else +#include +#endif class XSFPlugin : public InputPlugin { @@ -65,15 +89,90 @@ EXPORT XSFPlugin aud_plugin_instance; +class vfsfile_istream : public std::istream { + class vfsfile_streambuf : public std::basic_streambuf { + public: + vfsfile_streambuf(const char* filename) : source(new VFSFile(filename, "rb")), owned(source) {} + vfsfile_streambuf(VFSFile* source) : source(source), owned(nullptr) {} + + protected: + std::streamsize xsgetn(char* s, std::streamsize count) { + return source->fread(s, 1, count); + } + + traits_type::int_type underflow() { + if (source && *source) { + uint8_t result[1]; + int ok = source->fread(reinterpret_cast(result), 1, 1); + if (ok) { + if (source->fseek(-1, VFS_SEEK_CUR)) { + return traits_type::eof(); + } + return result[0]; + } + } else { + } + return traits_type::eof(); + } + + traits_type::int_type uflow() { + if (source && *source) { + uint8_t result[1]; + int ok = source->fread(reinterpret_cast(result), 1, 1); + if (ok) { + return result[0]; + } + } + return traits_type::eof(); + } + + traits_type::pos_type seekoff(traits_type::off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in) { + if (!source || !*source) { + return traits_type::off_type(-1); + } + int err = 1; + if (dir == std::ios_base::beg) { + err = source->fseek(off, VFS_SEEK_SET); + } else if (dir == std::ios_base::end) { + err = source->fseek(off, VFS_SEEK_END); + } else { + err = source->fseek(off, VFS_SEEK_CUR); + } + if (err) { + return traits_type::off_type(-1); + } + return source->ftell(); + } + + traits_type::pos_type seekpos(traits_type::pos_type pos, std::ios_base::openmode which = std::ios_base::in) { + return seekoff(pos, std::ios_base::beg, which); + } + + private: + VFSFile* source; + std::unique_ptr owned; + }; + +public: + vfsfile_istream(const char* source) : std::istream(new vfsfile_streambuf(source)) {} + vfsfile_istream(VFSFile* source) : std::istream(new vfsfile_streambuf(source)) {} + ~vfsfile_istream() { delete rdbuf(nullptr); } +}; + /* xsf_get_lib: called to load secondary files */ static String dirpath; +bool ignore_length; + #define CFG_ID "xsf" const char* const XSFPlugin::defaults[] = { - "ignore_length", "FALSE", - nullptr + "ignore_length", "FALSE", + "fade", "5000", + "sample_rate", "32728", + "interpolation_mode", "none", + nullptr }; bool XSFPlugin::init() @@ -90,127 +189,225 @@ bool XSFPlugin::read_tag(const char *filename, VFSFile &file, Tuple &tuple, Index *image) { - Index buf = file.read_all (); - if (!buf.len()) - return false; - - corlett_t *c; - if (corlett_decode((uint8_t *)buf.begin(), buf.len(), nullptr, nullptr, &c) != AO_SUCCESS) - return false; - - tuple.set_int(Tuple::Length, psfTimeToMS(c->inf_length) + psfTimeToMS(c->inf_fade)); - tuple.set_str(Tuple::Artist, c->inf_artist); - tuple.set_str(Tuple::Album, c->inf_game); - tuple.set_str(Tuple::Title, c->inf_title); - tuple.set_str(Tuple::Copyright, c->inf_copy); - tuple.set_str(Tuple::Quality, _("sequenced")); - tuple.set_str(Tuple::Codec, "GBA/Nintendo DS Audio"); - tuple.set_int(Tuple::Channels, 2); - - free(c); - - return true; + try { + vfsfile_istream vs(&file); + if (!vs) { + return false; + } + XSFFile xsf(vs, 0, 0, true); + + tuple.set_int(Tuple::Length, xsf.GetLengthMS(115000) + xsf.GetFadeMS(5000)); + tuple.set_str(Tuple::Artist, xsf.GetTagValue("artist").c_str()); + tuple.set_str(Tuple::Album, xsf.GetTagValue("game").c_str()); + tuple.set_str(Tuple::Title, xsf.GetTagValue("title").c_str()); + tuple.set_str(Tuple::Copyright, xsf.GetTagValue("copyright").c_str()); + tuple.set_str(Tuple::Quality, _("sequenced")); + tuple.set_str(Tuple::Codec, "Nintendo DS Audio"); + if (xsf.GetTagExists("replaygain_album_gain")) { + tuple.set_int(Tuple::AlbumGain, xsf.GetTagValue("replaygain_album_gain", 1.0) * 1000); + tuple.set_int(Tuple::AlbumPeak, xsf.GetTagValue("replaygain_album_peak", 1.0) * 1000); + tuple.set_int(Tuple::TrackGain, xsf.GetTagValue("replaygain_track_gain", 1.0) * 1000); + tuple.set_int(Tuple::TrackPeak, xsf.GetTagValue("replaygain_track_peak", 1.0) * 1000); + tuple.set_int(Tuple::GainDivisor, 1000); + tuple.set_int(Tuple::PeakDivisor, 1000); + } + + return true; + } catch (std::exception& e) { + std::cerr << "Exception: " << e.what() << std::endl; + return false; + } } -static int xsf_get_length(const Index &buf) +static void xsf_reset(int frameSkip) { - corlett_t *c; - - if (corlett_decode((uint8_t *)buf.begin(), buf.len(), nullptr, nullptr, &c) != AO_SUCCESS) - return -1; + execute = false; + NDS_Reset(); + spuSampleCache.clear(); + execute = true; + + if (frameSkip > 0) { + for (int i = 0; i < frameSkip; ++i) { + NDS_exec(); + } + } + buffer_rope.clear(); +} - bool ignore_length = aud_get_bool(CFG_ID, "ignore_length"); - int length = (!ignore_length) ? psfTimeToMS(c->inf_length) + psfTimeToMS(c->inf_fade) : -1; +bool map2SF(std::vector& rom, XSFFile* xsf) +{ + if (!xsf->IsValidType(0x24)) + return false; + const auto& programSection = xsf->GetProgramSection(); + if (programSection.size()) { + uint32_t offset = Get32BitsLE(&programSection[0]); + uint32_t size = Get32BitsLE(&programSection[4]); + uint32_t finalSize = size + offset; + if (rom.size() < finalSize) { + rom.resize(finalSize + 10); + } + memcpy(&rom[offset], &programSection[8], size); + } + return true; +} - free(c); +bool recursiveLoad2SF(std::vector& rom, XSFFile* xsf, int level) +{ + if (level <= 10 && xsf->GetTagExists("_lib")) + { + vfsfile_istream vs(filename_build({ dirpath, xsf->GetTagValue("_lib").c_str() })); + if (!vs) + return false; + XSFFile libxsf(vs, 4, 8); + if (!recursiveLoad2SF(rom, &libxsf, level + 1)) + return false; + } + + if (!map2SF(rom, xsf)) + return false; + + bool found = true; + for (int n = 2; found; n++) { + std::ostringstream ss; + ss << "_lib" << (n++); + found = xsf->GetTagExists(ss.str()); + if (found) { + vfsfile_istream vs(filename_build({ dirpath, xsf->GetTagValue(ss.str()).c_str() })); + if (!vs) + return false; + XSFFile libxsf(vs, 4, 8); + if (!recursiveLoad2SF(rom, &libxsf, level + 1)) + return false; + } + } + return true; +} - return length; +void setInterp() { + std::string interp = (const char*)aud_get_str(CFG_ID, "interpolation_mode"); + int interpMode = 0; + if (interp == "linear") { + interpMode = 1; + } else if (interp == "cosine") { + interpMode = 2; + } else if (interp == "sharp") { + interpMode = 3; + } + CommonSettings.spuInterpolationMode = (SPUInterpolationMode)interpMode; } bool XSFPlugin::play(const char *filename, VFSFile &file) { int length = -1; - int16_t samples[44100*2]; - int seglen = 44100 / 60; - float pos = 0.0; bool error = false; + int fade = aud_get_int(CFG_ID, "fade"); + int frameSkip = -1; + float pos = 0.0; + setInterp(); - const char * slash = strrchr (filename, '/'); - if (! slash) + const char * slash = strrchr(filename, '/'); + if (!slash) return false; - dirpath = String (str_copy (filename, slash + 1 - filename)); - - Index buf = file.read_all (); - - if (!buf.len()) - { - error = true; - goto ERR_NO_CLOSE; - } - - length = xsf_get_length(buf); - - if (xsf_start(buf.begin(), buf.len()) != AO_SUCCESS) - { - error = true; - goto ERR_NO_CLOSE; - } - - set_stream_bitrate(44100*2*2*8); - open_audio(FMT_S16_NE, 44100, 2); - - while (! check_stop ()) - { - int seek_value = check_seek (); - - if (seek_value >= 0) - { - if (seek_value > pos) - { - while (pos < seek_value) - { - xsf_gen(samples, seglen); - pos += 16.666; - } - } - else if (seek_value < pos) - { - xsf_term(); - - if (xsf_start(buf.begin(), buf.len()) == AO_SUCCESS) - { - pos = 0.0; - while (pos < seek_value) - { - xsf_gen(samples, seglen); - pos += 16.666; /* each segment is 16.666ms */ - } - } - else - { - error = true; - goto CLEANUP; - } - } - } - - xsf_gen(samples, seglen); - pos += 16.666; - - write_audio(samples, seglen * 4); - - bool ignore_length = aud_get_bool(CFG_ID, "ignore_length"); - if (pos >= length && !ignore_length) - goto CLEANUP; - } - -CLEANUP: - xsf_term(); - -ERR_NO_CLOSE: - dirpath = String (); - + while (execute && !check_stop()) { + std::cerr << "waiting for thread to finish..." << std::endl; + sleep(100); + } + + dirpath = String(str_copy(filename, slash + 1 - filename)); + + Index buf = file.read_all(); + try { + vfsfile_istream vs(&file); + if (!vs) { + return false; + } + + XSFFile xsf(vs, 4, 8); + fade = xsf.GetFadeMS(5000); + length = xsf.GetLengthMS(115000) + fade; + + std::vector rom; + if (!recursiveLoad2SF(rom, &xsf, 0) || !rom.size()) + return false; + + if (NDS_Init()) + return false; + + int sampleRate = aud_get_int(CFG_ID, "sample_rate"); + if (sampleRate < 11025 || sampleRate > 96000) + sampleRate = 32728; + SetDesmumeSampleRate(sampleRate); // TODO: config + int BUFFERSIZE = DESMUME_SAMPLE_RATE / 59.837; //truncates to 737, the traditional value, for 44100 + SPU_ChangeSoundCore(SNDIFID_2SF, BUFFERSIZE); + + execute = false; + + MMU_unsetRom(); + NDS_SetROM(rom.data(), rom.size()); + gameInfo.loadData((char*)rom.data(), rom.size()); + + frameSkip = xsf.GetTagValue("_frames", -1); + CommonSettings.rigorous_timing = true; + CommonSettings.spu_advanced = true; + CommonSettings.advanced_timing = true; + + xsf_reset(frameSkip); + + set_stream_bitrate(DESMUME_SAMPLE_RATE*2*2*8); + open_audio(FMT_S16_NE, DESMUME_SAMPLE_RATE, 2); + + ignore_length = aud_get_bool(CFG_ID, "ignore_length"); + while (!check_stop() && (pos < length || ignore_length)) + { + int seek_value = check_seek(); + + if (seek_value >= 0) + { + if (seek_value < pos) { + xsf_reset(frameSkip); + pos = 0; + } + while (pos < seek_value) + { + while (buffer_rope.size()) { + pos += buffer_rope.front().size() * 1000 / DESMUME_SAMPLE_RATE / 4; + buffer_rope.pop_front(); + } + NDS_exec(); + SPU_Emulate_user(); + } + buffer_rope.clear(); + } + + while (!buffer_rope.size() && !check_stop()) { + NDS_exec(); + SPU_Emulate_user(); + } + while (buffer_rope.size() && !check_stop()) { + auto& front = buffer_rope.front(); + if (pos > length - fade && !ignore_length) { + float fadeFactor = (length - pos) / (1.0 * fade); + int sampleCount = front.size() / 2; + int16_t* sampleBuffer = reinterpret_cast(front.data()); + for (int i = 0; i < sampleCount; i++) { + sampleBuffer[i] *= fadeFactor; + } + } + write_audio(front.data(), front.size()); + pos += front.size() * 1000 / DESMUME_SAMPLE_RATE / 4; + buffer_rope.pop_front(); + } + } + } catch (std::exception& e) { + std::cerr << "Exception: " << e.what() << std::endl; + error = true; + } + + MMU_unsetRom(); + NDS_DeInit(); + dirpath = String(); + execute = false; return !error; } @@ -228,9 +425,26 @@ const char *const XSFPlugin::exts[] = { "2sf", "mini2sf", nullptr }; +static const ComboItem sampleRateItems[] = { + ComboItem(N_("32728 Hz"), 32728), + ComboItem(N_("44100 Hz"), 44100), + ComboItem(N_("48000 Hz"), 48000), + ComboItem(N_("65456 Hz"), 65456) +}; + +static const ComboItem interpItems[] = { + ComboItem(N_("None"), "none"), + ComboItem(N_("Linear"), "linear"), + ComboItem(N_("Cosine"), "cosine"), + ComboItem(N_("Sharp"), "sharp") +}; + const PreferencesWidget XSFPlugin::widgets[] = { - WidgetLabel(N_("XSF Configuration")), - WidgetCheck(N_("Ignore length from file"), WidgetBool(CFG_ID, "ignore_length")), + WidgetLabel(N_("XSF Configuration")), + WidgetCheck(N_("Ignore length from file"), WidgetBool(CFG_ID, "ignore_length", [] { ignore_length = aud_get_bool(CFG_ID, "ignore_length"); } )), + WidgetSpin(N_("Default fade time:"), WidgetInt(CFG_ID, "fade"), { 0, 15000, 100, N_("ms") }), + WidgetCombo(N_("Sample rate:"), WidgetInt(CFG_ID, "sample_rate"), {{ sampleRateItems }}), + WidgetCombo(N_("Interpolation mode:"), WidgetString(CFG_ID, "interpolation_mode", setInterp), {{ interpItems }}) }; const PluginPreferences XSFPlugin::prefs = {{widgets}}; diff -Nru audacious-plugins-4.1/src/xsf/sndif2sf.cc audacious-plugins-4.2/src/xsf/sndif2sf.cc --- audacious-plugins-4.1/src/xsf/sndif2sf.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/sndif2sf.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,108 @@ +/** + * Desmume sound interface for audio export + * Copyright (c) 2014 Naram Qashat + * Copyright (c) 2020 Adam Higerd + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the names of R. Belmont and Richard Bannister nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "sndif2sf.h" +#include "desmume/NDSSystem.h" +#include + +std::list> buffer_rope; + +static struct +{ + std::vector buf; + unsigned filled, used; + uint32_t bufferbytes, cycles; + int xfs_load, sync_type; +} sndifwork = {std::vector(), 0, 0, 0, 0, 0, 0}; + +static void SNDIFDeInit() { + int buffersize = sndifwork.buf.size(); + sndifwork.buf.resize(0); + sndifwork.buf.resize(buffersize); + buffer_rope.clear(); +} + +static int SNDIFInit(int buffersize) +{ + uint32_t bufferbytes = buffersize * sizeof(int16_t); + SNDIFDeInit(); + sndifwork.buf.resize(bufferbytes + 3); + sndifwork.bufferbytes = bufferbytes; + sndifwork.filled = sndifwork.used = 0; + sndifwork.cycles = 0; + return 0; +} + +static void SNDIFMuteAudio() { } +static void SNDIFUnMuteAudio() { } +static void SNDIFSetVolume(int) { } + +static uint32_t SNDIFGetAudioSpace() +{ + return sndifwork.bufferbytes >> 2; // bytes to samples +} + +static void SNDIFUpdateAudio(int16_t *buffer, uint32_t num_samples) +{ + num_samples <<= 1; // stereo + uint32_t num_bytes = num_samples << 1; + if (num_bytes > sndifwork.bufferbytes) { + num_bytes = sndifwork.bufferbytes; + num_samples = num_bytes >> 1; + } + memcpy(&sndifwork.buf[0], buffer, num_bytes); + buffer_rope.push_back(std::vector(reinterpret_cast(buffer), reinterpret_cast(buffer) + num_bytes)); + sndifwork.filled = num_bytes; + sndifwork.used = 0; +} + +const int SNDIFID_2SF = 1; +SoundInterface_struct SNDIF_2SF = +{ + SNDIFID_2SF, + "2sf Sound Interface", + SNDIFInit, + SNDIFDeInit, + SNDIFUpdateAudio, + SNDIFGetAudioSpace, + SNDIFMuteAudio, + SNDIFUnMuteAudio, + SNDIFSetVolume, + nullptr, + nullptr, + nullptr +}; + +SoundInterface_struct *SNDCoreList[] = +{ + &SNDIF_2SF, + &SNDDummy, + nullptr +}; diff -Nru audacious-plugins-4.1/src/xsf/sndif2sf.h audacious-plugins-4.2/src/xsf/sndif2sf.h --- audacious-plugins-4.1/src/xsf/sndif2sf.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/sndif2sf.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,39 @@ +/** + * Desmume sound interface for audio export + * Copyright (c) 2014 Naram Qashat + * Copyright (c) 2020 Adam Higerd + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the names of R. Belmont and Richard Bannister nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#pragma once + +#include "desmume/SPU.h" +#include +#include +#include + +extern const int SNDIFID_2SF; +extern SoundInterface_struct SNDIF_2SF; +extern std::list> buffer_rope; diff -Nru audacious-plugins-4.1/src/xsf/spu/adpcmdecoder.cc audacious-plugins-4.2/src/xsf/spu/adpcmdecoder.cc --- audacious-plugins-4.1/src/xsf/spu/adpcmdecoder.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/adpcmdecoder.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,106 @@ +/** + * ADPCM decoder + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "adpcmdecoder.h" +#include + +template +static inline T clamp(T2 value, T lower, T upper) +{ + return value < lower ? lower : (value > upper ? upper : value); +} + +template +static inline T parseInt(const Container& buffer, int offset) +{ + uint64_t result = 0; + for (int i = sizeof(T) - 1; i >= 0; --i) { + result = (result << 8) | uint8_t(buffer[offset + i]); + } + return T(result); +} + +static const int16_t adpcmIndex[] = { -1, -1, -1, -1, 2, 4, 6, 8, }; + +static const int16_t adpcmStep[] = { + 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, + 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, + 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, + 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, + 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, + 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, + 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, + 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, + 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767, +}; +static const int16_t maxAdpcmStep = (sizeof(adpcmStep) >> 1) - 1; + +AdpcmDecoder::AdpcmDecoder(int16_t initialPredictor, int16_t initialStep) +: predictor(initialPredictor), index(clamp(initialStep, 0, maxAdpcmStep)) +{ + // initializers only +} + +int16_t AdpcmDecoder::getNextSample(uint8_t value) +{ + int16_t step = adpcmStep[index]; + int32_t delta = step >> 3; + if (value & 0x04) delta += step; + if (value & 0x02) delta += step >> 1; + if (value & 0x01) delta += step >> 2; + if (value & 0x08) delta = -delta; + /* + // This implementation is simpler and obeys the spec, but it suffers from low-bit rounding + // errors that introduce a slow DC drift that causes looping to produce pops. + int32_t delta = (int32_t(value & 0x08 ? -step : step) * ((value << 1 & 0x0f) + 0x01)) >> 3; + */ + if (predictor + delta == -0x8000) { + predictor = -0x8000; + } else { + predictor = clamp(predictor + delta, -0x7fff, 0x7fff); + } + index = clamp(index + adpcmIndex[value & 0x07], 0, maxAdpcmStep); + return predictor; +} + +std::vector AdpcmDecoder::decodeFile(const std::vector& data, uint32_t offset, uint32_t length) +{ + if (!length) { + length = data.size() - offset; + } + AdpcmDecoder adpcm(parseInt(data, offset), parseInt(data, offset + 2)); + return adpcm.decode(data, offset + 4, length - 4); +} + +std::vector AdpcmDecoder::decode(const std::vector& data, uint32_t offset, uint32_t length) +{ + if (!length) { + length = data.size() - offset; + } + std::vector sample; + sample.reserve(length << 1); + for (int i = 0; i < length; i++) { + sample.push_back(getNextSample(data[offset + i] & 0x0f)); + sample.push_back(getNextSample(uint8_t(data[offset + i] & 0xf0) >> 4)); + } + return sample; +} diff -Nru audacious-plugins-4.1/src/xsf/spu/adpcmdecoder.h audacious-plugins-4.2/src/xsf/spu/adpcmdecoder.h --- audacious-plugins-4.1/src/xsf/spu/adpcmdecoder.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/adpcmdecoder.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,43 @@ +/** + * ADPCM decoder + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef ADPCMDECODER_H +#define ADPCMDECODER_H + +#include +#include + +class AdpcmDecoder +{ +private: + int16_t predictor; + int8_t index; + +public: + AdpcmDecoder(int16_t initialPredictor, int16_t initialStep); + int16_t getNextSample(uint8_t value); + + std::vector decode(const std::vector& data, uint32_t offset = 0, uint32_t length = 0); + static std::vector decodeFile(const std::vector& data, uint32_t offset = 0, uint32_t length = 0); +}; + +#endif diff -Nru audacious-plugins-4.1/src/xsf/spu/interpolator.cc audacious-plugins-4.2/src/xsf/spu/interpolator.cc --- audacious-plugins-4.1/src/xsf/spu/interpolator.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/interpolator.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,102 @@ +/** + * Interpolation functions for resampling audio + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "interpolator.h" +#include + +static LinearInterpolator* iLin = new LinearInterpolator; + +// Keep in the same order as SPUInterpolationMode +IInterpolator* IInterpolator::allInterpolators[4] = { + nullptr, + iLin, + new CosineInterpolator, + new SharpIInterpolator +}; + +static inline int32_t lerp(int32_t left, int32_t right, double weight) +{ + return (left * (1 - weight)) + (right * weight); +} + +int32_t LinearInterpolator::interpolate(const std::vector& data, double time) const +{ + if (time < 0) { + return 0; + } + return lerp(data[time], data[time + 1], time - std::floor(time)); +} + +CosineInterpolator::CosineInterpolator() +{ + for(int i = 0; i < 8192; i++) { + lut[i] = (1.0 - std::cos(M_PI * i / 8192.0) * M_PI) * 0.5; + } +} + +int32_t CosineInterpolator::interpolate(const std::vector& data, double time) const +{ + if (time < 0) { + return 0; + } + int32_t left = data[time]; + int32_t right = data[time + 1]; + double weight = time - std::floor(time); + return lut[std::size_t(weight * 8192)] * (right - left) + right; +} + +int32_t SharpIInterpolator::interpolate(const std::vector& data, double time) const +{ + if (time <= 2) { + return iLin->interpolate(data, time); + } + + std::size_t index = std::size_t(time); + int left = data[index - 1]; + int sample = data[index]; + int right = data[index + 1]; + if ((sample >= left) == (sample >= right)) { + // Always preserve extrema as-is + return sample; + } + int left2 = data[index - 2]; + int right2 = data[index + 2]; + double subsample = time - std::floor(time); + if ((right > right2) == (right > sample) || (left > left2) == (left > sample)) { + // Wider history window is non-monotonic + return lerp(sample, right, subsample); + } + + // Include a linear interpolation of the surrounding samples to try to smooth out single-sample errors + double linear = lerp(left, right, 1.0 + subsample); + // Projection approaching from the left + double mLeft = sample - left; + // Projection approaching from the right + double negSubsample = 1 - subsample; + double mRight = right - sample; + int32_t result = (mLeft * negSubsample + mRight * subsample + linear) / 3; + if ((left <= result) != (result <= right)) { + // If the result isn't monotonic, fall back to linear + return lerp(sample, right, subsample); + } + return result; +} diff -Nru audacious-plugins-4.1/src/xsf/spu/interpolator.h audacious-plugins-4.2/src/xsf/spu/interpolator.h --- audacious-plugins-4.1/src/xsf/spu/interpolator.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/interpolator.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,62 @@ +/** + * Interpolation functions for resampling audio + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef TWOSF2WAV_INTERPOLATOR_H +#define TWOSF2WAV_INTERPOLATOR_H + +#include +#include + +class IInterpolator +{ +public: + virtual ~IInterpolator() {} + + virtual int32_t interpolate(const std::vector& data, double time) const = 0; + + static IInterpolator* allInterpolators[4]; +}; + +class LinearInterpolator : public IInterpolator +{ +public: + virtual int32_t interpolate(const std::vector& data, double time) const; +}; + +class CosineInterpolator : public IInterpolator +{ +public: + CosineInterpolator(); + + virtual int32_t interpolate(const std::vector& data, double time) const; + +private: + double lut[8192]; +}; + +class SharpIInterpolator : public IInterpolator +{ +public: + virtual int32_t interpolate(const std::vector& data, double time) const; +}; + + +#endif diff -Nru audacious-plugins-4.1/src/xsf/spu/samplecache.cc audacious-plugins-4.2/src/xsf/spu/samplecache.cc --- audacious-plugins-4.1/src/xsf/spu/samplecache.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/samplecache.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,54 @@ +/** + * Sample cache + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "samplecache.h" +#include + +static inline constexpr uint64_t makeKey(uint32_t base, uint16_t loop, uint32_t length) +{ + return + // has to be 32-bit aligned, so 2 low bits aren't needed + // has to fit in the memory map, so high 7 bits aren't needed + (uint64_t(base & 0x01FFFFFC) >> 2) | + // loop uses the full 16 bits + uint64_t(loop << 23) | + // max length is 21 bits + (uint64_t(length & 0x1FFFFF) << 39); +} + +const SampleData& SampleCache::getSample(uint32_t baseAddr, uint16_t loopStartWords, uint32_t loopLengthWords, SampleData::Format format) +{ + uint64_t key = makeKey(baseAddr, loopStartWords, loopLengthWords); + auto iter = samples.find(key); + if (iter == samples.end()) { + iter = samples.emplace( + std::piecewise_construct, + std::forward_as_tuple(key), + std::forward_as_tuple(baseAddr, loopStartWords << 2, (loopStartWords + loopLengthWords) << 2, format) + ).first; + } + return iter->second; +} + +void SampleCache::clear() +{ + samples.clear(); +} diff -Nru audacious-plugins-4.1/src/xsf/spu/samplecache.h audacious-plugins-4.2/src/xsf/spu/samplecache.h --- audacious-plugins-4.1/src/xsf/spu/samplecache.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/samplecache.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,37 @@ +/** + * Sample cache + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef TWOSF2WAV_SAMPLECACHE_H +#define TWOSF2WAV_SAMPLECACHE_H + +#include +#include "sampledata.h" + +class SampleCache { +public: + const SampleData& getSample(uint32_t baseAddr, uint16_t loopStartWords, uint32_t loopLengthWords, SampleData::Format format); + void clear(); + +private: + std::unordered_map samples; +}; + +#endif diff -Nru audacious-plugins-4.1/src/xsf/spu/sampledata.cc audacious-plugins-4.2/src/xsf/spu/sampledata.cc --- audacious-plugins-4.1/src/xsf/spu/sampledata.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/sampledata.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,107 @@ +/** + * Caching sample decoder + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "sampledata.h" +#include "adpcmdecoder.h" +#include "interpolator.h" +#include "../desmume/MMU.h" + +SampleData::SampleData() +: std::vector(), baseAddr(0), loopStart(0), loopLength(0) +{ + // initializers only +} + +SampleData::SampleData(uint32_t baseAddr, uint16_t loopStart, uint32_t loopLength, Format format) +: std::vector(), baseAddr(baseAddr), loopStart(loopStart), loopLength(loopLength) +{ + if (format == Pcm8) { + loadPcm8(); + } else if (format == Pcm16) { + loadPcm16(); + } else { + loadAdpcm(); + } +} + +void SampleData::loadPcm8() +{ + loopStart += 3; + resize(loopStart + (loopLength << 2)); + for (int i = 3; i < loopStart; i++) { + (*this)[i] = int8_t(_MMU_read08(baseAddr + i - 3)) << 8; + } + uint32_t length = loopStart + loopLength; + for (int i = loopStart; i < length; i++) { + (*this)[i] = (*this)[length + i] = int8_t(_MMU_read08(baseAddr + i - 3)) << 8; + } +} + +void SampleData::loadPcm16() +{ + loopStart >>= 1; + loopLength >>= 1; + loopStart += 3; + resize(loopStart + (loopLength << 2)); + uint32_t addr = baseAddr; + for (int i = 3; i < loopStart; i++) { + (*this)[i] = int16_t(_MMU_read16(addr)); + addr += 2; + } + uint32_t length = loopStart + loopLength; + for (int i = loopStart; i < length; i++) { + (*this)[i] = (*this)[length + i] = int16_t(_MMU_read16(addr)); + addr += 2; + } +} + +void SampleData::loadAdpcm() +{ + uint32_t length = loopStart + loopLength; + loopStart = ((loopStart - 4) << 1) + 11; + loopLength <<= 1; + resize(loopStart + (loopLength << 2)); + AdpcmDecoder adpcm( + int16_t(_MMU_read16(baseAddr)), + int16_t(_MMU_read16(baseAddr + 2)) + ); + int j = 11; + for (int i = 4; i < length; i++) { + uint8_t data = uint8_t(_MMU_read08(baseAddr + i)); + (*this)[j++] = adpcm.getNextSample(uint8_t(data & 0x0f)); + (*this)[j++] = adpcm.getNextSample(uint8_t(data & 0xf0) >> 4); + } + uint32_t loopEnd = loopStart + loopLength; + for (j = loopStart; j < loopEnd; j++) { + (*this)[j + loopLength] = (*this)[j]; + } +} + +int32_t SampleData::sampleAt(double time, IInterpolator* interp) const +{ + if (!baseAddr) { + return 0; + } + if (!interp) { + return (*this)[uint32_t(time)]; + } + return interp->interpolate(*this, time); +} diff -Nru audacious-plugins-4.1/src/xsf/spu/sampledata.h audacious-plugins-4.2/src/xsf/spu/sampledata.h --- audacious-plugins-4.1/src/xsf/spu/sampledata.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/spu/sampledata.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,59 @@ +/** + * Caching sample decoder + * Copyright (c) 2020 Adam Higerd + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef TWOSF2WAV_SAMPLEDATA_H +#define TWOSF2WAV_SAMPLEDATA_H + +#include +#include +class IInterpolator; + +class SampleData : public std::vector +{ +public: + enum Format { + Pcm8, + Pcm16, + Adpcm + }; + + SampleData(); + SampleData(uint32_t baseAddr, uint16_t loopStart, uint32_t loopLength, Format format); + SampleData(const SampleData&) = default; + SampleData(SampleData&&) = default; + ~SampleData() = default; + + SampleData& operator=(const SampleData&) = default; + SampleData& operator=(SampleData&&) = default; + + int32_t sampleAt(double time, IInterpolator* interp = nullptr) const; + + uint32_t baseAddr; + uint16_t loopStart; + uint32_t loopLength; + +private: + void loadPcm8(); + void loadPcm16(); + void loadAdpcm(); +}; + +#endif diff -Nru audacious-plugins-4.1/src/xsf/tagget.h audacious-plugins-4.2/src/xsf/tagget.h --- audacious-plugins-4.1/src/xsf/tagget.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/tagget.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -static int getdwordle(const unsigned char *pData) -{ - return pData[0] | ((pData[1]) << 8) | ((pData[2]) << 16) | ((pData[3]) << 24); -} - -static int xsf_tagsearchraw(const unsigned char *pData, int dwSize) -{ - int dwPos; - int dwReservedAreaSize; - int dwProgramLength; -/* int dwProgramCRC; */ - if (dwSize < 16 + 5 + 1) return 0; - if (pData[0] != 'P') return 0; - if (pData[1] != 'S') return 0; - if (pData[2] != 'F') return 0; - dwReservedAreaSize = getdwordle(pData + 4); - dwProgramLength = getdwordle(pData + 8); -/* dwProgramCRC = getdwordle(pData + 12); */ - dwPos = 16 + dwReservedAreaSize + dwProgramLength; - if (dwPos >= dwSize) return 0; - return dwPos; -} -static int xsf_tagsearch(int *pdwRet, const unsigned char *pData, int dwSize) -{ - int dwPos = xsf_tagsearchraw(pData, dwSize); - if (dwSize < dwPos + 5) return 0; - if (memcmp(pData + dwPos, "[TAG]", 5)) return 0; - *pdwRet = dwPos + 5; - return 1; -} - -enum xsf_tagenum_callback_returnvalue -{ - xsf_tagenum_callback_returnvaluecontinue = 0, - xsf_tagenum_callback_returnvaluebreak = 1 -}; -typedef int (*pfnxsf_tagenum_callback_t)(void *pWork, const char *pNameTop, const char *pNameEnd, const char *pValueTop, const char *pValueEnd); -static int xsf_tagenumraw(pfnxsf_tagenum_callback_t pCallBack, void *pWork, const unsigned char *pData, int dwSize) -{ - int dwPos = 0; - while (dwPos < dwSize) - { - int dwNameTop; - int dwNameEnd; - int dwValueTop; - int dwValueEnd; - if (dwPos < dwSize && pData[dwPos] == 0x0a) dwPos++; - while (dwPos < dwSize && pData[dwPos] != 0x0a && 0x01 <= pData[dwPos] && pData[dwPos] <= 0x20) - dwPos++; - if (dwPos >= dwSize || pData[dwPos] == 0x0a) continue; - dwNameTop = dwPos; - while (dwPos < dwSize && pData[dwPos] != 0x0a && pData[dwPos] != '=') - dwPos++; - if (dwPos >= dwSize || pData[dwPos] == 0x0a) continue; - dwNameEnd = dwPos; - while (dwNameTop < dwNameEnd && 0x01 <= pData[dwNameEnd - 1] && pData[dwNameEnd - 1] <= 0x20) - dwNameEnd--; - if (dwPos < dwSize && pData[dwPos] == '=') dwPos++; - while (dwPos < dwSize && pData[dwPos] != 0x0a && 0x01 <= pData[dwPos] && pData[dwPos] <= 0x20) - dwPos++; - dwValueTop = dwPos; - while (dwPos < dwSize && pData[dwPos] != 0x0a) - dwPos++; - dwValueEnd = dwPos; - while (dwValueTop < dwValueEnd && 0x01 <= pData[dwValueEnd - 1] && pData[dwValueEnd - 1] <= 0x20) - dwValueEnd--; - - if (pCallBack) - { - if (xsf_tagenum_callback_returnvaluecontinue != pCallBack(pWork, (const char *)pData + dwNameTop, (const char *)pData + dwNameEnd, (const char *)pData + dwValueTop, (const char *)pData + dwValueEnd)) - return -1; - } - } - return 1; -} - -static int xsf_tagenum(pfnxsf_tagenum_callback_t pCallBack, void *pWork, const unsigned char *pData, int dwSize) -{ - int dwPos = 0; - if (!xsf_tagsearch(&dwPos, pData, dwSize)) - return 0; - return xsf_tagenumraw(pCallBack, pWork, pData + dwPos, dwSize - dwPos); -} - -typedef struct -{ - int taglen; - const char *tag; - char *ret; -} xsf_tagget_work_t; - -static int xsf_tagenum_callback_tagget(void *pWork, const char *pNameTop, const char *pNameEnd, const char *pValueTop, const char *pValueEnd) -{ - xsf_tagget_work_t *pwork = (xsf_tagget_work_t *)pWork; - if (pwork->taglen == pNameEnd - pNameTop && !strcmp_nocase(pNameTop, pwork->tag, pwork->taglen)) - { - char *ret = (char *)malloc(pValueEnd - pValueTop + 1); - if (!ret) return xsf_tagenum_callback_returnvaluecontinue; - memcpy(ret, pValueTop, pValueEnd - pValueTop); - ret[pValueEnd - pValueTop] = 0; - pwork->ret = ret; - return xsf_tagenum_callback_returnvaluebreak; - } - return xsf_tagenum_callback_returnvaluecontinue; -} - -static char *xsf_tagget(const char *tag, const unsigned char *pData, int dwSize) -{ - xsf_tagget_work_t work; - work.ret = 0; - work.tag = tag; - work.taglen = (int)strlen(tag); - xsf_tagenum(xsf_tagenum_callback_tagget, &work, pData, dwSize); - return work.ret; -} - -static int xsf_tagget_int(const char *tag, const unsigned char *pData, int dwSize, int value_default) -{ - int ret = value_default; - char *value = xsf_tagget(tag, pData, dwSize); - if (value) - { - if (*value) ret = atoi(value); - free(value); - } - return ret; -} - diff -Nru audacious-plugins-4.1/src/xsf/vio2sf.cc audacious-plugins-4.2/src/xsf/vio2sf.cc --- audacious-plugins-4.1/src/xsf/vio2sf.cc 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/vio2sf.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,828 +0,0 @@ -#include -#include -#include -#include - -#include "desmume/MMU.h" -#include "desmume/armcpu.h" -#include "desmume/NDSSystem.h" -#include "desmume/SPU.h" -#include "desmume/cp15.h" - -#include - -#include - -#include "tagget.h" -#include "vio2sf.h" - -volatile BOOL execute = false; - -static struct -{ - unsigned char *rom; - unsigned char *state; - unsigned romsize; - unsigned statesize; - unsigned stateptr; -} loaderwork = {0, 0, 0, 0, 0}; - -static void load_term(void) -{ - if (loaderwork.rom) - { - free(loaderwork.rom); - loaderwork.rom = 0; - } - loaderwork.romsize = 0; - if (loaderwork.state) - { - free(loaderwork.state); - loaderwork.state = 0; - } - loaderwork.statesize = 0; -} - -static int load_map(int issave, unsigned char *udata, unsigned usize) -{ - unsigned char *iptr; - unsigned isize; - unsigned char *xptr; - unsigned xsize = getdwordle(udata + 4); - unsigned xofs = getdwordle(udata + 0); - if (issave) - { - iptr = loaderwork.state; - isize = loaderwork.statesize; - loaderwork.state = 0; - loaderwork.statesize = 0; - } - else - { - iptr = loaderwork.rom; - isize = loaderwork.romsize; - loaderwork.rom = 0; - loaderwork.romsize = 0; - } - if (!iptr) - { - iptr = (unsigned char *) malloc(xofs + xsize + 10); - if (!iptr) - return false; - memset(iptr, 0, xofs + xsize + 10); - isize = xofs + xsize; - } - else if (isize < xofs + xsize) - { - unsigned rsize = xofs + xsize; - if (!issave) - { - rsize -= 1; - rsize |= rsize >> 1; - rsize |= rsize >> 2; - rsize |= rsize >> 4; - rsize |= rsize >> 8; - rsize |= rsize >> 16; - rsize += 1; - } - xptr = (unsigned char *) realloc(iptr, xofs + rsize + 10); - if (!xptr) - { - free(iptr); - return false; - } - iptr = xptr; - isize = rsize; - } - memcpy(iptr + xofs, udata + 8, xsize); - if (issave) - { - loaderwork.state = iptr; - loaderwork.statesize = isize; - } - else - { - loaderwork.rom = iptr; - loaderwork.romsize = isize; - } - return true; -} - -static int load_mapz(int issave, unsigned char *zdata, unsigned zsize, unsigned zcrc) -{ - int ret; - int zerr; - uLongf usize = 8; - uLongf rsize = usize; - unsigned char *udata; - unsigned char *rdata; - - udata = (unsigned char *) malloc(usize); - if (!udata) - return false; - - while (Z_OK != (zerr = uncompress(udata, &usize, zdata, zsize))) - { - if (Z_MEM_ERROR != zerr && Z_BUF_ERROR != zerr) - { - free(udata); - return false; - } - if (usize >= 8) - { - usize = getdwordle(udata + 4) + 8; - if (usize < rsize) - { - rsize += rsize; - usize = rsize; - } - else - rsize = usize; - } - else - { - rsize += rsize; - usize = rsize; - } - free(udata); - udata = (unsigned char *) malloc(usize); - if (!udata) - return false; - } - - rdata = (unsigned char *) realloc(udata, usize); - if (!rdata) - { - free(udata); - return false; - } - - if (0) - { - unsigned ccrc = crc32(crc32(0L, Z_NULL, 0), rdata, usize); - if (ccrc != zcrc) - return false; - } - - ret = load_map(issave, rdata, usize); - free(rdata); - return ret; -} - -static int load_psf_one(unsigned char *pfile, unsigned bytes) -{ - unsigned char *ptr = pfile; - unsigned code_size; - unsigned resv_size; - unsigned code_crc; - if (bytes < 16 || getdwordle(ptr) != 0x24465350) - return false; - - resv_size = getdwordle(ptr + 4); - code_size = getdwordle(ptr + 8); - code_crc = getdwordle(ptr + 12); - - if (resv_size) - { - unsigned resv_pos = 0; - ptr = pfile + 16; - if (16+ resv_size > bytes) - return false; - while (resv_pos + 12 < resv_size) - { - unsigned save_size = getdwordle(ptr + resv_pos + 4); - unsigned save_crc = getdwordle(ptr + resv_pos + 8); - if (getdwordle(ptr + resv_pos + 0) == 0x45564153) - { - if (resv_pos + 12 + save_size > resv_size) - return false; - if (!load_mapz(1, ptr + resv_pos + 12, save_size, save_crc)) - return false; - } - resv_pos += 12 + save_size; - } - } - - if (code_size) - { - ptr = pfile + 16 + resv_size; - if (16 + resv_size + code_size > bytes) - return false; - if (!load_mapz(0, ptr, code_size, code_crc)) - return false; - } - - return true; -} - -typedef struct -{ - const char *tag; - int taglen; - int level; - int found; -} loadlibwork_t; - -static int load_libs(int level, void *pfile, unsigned bytes); - -static int load_psfcb(void *pWork, const char *pNameTop, const char *pNameEnd, const char *pValueTop, const char *pValueEnd) -{ - loadlibwork_t *pwork = (loadlibwork_t *)pWork; - int ret = xsf_tagenum_callback_returnvaluecontinue; - if (pNameEnd - pNameTop == pwork->taglen && !strcmp_nocase(pNameTop, pwork->tag, pwork->taglen)) - { - StringBuf lib = str_copy(pValueTop, pValueEnd - pValueTop); - Index buf = xsf_get_lib(lib); - - if (buf.len() && - load_libs(pwork->level + 1, buf.begin(), buf.len()) && - load_psf_one((unsigned char *) buf.begin(), buf.len())) - { - pwork->found++; - } - else - { - ret = xsf_tagenum_callback_returnvaluebreak; - } - } - return ret; -} - -static int load_libs(int level, void *pfile, unsigned bytes) -{ - char tbuf[16]; - loadlibwork_t work; - int n = 1; - - if (level > 10) - return true; - - work.level = level; - work.tag = "_lib"; - - do - { - work.taglen = strlen(work.tag); - work.found = 0; - - if (xsf_tagenum(load_psfcb, &work, (unsigned char *) pfile, bytes) < 0) - return false; - -#ifdef HAVE_SPRINTF_S - sprintf_s(tbuf, sizeof(tbuf), "_lib%10d", ++n); -#else - sprintf(tbuf, "_lib%10d", ++n); -#endif - work.tag = tbuf; - } - while (work.found); - - return true; -} - -static int load_psf(void *pfile, unsigned bytes) -{ - load_term(); - - if (!load_libs(1, pfile, bytes) || !load_psf_one((unsigned char *) pfile, bytes)) - return false; - - return true; -} - -static void load_getstateinit(unsigned ptr) -{ - loaderwork.stateptr = ptr; -} - -static u16 getwordle(const unsigned char *pData) -{ - return pData[0] | (((u16)pData[1]) << 8); -} - -static void load_getsta(Status_Reg *ptr, unsigned l) -{ - unsigned s = l << 2; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - { - u32 st = getdwordle(loaderwork.state + loaderwork.stateptr + (i << 2)); - ptr[i].bits.N = (st >> 31) & 1; - ptr[i].bits.Z = (st >> 30) & 1; - ptr[i].bits.C = (st >> 29) & 1; - ptr[i].bits.V = (st >> 28) & 1; - ptr[i].bits.Q = (st >> 27) & 1; - ptr[i].bits.RAZ = (st >> 8) & ((1 << 19) - 1); - ptr[i].bits.I = (st >> 7) & 1; - ptr[i].bits.F = (st >> 6) & 1; - ptr[i].bits.T = (st >> 5) & 1; - ptr[i].bits.mode = (st >> 0) & 0x1f; - } - loaderwork.stateptr += s; -} - -static void load_getbool(BOOL *ptr, unsigned l) -{ - unsigned s = l << 2; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - ptr[i] = (BOOL)getdwordle(loaderwork.state + loaderwork.stateptr + (i << 2)); - loaderwork.stateptr += s; -} - -#if defined(SIGNED_IS_NOT_2S_COMPLEMENT) -/* 2's complement */ -#define u32tos32(v) ((s32)((((s64)(v)) ^ 0x8000) - 0x8000)) -#else -/* 2's complement */ -#define u32tos32(v) ((s32)v) -#endif - -static void load_gets32(s32 *ptr, unsigned l) -{ - unsigned s = l << 2; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - ptr[i] = u32tos32(getdwordle(loaderwork.state + loaderwork.stateptr + (i << 2))); - loaderwork.stateptr += s; -} - -static void load_getu32(u32 *ptr, unsigned l) -{ - unsigned s = l << 2; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - ptr[i] = getdwordle(loaderwork.state + loaderwork.stateptr + (i << 2)); - loaderwork.stateptr += s; -} - -static void load_getu16(u16 *ptr, unsigned l) -{ - unsigned s = l << 1; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - ptr[i] = getwordle(loaderwork.state + loaderwork.stateptr + (i << 1)); - loaderwork.stateptr += s; -} - -static void load_getu8(u8 *ptr, unsigned l) -{ - unsigned s = l; - unsigned i; - if ((loaderwork.stateptr > loaderwork.statesize) || ((loaderwork.stateptr + s) > loaderwork.statesize)) - return; - for (i = 0; i < l; i++) - ptr[i] = loaderwork.state[loaderwork.stateptr + i]; - loaderwork.stateptr += s; -} - -void gdb_stub_fix(armcpu_t *armcpu) -{ - /* armcpu->R[15] = armcpu->instruct_adr; */ - armcpu->next_instruction = armcpu->instruct_adr; - if(armcpu->CPSR.bits.T == 0) - { - armcpu->instruction = MMU_read32_acl(armcpu->proc_ID, armcpu->next_instruction,CP15_ACCESS_EXECUTE); - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction += 4; - armcpu->R[15] = armcpu->next_instruction + 4; - } - else - { - armcpu->instruction = MMU_read16_acl(armcpu->proc_ID, armcpu->next_instruction,CP15_ACCESS_EXECUTE); - armcpu->instruct_adr = armcpu->next_instruction; - armcpu->next_instruction += 2; - armcpu->R[15] = armcpu->next_instruction + 2; - } -} - -static void load_setstate(void) -{ - if (!loaderwork.statesize) - return; - - /* Skip over "Desmume Save File" crap */ - load_getstateinit(0x17); - - /* Read ARM7 cpu registers */ - load_getu32(&NDS_ARM7.proc_ID, 1); - load_getu32(&NDS_ARM7.instruction, 1); - load_getu32(&NDS_ARM7.instruct_adr, 1); - load_getu32(&NDS_ARM7.next_instruction, 1); - load_getu32(NDS_ARM7.R, 16); - load_getsta(&NDS_ARM7.CPSR, 1); - load_getsta(&NDS_ARM7.SPSR, 1); - load_getu32(&NDS_ARM7.R13_usr, 1); - load_getu32(&NDS_ARM7.R14_usr, 1); - load_getu32(&NDS_ARM7.R13_svc, 1); - load_getu32(&NDS_ARM7.R14_svc, 1); - load_getu32(&NDS_ARM7.R13_abt, 1); - load_getu32(&NDS_ARM7.R14_abt, 1); - load_getu32(&NDS_ARM7.R13_und, 1); - load_getu32(&NDS_ARM7.R14_und, 1); - load_getu32(&NDS_ARM7.R13_irq, 1); - load_getu32(&NDS_ARM7.R14_irq, 1); - load_getu32(&NDS_ARM7.R8_fiq, 1); - load_getu32(&NDS_ARM7.R9_fiq, 1); - load_getu32(&NDS_ARM7.R10_fiq, 1); - load_getu32(&NDS_ARM7.R11_fiq, 1); - load_getu32(&NDS_ARM7.R12_fiq, 1); - load_getu32(&NDS_ARM7.R13_fiq, 1); - load_getu32(&NDS_ARM7.R14_fiq, 1); - load_getsta(&NDS_ARM7.SPSR_svc, 1); - load_getsta(&NDS_ARM7.SPSR_abt, 1); - load_getsta(&NDS_ARM7.SPSR_und, 1); - load_getsta(&NDS_ARM7.SPSR_irq, 1); - load_getsta(&NDS_ARM7.SPSR_fiq, 1); - load_getu32(&NDS_ARM7.intVector, 1); - load_getu8(&NDS_ARM7.LDTBit, 1); - load_getbool(&NDS_ARM7.waitIRQ, 1); - load_getbool(&NDS_ARM7.wIRQ, 1); - load_getbool(&NDS_ARM7.wirq, 1); - - /* Read ARM9 cpu registers */ - load_getu32(&NDS_ARM9.proc_ID, 1); - load_getu32(&NDS_ARM9.instruction, 1); - load_getu32(&NDS_ARM9.instruct_adr, 1); - load_getu32(&NDS_ARM9.next_instruction, 1); - load_getu32(NDS_ARM9.R, 16); - load_getsta(&NDS_ARM9.CPSR, 1); - load_getsta(&NDS_ARM9.SPSR, 1); - load_getu32(&NDS_ARM9.R13_usr, 1); - load_getu32(&NDS_ARM9.R14_usr, 1); - load_getu32(&NDS_ARM9.R13_svc, 1); - load_getu32(&NDS_ARM9.R14_svc, 1); - load_getu32(&NDS_ARM9.R13_abt, 1); - load_getu32(&NDS_ARM9.R14_abt, 1); - load_getu32(&NDS_ARM9.R13_und, 1); - load_getu32(&NDS_ARM9.R14_und, 1); - load_getu32(&NDS_ARM9.R13_irq, 1); - load_getu32(&NDS_ARM9.R14_irq, 1); - load_getu32(&NDS_ARM9.R8_fiq, 1); - load_getu32(&NDS_ARM9.R9_fiq, 1); - load_getu32(&NDS_ARM9.R10_fiq, 1); - load_getu32(&NDS_ARM9.R11_fiq, 1); - load_getu32(&NDS_ARM9.R12_fiq, 1); - load_getu32(&NDS_ARM9.R13_fiq, 1); - load_getu32(&NDS_ARM9.R14_fiq, 1); - load_getsta(&NDS_ARM9.SPSR_svc, 1); - load_getsta(&NDS_ARM9.SPSR_abt, 1); - load_getsta(&NDS_ARM9.SPSR_und, 1); - load_getsta(&NDS_ARM9.SPSR_irq, 1); - load_getsta(&NDS_ARM9.SPSR_fiq, 1); - load_getu32(&NDS_ARM9.intVector, 1); - load_getu8(&NDS_ARM9.LDTBit, 1); - load_getbool(&NDS_ARM9.waitIRQ, 1); - load_getbool(&NDS_ARM9.wIRQ, 1); - load_getbool(&NDS_ARM9.wirq, 1); - - /* Read in other internal variables that are important */ - load_gets32(&nds.ARM9Cycle, 1); - load_gets32(&nds.ARM7Cycle, 1); - load_gets32(&nds.cycles, 1); - load_gets32(nds.timerCycle[0], 4); - load_gets32(nds.timerCycle[1], 4); - load_getbool(nds.timerOver[0], 4); - load_getbool(nds.timerOver[1], 4); - load_gets32(&nds.nextHBlank, 1); - load_getu32(&nds.VCount, 1); - load_getu32(&nds.old, 1); - load_gets32(&nds.diff, 1); - load_getbool(&nds.lignerendu, 1); - load_getu16(&nds.touchX, 1); - load_getu16(&nds.touchY, 1); - - /* Read in memory/registers specific to the ARM9 */ - load_getu8 (ARM9Mem.ARM9_ITCM, 0x8000); - load_getu8 (ARM9Mem.ARM9_DTCM, 0x4000); - load_getu8 (ARM9Mem.ARM9_WRAM, 0x1000000); - load_getu8 (ARM9Mem.MAIN_MEM, 0x400000); - load_getu8 (ARM9Mem.ARM9_REG, 0x10000); - load_getu8 (ARM9Mem.ARM9_VMEM, 0x800); - load_getu8 (ARM9Mem.ARM9_OAM, 0x800); - load_getu8 (ARM9Mem.ARM9_ABG, 0x80000); - load_getu8 (ARM9Mem.ARM9_BBG, 0x20000); - load_getu8 (ARM9Mem.ARM9_AOBJ, 0x40000); - load_getu8 (ARM9Mem.ARM9_BOBJ, 0x20000); - load_getu8 (ARM9Mem.ARM9_LCD, 0xA4000); - - /* Read in memory/registers specific to the ARM7 */ - load_getu8 (MMU.ARM7_ERAM, 0x10000); - load_getu8 (MMU.ARM7_REG, 0x10000); - load_getu8 (MMU.ARM7_WIRAM, 0x10000); - - /* Read in shared memory */ - load_getu8 (MMU.SWIRAM, 0x8000); - -#ifdef GDB_STUB -#else - gdb_stub_fix(&NDS_ARM9); - gdb_stub_fix(&NDS_ARM7); -#endif -} - -static struct -{ - unsigned char *pcmbufalloc; - unsigned char *pcmbuftop; - unsigned filled; - unsigned used; - u32 bufferbytes; - u32 cycles; - int xfs_load; - int sync_type; - int arm7_clockdown_level; - int arm9_clockdown_level; -} sndifwork = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - -static void SNDIFDeInit(void) -{ - if (sndifwork.pcmbufalloc) - { - free(sndifwork.pcmbufalloc); - sndifwork.pcmbufalloc = 0; - sndifwork.pcmbuftop = 0; - sndifwork.bufferbytes = 0; - } -} -static int SNDIFInit(int buffersize) -{ - u32 bufferbytes = buffersize * sizeof(s16); - SNDIFDeInit(); - sndifwork.pcmbufalloc = (unsigned char *) malloc(bufferbytes + 3); - if (!sndifwork.pcmbufalloc) - return -1; - sndifwork.pcmbuftop = (unsigned char *) (((uintptr_t) sndifwork.pcmbufalloc + 3) & ~3); - sndifwork.bufferbytes = bufferbytes; - sndifwork.filled = 0; - sndifwork.used = 0; - sndifwork.cycles = 0; - return 0; -} -static void SNDIFMuteAudio(void) -{ -} -static void SNDIFUnMuteAudio(void) -{ -} -static void SNDIFSetVolume(int volume) -{ -} -static u32 SNDIFGetAudioSpace(void) -{ - return sndifwork.bufferbytes >> 2; // bytes to samples -} -static void SNDIFUpdateAudio(s16 * buffer, u32 num_samples) -{ - u32 num_bytes = num_samples << 2; - if (num_bytes > sndifwork.bufferbytes) num_bytes = sndifwork.bufferbytes; - memcpy(sndifwork.pcmbuftop, buffer, num_bytes); - sndifwork.filled = num_bytes; - sndifwork.used = 0; -} -#define VIO2SFSNDIFID 2 -static SoundInterface_struct VIO2SFSNDIF = -{ - VIO2SFSNDIFID, - "vio2sf Sound Interface", - SNDIFInit, - SNDIFDeInit, - SNDIFUpdateAudio, - SNDIFGetAudioSpace, - SNDIFMuteAudio, - SNDIFUnMuteAudio, - SNDIFSetVolume -}; - -SoundInterface_struct *SNDCoreList[] = { - &VIO2SFSNDIF, - &SNDDummy, - nullptr -}; - -#ifdef GDB_STUB -static struct armcpu_ctrl_iface *arm9_ctrl_iface = 0; -static struct armcpu_ctrl_iface *arm7_ctrl_iface = 0; -#endif - -int xsf_start(void *pfile, unsigned bytes) -{ - int frames = xsf_tagget_int("_frames", (unsigned char *) pfile, bytes, -1); - int clockdown = xsf_tagget_int("_clockdown", (unsigned char *) pfile, bytes, 0); - sndifwork.sync_type = xsf_tagget_int("_vio2sf_sync_type", (unsigned char *) pfile, bytes, 0); - sndifwork.arm9_clockdown_level = xsf_tagget_int("_vio2sf_arm9_clockdown_level", (unsigned char *) pfile, bytes, clockdown); - sndifwork.arm7_clockdown_level = xsf_tagget_int("_vio2sf_arm7_clockdown_level", (unsigned char *) pfile, bytes, clockdown); - - sndifwork.xfs_load = 0; - printf("load_psf... "); - if (!load_psf(pfile, bytes)) - return false; - printf("ok!\n"); - -#ifdef GDB_STUB - if (NDS_Init(&arm9_base_memory_iface, &arm9_ctrl_iface, &arm7_base_memory_iface, &arm7_ctrl_iface)) -#else - if (NDS_Init()) -#endif - return false; - - SPU_ChangeSoundCore(VIO2SFSNDIFID, 737); - - execute = false; - - MMU_unsetRom(); - if (loaderwork.rom) - { - NDS_SetROM(loaderwork.rom, loaderwork.romsize - 1); - } - - NDS_Reset(); - - execute = true; - - if (loaderwork.state) - { - armcp15_t *c9 = (armcp15_t *)NDS_ARM9.coproc[15]; - int proc; - if (frames == -1) - { - - /* set initial ARM9 coprocessor state */ - - armcp15_moveARM2CP(c9, 0x00000000, 0x01, 0x00, 0, 0); - armcp15_moveARM2CP(c9, 0x00000000, 0x07, 0x05, 0, 0); - armcp15_moveARM2CP(c9, 0x00000000, 0x07, 0x06, 0, 0); - armcp15_moveARM2CP(c9, 0x00000000, 0x07, 0x0a, 0, 4); - armcp15_moveARM2CP(c9, 0x04000033, 0x06, 0x00, 0, 4); - armcp15_moveARM2CP(c9, 0x0200002d, 0x06, 0x01, 0, 0); - armcp15_moveARM2CP(c9, 0x027e0021, 0x06, 0x02, 0, 0); - armcp15_moveARM2CP(c9, 0x08000035, 0x06, 0x03, 0, 0); - armcp15_moveARM2CP(c9, 0x027e001b, 0x06, 0x04, 0, 0); - armcp15_moveARM2CP(c9, 0x0100002f, 0x06, 0x05, 0, 0); - armcp15_moveARM2CP(c9, 0xffff001d, 0x06, 0x06, 0, 0); - armcp15_moveARM2CP(c9, 0x027ff017, 0x06, 0x07, 0, 0); - armcp15_moveARM2CP(c9, 0x00000020, 0x09, 0x01, 0, 1); - - armcp15_moveARM2CP(c9, 0x027e000a, 0x09, 0x01, 0, 0); - - armcp15_moveARM2CP(c9, 0x00000042, 0x02, 0x00, 0, 1); - armcp15_moveARM2CP(c9, 0x00000042, 0x02, 0x00, 0, 0); - armcp15_moveARM2CP(c9, 0x00000002, 0x03, 0x00, 0, 0); - armcp15_moveARM2CP(c9, 0x05100011, 0x05, 0x00, 0, 3); - armcp15_moveARM2CP(c9, 0x15111011, 0x05, 0x00, 0, 2); - armcp15_moveARM2CP(c9, 0x07dd1e10, 0x01, 0x00, 0, 0); - armcp15_moveARM2CP(c9, 0x0005707d, 0x01, 0x00, 0, 0); - - armcp15_moveARM2CP(c9, 0x00000000, 0x07, 0x0a, 0, 4); - armcp15_moveARM2CP(c9, 0x02004000, 0x07, 0x05, 0, 1); - armcp15_moveARM2CP(c9, 0x02004000, 0x07, 0x0e, 0, 1); - - /* set initial timer state */ - - MMU_write16(0, REG_TM0CNTL, 0x0000); - MMU_write16(0, REG_TM0CNTH, 0x00C1); - MMU_write16(1, REG_TM0CNTL, 0x0000); - MMU_write16(1, REG_TM0CNTH, 0x00C1); - MMU_write16(1, REG_TM1CNTL, 0xf7e7); - MMU_write16(1, REG_TM1CNTH, 0x00C1); - - /* set initial interrupt state */ - - MMU.reg_IME[0] = 0x00000001; - MMU.reg_IE[0] = 0x00042001; - MMU.reg_IME[1] = 0x00000001; - MMU.reg_IE[1] = 0x0104009d; - } - else if (frames > 0) - { - /* execute boot code */ - int i; - for (i=0; i 0) - { - /* skip 1 sec */ - int i; - for (i=0; i 0) - { - if (remainbytes > bytes) - { - memcpy(ptr, sndifwork.pcmbuftop + sndifwork.used, bytes); - sndifwork.used += bytes; - ptr += bytes; - remainbytes -= bytes; /**/ - bytes = 0; /**/ - break; - } - else - { - memcpy(ptr, sndifwork.pcmbuftop + sndifwork.used, remainbytes); - sndifwork.used += remainbytes; - ptr += remainbytes; - bytes -= remainbytes; - remainbytes = 0; - } - } - if (remainbytes == 0) - { - -#define HBASE_CYCLES 33509300.322234 -#define VBASE_CYCLES (((double)HBASE_CYCLES) / 100) -#define HSAMPLES ((u32)((44100.0 * 6 * (99 + 256)) / HBASE_CYCLES)) -#define VSAMPLES ((u32)((44100.0 * 6 * (99 + 256) * 263) / HBASE_CYCLES)) - - int numsamples; - if (sndifwork.sync_type == 1) - { - /* vsync */ - sndifwork.cycles += (441 * 6 * (99 + 256) * 263); - if (sndifwork.cycles >= (u32)(VBASE_CYCLES * (VSAMPLES + 1))) - { - numsamples = (VSAMPLES + 1); - sndifwork.cycles -= (u32)(VBASE_CYCLES * (VSAMPLES + 1)); - } - else - { - numsamples = (VSAMPLES + 0); - sndifwork.cycles -= (u32)(VBASE_CYCLES * (VSAMPLES + 0)); - } - NDS_exec_frame(sndifwork.arm9_clockdown_level, sndifwork.arm7_clockdown_level); - } - else - { - /* hsync */ - sndifwork.cycles += (44100 * 6 * (99 + 256)); - if (sndifwork.cycles >= (u32)(HBASE_CYCLES * (HSAMPLES + 1))) - { - numsamples = (HSAMPLES + 1); - sndifwork.cycles -= (u32)(HBASE_CYCLES * (HSAMPLES + 1)); - } - else - { - numsamples = (HSAMPLES + 0); - sndifwork.cycles -= (u32)(HBASE_CYCLES * (HSAMPLES + 0)); - } - NDS_exec_hframe(sndifwork.arm9_clockdown_level, sndifwork.arm7_clockdown_level); - } - SPU_EmulateSamples(numsamples); - } - } - return ptr - (unsigned char *)pbuffer; -} - -void xsf_term(void) -{ - MMU_unsetRom(); - NDS_DeInit(); - load_term(); -} diff -Nru audacious-plugins-4.1/src/xsf/vio2sf.h audacious-plugins-4.2/src/xsf/vio2sf.h --- audacious-plugins-4.1/src/xsf/vio2sf.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/vio2sf.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#include - -int xsf_start(void *pfile, unsigned bytes); -int xsf_gen(void *pbuffer, unsigned samples); -Index xsf_get_lib(char *pfilename); -void xsf_term(void); diff -Nru audacious-plugins-4.1/src/xsf/xsfdrv.h audacious-plugins-4.2/src/xsf/xsfdrv.h --- audacious-plugins-4.1/src/xsf/xsfdrv.h 2021-02-01 23:30:38.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/xsfdrv.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -typedef int (PASCAL * LPFNGETLIB_XSFDRV)(void *lpWork, LPSTR lpszFilename, void **ppBuffer, DWORD *pdwSize); -typedef struct -{ - void * (PASCAL * LibAlloc)(DWORD dwSize); - void (PASCAL * LibFree)(void *lpPtr); - int (PASCAL * Start)(void *lpPtr, DWORD dwSize); - void (PASCAL * Gen)(void *lpPtr, DWORD dwSamples); - void (PASCAL * Term)(void); -} IXSFDRV; - -typedef IXSFDRV * (PASCAL * LPFNXSFDRVSETUP)(LPFNGETLIB_XSFDRV lpfn, void *lpWork); -/* IXSFDRV * PASCAL XSFDRVSetup(LPFNGETLIB_XSFDRV lpfn, void *lpWork); */ diff -Nru audacious-plugins-4.1/src/xsf/XSFFile.cc audacious-plugins-4.2/src/xsf/XSFFile.cc --- audacious-plugins-4.1/src/xsf/XSFFile.cc 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/XSFFile.cc 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,293 @@ +/* + * xSF - File structure + * Copyright (c) 2014-2020 Naram Qashat + * Copyright (c) 2020-2021 Adam Higerd + * + * Partially derived from Audio Overload SDK + * Copyright (c) 2007-2008 R. Belmont and Richard Bannister. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the names of R. Belmont and Richard Bannister nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include "XSFFile.h" + +static inline void Set32BitsLE(uint32_t input, uint8_t *output) +{ + output[0] = input & 0xFF; + output[1] = (input >> 8) & 0xFF; + output[2] = (input >> 16) & 0xFF; + output[3] = (input >> 24) & 0xFF; +} + +// The whitespace trimming is from the following answer on Stack Overflow: +// https://stackoverflow.com/a/17976541 + +static inline std::string TrimWhitespace(const std::string &s) +{ + auto wsfront = std::find_if_not(s.begin(), s.end(), [](int c) { return std::isspace(c); }); + auto wsback = std::find_if_not(s.rbegin(), s.rend(), [](int c) { return std::isspace(c); }).base(); + return (wsback <= wsfront ? std::string() : std::string(wsfront, wsback)); +} + +XSFFile::XSFFile() : xSFType(0), hasFile(false), rawData(), reservedSection(), programSection(), tags() +{ +} + +XSFFile::XSFFile(std::istream &inFile, uint32_t programSizeOffset, uint32_t programHeaderSize, bool readTagsOnly) : xSFType(0), hasFile(true), rawData(), reservedSection(), programSection(), tags() +{ + this->ReadXSF(inFile, programSizeOffset, programHeaderSize, readTagsOnly); +} + +void XSFFile::ReadXSF(std::istream &xSF, uint32_t programSizeOffset, uint32_t programHeaderSize, bool readTagsOnly) +{ + xSF.seekg(0, std::istream::end); + auto filesize = xSF.tellg(); + xSF.seekg(0, std::istream::beg); + + if (filesize < 4) + throw std::runtime_error("File is too small."); + + char PSFHeader[4]; + xSF.read(PSFHeader, 4); + + if (PSFHeader[0] != 'P' || PSFHeader[1] != 'S' || PSFHeader[2] != 'F') + throw std::runtime_error("Not a PSF file."); + + this->xSFType = PSFHeader[3]; + + this->rawData.resize(4); + std::memcpy(&this->rawData[0], PSFHeader, 4); + + if (filesize < 16) + throw std::runtime_error("File is too small."); + + uint32_t reservedSize = Get32BitsLE(xSF), programCompressedSize = Get32BitsLE(xSF); + this->rawData.resize(reservedSize + programCompressedSize + 16); + Set32BitsLE(reservedSize, &this->rawData[4]); + Set32BitsLE(programCompressedSize, &this->rawData[8]); + xSF.read(reinterpret_cast(&this->rawData[12]), 4); + + if (reservedSize) + { + if (filesize < reservedSize + 16) + throw std::runtime_error("File is too small."); + + if (readTagsOnly) + xSF.read(reinterpret_cast(&this->rawData[16]), reservedSize); + else + { + this->reservedSection.resize(reservedSize); + xSF.read(reinterpret_cast(&this->reservedSection[0]), reservedSize); + std::memcpy(&this->rawData[16], &this->reservedSection[0], reservedSize); + } + } + + if (programCompressedSize) + { + if (filesize < reservedSize + programCompressedSize + 16) + throw std::runtime_error("File is too small."); + + if (readTagsOnly) + xSF.read(reinterpret_cast(&this->rawData[reservedSize + 16]), programCompressedSize); + else + { + auto programSectionCompressed = std::vector(programCompressedSize); + xSF.read(reinterpret_cast(&programSectionCompressed[0]), programCompressedSize); + std::memcpy(&this->rawData[reservedSize + 16], &programSectionCompressed[0], programCompressedSize); + + auto programSectionUncompressed = std::vector(programHeaderSize); + unsigned long programUncompressedSize = programHeaderSize; + uncompress(&programSectionUncompressed[0], &programUncompressedSize, &programSectionCompressed[0], programCompressedSize); + if (programUncompressedSize) { + programUncompressedSize = Get32BitsLE(&programSectionUncompressed[programSizeOffset]) + programHeaderSize; + } + this->programSection.resize(programUncompressedSize); + uncompress(&this->programSection[0], &programUncompressedSize, &programSectionCompressed[0], programCompressedSize); + } + } + + if (xSF.tellg() != filesize && filesize >= reservedSize + programCompressedSize + 21) + { + char tagheader[6] = ""; + xSF.read(tagheader, 5); + if (std::string(tagheader) == "[TAG]") + { + auto startOfTags = xSF.tellg(); + unsigned lengthOfTags = static_cast(filesize - startOfTags); + if (lengthOfTags) + { + auto rawtags = std::vector(lengthOfTags); + xSF.read(&rawtags[0], lengthOfTags); + std::string name, value; + bool onName = true; + for (unsigned x = 0; x < lengthOfTags; ++x) + { + char curr = rawtags[x]; + if (curr == 0x0A) + { + if (!name.empty() && !value.empty()) + { + name = TrimWhitespace(name); + value = TrimWhitespace(value); + if (this->tags.find(name) != this->tags.end()) + this->tags[name] += "\n" + value; + else + this->tags[name] = value; + } + name = value = ""; + onName = true; + continue; + } + if (curr == '=') + { + onName = false; + continue; + } + if (onName) + name += curr; + else + value += curr; + } + } + } + } + + this->hasFile = true; +} + +bool XSFFile::IsValidType(uint8_t type) const +{ + return this->xSFType == type; +} + +void XSFFile::Clear() +{ + this->xSFType = 0; + this->hasFile = false; + this->reservedSection.clear(); + this->programSection.clear(); + this->tags.clear(); +} + +bool XSFFile::HasFile() const +{ + return this->hasFile; +} + +std::vector &XSFFile::GetReservedSection() +{ + return this->reservedSection; +} + +std::vector XSFFile::GetReservedSection() const +{ + return this->reservedSection; +} + +std::vector &XSFFile::GetProgramSection() +{ + return this->programSection; +} + +std::vector XSFFile::GetProgramSection() const +{ + return this->programSection; +} + +void XSFFile::SetTag(const std::string &name, const std::string &value) +{ + this->tags[name] = value; +} + +bool XSFFile::GetTagExists(const std::string &name) const +{ + return this->tags.find(name) != this->tags.end(); +} + +std::string XSFFile::GetTagValue(const std::string &name) const +{ + return this->GetTagExists(name) ? this->tags.at(name) : ""; +} + +static unsigned long StringToMS(const std::string& value, unsigned long defaultLength) +{ + double length = 0; + if (!value.empty()) { + std::istringstream ss(value); + double part = 0; + do { + ss >> part; + length = length * 60 + part; + } while (ss.get() == ':' && ss); + } + if (!length) + return defaultLength; + return length * 1000; +} + +unsigned long XSFFile::GetLengthMS(unsigned long defaultLength) const +{ + std::string value = this->GetTagValue("length"); + return StringToMS(value, defaultLength); +} + +unsigned long XSFFile::GetFadeMS(unsigned long defaultFade) const +{ + std::string value = this->GetTagValue("fade"); + return StringToMS(value, defaultFade); +} + +void XSFFile::SaveFile() const +{ + /* + std::ofstream xSF; + xSF.exceptions(std::ofstream::failbit); +#ifdef _WIN32 + xSF.open(ConvertFuncs::StringToWString(this->fileName).c_str(), std::ofstream::out | std::ofstream::binary); +#else + xSF.open(this->fileName.c_str(), std::ofstream::out | std::ofstream::binary); +#endif + + xSF.write(reinterpret_cast(&this->rawData[0]), this->rawData.size()); + + auto allTags = this->tags.GetTags(); + if (!allTags.empty()) + { + xSF.write("[TAG]", 5); + std::for_each(allTags.begin(), allTags.end(), [&](const std::string &tag) + { + xSF.write(tag.c_str(), tag.length()); + xSF.write("\n", 1); + }); + } + */ +} diff -Nru audacious-plugins-4.1/src/xsf/XSFFile.h audacious-plugins-4.2/src/xsf/XSFFile.h --- audacious-plugins-4.1/src/xsf/XSFFile.h 1970-01-01 00:00:00.000000000 +0000 +++ audacious-plugins-4.2/src/xsf/XSFFile.h 2022-07-10 01:12:34.000000000 +0000 @@ -0,0 +1,87 @@ +/* + * xSF - File structure + * Copyright (c) 2014-2020 Naram Qashat + * Copyright (c) 2020-2021 Adam Higerd + * + * Partially derived from Audio Overload SDK + * Copyright (c) 2007-2008 R. Belmont and Richard Bannister. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the names of R. Belmont and Richard Bannister nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include +#include +#include + +class XSFFile +{ +protected: + uint8_t xSFType; + bool hasFile; + std::vector rawData, reservedSection, programSection; + std::map tags; + void ReadXSF(std::istream &xSF, uint32_t programSizeOffset, uint32_t programHeaderSize, bool readTagsOnly = false); +public: + XSFFile(); + XSFFile(std::istream& xSF, uint32_t programSizeOffset = 0, uint32_t programHeaderSize = 0, bool readTagsOnly = false); + bool IsValidType(uint8_t type) const; + void Clear(); + bool HasFile() const; + std::vector &GetReservedSection(); + std::vector GetReservedSection() const; + std::vector &GetProgramSection(); + std::vector GetProgramSection() const; + void SetTag(const std::string &name, const std::string &value); + bool GetTagExists(const std::string &name) const; + std::string GetTagValue(const std::string &name) const; + template T GetTagValue(const std::string &name, const T &defaultValue) const + { + T value = defaultValue; + if (this->GetTagExists(name)) { + std::istringstream ss(this->GetTagValue(name)); + ss >> value; + } + return value; + } + unsigned long GetLengthMS(unsigned long defaultLength) const; + unsigned long GetFadeMS(unsigned long defaultFade) const; + void SaveFile() const; +}; + +inline uint32_t Get32BitsLE(const uint8_t *input) +{ + return input[0] | (input[1] << 8) | (input[2] << 16) | (input[3] << 24); +} + +inline uint32_t Get32BitsLE(std::istream &input) +{ + uint8_t bytes[4]; + input.read(reinterpret_cast(bytes), 4); + return Get32BitsLE(bytes); +}