Compare commits

...

23 Commits

Author SHA1 Message Date
Rafael Kitover
043956753b translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-30 15:00:20 +00:00
Rafael Kitover
e0eb3b3dab translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-30 08:00:21 +00:00
Rafael Kitover
e3e14232f7 Set gba_darken opt default to 37
Set the GBA darken value default to 37 instead of 50, seems to look
pretty good.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-28 04:23:51 +00:00
Squall Leonhart
7565cac230 Update 2xSaI.cpp
The previous interpolation operator could cause the channels to bleed into the next when the LCD Color filter was enabled, on some starts, some settings.
2025-08-25 17:41:04 +10:00
Rafael Kitover
33c5aeb80e Default LCD Filter to enabled for GBA/GB
Set the defaults for GB and GBA LCD Filter to enabled and rewrite the
values in previous versions of the config to enabled as well.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-24 02:49:59 +00:00
Rafael Kitover
c5510ba28f ci: update install-nix-action to v31
Update the GitHub CI action install-nix-action to v31 and remove
references to apple_sdk from default.nix, they have been deprecated.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 22:04:19 +00:00
Rafael Kitover
96c23628ba Set default for gba_darken to 50
Set the default for the color correction option gba_darken to 50, which
is the nicest looking value.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 16:39:22 +00:00
Rafael Kitover
37fb449fc9 Remove gbafilter_pad/gbcfilter_pad, dead code
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 16:35:06 +00:00
Rafael Kitover
7519c9b818 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 01:00:20 +00:00
Rafael Kitover
24b779c09e translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-23 00:00:20 +00:00
Rafael Kitover
a17df26e52 build: fix Debian installdeps for current Ubuntu
Fix installdeps for Debian variants by checking for `libsdl3-dev` and
falling back to `libsdl2-dev` if not available.

Also add `libx264-dev` and `libx265-dev` to the list of FFmpeg packages
as we now require them.

Fix #1486

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-21 22:53:33 +00:00
Rafael Kitover
b2dd03c6cb build: guard cmake_policy() w if(POLICY)
Check if CMake policies being set exist to prevent errors on older CMake
versions.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-21 20:49:32 +00:00
Andy Vandijck
967426e2f0 Fix color change with previous check 2025-08-21 09:17:54 +02:00
Rafael Kitover
ee2678c13c translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-20 20:00:20 +00:00
Rafael Kitover
337e465741 translations: transifex pull
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2025-08-20 19:00:19 +00:00
Andy Vandijck
5007977189 Add capital begin letter 2025-08-20 16:36:27 +02:00
Andy Vandijck
99f97138a2 Add LCD filter parameters and add GBC filter 2025-08-20 16:31:05 +02:00
Andy Vandijck
5b867c1483 Fix color name 2025-08-19 15:27:37 +02:00
Andy Vandijck
fe08f4d326 Remove quoted code 2025-08-19 15:26:12 +02:00
Andy Vandijck
c334e3ffca Fix PS2 colors for libretro 2025-08-19 15:20:49 +02:00
Andy Vandijck
35f8ba0b8f Add libretro PlayStation2 support 2025-08-18 16:12:29 +02:00
Andy Vandijck
fca5fae329 Check file size for GBA ROM and reduce memory footprint 2025-08-17 16:02:26 +02:00
Andy Vandijck
56ea6456f5 Check file size for GBA ROM and reduce memory footprint 2025-08-17 16:01:20 +02:00
20 changed files with 225 additions and 166 deletions

View File

@@ -36,7 +36,7 @@ jobs:
with:
submodules: recursive
- name: Install nix
uses: cachix/install-nix-action@v22
uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=channel:nixos-unstable

View File

@@ -2,9 +2,15 @@ cmake_minimum_required(VERSION 3.19)
cmake_policy(VERSION 3.19...3.28.3)
# Use new link library de-duplication behavior.
cmake_policy(SET CMP0156 NEW)
cmake_policy(SET CMP0179 NEW)
# cmake_policy(SET CMP0181 NEW)
if(POLICY CMP0156)
cmake_policy(SET CMP0156 NEW)
endif()
if(POLICY CMP0179)
cmake_policy(SET CMP0179 NEW)
endif()
#if(POLICY CMP0181)
# cmake_policy(SET CMP0181 NEW)
#endif()
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

View File

@@ -2,7 +2,7 @@ with import <nixpkgs> {};
stdenv.mkDerivation {
name = "visualboyadvance-m";
buildInputs = if stdenv.isDarwin then
[ ninja cmake nasm faudio gettext libintl libtiff pkg-config zip zlib openal ffmpeg wxGTK32 sdl3 pcre pcre2 darwin.apple_sdk.frameworks.System darwin.apple_sdk.frameworks.IOKit darwin.apple_sdk.frameworks.Carbon darwin.apple_sdk.frameworks.Cocoa darwin.apple_sdk.frameworks.QuartzCore darwin.apple_sdk.frameworks.AudioToolbox darwin.apple_sdk.frameworks.OpenGL darwin.apple_sdk.frameworks.OpenAL llvmPackages_latest.clang llvmPackages_latest.bintools ]
[ ninja cmake nasm faudio gettext libintl libtiff pkg-config zip zlib openal ffmpeg wxGTK32 sdl3 pcre pcre2 llvmPackages_latest.clang llvmPackages_latest.bintools ]
else
[ ninja cmake gcc clang llvm llvmPackages.libcxx nasm faudio gettext libintl libtiff pkg-config zip zlib openal ffmpeg wxGTK32 libGL libGLU glfw sdl3 gtk3-x11 pcre pcre2 util-linuxMinimal libselinux libsepol libthai libdatrie xorg.libXdmcp xorg.libXtst libxkbcommon libepoxy dbus at-spi2-core ];
}

View File

@@ -342,9 +342,12 @@ debian_installdeps() {
;;
esac
pkgs="build-essential g++ nasm cmake ccache gettext zlib1g-dev libgl1-mesa-dev libgettextpo-dev libsdl3-dev libglu1-mesa-dev libglu1-mesa libgles2-mesa-dev $glew_lib $wx_libs libgtk2.0-dev libgtk-3-dev ccache zip ninja-build libopenal-dev"
sdl_lib=$(apt-cache search libsdl3-dev | grep libsdl3-dev | awk '{ print $1 }')
[ -z "$sdl_lib" ] && sdl_lib=libsdl2-dev
[ -n "$ENABLE_FFMPEG" ] && pkgs="$pkgs libavcodec-dev libavformat-dev libswscale-dev libavutil-dev $libswresample_dev"
pkgs="build-essential g++ nasm cmake ccache gettext zlib1g-dev libgl1-mesa-dev libgettextpo-dev $sdl_lib libglu1-mesa-dev libglu1-mesa libgles2-mesa-dev $glew_lib $wx_libs libgtk2.0-dev libgtk-3-dev ccache zip ninja-build libopenal-dev"
[ -n "$ENABLE_FFMPEG" ] && pkgs="$pkgs libavcodec-dev libavformat-dev libswscale-dev libavutil-dev $libswresample_dev libx264-dev libx265-dev"
check sudo apt-get -qy install $pkgs
else

View File

@@ -372,7 +372,7 @@ msgstr "Valor no válido para ampliación predeterminada."
#: dialogs/display-config.cpp:412
msgid "Invalid color correction profile"
msgstr ""
msgstr "Perfil de corrección de color inválido"
#: dialogs/display-config.cpp:467 xrc/DisplayConfig.xrc:102
#: xrc/DisplayConfig.xrc:152 xrc/DisplayConfig.xrc:425
@@ -1318,7 +1318,7 @@ msgstr "Renderizador SDL"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:442
msgid "Color correction profile"
msgstr ""
msgstr "Perfil de corrección de color"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:445
msgid "BIOS file to use for Game Boy, if enabled"
@@ -1375,7 +1375,7 @@ msgstr "Directorio donde buscar archivos ROM de Game Boy Color"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:466
msgid "Color lightness factor"
msgstr ""
msgstr "Factor de luminosidad de color"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:469
msgid "BIOS file to use, if enabled"
@@ -1399,7 +1399,7 @@ msgstr "IP del servidor de enlace de red por defecto a enlazar"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:488
msgid "Default network link port (server and client)"
msgstr ""
msgstr "Puerto de enlace de red por defecto (servidor y cliente)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:489
msgid "Default network protocol"
@@ -1415,7 +1415,7 @@ msgstr "Tipo de cable de enlace"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:494
msgid "Color darkness factor"
msgstr ""
msgstr "Factor de oscuridad de color"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:497
msgid "Automatically load last saved state"
@@ -1425,31 +1425,31 @@ msgstr "Cargar automáticamente último archivo guardado"
msgid ""
"Directory to store game save files (relative paths are relative to ROM; "
"blank is config dir)"
msgstr ""
msgstr "Directorio para almacenar archivos de guardado (las rutas relativas son relativas a la ROM; el espacio en blanco es el directorio de configuración)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:501
msgid "Freeze recent load list"
msgstr ""
msgstr "Congelar lista de carga reciente"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:503
msgid ""
"Directory to store A / V and game recordings (relative paths are relative to"
" ROM)"
msgstr ""
msgstr "Directorio para almacenar A / V y grabaciones de juegos (las rutas relativas son relativas a la ROM)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:506
msgid "Number of seconds between rewind snapshots (0 to disable)"
msgstr ""
msgstr "Número de segundos entre instantáneas de rebobinado (0 para deshabilitar)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:508
msgid "Directory to store screenshots (relative paths are relative to ROM)"
msgstr ""
msgstr "Directorio para almacenar capturas de pantalla (las rutas relativas son relativas a la ROM)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:511
msgid ""
"Directory to store saved state files (relative paths are relative to "
"BatteryDir)"
msgstr ""
msgstr "Directorio para almacenar archivos de estado (las rutas relativas son relativas al directorio de baterías)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:513
msgid "Enable status bar"
@@ -1457,7 +1457,7 @@ msgstr "Habilitar barra de estado"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:514
msgid "INI file version (DO NOT MODIFY)"
msgstr ""
msgstr "Versión de archivo INI (NO MODIFICAR)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:518
msgid ""
@@ -1473,11 +1473,11 @@ msgstr ""
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:524
msgid "The number of the stick to use in single-player mode"
msgstr ""
msgstr "El número de cruceta para usar en modo de un jugador"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:526
msgid "Whether to enable SDL GameController mode"
msgstr ""
msgstr "Si habilitar modo SDL GameController"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:530
msgid ""
@@ -1488,15 +1488,15 @@ msgstr ""
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:535
msgid "Enable AGB debug print"
msgstr ""
msgstr "Habilitar impresión de depuración AGB"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:536
msgid "Auto skip frames"
msgstr ""
msgstr "Saltar fotogramas automáticamente"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:538
msgid "Apply IPS / UPS / IPF patches if found"
msgstr ""
msgstr "Aplicar parches IPS / UPS / IPF si se encuentran"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:540
msgid "Automatically save and load cheat list"
@@ -1504,15 +1504,15 @@ msgstr "Guardar y cargar trucos automáticamente"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:544
msgid "Automatically enable border for Super Game Boy games"
msgstr ""
msgstr "Habilitar borde automáticamente para juegos de Super Game Boy"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:546
msgid "Always enable border"
msgstr ""
msgstr "Habilitar borde siempre"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:547
msgid "Screen capture file format"
msgstr ""
msgstr "Formato de archivo de captura de pantalla"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:548
msgid "Enable cheats"
@@ -1520,11 +1520,11 @@ msgstr "Habilitar trucos"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:549
msgid "Disable on-screen status messages"
msgstr ""
msgstr "Deshabilitar mensajes de estado en pantalla"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:550
msgid "Type of system to emulate"
msgstr ""
msgstr "Tipo de sistema a emular"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:551
msgid "Flash size 0 = 64 KB 1 = 128 KB"
@@ -1536,19 +1536,19 @@ msgstr ""
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:555
msgid "The palette to use"
msgstr ""
msgstr "La paleta a usar"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:556
msgid "Enable printer emulation"
msgstr ""
msgstr "Habilitar emulación de impresora"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:558
msgid "Break into GDB after loading the game."
msgstr ""
msgstr "Detenerse en GDB después de cargar el juego."
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:559
msgid "Port to connect GDB to"
msgstr ""
msgstr "Puerto al que conectar GDB"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:561
msgid "Number of players in network"
@@ -1556,19 +1556,19 @@ msgstr "Número de jugadores en la red"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:563
msgid "Maximum scale factor (0 = no limit)"
msgstr ""
msgstr "Factor de escala máximo (0 = sin límite)"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:565
msgid "Pause game when main window loses focus"
msgstr ""
msgstr "Pausar juego cuando la ventana principal pierde el foco"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:567
msgid "Enable RTC (vba-over.ini override is rtcEnabled"
msgstr ""
msgstr "Habilitar RTC (la sobrescritura de vba-over.ini es rtcEnabled"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:568
msgid "Native save (\"battery\") hardware type"
msgstr ""
msgstr "Tipo de hardware de guardado nativo (\"batería\")"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:569
msgid "Show speed indicator"
@@ -1576,15 +1576,15 @@ msgstr "Mostrar indicador de velocidad"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:571
msgid "Draw on-screen messages transparently"
msgstr ""
msgstr "Dibujar mensajes en pantalla con transparencia"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:572
msgid "Skip BIOS initialization"
msgstr ""
msgstr "Omitir inicialización de BIOS"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:574
msgid "Do not overwrite cheat list when loading state"
msgstr ""
msgstr "No sobrescribir la lista de trucos al cargar un estado"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:576
msgid "Do not overwrite native (battery) save when loading state"
@@ -1608,7 +1608,7 @@ msgstr ""
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:588
msgid "Mute sound during speedup"
msgstr ""
msgstr "Mutear sonido durante aceleración"
#: /home/rkitover/source/repos/vbam-tx-pulls/src/wx/config/internal/option-internal.cpp:589
msgid "Use the specified BIOS file for Game Boy"

View File

@@ -15,6 +15,7 @@
# FERNANDO AYALA PEREZ, 2021
# Kevin Bustinza <ufreshx@gmail.com>, 2021
# MELERIX, 2023
# Rene Moreira, 2025
# Sebastián Castro Saldarriaga, 2023
# Timoteo Traiber Minnaard, 2024
# Yeferson Galviz, 2023
@@ -25,7 +26,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-05 08:00+0000\n"
"PO-Revision-Date: 2011-12-03 19:42+0000\n"
"Last-Translator: Dreak LDS, 2025\n"
"Last-Translator: Rene Moreira, 2025\n"
"Language-Team: Spanish (Latin America) (http://app.transifex.com/bgk/vba-m/language/es_419/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -83,15 +84,15 @@ msgstr "Seleccionar archivo de código de punto"
#: cmdevents.cpp:453 cmdevents.cpp:478
msgid "E-Reader Dot Code (*.bin;*.raw)|*.bin;*.raw"
msgstr "Código de puntos del lector electrónico (*.bin;*.raw)|*.bin;*.raw"
msgstr "Código de puntos de e-Reader (*.bin;*.raw)|*.bin;*.raw"
#: cmdevents.cpp:500 cmdevents.cpp:704
msgid "Select battery file"
msgstr "Seleccionar archivo de batgeria"
msgstr "Seleccionar archivo de batería"
#: cmdevents.cpp:501 cmdevents.cpp:705
msgid "Battery file (*.sav)|*.sav|Flash save (*.dat)|*.dat"
msgstr "Archivo de Batería (*.sav)|*.sav|Flash save (*.dat)|*.dat"
msgstr "Archivo de batería (*.sav)|*.sav|Guardado Flash (*.dat)|*.dat"
#: cmdevents.cpp:512
msgid ""

View File

@@ -26,10 +26,6 @@ extern "C"
bool cpu_mmx = 1;
#endif
}
static uint32_t colorMask = 0xF7DEF7DE;
static uint32_t lowPixelMask = 0x08210821;
static uint32_t qcolorMask = 0xE79CE79C;
static uint32_t qlowpixelMask = 0x18631863;
static uint32_t redblueMask = 0xF81F;
static uint32_t greenMask = 0x7E0;
@@ -41,20 +37,12 @@ int Init_2xSaI(uint32_t BitFormat)
{
if(systemColorDepth == 16) {
if (BitFormat == 565) {
colorMask = 0xF7DEF7DE;
lowPixelMask = 0x08210821;
qcolorMask = 0xE79CE79C;
qlowpixelMask = 0x18631863;
redblueMask = 0xF81F;
greenMask = 0x7E0;
qRGB_COLOR_MASK[0] = qRGB_COLOR_MASK[1] = 0xF7DEF7DE;
hq2x_init(16);
RGB_LOW_BITS_MASK = 0x0821;
} else if (BitFormat == 555) {
colorMask = 0x7BDE7BDE;
lowPixelMask = 0x04210421;
qcolorMask = 0x739C739C;
qlowpixelMask = 0x0C630C63;
redblueMask = 0x7C1F;
greenMask = 0x3E0;
qRGB_COLOR_MASK[0] = qRGB_COLOR_MASK[1] = 0x7BDE7BDE;
@@ -64,10 +52,6 @@ int Init_2xSaI(uint32_t BitFormat)
return 0;
}
} else if(systemColorDepth == 32) {
colorMask = 0xfefefe;
lowPixelMask = 0x010101;
qcolorMask = 0xfcfcfc;
qlowpixelMask = 0x030303;
qRGB_COLOR_MASK[0] = qRGB_COLOR_MASK[1] = 0xfefefe;
hq2x_init(32);
RGB_LOW_BITS_MASK = 0x010101;
@@ -146,25 +130,24 @@ static inline int GetResult (uint32_t A, uint32_t B, uint32_t C, uint32_t D)
return r;
}
static inline uint32_t INTERPOLATE (uint32_t A, uint32_t B)
{
if (A != B) {
return (((A & colorMask) >> 1) + ((B & colorMask) >> 1) +
(A & B & lowPixelMask));
} else
return A;
static inline uint32_t INTERPOLATE(uint32_t A, uint32_t B) {
if (A == B) {
return A;
}
return (
(((((A >> 16) & 0xFF) & 0xFE) >> 1) + ((((B >> 16) & 0xFF) & 0xFE) >> 1) + (((A >> 16) & 0xFF) & ((B >> 16) & 0xFF) & 0x01)) << 16) |
((((((A >> 8) & 0xFF) & 0xFE) >> 1) + ((((B >> 8) & 0xFF) & 0xFE) >> 1) + (((A >> 8) & 0xFF) & ((B >> 8) & 0xFF) & 0x01)) << 8) |
(((((A & 0xFF) & 0xFE) >> 1) + (((B & 0xFF) & 0xFE) >> 1) + ((A & 0xFF) & (B & 0xFF) & 0x01)));
}
static inline uint32_t Q_INTERPOLATE (uint32_t A, uint32_t B, uint32_t C, uint32_t D)
{
uint32_t x = ((A & qcolorMask) >> 2) +
((B & qcolorMask) >> 2) +
((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2);
uint32_t y = (A & qlowpixelMask) +
(B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask);
y = (y >> 2) & qlowpixelMask;
return x + y;
static inline uint32_t Q_INTERPOLATE(uint32_t A, uint32_t B, uint32_t C, uint32_t D) {
return (
(((((A >> 16) & 0xFC) >> 2) + (((B >> 16) & 0xFC) >> 2) + (((C >> 16) & 0xFC) >> 2) + (((D >> 16) & 0xFC) >> 2) +
(((A >> 16) & 0x03) + ((B >> 16) & 0x03) + ((C >> 16) & 0x03) + ((D >> 16) & 0x03))) << 16) |
(((((A >> 8) & 0xFC) >> 2) + (((B >> 8) & 0xFC) >> 2) + (((C >> 8) & 0xFC) >> 2) + (((D >> 8) & 0xFC) >> 2) +
(((A >> 8) & 0x03) + ((B >> 8) & 0x03) + ((C >> 8) & 0x03) + ((D >> 8) & 0x03))) << 8) |
((((A & 0xFC) >> 2) + ((B & 0xFC) >> 2) + ((C & 0xFC) >> 2) + ((D & 0xFC) >> 2) +
((A & 0x03) + (B & 0x03) + (C & 0x03) + (D & 0x03)))));
}
static inline int GetResult1_32 (uint32_t A, uint32_t B, uint32_t C, uint32_t D,
@@ -1275,4 +1258,3 @@ void Scale_2xSaI (uint8_t *srcPtr, uint32_t srcPitch, uint8_t * /* deltaPtr */,
dstPtr += dstPitch;
}
}

View File

@@ -351,37 +351,3 @@ void gbafilter_pal32(uint32_t* buf, int count)
*buf++ = final_pix;
}
}
// gbafilter_pad remains unchanged as it's for masking.
void gbafilter_pad(uint8_t* buf, int count)
{
union {
struct
{
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} part;
unsigned whole;
} mask;
mask.whole = 0x1f << systemRedShift;
mask.whole += 0x1f << systemGreenShift;
mask.whole += 0x1f << systemBlueShift;
switch (systemColorDepth) {
case 24:
while (count--) {
*buf++ &= mask.part.r;
*buf++ &= mask.part.g;
*buf++ &= mask.part.b;
}
break;
case 32:
while (count--) {
*((uint32_t*)buf) &= mask.whole;
buf += 4;
}
}
}

View File

@@ -7,7 +7,6 @@ void gbafilter_update_colors(bool lcd = false);
void gbafilter_pal8(uint8_t* buf, int count);
void gbafilter_pal(uint16_t* buf, int count);
void gbafilter_pal32(uint32_t* buf, int count);
void gbafilter_pad(uint8_t* buf, int count);
void gbafilter_set_params(int color_mode, float darken_screen);
#endif // VBAM_COMPONENTS_FILTERS_AGB_FILTERS_AGB_H_

View File

@@ -350,37 +350,3 @@ void gbcfilter_pal32(uint32_t* buf, int count)
*buf++ = final_pix;
}
}
// gbcfilter_pad remains unchanged as it's for masking.
void gbcfilter_pad(uint8_t* buf, int count)
{
union {
struct
{
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} part;
unsigned whole;
} mask;
mask.whole = 0x1f << systemRedShift;
mask.whole += 0x1f << systemGreenShift;
mask.whole += 0x1f << systemBlueShift;
switch (systemColorDepth) {
case 24:
while (count--) {
*buf++ &= mask.part.r;
*buf++ &= mask.part.g;
*buf++ &= mask.part.b;
}
break;
case 32:
while (count--) {
*((uint32_t*)buf) &= mask.whole;
buf += 4;
}
}
}

View File

@@ -7,7 +7,6 @@ void gbcfilter_update_colors(bool lcd = false);
void gbcfilter_pal8(uint8_t* buf, int count);
void gbcfilter_pal(uint16_t* buf, int count);
void gbcfilter_pal32(uint32_t* buf, int count);
void gbcfilter_pad(uint8_t* buf, int count);
void gbcfilter_set_params(int color_mode, float lighten_screen);
#endif // VBAM_COMPONENTS_FILTERS_CGB_FILTERS_CGB_H_

View File

@@ -1675,16 +1675,31 @@ void GBAMatrixWrite16(GBAMatrix_t *matrix, uint32_t address, uint16_t value)
}
}
static size_t get_gba_rom_size(const char* szFile)
{
size_t size = 0;
FILE *f = fopen(szFile, "rb");
if (f == NULL)
return 0;
fseek(f, 0, SEEK_END);
size = ftell(f);
fclose(f);
return size;
}
int CPULoadRom(const char* szFile)
{
romSize = SIZE_ROM * 4;
romSize = get_gba_rom_size(szFile);
if (g_rom != NULL) {
CPUCleanUp();
}
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
g_rom = (uint8_t*)malloc(SIZE_ROM * 4);
g_rom = (uint8_t*)malloc(romSize);
if (g_rom == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"ROM");
@@ -1829,14 +1844,14 @@ int CPULoadRom(const char* szFile)
int CPULoadRomData(const char* data, int size)
{
romSize = SIZE_ROM * 4;
romSize = size % 2 == 0 ? size : size + 1;
if (g_rom != NULL) {
CPUCleanUp();
}
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
g_rom = (uint8_t*)malloc(SIZE_ROM * 4);
g_rom = (uint8_t*)malloc(romSize);
if (g_rom == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"ROM");
@@ -1869,7 +1884,7 @@ int CPULoadRomData(const char* data, int size)
memcpy(&ident, &g_rom[0xAC], 1);
if (ident == 'M') {
g_rom2 = (uint8_t *)malloc(SIZE_ROM * 4);
g_rom2 = (uint8_t *)malloc(romSize);
memcpy(g_rom2, data, size);
romSize = 0x01000000;

View File

@@ -1,7 +1,15 @@
DEBUG=0
TILED_RENDERING=0
STATIC_LINKING=0
FRONTEND_SUPPORTS_RGB565=1
ifeq ($(platform), ps2)
FRONTEND_SUPPORT_RGB565=0
FRONTEND_SUPPORT_BGR1555=1
else
FRONTEND_SUPPORT_RGB565=1
FRONTEND_SUPPORT_BGR1555=0
endif
NO_LINK=1
SPACE :=
@@ -239,6 +247,16 @@ else ifeq ($(platform), psl1ght)
PLATFORM_DEFINES := -D__PS3__ -D__POWERPC__ -D__ppc__
STATIC_LINKING=1
TILED_RENDERING=1
else ifeq ($(platform), ps2)
EXT=a
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
CC = mips64r5900el-ps2-elf-gcc$(EXE_EXT)
CXX = mips64r5900el-ps2-elf-g++$(EXE_EXT)
AR = mips64r5900el-ps2-elf-ar$(EXE_EXT)
VBA_DEFINES += -DPS2
CFLAGS += -DHAVE_STRLWR -DPS2 -G0 -ffast-math -DABGR1555 -DNO_FAST_SQRT
STATIC_LINKING = 1
TILED_RENDERING=1
# PSP1
else ifeq ($(platform), psp1)

View File

@@ -11,6 +11,10 @@ ifeq ($(FRONTEND_SUPPORTS_RGB565),1)
VBA_DEFINES += -DFRONTEND_SUPPORTS_RGB565
endif
ifeq ($(FRONTEND_SUPPORT_BGR1555),1)
VBA_DEFINES += -DFRONTEND_SUPPORT_BGR1555
endif
ifeq ($(NO_LINK),1)
VBA_DEFINES += -DNO_LINK
endif

View File

@@ -612,7 +612,15 @@ void retro_init(void)
if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir)
snprintf(retro_system_directory, sizeof(retro_system_directory), "%s", dir);
#ifdef FRONTEND_SUPPORTS_RGB565
#ifdef FRONTEND_SUPPORT_BGR1555
systemColorDepth = 16;
systemRedShift = 0;
systemGreenShift = 5;
systemBlueShift = 10;
enum retro_pixel_format rgb1555 = RETRO_PIXEL_FORMAT_0RGB1555;
if (environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &rgb1555) && log_cb)
log_cb(RETRO_LOG_INFO, "Frontend supports BGR1555 - will use that instead of XRGB1555.\n");
#elif defined(FRONTEND_SUPPORTS_RGB565)
systemColorDepth = 16;
systemRedShift = 11;
systemGreenShift = 6;
@@ -1013,6 +1021,11 @@ static int option_analogDeadzone;
static int option_gyroSensitivity, option_tiltSensitivity;
static bool option_swapAnalogSticks;
static int color_mode = 0;
static int prev_color_mode = 0;
static float color_change = 0.0f;
static float prev_color_change = 0.0f;
static void update_variables(bool startup)
{
struct retro_variable var = { NULL, NULL };
@@ -1216,14 +1229,47 @@ static void update_variables(bool startup)
gbColorOption = (!strcmp(var.value, "enabled"));
}
var.key = "vbam_lcdfilter_type";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
prev_color_mode = color_mode;
if (!strcmp(var.value, "sRGB"))
color_mode = 0;
else if (!strcmp(var.value, "DCI"))
color_mode = 1;
else if (!strcmp(var.value, "Rec2020"))
color_mode = 2;
}
var.key = "vbam_color_change";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
prev_color_change = color_change;
color_change = ((float)atoi(var.value)) / 100;
}
var.key = "vbam_lcdfilter";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
bool prev_lcdfilter = option_lcdfilter;
option_lcdfilter = (!strcmp(var.value, "enabled")) ? true : false;
if (prev_lcdfilter != option_lcdfilter)
gbafilter_update_colors(option_lcdfilter);
if ((prev_color_change != color_change) || (prev_color_mode != color_mode)) {
if (type == IMAGE_GBA) {
gbafilter_set_params(color_mode, color_change);
} else {
gbcfilter_set_params(color_mode, color_change);
}
}
if ((prev_lcdfilter != option_lcdfilter) || (prev_color_change != color_change) || (prev_color_mode != color_mode)) {
if (type == IMAGE_GBA) {
gbafilter_update_colors(option_lcdfilter);
} else {
gbcfilter_update_colors(option_lcdfilter);
}
}
}
var.key = "vbam_interframeblending";
@@ -1756,9 +1802,9 @@ bool retro_load_game(const struct retro_game_info *game)
return emulating;
}
bool retro_load_game_special(unsigned, const struct retro_game_info *, size_t)
bool retro_load_game_special(unsigned, const struct retro_game_info *game, size_t)
{
return false;
return retro_load_game(game);
}
void retro_unload_game(void)
@@ -1788,8 +1834,10 @@ bool systemCanChangeSoundQuality(void)
void systemDrawScreen(void)
{
unsigned pitch = systemWidth * (systemColorDepth >> 3);
if (ifb_filter_func)
ifb_filter_func(g_pix, pitch, systemWidth, systemHeight);
video_cb(g_pix, systemWidth, systemHeight, pitch);
}

View File

@@ -203,6 +203,54 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"disabled"
},
{
"vbam_lcdfilter_type",
"LCD Color Filter Type",
NULL,
"Screen filter type for onscreen colors.",
NULL,
"video",
{
{ "sRGB", NULL },
{ "DCI", NULL },
{ "Rec2020", NULL },
{ NULL, NULL },
},
"sRGB"
},
{
"vbam_color_change",
"LCD Color Lighten/Darken",
NULL,
"Darken GBA or lighten GBC in %.",
NULL,
"video",
{
{ "0", NULL },
{ "5", NULL },
{ "10", NULL },
{ "15", NULL },
{ "20", NULL },
{ "25", NULL },
{ "30", NULL },
{ "35", NULL },
{ "40", NULL },
{ "45", NULL },
{ "50", NULL },
{ "55", NULL },
{ "60", NULL },
{ "65", NULL },
{ "70", NULL },
{ "75", NULL },
{ "80", NULL },
{ "85", NULL },
{ "90", NULL },
{ "95", NULL },
{ "100", NULL },
{ NULL, NULL },
},
"0"
},
{
"vbam_interframeblending",
"Interframe Blending",

View File

@@ -21,3 +21,4 @@ firmware2_desc = "gbc_bios.bin (Game Boy Color BIOS)"
firmware2_path = "gbc_bios.bin"
firmware2_opt = "true"
notes = "(!) gba_bios.bin (md5): a860e8c0b6d573d191e4ec7db1b1e4f6|(!) gb_bios.bin (md5): 32fbbd84168d3482956eb3c5051637f5|(!) gbc_bios.bin (md5): dbfce9db9deaa2567f6a84fde55f9680"

View File

@@ -176,7 +176,7 @@ std::array<Option, kNbOptions>& Option::All() {
/// GB
wxString gb_bios = wxEmptyString;
bool colorizer_hack = false;
bool gb_lcd_filter = false;
bool gb_lcd_filter = true;
wxString gbc_bios = wxEmptyString;
bool print_auto_page = true;
bool print_screen_cap = false;
@@ -185,14 +185,14 @@ std::array<Option, kNbOptions>& Option::All() {
uint32_t gb_lighten = 0;
/// GBA
bool gba_lcd_filter = false;
bool gba_lcd_filter = true;
#ifndef NO_LINK
bool link_auto = false;
bool link_hacks = true;
bool link_proto = false;
#endif
wxString gba_rom_dir;
uint32_t gba_darken = 0;
uint32_t gba_darken = 37;
/// Core
bool agb_print = false;

View File

@@ -127,7 +127,7 @@ static constexpr size_t kNbSoundRate = static_cast<size_t>(AudioRate::kLast);
// This is incremented whenever we want to change a default value between
// release versions. The option update code is in load_opts.
static constexpr uint32_t kIniLatestVersion = 1;
static constexpr uint32_t kIniLatestVersion = 2;
// Represents a single option saved in the INI file. Option does not own the
// individual option, but keeps a pointer to where the data is actually saved.

View File

@@ -382,8 +382,11 @@ void load_opts(bool first_time_launch) {
OPTION(kGBALinkTimeout) = 500;
}
#endif
// Previous default was true.
OPTION(kGBALCDFilter) = false;
}
case 1: { // up to 2.2.2 included.
// Previous defaults were false.
OPTION(kGBALCDFilter) = true;
OPTION(kGBLCDFilter) = true;
}
}
ini_version++;