Compare commits

..

No commits in common. "master" and "0.10.0" have entirely different histories.

972 changed files with 33139 additions and 110226 deletions

View File

@ -12,11 +12,7 @@ install:
- vcpkg --no-dry-run upgrade
- rd /Q /S C:\Tools\vcpkg\buildtrees
before_build:
- cmake . -DCMAKE_PREFIX_PATH=C:\Qt\5.15\msvc2019_64 \
-DCMAKE_TOOLCHAIN_FILE=C:\Tools\vcpkg\scripts\buildsystems\vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-windows-release \
-DCMAKE_CONFIGURATION_TYPES=Release \
-DCMAKE_SYSTEM_VERSION=10.0.22000.1
- cmake . -DCMAKE_PREFIX_PATH=C:\Qt\5.15\msvc2019_64 -DCMAKE_TOOLCHAIN_FILE=C:\Tools\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-release -DCMAKE_CONFIGURATION_TYPES=Release
build:
parallel: true
project: mGBA.sln

BIN
.gitignore vendored

Binary file not shown.

230
CHANGES
View File

@ -1,223 +1,3 @@
0.11.0: (Future)
Features:
- Forwarder support for 3DS and Vita
- Custom border support
- New option to lock the maximum frame size
- Memory access and information logging
- 3DS: Add faster "loose" sync mode, default enabled
- Vita: Allow using rear touch pads as L2/L3/R2/R3
- Scripting: New `input` API for getting raw keyboard/mouse/controller state
- Scripting: New `storage` API for saving data for a script, e.g. settings
- Scripting: New `image` and `canvas` APIs for drawing images and displaying on-screen
- Scripting: Debugger integration to allow for breakpoints and watchpoints
- Scripting: Add support for running scripts at startup
- New unlicensed GB mappers: NT (older types 1 and 2), Li Cheng, GGB-81, Sintax
- Initial support for bootleg GBA multicarts
- Debugger: Add range watchpoints
- "Headless" frontend for running tests, automation, etc.
Emulation fixes:
- ARM: Add framework for coprocessor support
- ARM: cmn/cmp/teq/tst pc shouldn't flush the pipeline
- GB Memory: Initialize HRAM when skipping BIOS in GBC mode (fixes mgba.io/i/3420)
- GB Memory: Fix initial WRAM pattern when skipping BIOS in GBC mode (fixes mgba.io/i/2704)
- GB Serialize: Add missing Pocket Cam state to savestates
- GB Video: Implement DMG-style sprite ordering
- GB Video: Fix window enable edge case (fixes mgba.io/i/2640)
- GBA: Unhandled bkpt should be treated as an undefined exception
- GBA: Add baseline CP0 (Wii U VC) and CP1 (DCC) implementations
- GBA Serialize: Fix some minor save state edge cases
- GBA Video: Disable BG target 1 blending when OBJ blending (fixes mgba.io/i/2722)
- GBA Video: Improve emulation of window start/end conditions (fixes mgba.io/i/1945)
- GBA Video: Fix transparent OBJWIN pixel/sprite priority interaction (fixes mgba.io/i/2809)
- GBA Video: Improve sprite drawing cycle counting (fixes mgba.io/i/3081)
- GBA Video: Fix edge case with double-height sprites wrapping (fixes mgba.io/i/2824)
Other fixes:
- Core: Fix inconsistencies with setting game-specific overrides (fixes mgba.io/i/2963)
- Debugger: Fix writing to specific segment in command-line debugger
- GBA: Fix getting game info for multiboot ROMs
- mGUI: Load parent directory if last used directory is missing (fixes mgba.io/i/3379)
- Qt: Fix savestate preview sizes with different scales (fixes mgba.io/i/2560)
- Qt: Fix potential crash when configuring shortcuts
- Qt: Fix regression where loading BIOS creates a save file (fixes mgba.io/i/3359)
- Qt: Fix selecting high tiles in tile and map views (fixes mgba.io/i/3461)
Misc:
- 3DS: Change title ID to avoid conflict with commercial title (fixes mgba.io/i/3023)
- Core: Handle relative paths for saves, screenshots, etc consistently (fixes mgba.io/i/2826)
- Core: Improve rumble emulation by averaging state over entire frame (fixes mgba.io/i/3232)
- Core: Add MD5 hashing for ROMs
- Core: Add support for specifying an arbitrary portable directory
- Core: Add SHA1 hashing for ROMs
- FFmpeg: Add Ut Video option
- GB: Prevent incompatible BIOSes from being used on differing models
- GB MBC: Add M161 support for one Mani 4-in-1 multicart
- GB Serialize: Add missing savestate support for MBC6 and NT (newer)
- GBA: Improve detection of valid ELF ROMs
- GBA Audio: Remove broken XQ audio pending rewrite
- GBA BIOS: Move SoftReset implementation to assembly
- GBA e-Reader: Use geometric mean instead of arithmetic mean when detecting parameters
- GBA e-Reader: Disable strict mode when scanning cards
- GBA Memory: Improve VRAM access stall cycle estimation
- GBA SIO: Rewrite lockstep driver for improved stability
- GBA Video: Add special circlular window handling in OpenGL renderer
- GBA Video: Disable window interpolation at 1× scale (fixes mgba.io/i/1810)
- Libretro: Add Super Game Boy Color support (closes mgba.io/i/3188)
- mGUI: Enable auto-softpatching (closes mgba.io/i/2899)
- mGUI: Persist fast forwarding after closing menu (fixes mgba.io/i/2414)
- mGUI: Wrap around menu cursor when navigating past end (closes mgba.io/i/3356)
- Qt: Handle multiple save game files for disparate games separately (fixes mgba.io/i/2887)
- Qt: Remove maligned double-click-to-fullscreen shortcut (closes mgba.io/i/2632)
- Qt: Pass logging context through to video proxy thread (fixes mgba.io/i/3095)
- Qt: Show maker code and game version in ROM info
- Qt: Show a dummy shader settings tab if shaders aren't supported
- Qt: Allow passing multiple games on command line for multiplayer (closes mgba.io/i/3061)
- Qt: Support building against Qt 6
- Qt: Add shortcuts to increment fast forward speed (mgba.io/i/2903)
- Qt: Enable ROM preloading by default
- Qt: Throttle fatal error dialogs
- Qt: Add save info to bug report logs
- Qt: Show filename of loaded TBL in memory view (closes mgba.io/i/2815)
- Res: Port hq2x and OmniScale shaders from SameBoy
- Res: Port NSO-gba-colors shader (closes mgba.io/i/2834)
- Res: Update gba-colors shader (closes mgba.io/i/2976)
- Res: Port more Pokefan531 color shaders (closes mgba.io/i/3437)
- Scripting: Add `callbacks:oneshot` for single-call callbacks
0.10.5: (2025-03-08)
Other fixes:
- ARM Debugger: Fix disassembly of ror r0 barrel shift (fixes mgba.io/i/3412)
- FFmpeg: Fix failing to record videos with CRF video (fixes mgba.io/i/3368)
- GB Core: Fix cloning savedata when backing file is outdated (fixes mgba.io/i/3388)
- GBA Cheats: Let VBA-style codes patch ROM (fixes mgba.io/i/3423)
- GBA Core: Fix booting into BIOS when skip BIOS is enabled
- GBA Hardware: Fix loading states unconditionally overwriting GPIO memory
- Updater: Fix rewriting folders and files on Windows (fixes mgba.io/i/3384)
- Wii: Fix crash on loading large ZIP files (fixes mgba.io/i/3404)
Misc:
- GB: Allow use of CGB-E and AGB-0 BIOS versions (closes mgba.io/i/3427)
0.10.4: (2024-12-07)
Emulation fixes:
- GB Audio: Fix audio envelope timing resetting too often (fixes mgba.io/i/3164)
- GB I/O: Fix STAT writing IRQ trigger conditions (fixes mgba.io/i/2501)
- GBA GPIO: Fix gyro read-out start (fixes mgba.io/i/3141)
- GBA I/O: Fix HALTCNT access behavior (fixes mgba.io/i/2309)
- GBA I/O: Fix audio register 8-bit write behavior (fixes mgba.io/i/3086)
- GBA Serialize: Properly restore GPIO register state (fixes mgba.io/i/3294)
- GBA SIO: Fix MULTI mode SIOCNT bit 7 writes on secondary GBAs (fixes mgba.io/i/3110)
Other fixes:
- Core: Fix patch autoloading leaking the file handle
- GB: Fix uninitialized save data when loading undersized temporary saves
- GB, GBA Core: Fix memory leak if reloading debug symbols
- GB Serialize: Prevent loading invalid states where LY >= 144 in modes other than 1
- GBA Audio: Fix crash if audio FIFOs and timers get out of sync
- GBA Audio: Fix crash in audio subsampling if timing lockstep breaks
- GBA Core: Fix loading symbols from ELF files if the file doesn't end with .elf
- GBA Memory: Let raw access read high MMIO addresses
- Qt: Fix crash when applying changes to GB I/O registers in I/O view
- Qt: Fix LCDC background priority/enable bit being mis-mapped in I/O view
- Qt: Fix saving named states breaking when screenshot states disabled (fixes mgba.io/i/3320)
- Qt: Fix potential crash on Wayland with OpenGL (fixes mgba.io/i/3276)
- Qt: Fix installer updates if a version number is in the filename (fixes mgba.io/i/3109)
- Updater: Fix updating appimage across filesystems
Misc:
- Qt: Make window corners square on Windows 11 (fixes mgba.io/i/3285)
- Switch: Add bilinear filtering option (closes mgba.io/i/3111)
- Vita: Add imc0 and xmc0 mount point support
0.10.3: (2024-01-07)
Emulation fixes:
- ARM: Remove obsolete force-alignment in `bx pc` (fixes mgba.io/i/2964)
- ARM: Fake bpkt instruction should take no cycles (fixes mgba.io/i/2551)
- GB Audio: Fix channels 1/2 staying muted if restarted after long silence
- GB Audio: Fix channel 1 restarting if sweep applies after stop (fixes mgba.io/i/2965)
- GB Audio: Fix restarting envelope when writing to register (fixes mgba.io/i/3067)
- GB Audio: Improve "zombie mode" emulation in CGB mode (fixes mgba.io/i/2029)
- GB I/O: Read back proper SVBK value after writing 0 (fixes mgba.io/i/2921)
- GB SIO: Disabling SIO should cancel pending transfers (fixes mgba.io/i/2537)
- GBA Audio: Fix sample timing drifting when changing sample interval
- GBA Audio: Fix initial channel 3 wave RAM (fixes mgba.io/i/2947)
- GBA Audio: Fix sample position issues when rate changes (fixes mgba.io/i/3006)
- GBA GPIO: Fix tilt scale and orientation (fixes mgba.io/i/2703)
- GBA BIOS: Fix clobbering registers with word-sized CpuSet
- GBA SIO: Fix normal mode SI/SO semantics (fixes mgba.io/i/2925)
Other fixes:
- GB: Fix applying a patch that changes the cartridge mapper (fixes mgba.io/i/3077)
- GBA Savedata: Fix crash when resizing flash save games for RTC data
- mGUI: Fix cases where an older save state screenshot would be shown (fixes mgba.io/i/2183)
- Qt: Re-enable sync for multiplayer windows that aren't connected (fixes mgba.io/i/2974)
- Qt: Fix mute settings not being loaded on setting screen (fixes mgba.io/i/2990)
- Qt: Fix screen freezing on macOS after closing save state window (fixes mgba.io/i/2885)
- Vita: Fix camera setting not appearing (fixes mgba.io/i/3012)
Misc:
- mGUI: Persist fast forwarding after closing menu (fixes mgba.io/i/2414)
- Qt: Add exporting of SAV + RTC saves from Save Converter to strip RTC data
- VFS: Use anonymousMemoryMap for large 7z allocations (fixes mgba.io/i/3013)
0.10.2: (2023-04-23)
Emulation fixes:
- GBA Audio: Fix improperly deserializing GB audio registers (fixes mgba.io/i/2793)
- GBA Audio: Clear GB audio state when disabled
- GBA Memory: Make VRAM access stalls only apply to BG RAM
- GBA Overrides: Fix saving in PMD:RRT (JP) (fixes mgba.io/i/2862)
- GBA SIO: Fix SIOCNT SI pin value after attaching player 2 (fixes mgba.io/i/2805)
- GBA SIO: Fix unconnected normal mode SIOCNT SI bit (fixes mgba.io/i/2810)
- GBA SIO: Normal mode transfers with no clock should not finish (fixes mgba.io/i/2811)
- GBA Timers: Cascading timers don't tick when disabled (fixes mgba.io/i/2812)
- GBA Video: Fix interpolation issues with OpenGL renderer
Other fixes:
- Core: Allow sending thread requests to a crashed core (fixes mgba.io/i/2784)
- FFmpeg: Force lower sample rate for codecs not supporting high rates (fixes mgba.io/i/2869)
- Qt: Fix crash when attempting to use OpenGL 2.1 to 3.1 (fixes mgba.io/i/2794)
- Qt: Disable sync while running scripts from main thread (fixes mgba.io/i/2738)
- Qt: Properly cap number of attached players by platform (fixes mgba.io/i/2807)
- Qt: Disable attempted linking betwen incompatible platforms (fixes mgba.io/i/2702)
- Qt: Fix modifier key names in shortcut editor (fixes mgba.io/i/2817)
- Qt: Fix a handful of edge cases with graphics viewers (fixes mgba.io/i/2827)
- Qt: Fix full-buffer rewind
- Qt: Fix crash if loading a shader fails
- Qt: Fix black screen when starting with a game (fixes mgba.io/i/2781)
- Qt: Fix OSD on modern macOS (fixes mgba.io/i/2736)
- Qt: Fix checked state of mute menu option at load (fixes mgba.io/i/2701)
- Qt: Remove OpenGL proxy thread and override SwapInterval directly instead
- Scripting: Fix receiving packets for client sockets
- Scripting: Fix empty receive calls returning unknown error on Windows
- Scripting: Return proper callback ID from socket.add
- Vita: Work around broken mktime implementation in Vita SDK (fixes mgba.io/i/2876)
Misc:
- Qt: Include wayland QPA in AppImage (fixes mgba.io/i/2796)
- Qt: Stop eating boolean action key events (fixes mgba.io/i/2636)
- Qt: Automatically change video file extension as appropriate
- Qt: Swap P1 and other player's save if P1 loaded it first (closes mgba.io/i/2750)
0.10.1: (2023-01-10)
Emulation fixes:
- GB Audio: Fix channels 1/2 not playing when resetting volume (fixes mgba.io/i/2614)
- GB Audio: Fix channel 3 volume being changed between samples (fixes mgba.io/i/1896)
- GB Audio: Fix up boot sequence
- GB Audio: Fix updating channels other than 2 when writing NR5x
- GB Memory: Actually, HDMAs should start when LCD is off (fixes mgba.io/i/2662)
- GB Serialize: Don't write BGP/OBP when loading SCGB state (fixes mgba.io/i/2694)
- GB SIO: Further fix bidirectional transfer starting
- GBA: Fix resetting key IRQ state (fixes mgba.io/i/2716)
- GBA BIOS: Include timing in degenerate ArcTan2 cases (fixes mgba.io/i/2763)
- GBA Video: Ignore disabled backgrounds as OBJ blend target (fixes mgba.io/i/2489)
Other fixes:
- GBA: Fix forceskip BIOS logic for multiboot ROMs (fixes mgba.io/i/2753)
- GBA Cheats: Fix issues detecting unencrypted cheats (fixes mgba.io/i/2724)
- Qt: Manually split filename to avoid overzealous splitting (fixes mgba.io/i/2681)
- Qt: Fix scanning specific e-Reader dotcodes (fixes mgba.io/i/2693)
- Qt: Don't re-enable sync if GBA link modes aren't the same (fixes mgba.io/i/2044)
- Qt: Improve handling of multiplayer syncing (fixes mgba.io/i/2720)
- Qt: Fix initializing update revision info
- Qt: Redo stable branch detection heuristic (fixes mgba.io/i/2679)
- Res: Fix species name location in Ruby/Sapphire revs 1/2 (fixes mgba.io/i/2685)
- VFS: Fix minizip write returning 0 on success instead of size
Misc:
- macOS: Add category to plist (closes mgba.io/i/2691)
- macOS: Fix modern build with libepoxy (fixes mgba.io/i/2700)
- Qt: Keep track of current palette preset name (fixes mgba.io/i/2680)
- Qt: Move OpenGL proxy onto its own thread (fixes mgba.io/i/2493)
0.10.0: (2022-10-11)
Features:
- Preliminary Lua scripting support
@ -226,7 +6,7 @@ Features:
- Tool for converting scanned pictures of e-Reader cards to raw dotcode data
- Options for muting when inactive, minimized, or for different players in multiplayer
- Cheat code support in homebrew ports
- Accelerometer and gyro support for controllers on PC
- Acclerometer and gyro support for controllers on PC
- Support for combo "Super Game Boy Color" SGB + GBC ROM hacks
- Improved support for HuC-3 mapper, including RTC
- Support for 64 kiB SRAM saves used in some bootlegs
@ -240,7 +20,7 @@ Emulation fixes:
- ARM7: Fix unsigned multiply timing
- GB: Copy logo from ROM if not running the BIOS intro (fixes mgba.io/i/2378)
- GB: Fix HALT breaking M-cycle alignment (fixes mgba.io/i/250)
- GB Audio: Fix channel 1/2 resetting edge cases (fixes mgba.io/i/1925)
- GB Audio: Fix channel 1/2 reseting edge cases (fixes mgba.io/i/1925)
- GB Audio: Properly apply per-model audio differences
- GB Audio: Revamp channel rendering
- GB Audio: Fix APU re-enable timing glitch
@ -350,7 +130,7 @@ Emulation fixes:
Other fixes:
- ARM Decoder: Fix decoding of lsl r0 (fixes mgba.io/i/2349)
- FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084)
- GB Video: Fix memory leak when resetting SGB games
- GB Video: Fix memory leak when reseting SGB games
- GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB
- GBA: Fix maximum tile ID in caching for 256-color modes
- GBA Video: Fix cache updating with proxy and GL renderers
@ -461,7 +241,7 @@ Emulation fixes:
- GBA BIOS: Implement dummy sound driver calls
- GBA BIOS: Improve HLE BIOS timing
- GBA BIOS: Fix reloading video registers after reset (fixes mgba.io/i/1808)
- GBA BIOS: Make HLE BIOS calls interruptible (fixes mgba.io/i/1711 and mgba.io/i/1823)
- GBA BIOS: Make HLE BIOS calls interruptable (fixes mgba.io/i/1711 and mgba.io/i/1823)
- GBA BIOS: Fix invalid decompression bounds checking
- GBA DMA: Linger last DMA on bus (fixes mgba.io/i/301 and mgba.io/i/1320)
- GBA DMA: Fix ordering and timing of overlapping DMAs
@ -477,7 +257,7 @@ Emulation fixes:
- GBA Serialize: Fix alignment check when loading states
- GBA SIO: Fix copying Normal mode transfer values
- GBA SIO: Fix Normal mode being totally broken (fixes mgba.io/i/1800)
- GBA SIO: Fix deserializing SIO registers
- GBA SIO: Fix deseralizing SIO registers
- GBA SIO: Fix hanging on starting a second multiplayer window (fixes mgba.io/i/854)
- GBA SIO: Fix Normal mode transfer start timing (fixes mgba.io/i/425)
- GBA Timers: Fix toggling timer cascading while timer is active (fixes mgba.io/i/2043)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.1)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/src/platform/cmake/")
if(POLICY CMP0025)
@ -34,23 +34,19 @@ if(NOT MSVC)
# mingw32 likes to complain about using the "wrong" format strings despite them actually working
set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-format")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} -Werror=implicit-function-declaration -Werror=implicit-int -fwrapv")
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
# TODO: Remove this once mScript KV pairs support const correctness
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=incompatible-pointer-types")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS} -Woverloaded-virtual -Werror=reorder")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} -Werror=implicit-function-declaration")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS /wd4003 /wd4244 /wd4146 /wd4267 /Zc:preprocessor-")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS /wd4003 /wd4244 /wd4146 /wd4267 /Zc:preprocessor-")
endif()
if(NOT LIBMGBA_ONLY)
set(ENABLE_DEBUGGERS ON CACHE BOOL "Whether or not to enable the debugging infrastructure")
set(USE_DEBUGGERS ON CACHE BOOL "Whether or not to enable the debugging infrastructure")
if (NOT WIN32)
set(USE_EDITLINE ON CACHE BOOL "Whether or not to enable the CLI-mode debugger")
endif()
set(ENABLE_GDB_STUB ON CACHE BOOL "Whether or not to enable the GDB stub ARM debugger")
set(USE_GDB_STUB ON CACHE BOOL "Whether or not to enable the GDB stub ARM debugger")
set(USE_FFMPEG ON CACHE BOOL "Whether or not to enable FFmpeg support")
set(USE_ZLIB ON CACHE BOOL "Whether or not to enable zlib support")
set(USE_MINIZIP ON CACHE BOOL "Whether or not to enable external minizip support")
@ -59,8 +55,6 @@ if(NOT LIBMGBA_ONLY)
set(USE_SQLITE3 ON CACHE BOOL "Whether or not to enable SQLite3 support")
set(USE_ELF ON CACHE BOOL "Whether or not to enable ELF support")
set(USE_LUA ON CACHE BOOL "Whether or not to enable Lua scripting support")
set(USE_JSON_C ON CACHE BOOL "Whether or not to enable JSON-C support")
set(USE_FREETYPE ON CACHE BOOL "Whether or not to enable font rendering for scripts")
set(M_CORE_GBA ON CACHE BOOL "Build Game Boy Advance core")
set(M_CORE_GB ON CACHE BOOL "Build Game Boy core")
set(USE_LZMA ON CACHE BOOL "Whether or not to enable 7-Zip support")
@ -69,21 +63,23 @@ if(NOT LIBMGBA_ONLY)
set(BUILD_QT ON CACHE BOOL "Build Qt frontend")
set(BUILD_SDL ON CACHE BOOL "Build SDL frontend")
set(BUILD_LIBRETRO OFF CACHE BOOL "Build libretro core")
if(APPLE)
set(BUILD_OPENEMU OFF CACHE BOOL "Build OpenEmu core")
endif()
set(BUILD_PERF OFF CACHE BOOL "Build performance profiling tool")
set(BUILD_TEST OFF CACHE BOOL "Build testing harness")
set(BUILD_SUITE OFF CACHE BOOL "Build test suite")
set(BUILD_CINEMA OFF CACHE BOOL "Build video tests suite")
set(BUILD_HEADLESS OFF CACHE BOOL "Build headless tool")
set(BUILD_ROM_TEST OFF CACHE BOOL "Build ROM test tool")
set(BUILD_EXAMPLE OFF CACHE BOOL "Build example frontends")
set(BUILD_PYTHON OFF CACHE BOOL "Build Python bindings")
set(BUILD_STATIC OFF CACHE BOOL "Build a static library")
set(BUILD_SHARED ON CACHE BOOL "Build a shared library")
set(SKIP_LIBRARY OFF CACHE BOOL "Skip building the library (useful for only building libretro core)")
set(SKIP_LIBRARY OFF CACHE BOOL "Skip building the library (useful for only building libretro or OpenEmu cores)")
set(BUILD_GL ON CACHE BOOL "Build with OpenGL")
set(BUILD_GLES2 ON CACHE BOOL "Build with OpenGL|ES 2")
set(BUILD_GLES3 ON CACHE BOOL "Build with OpenGL|ES 3")
set(BUILD_DOCGEN OFF CACHE BOOL "Build the scripting API documentation generator")
set(BUILD_MAINTAINER_TOOLS OFF CACHE BOOL "Build tools only useful for maintainers")
set(USE_EPOXY ON CACHE STRING "Build with libepoxy")
set(DISABLE_DEPS OFF CACHE BOOL "Build without dependencies")
set(DISTBUILD OFF CACHE BOOL "Build distribution packages")
@ -92,7 +88,6 @@ if(NOT LIBMGBA_ONLY)
mark_as_advanced(WIN32_UNIX_PATHS)
endif()
mark_as_advanced(BUILD_DOCGEN)
mark_as_advanced(BUILD_MAINTAINER_TOOLS)
else()
set(DISABLE_FRONTENDS ON)
set(DISABLE_DEPS ON)
@ -142,6 +137,11 @@ if (BUILD_LIBRETRO)
mark_as_advanced(LIBRETRO_LIBDIR)
endif()
if (BUILD_OPENEMU)
set(OE_LIBDIR "${LIBDIR}" CACHE PATH "Installed library directory (OpenEmu)")
mark_as_advanced(OE_LIBDIR)
endif()
if (DISTBUILD)
set(EXTRA_LICENSES "" CACHE FILEPATH "Extra licenses to include in distribution packaages")
mark_as_advanced(EXTRA_LICENSES)
@ -159,7 +159,6 @@ endif()
include(FindFeature)
include(FindFunction)
include(DebugStrip)
# Version information
add_custom_target(${BINARY_NAME}-version-info ALL
@ -176,7 +175,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/core/version.c.in ${CMAKE_CURRENT
source_group("Generated sources" FILES ${CMAKE_CURRENT_BINARY_DIR}/version.c)
# Advanced settings
if(NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "4.5"))
if(NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_COMPILER_VERSION VERSION_LESS "4.5"))
set(DEFAULT_LTO ON)
else()
set(DEFAULT_LTO OFF)
@ -209,22 +208,18 @@ elseif(BUILD_PGO AND PGO_STAGE_2)
endif()
# Platform support
set(OS_DEFINES)
if(WIN32)
set(WIN32_VERSION "${LIB_VERSION_MAJOR},${LIB_VERSION_MINOR},${LIB_VERSION_PATCH}")
add_definitions(-D_WIN32_WINNT=0x0600)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
if(MSVC)
add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN)
add_definitions(-D_UNICODE -DUNICODE)
else()
add_definitions(-D_GNU_SOURCE)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
add_compile_definitions(_FILE_OFFSET_BITS=64)
endif()
endif()
list(APPEND OS_LIB ws2_32 shlwapi)
list(APPEND OS_DEFINES ENABLE_VFS_FD)
list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/vfs-w32.c)
list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/vfs-w32.c)
file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/*.c)
source_group("Windows-specific code" FILES ${OS_SRC})
elseif(UNIX)
@ -234,28 +229,17 @@ elseif(UNIX)
add_definitions(-D_GNU_SOURCE)
endif()
list(APPEND OS_DEFINES ENABLE_VFS_FD)
list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-dirent.c)
list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-dirent.c)
file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/posix/*.c)
source_group("POSIX-specific code" FILES ${OS_SRC})
endif()
if(APPLE)
execute_process(COMMAND xcrun --show-sdk-version OUTPUT_VARIABLE MACOSX_SDK)
if(NOT MACOSX_SDK)
message(WARNING "Could not detect SDK version; defaulting to system version. Is SDKROOT set?")
set(MACOSX_SDK ${CMAKE_SYSTEM_VERSION})
endif()
add_definitions(-D_DARWIN_C_SOURCE)
list(APPEND OS_LIB "-framework Foundation")
# Xcode 15 introduced a warning about duplicate libraries that CMake doesn't disable itself, we do it here globally
if(MACOSX_SDK VERSION_GREATER_EQUAL 10.15)
add_link_options(LINKER:-no_warn_duplicate_libraries)
endif()
if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "10.0") # Darwin 10.x is Mac OS X 10.6
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.6")
endif()
# Not supported until Xcode 9
if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "9")
@ -284,6 +268,20 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang" OR
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -gdwarf")
endif()
if(BUILD_BBB OR BUILD_RASPI OR BUILD_PANDORA)
if(NOT BUILD_EGL)
add_definitions(-DCOLOR_16_BIT -DCOLOR_5_6_5)
endif()
endif()
if(BUILD_RASPI)
set(BUILD_GL OFF CACHE BOOL "OpenGL not supported" FORCE)
endif()
if(BUILD_PANDORA)
add_definitions(-DBUILD_PANDORA)
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*")
enable_language(ASM)
endif()
@ -294,7 +292,7 @@ endif()
if(DEFINED 3DS OR DEFINED PSP2 OR DEFINED WII OR DEFINED SWITCH)
set(IS_EMBEDDED ON)
set(ENABLE_DEBUGGERS OFF)
set(USE_DEBUGGERS OFF)
set(USE_SQLITE3 OFF)
set(USE_DISCORD_RPC OFF)
set(USE_LIBZIP OFF CACHE BOOL "")
@ -306,12 +304,12 @@ if(DEFINED SWITCH)
endif()
if(NOT M_CORE_GBA)
set(ENABLE_GDB_STUB OFF)
set(USE_GDB_STUB OFF)
endif()
if(NOT ENABLE_DEBUGGERS)
if(NOT USE_DEBUGGERS)
set(USE_EDITLINE OFF)
set(ENABLE_GDB_STUB OFF)
set(USE_GDB_STUB OFF)
endif()
if(WII)
@ -338,21 +336,20 @@ find_function(popcount32)
find_function(futimens)
find_function(futimes)
find_function(localtime_r)
find_function(realpath)
if(ANDROID AND ANDROID_NDK_MAJOR GREATER 13)
list(APPEND FUNCTION_DEFINES HAVE_STRTOF_L)
elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_function(localtime_r)
set(HAVE_STRTOF_L ON)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_function(localtime_r)
# The strtof_l on Linux not actually exposed nor actually strtof_l
set(HAVE_STRTOF_L OFF)
else()
find_function(localtime_r)
find_function(strtof_l)
endif()
check_include_files("xlocale.h" HAVE_XLOCALE)
set(ENABLE_VFS ON)
if(CMAKE_SYSTEM_NAME STREQUAL "Generic")
if(NOT IS_EMBEDDED)
set(DISABLE_DEPS ON CACHE BOOL "This platform cannot build with dependencies" FORCE)
@ -422,13 +419,6 @@ if(BUILD_GL)
elseif(UNIX AND NOT APPLE AND TARGET OpenGL::GL)
set(OPENGL_LIBRARY OpenGL::GL)
endif()
if(OpenGL_GLX_FOUND)
list(APPEND FEATURES GLX)
endif()
if(OpenGL_EGL_FOUND)
list(APPEND FEATURES EGL)
list(APPEND OPENGL_LIBRARY ${OPENGL_egl_LIBRARY})
endif()
endif()
if(BUILD_GL)
list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gl.c)
@ -485,10 +475,8 @@ if(NOT BUILD_GLES2 AND NOT BUILD_GLES3 AND NOT LIBMGBA_ONLY)
endif()
if(DISABLE_DEPS)
set(ENABLE_GDB_STUB OFF)
set(USE_GDB_STUB OFF)
set(USE_DISCORD_RPC OFF)
set(USE_FREETYPE OFF)
set(USE_JSON_C OFF)
set(USE_SQLITE3 OFF)
set(USE_PNG OFF)
set(USE_ZLIB OFF)
@ -516,7 +504,6 @@ find_feature(USE_EPOXY "epoxy")
find_feature(USE_CMOCKA "cmocka")
find_feature(USE_SQLITE3 "SQLite3|sqlite3")
find_feature(USE_ELF "libelf")
find_feature(USE_FREETYPE "Freetype")
find_feature(ENABLE_PYTHON "PythonLibs")
# Features
@ -535,12 +522,14 @@ if(USE_EDITLINE)
set(DEBUGGER_LIB ${LIBEDIT_LIBRARIES})
endif()
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libedit2")
list(APPEND FEATURE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/editline/cli-el-backend.c")
else()
set(DEBUGGER_LIB "")
endif()
if(ENABLE_GDB_STUB)
list(APPEND ENABLES GDB_STUB)
if(USE_GDB_STUB)
list(APPEND FEATURES GDB_STUB)
list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/debugger/gdb-stub.c)
endif()
source_group("Debugger" FILES ${DEBUGGER_SRC})
@ -584,6 +573,8 @@ if(USE_FFMPEG)
endif()
endif()
list(APPEND THIRD_PARTY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/blip_buf/blip_buf.c")
if(WANT_ZLIB AND NOT USE_ZLIB)
set(SKIP_INSTALL_ALL ON)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib zlib EXCLUDE_FROM_ALL)
@ -727,12 +718,8 @@ if (USE_LZMA)
endif()
if(USE_EPOXY)
if(NOT APPLE OR NOT MACOSX_SDK VERSION_GREATER 10.14)
list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gl.c)
list(APPEND FEATURE_DEFINES BUILD_GL)
endif()
list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gles2.c)
list(APPEND FEATURE_DEFINES BUILD_GLES2 BUILD_GLES3)
list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gl.c ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gles2.c)
list(APPEND FEATURE_DEFINES BUILD_GL BUILD_GLES2 BUILD_GLES3)
list(APPEND FEATURES EPOXY)
include_directories(AFTER ${EPOXY_INCLUDE_DIRS})
link_directories(${EPOXY_LIBRARY_DIRS})
@ -766,14 +753,7 @@ if(USE_ELF)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libelf1")
endif()
if (USE_FREETYPE)
list(APPEND FEATURES FREETYPE)
list(APPEND DEPENDENCY_LIB Freetype::Freetype)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libfreetype6")
endif()
if (USE_DISCORD_RPC)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7")
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/discord-rpc discord-rpc EXCLUDE_FROM_ALL)
list(APPEND FEATURES DISCORD_RPC)
include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/discord-rpc/include)
@ -781,36 +761,11 @@ endif()
if(ENABLE_SCRIPTING)
list(APPEND ENABLES SCRIPTING)
find_feature(USE_JSON_C "json-c")
if(NOT USE_LUA VERSION_LESS 5.1)
find_feature(USE_LUA "Lua" ${USE_LUA})
else()
find_feature(USE_LUA "Lua")
endif()
if(USE_JSON_C)
list(APPEND FEATURES JSON_C)
if(TARGET json-c::json-c)
list(APPEND DEPENDENCY_LIB json-c::json-c)
get_target_property(JSON_C_SONAME json-c::json-c IMPORTED_SONAME_NONE)
string(SUBSTRING "${JSON_C_SONAME}" 13 -1 JSON_C_SOVER)
# This is only needed on 0.15, but the target unhelpfully does not contain version info
get_target_property(JSON_C_INCLUDE_DIR json-c::json-c INTERFACE_INCLUDE_DIRECTORIES)
if(NOT JSON_C_INCLUDE_DIR MATCHES json-c$)
include_directories(AFTER "${JSON_C_INCLUDE_DIR}/json-c")
endif()
else()
if(${json-c_VERSION} VERSION_LESS 0.13.0)
set(JSON_C_SOVER 3)
elseif(${json-c_VERSION} VERSION_LESS 0.15.0)
set(JSON_C_SOVER 4)
endif()
list(APPEND DEPENDENCY_LIB ${json-c_LIBRARIES})
include_directories(AFTER ${json-c_INCLUDE_DIRS})
link_directories(${json-c_LIBDIRS})
endif()
set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libjson-c${JSON_C_SOVER}")
endif()
if(USE_LUA)
list(APPEND FEATURE_DEFINES USE_LUA)
include_directories(AFTER ${LUA_INCLUDE_DIR})
@ -854,10 +809,10 @@ if(M_CORE_GBA)
list(APPEND TEST_SRC ${ARM_TEST_SRC} ${GBA_TEST_SRC})
endif()
if(ENABLE_DEBUGGERS)
if(USE_DEBUGGERS)
list(APPEND FEATURE_SRC ${DEBUGGER_SRC})
list(APPEND TEST_SRC ${DEBUGGER_TEST_SRC})
list(APPEND ENABLES DEBUGGERS)
list(APPEND FEATURES DEBUGGERS)
endif()
if(ENABLE_SCRIPTING)
@ -865,10 +820,6 @@ if(ENABLE_SCRIPTING)
list(APPEND TEST_SRC ${SCRIPT_TEST_SRC})
endif()
if(ENABLE_VFS)
list(APPEND ENABLES VFS DIRECTORIES)
endif()
foreach(FEATURE IN LISTS FEATURES)
list(APPEND FEATURE_DEFINES "USE_${FEATURE}")
endforeach()
@ -882,6 +833,7 @@ source_group("Extra features" FILES ${FEATURE_SRC})
source_group("Third-party code" FILES ${THIRD_PARTY_SRC})
# Platform binaries
set(OS_DEFINES)
if(DEFINED 3DS)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/3ds ${CMAKE_CURRENT_BINARY_DIR}/3ds)
endif()
@ -906,11 +858,7 @@ list(APPEND CORE_SRC
${THIRD_PARTY_SRC})
list(APPEND TEST_SRC ${UTIL_TEST_SRC})
set(SRC ${CORE_SRC})
if(ENABLE_VFS)
list(APPEND SRC ${VFS_SRC})
endif()
set(SRC ${CORE_SRC} ${VFS_SRC})
if(NOT MINIMAL_CORE)
set(ENABLE_EXTRA ON)
if(M_CORE_GBA)
@ -942,7 +890,7 @@ if(NOT SKIP_LIBRARY)
endif()
if(BUILD_SHARED)
add_library(${BINARY_NAME} SHARED ${SRC})
add_library(${BINARY_NAME} SHARED ${SRC} ${VFS_SRC})
set(EXPORT_DEFINES MGBA_DLL)
if(BUILD_STATIC)
add_library(${BINARY_NAME}-static STATIC ${SRC})
@ -962,14 +910,6 @@ if(NOT SKIP_LIBRARY)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/mgba-util)
if(BUILD_STATIC)
# Some versions of CMake are remarkably bad about deduplicating this list,
# leading to issues with static linking. Let's do it manually.
list(REVERSE DEPENDENCY_LIB)
list(REMOVE_DUPLICATES DEPENDENCY_LIB)
list(REVERSE DEPENDENCY_LIB)
endif()
target_link_libraries(${BINARY_NAME} ${DEBUGGER_LIB} ${DEPENDENCY_LIB} ${OS_LIB})
install(TARGETS ${BINARY_NAME} LIBRARY DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME} NAMELINK_SKIP ARCHIVE DESTINATION ${LIBDIR} RUNTIME DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME})
if(BUILD_SHARED)
@ -1010,9 +950,9 @@ endif()
if(BUILD_LIBRETRO)
file(GLOB RETRO_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/libretro/*.c)
add_library(${BINARY_NAME}_libretro SHARED ${CORE_SRC} ${RETRO_SRC} ${CORE_VFS_SRC})
add_library(${BINARY_NAME}_libretro SHARED ${CORE_SRC} ${RETRO_SRC})
add_dependencies(${BINARY_NAME}_libretro ${BINARY_NAME}-version-info)
set_target_properties(${BINARY_NAME}_libretro PROPERTIES PREFIX "" COMPILE_DEFINITIONS "__LIBRETRO__;COLOR_16_BIT;COLOR_5_6_5;DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};ENABLE_VFS;MINIMAL_CORE=2")
set_target_properties(${BINARY_NAME}_libretro PROPERTIES PREFIX "" COMPILE_DEFINITIONS "__LIBRETRO__;COLOR_16_BIT;COLOR_5_6_5;DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};MINIMAL_CORE=2")
target_link_libraries(${BINARY_NAME}_libretro ${OS_LIB})
if(MSVC)
install(TARGETS ${BINARY_NAME}_libretro RUNTIME DESTINATION ${LIBRETRO_LIBDIR} COMPONENT ${BINARY_NAME}_libretro)
@ -1021,7 +961,23 @@ if(BUILD_LIBRETRO)
endif()
endif()
if(BUILD_QT AND (WIN32 OR APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Linux") AND ENABLE_VFS)
if(BUILD_OPENEMU)
find_library(FOUNDATION Foundation)
find_library(OPENEMUBASE OpenEmuBase)
file(GLOB OE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/*.m)
add_library(${BINARY_NAME}-openemu MODULE ${CORE_SRC} ${OS_SRC})
set_target_properties(${BINARY_NAME}-openemu PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/Info.plist.in
BUNDLE TRUE
BUNDLE_EXTENSION oecoreplugin
OUTPUT_NAME ${PROJECT_NAME}
COMPILE_OPTIONS "-fobjc-arc"
COMPILE_DEFINITIONS "DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};MINIMAL_CORE=1")
target_link_libraries(${BINARY_NAME}-openemu ${OS_LIB} ${FOUNDATION} ${OPENEMUBASE})
install(TARGETS ${BINARY_NAME}-openemu LIBRARY DESTINATION ${OE_LIBDIR} COMPONENT ${BINARY_NAME}.oecoreplugin NAMELINK_SKIP)
endif()
if(BUILD_QT AND (WIN32 OR APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Linux"))
set(BUILD_UPDATER ON)
endif()
@ -1029,7 +985,7 @@ if(BUILD_UPDATER)
add_executable(updater-stub WIN32 ${CORE_VFS_SRC} ${VFS_SRC} ${OS_SRC} ${UTIL_BASE_SRC} ${THIRD_PARTY_SRC}
${CMAKE_CURRENT_SOURCE_DIR}/src/core/config.c
${CMAKE_CURRENT_SOURCE_DIR}/src/feature/updater.c
${CMAKE_CURRENT_SOURCE_DIR}/src/tools/updater-main.c)
${CMAKE_CURRENT_SOURCE_DIR}/src/feature/updater-main.c)
target_link_libraries(updater-stub ${ZLIB_LIBRARY} ${ZLIB_LIBRARY} ${ZIP_LIBRARIES} ${OS_LIB} ${PLATFORM_LIBRARY})
set_target_properties(updater-stub PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FUNCTION_DEFINES};${FEATURE_DEFINES};BUILD_STATIC")
if(MSVC)
@ -1041,14 +997,8 @@ if(BUILD_UPDATER)
endif()
if(ENABLE_SCRIPTING AND BUILD_DOCGEN)
add_executable(docgen ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/docgen.c)
add_executable(docgen ${CMAKE_CURRENT_SOURCE_DIR}/src/script/docgen.c)
target_link_libraries(docgen ${OS_LIB} ${PLATFORM_LIBRARY} ${BINARY_NAME})
set_target_properties(docgen PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FUNCTION_DEFINES};${FEATURE_DEFINES}")
endif()
if(BUILD_MAINTAINER_TOOLS)
add_executable(font-sdf-tool ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/font-sdf.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/gui/font-metrics.c)
target_link_libraries(font-sdf-tool ${OS_LIB} ${PLATFORM_LIBRARY} ${BINARY_NAME})
endif()
if(BUILD_SDL)
@ -1059,14 +1009,6 @@ if(BUILD_QT)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/qt ${CMAKE_CURRENT_BINARY_DIR}/qt)
endif()
if(BUILD_HEADLESS)
add_executable(${BINARY_NAME}-headless ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/headless-main.c)
target_link_libraries(${BINARY_NAME}-headless ${PLATFORM_LIBRARY} ${BINARY_NAME})
debug_strip(${BINARY_NAME}-headless)
target_compile_definitions(${BINARY_NAME}-headless PRIVATE "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
install(TARGETS ${BINARY_NAME}-headless DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${BINARY_NAME}-headless)
endif()
if(NOT USE_CMOCKA)
set(BUILD_SUITE OFF)
endif()
@ -1096,7 +1038,7 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mgba-util DESTINATION ${CM
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/mgba/flags.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mgba COMPONENT ${BINARY_NAME}-dev)
# Packaging
install(FILES DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME})
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/blip_buf.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME})
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/inih.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME})
if(USE_DISCORD_RPC)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/discord-rpc.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME})
@ -1264,11 +1206,6 @@ if(SDL_FOUND)
cpack_add_component(${BINARY_NAME}-sdl GROUP sdl)
endif()
if(BUILD_HEADLESS)
cpack_add_component_group(headless PARENT_GROUP base)
cpack_add_component(${BINARY_NAME}-headless GROUP headless)
endif()
if(DISTBUILD)
cpack_add_component_group(debug PARENT_GROUP dev)
if(BUILD_SHARED AND NOT IS_EMBEDDED)
@ -1283,9 +1220,6 @@ if(DISTBUILD)
if(SDL_FOUND)
cpack_add_component(${BINARY_NAME}-sdl-dbg GROUP debug)
endif()
if(BUILD_HEADLESS)
cpack_add_component(${BINARY_NAME}-headless-dbg GROUP debug)
endif()
if(WIN32)
cpack_add_component_group(installer PARENT_GROUP base)
endif()
@ -1331,11 +1265,11 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
message(STATUS " Game Boy Advance: ${M_CORE_GBA}")
message(STATUS " Game Boy: ${M_CORE_GB}")
message(STATUS "Features:")
message(STATUS " Debuggers: ${ENABLE_DEBUGGERS}")
message(STATUS " Debuggers: ${USE_DEBUGGERS}")
if(NOT WIN32)
message(STATUS " CLI debugger: ${USE_EDITLINE}")
endif()
message(STATUS " GDB stub: ${ENABLE_GDB_STUB}")
message(STATUS " GDB stub: ${USE_GDB_STUB}")
message(STATUS " GIF/Video recording: ${USE_FFMPEG}")
message(STATUS " Screenshot/advanced savestate support: ${USE_PNG}")
message(STATUS " ZIP support: ${SUMMARY_ZIP}")
@ -1351,13 +1285,10 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
else()
message(STATUS " Lua: ${USE_LUA}")
endif()
message(STATUS " storage API: ${USE_JSON_C}")
message(STATUS " Font rendering: ${USE_FREETYPE}")
endif()
message(STATUS "Frontends:")
message(STATUS " Qt: ${BUILD_QT}")
message(STATUS " SDL (${SDL_VERSION}): ${BUILD_SDL}")
message(STATUS " Headless: ${BUILD_HEADLESS}")
message(STATUS " Python bindings: ${BUILD_PYTHON}")
message(STATUS " Examples: ${BUILD_EXAMPLE}")
message(STATUS "Test tools:")
@ -1365,8 +1296,12 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
message(STATUS " Test harness: ${BUILD_TEST}")
message(STATUS " Test suite: ${BUILD_SUITE}")
message(STATUS " Video test suite: ${BUILD_CINEMA}")
message(STATUS " ROM tester: ${BUILD_ROM_TEST}")
message(STATUS "Cores:")
message(STATUS " Libretro core: ${BUILD_LIBRETRO}")
if(APPLE)
message(STATUS " OpenEmu core: ${BUILD_OPENEMU}")
endif()
message(STATUS "Libraries:")
message(STATUS " Static: ${BUILD_STATIC}")
message(STATUS " Shared: ${BUILD_SHARED}")

View File

@ -1,21 +0,0 @@
{
"version": 3,
"configurePresets": [
{
"name": "clang",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "gcc",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
}
]
}

View File

@ -50,16 +50,15 @@ The following mappers are fully supported:
- MBC2
- MBC3
- MBC3+RTC
- MBC30
- MBC5
- MBC5+Rumble
- MBC7
- M161
- Wisdom Tree (unlicensed)
- NT "old type" 1 and 2 (unlicensed multicart)
- NT "new type" (unlicensed MBC5-like)
- Pokémon Jade/Diamond (unlicensed)
- Sachen MMC1 (unlicensed)
- BBD (unlicensed MBC5-like)
- Hitek (unlicensed MBC5-like)
- Sachen MMC1
The following mappers are partially supported:
@ -70,11 +69,6 @@ The following mappers are partially supported:
- HuC-1 (missing IR support)
- HuC-3 (missing IR support)
- Sachen MMC2 (missing alternate wiring support)
- BBD (missing logo switching)
- Hitek (missing logo switching)
- GGB-81 (missing logo switching)
- Li Cheng (missing logo switching)
- Sintax (missing logo switching)
### Planned features
@ -236,7 +230,6 @@ mGBA has no hard dependencies, however, the following optional dependencies are
- SQLite3: for game databases.
- libelf: for ELF loading.
- Lua: for scripting.
- json-c: for the scripting `storage` API.
SQLite3, libpng, and zlib are included with the emulator, so they do not need to be externally compiled first.
@ -257,11 +250,12 @@ Footnotes
Copyright
---------
mGBA is Copyright © 2013 2023 Jeffrey Pfau. It is distributed under the [Mozilla Public License version 2.0](https://www.mozilla.org/MPL/2.0/). A copy of the license is available in the distributed LICENSE file.
mGBA is Copyright © 2013 2022 Jeffrey Pfau. It is distributed under the [Mozilla Public License version 2.0](https://www.mozilla.org/MPL/2.0/). A copy of the license is available in the distributed LICENSE file.
mGBA contains the following third-party libraries:
- [inih](https://github.com/benhoyt/inih), which is copyright © 2009 2020 Ben Hoyt and used under a BSD 3-clause license.
- [blip-buf](https://code.google.com/archive/p/blip-buf), which is copyright © 2003 2009 Shay Green and used under a Lesser GNU Public License.
- [LZMA SDK](http://www.7-zip.org/sdk.html), which is public domain.
- [MurmurHash3](https://github.com/aappleby/smhasher) implementation by Austin Appleby, which is public domain.
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/), which is public domain.

View File

@ -247,6 +247,7 @@ Copyright für mGBA © 2013 2021 Jeffrey Pfau. mGBA wird unter der [Mozilla
mGBA beinhaltet die folgenden Bibliotheken von Drittanbietern:
- [inih](https://github.com/benhoyt/inih), Copyright © 2009 - 2020 Ben Hoyt, verwendet unter einer BSD 3-clause-Lizenz.
- [blip-buf](https://code.google.com/archive/b/blip-buf), Copyright © 2003 - 2009 Shay Green, verwendet unter einer Lesser GNU Public License.
- [LZMA SDK](http://www.7-zip.org/sdk.html), Public Domain.
- [MurmurHash3](https://github.com/aappleby/smhasher), Implementierung von Austin Appleby, Public Domain.
- [getopt fot MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/), Public Domain.

View File

@ -247,6 +247,7 @@ mGBA es Copyright © 2013 2021 Jeffrey Pfau. Es distribuído bajo la [licenc
mGBA contiene las siguientes bibliotecas de terceros:
- [inih](https://github.com/benhoyt/inih), que es copyright © 2009 - 2020 Ben Hoyt y se utiliza bajo licencia de la cláusula 3 de BSD.
- [blip-buf](https://code.google.com/archive/p/blip-buf), que es copyright © 2003 - 2009 Shay Green y se usa bajo LGPL.
- [LZMA SDK](http://www.7-zip.org/sdk.html), la cual está en el dominio público.
- [MurmurHash3](https://github.com/aappleby/smhasher), implementación por Austin Appleby, la cual está en el dominio público.
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/), la cual está en el dominio público.

View File

@ -1,268 +0,0 @@
mGBA
====
mGBAは、ゲームボーイアドバンスのゲームを実行するためのエミュレーターです。mGBAの目標は、既存の多くのゲームボーイアドバンスエミュレーターよりも高速かつ正確であり、他のエミュレーターにはない機能を追加することです。また、ゲームボーイおよびゲームボーイカラーのゲームもサポートしています。
最新のニュースとダウンロードは、[mgba.io](https://mgba.io/)で見つけることができます。
[![Build status](https://buildbot.mgba.io/badges/build-win32.svg)](https://buildbot.mgba.io)
[![Translation status](https://hosted.weblate.org/widgets/mgba/-/svg-badge.svg)](https://hosted.weblate.org/engage/mgba)
特徴
--------
- 高精度なゲームボーイアドバンスハードウェアのサポート[<sup>[1]</sup>](#missing)。
- ゲームボーイ/ゲームボーイカラーのハードウェアサポート。
- 高速なエミュレーション。ネットブックなどの低スペックハードウェアでもフルスピードで動作することが知られています。
- 重量級と軽量級のフロントエンドのためのQtおよびSDLポート。
- ローカル(同じコンピュータ)リンクケーブルのサポート。
- フラッシュメモリサイズを含む保存タイプの検出[<sup>[2]</sup>](#flashdetect)。
- モーションセンサーと振動機能を備えたカートリッジのサポート(ゲームコントローラーでのみ使用可能)。
- 設定なしでもリアルタイムクロックのサポート。
- ボクタイゲームのためのソーラーセンサーのサポート。
- ゲームボーイカメラとゲームボーイプリンターのサポート。
- 内蔵BIOS実装と外部BIOSファイルの読み込み機能。
- Luaを使用したスクリプトサポート。
- Tabキーを押し続けることでターボ/早送りサポート。
- バッククォートを押し続けることで巻き戻し。
- 最大10まで設定可能なフレームスキップ。
- スクリーンショットのサポート。
- チートコードのサポート。
- 9つのセーブステートスロット。セーブステートはスクリーンショットとしても表示可能。
- ビデオ、GIF、WebP、およびAPNGの録画。
- e-Readerのサポート。
- キーボードとゲームパッドのリマップ可能なコントロール。
- ZIPおよび7zファイルからの読み込み。
- IPS、UPS、およびBPSパッチのサポート。
- コマンドラインインターフェースとGDBリモートサポートを介したゲームデバッグ、GhidraおよびIDA Proと互換性あり。
- 設定可能なエミュレーションの巻き戻し。
- GameSharkおよびAction Replayスナップショットの読み込みおよびエクスポートのサポート。
- RetroArch/LibretroおよびOpenEmu用のコア。
- [Weblate](https://hosted.weblate.org/engage/mgba)を介した複数の言語のコミュニティ提供の翻訳。
- その他、多くの小さな機能。
#### ゲームボーイマッパー
以下のマッパーが完全にサポートされています:
- MBC1
- MBC1M
- MBC2
- MBC3
- MBC3+RTC
- MBC30
- MBC5
- MBC5+Rumble
- MBC7
- Wisdom Tree非公式
- NT "old type" 1 and 2非公式マルチカート
- NT "new type"非公式MBC5類似
- Pokémon Jade/Diamond非公式
- Sachen MMC1非公式
以下のマッパーが部分的にサポートされています:
- MBC6フラッシュメモリ書き込みサポートなし
- MMM01
- Pocket Cam
- TAMA5RTCサポート不完全
- HuC-1IRサポートなし
- HuC-3IRサポートなし
- Sachen MMC2代替配線サポートなし
- BBDロゴ切り替えなし
- Hitekロゴ切り替えなし
- GGB-81ロゴ切り替えなし
- Li Chengロゴ切り替えなし
### 計画されている機能
- ネットワーク対応のマルチプレイヤーリンクケーブルサポート。
- Dolphin/JOYバスリンクケーブルサポート。
- MP2kオーディオミキシング、ハードウェアより高品質のサウンド。
- ツールアシストランのための再録サポート。
- 包括的なデバッグスイート。
- ワイヤレスアダプターのサポート。
サポートされているプラットフォーム
-------------------
- Windows 7以降
- OS X 10.9Mavericks[<sup>[3]</sup>](#osxver)以降
- Linux
- FreeBSD
- Nintendo 3DS
- Nintendo Switch
- Wii
- PlayStation Vita
他のUnix系プラットフォームOpenBSDなども動作することが知られていますが、テストされておらず、完全にはサポートされていません。
### システム要件
要件は最小限です。Windows Vista以降を実行できるコンピュータであれば、エミュレーションを処理できるはずです。OpenGL 1.1以降のサポートも必要であり、シェーダーや高度な機能にはOpenGL 3.2以降が必要です。
ダウンロード
---------
ダウンロードは公式ウェブサイトの[ダウンロード][downloads]セクションで見つけることができます。ソースコードは[GitHub][source]で見つけることができます。
コントロール
--------
コントロールは設定メニューで設定可能です。多くのゲームコントローラーはデフォルトで自動的にマッピングされるはずです。デフォルトのキーボードコントロールは次のとおりです:
- **A**X
- **B**Z
- **L**A
- **R**S
- **Start**Enter
- **Select**Backspace
コンパイル
---------
コンパイルにはCMake 3.1以降の使用が必要です。GCC、Clang、およびVisual Studio 2019はmGBAのコンパイルに使用できることが知られています。
#### Dockerビルド
ほとんどのプラットフォームでのビルドにはDockerを使用することをお勧めします。いくつかのプラットフォームでmGBAをビルドするために必要なツールチェーンと依存関係を含むいくつかのDockerイメージが提供されています。
注意Windows 10以前の古いWindowsシステムを使用している場合、DockerがVirtualBox共有フォルダーを使用して現在の`mgba`チェックアウトディレクトリをDockerイメージの作業ディレクトリに正しくマッピングするように構成する必要がある場合があります。詳細については、issue [#1985](https://mgba.io/i/1985)を参照してください。)
Dockerイメージを使用してmGBAをビルドするには、mGBAのチェックアウトのルートで次のコマンドを実行します
docker run --rm -it -v ${PWD}:/home/mgba/src mgba/windows:w32
Dockerコンテナを起動した後、ビルド成果物を含む`build-win32`ディレクトリが生成されます。他のプラットフォーム用のDockerイメージに置き換えると、対応する他のディレクトリが生成されます。Docker Hubで利用可能なDockerイメージは次のとおりです
- mgba/3ds
- mgba/switch
- mgba/ubuntu:xenial
- mgba/ubuntu:bionic
- mgba/ubuntu:focal
- mgba/ubuntu:groovy
- mgba/vita
- mgba/wii
- mgba/windows:w32
- mgba/windows:w64
ビルドプロセスを高速化したい場合は、`-e MAKEFLAGS=-jN`フラグを追加して、`N`個のCPUコアでmGBAの並列ビルドを行うことを検討してください。
#### *nixビルド
UnixベースのシステムでCMakeを使用してビルドするには、次のコマンドを実行することをお勧めします
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
make
sudo make install
これにより、mGBAがビルドされ、`/usr/bin`および`/usr/lib`にインストールされます。インストールされている依存関係は自動的に検出され、依存関係が見つからない場合に無効になる機能は、`cmake`コマンドを実行した後に警告として表示されます。
macOSを使用している場合、手順は少し異なります。homebrewパッケージマネージャーを使用していると仮定すると、依存関係を取得してビルドするための推奨コマンドは次のとおりです
brew install cmake ffmpeg libzip qt5 sdl2 libedit lua pkg-config
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=`brew --prefix qt5` ..
make
macOSでは`make install`を実行しないでください。正しく動作しないためです。
#### Windows開発者ビルド
##### MSYS2
Windowsでの開発用ビルドにはMSYS2を使用することをお勧めします。MSYS2の[ウェブサイト](https://msys2.github.io)に記載されているインストール手順に従ってください。32ビットバージョン「MSYS2 MinGW 32-bit」を実行していることを確認してくださいx86_64用にビルドする場合は64ビットバージョン「MSYS2 MinGW 64-bit」を実行してください。必要な依存関係をインストールするために次の追加コマンド中括弧を含むを実行しますこのコマンドは1100MiB以上のパッケージをダウンロードするため、長時間かかることに注意してください
pacman -Sy --needed base-devel git ${MINGW_PACKAGE_PREFIX}-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,lua,pkgconf,qt5,SDL2,ntldd-git}
次のコマンドを実行してソースコードをチェックアウトします:
git clone https://github.com/mgba-emu/mgba.git
最後に、次のコマンドを実行してビルドします:
mkdir -p mgba/build
cd mgba/build
cmake .. -G "MSYS Makefiles"
make -j$(nproc --ignore=1)
このWindows用mGBAビルドは、実行に必要なDLLが分散しているため、配布には適していないことに注意してください。ただし、開発には最適です。ただし、そのようなビルドを配布する必要がある場合たとえば、MSYS2環境がインストールされていないマシンでのテスト用、`cpack -G ZIP`を実行すると、必要なDLLをすべて含むzipファイルが準備されます。
##### Visual Studio
Visual Studioを使用してビルドするには、同様に複雑なセットアップが必要です。まず、[vcpkg](https://github.com/Microsoft/vcpkg)をインストールする必要があります。vcpkgをインストールした後、いくつかの追加パッケージをインストールする必要があります
vcpkg install ffmpeg[vpx,x264] libepoxy libpng libzip lua sdl2 sqlite3
このインストールでは、Nvidiaハードウェアでのハードウェアアクセラレーションビデオエンコーディングはサポートされません。これが重要な場合は、事前にCUDAをインストールし、前のコマンドに`ffmpeg[vpx,x264,nvcodec]`を置き換えます。
Qtもインストールする必要があります。ただし、Qtは合理的な組織ではなく、困窮している会社によって所有および運営されているため、最新バージョンのオフラインオープンソースエディションインストーラーは存在しないため、[旧バージョンのインストーラー](https://download.qt.io/official_releases/qt/5.12/5.12.9/qt-opensource-windows-x86-5.12.9.exe)に戻る必要がありますこれには無用なアカウントの作成が必要ですが、一時的に無効なプロキシを設定するか、ネットワークを無効にすることで回避できます、オンラインインストーラーを使用するいずれにしてもアカウントが必要です、またはvcpkgを使用してビルドする遅い。これらはすべて良い選択肢ではありません。インストーラーを使用する場合は、適用可能なMSVCバージョンをインストールする必要があります。オフラインインストーラーはMSVC 2019をサポートしていないことに注意してください。vcpkgを使用する場合、次のようにインストールする必要があります。特にクアッドコア以下のコンピュータではかなりの時間がかかります
vcpkg install qt5-base qt5-multimedia
次に、Visual Studioを開き、「リポジトリのクローンを作成」を選択し、`https://github.com/mgba-emu/mgba.git`を入力します。Visual Studioがクローンを完了したら、「ファイル」>「CMake」に移動し、チェックアウトされたリポジトリのルートにあるCMakeLists.txtファイルを開きます。そこから、他のVisual Studio CMakeプロジェクトと同様にVisual StudioでmGBAを開発できます。
#### ツールチェーンビルド
devkitARM3DS用、devkitPPCWii用、devkitA64Switch用、またはvitasdkPS Vita用を持っている場合は、次のコマンドを使用してビルドできます
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../src/platform/3ds/CMakeToolchain.txt ..
make
次のプラットフォーム用に`-DCMAKE_TOOLCHAIN_FILE`パラメータを置き換えます:
- 3DS`../src/platform/3ds/CMakeToolchain.txt`
- Switch`../src/platform/switch/CMakeToolchain.txt`
- Vita`../src/platform/psp2/CMakeToolchain.vitasdk`
- Wii`../src/platform/wii/CMakeToolchain.txt`
### 依存関係
mGBAには厳密な依存関係はありませんが、特定の機能には次のオプションの依存関係が必要です。依存関係が見つからない場合、これらの機能は無効になります。
- Qt 5GUIフロントエンド用。オーディオにはQt MultimediaまたはSDLが必要です。
- SDLより基本的なフロントエンドおよびQtフロントエンドでのゲームパッドサポート用。SDL 2が推奨されますが、1.2もサポートされています。
- zlibおよびlibpngスクリーンショットサポートおよびPNG内セーブステートサポート用。
- libeditコマンドラインデバッガーサポート用。
- ffmpegまたはlibavビデオ、GIF、WebP、およびAPNGの録画用。
- libzipまたはzlibzipファイルに保存されたROMの読み込み用。
- SQLite3ゲームデータベース用。
- libelfELF読み込み用。
- Luaスクリプト用。
- json-cスクリプトの`storage` API用。
SQLite3、libpng、およびzlibはエミュレーターに含まれているため、最初に外部でコンパイルする必要はありません。
脚注
---------
<a name="missing">[1]</a> 現在欠けている機能は次のとおりです
- モード3、4、および5のOBJウィンドウ[バグ#5](http://mgba.io/b/5)
<a name="flashdetect">[2]</a> フラッシュメモリサイズの検出は一部のケースで機能しません。これらは実行時に構成できますが、そのようなケースに遭遇した場合はバグを報告することをお勧めします。
<a name="osxver">[3]</a> 10.9はQtポートにのみ必要です。10.7またはそれ以前のバージョンでQtポートをビルドまたは実行することは可能かもしれませんが、公式にはサポートされていません。SDLポートは10.5で動作することが知られており、古いバージョンでも動作する可能性があります。
[downloads]: http://mgba.io/downloads.html
[source]: https://github.com/mgba-emu/mgba/
著作権
---------
mGBAの著作権は© 2013 2023 Jeffrey Pfauに帰属します。これは[Mozilla Public License version 2.0](https://www.mozilla.org/MPL/2.0/)の下で配布されています。配布されたLICENSEファイルにライセンスのコピーが含まれています。
mGBAには次のサードパーティライブラリが含まれています
- [inih](https://github.com/benhoyt/inih)、著作権© 2009 2020 Ben Hoyt、BSD 3-clauseライセンスの下で使用。
- [LZMA SDK](http://www.7-zip.org/sdk.html)、パブリックドメイン。
- [MurmurHash3](https://github.com/aappleby/smhasher)、Austin Applebyによる実装、パブリックドメイン。
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/)、パブリックドメイン。
- [SQLite3](https://www.sqlite.org)、パブリックドメイン。
ゲームパブリッシャーであり、商業利用のためにmGBAのライセンスを取得したい場合は、[licensing@mgba.io](mailto:licensing@mgba.io)までメールでお問い合わせください。

View File

@ -5,9 +5,7 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
可在以下网址找到最新新闻和下载:[mgba.io](https://mgba.io/)。
[![Build status](https://buildbot.mgba.io/badges/build-win32.svg)](https://buildbot.mgba.io)
[![Translation status](https://hosted.weblate.org/widgets/mgba/-/svg-badge.svg)](https://hosted.weblate.org/engage/mgba)
[![Build status](https://travis-ci.org/mgba-emu/mgba.svg?branch=master)](https://travis-ci.org/mgba-emu/mgba)
功能
--------
@ -15,7 +13,7 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- 支持高精确的 Game Boy Advance 硬件[<sup>[1]</sup>](#missing)。
- 支持 Game Boy/Game Boy Color 硬件。
- 快速模拟:已知即使在低端硬件(例如上网本)上也能够全速运行。
- 可用于重型和轻型前端的 Qt 和 SDL 移植
- 用于重型和轻型前端的 Qt 和 SDL 端口
- 支持本地(同一台计算机)链接电缆。
- 存档类型检测,即使是闪存大小也可检测[<sup>[2]</sup>](#flashdetect)。
- 支持附带有运动传感器和振动机制的卡带(仅适用于游戏控制器)。
@ -23,7 +21,6 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- 支持《我们的太阳》系列游戏的太阳能传感器。
- 支持 Game Boy 相机和 Game Boy 打印机。
- 内置 BIOS 执行,并具有加载外部 BIOS 文件的功能。
- 支持使用 Lua 编写脚本
- 支持 Turbo/快进功能(按住 Tab 键)。
- 支持倒带(按住反引号键)。
- 支持跳帧,最多可配置 10 级。
@ -35,11 +32,10 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- 可重新映射键盘和游戏手柄的控制键。
- 支持从 ZIP 和 7z 文件中加载。
- 支持 IPS、UPS 和 BPS 补丁。
- 支持通过命令行界面和 GDB 远程支持进行游戏调试,兼容 Ghidra 和 IDA Pro。
- 支持通过命令行界面和 GDB 远程支持进行游戏调试,兼容 IDA Pro。
- 支持可配置的模拟倒带。
- 支持载入和导出 GameShark 和 Action Replay 快照。
- 适用于 RetroArch/Libretro 和 OpenEmu 的内核。
- 社区支持的多种语言翻译 [Weblate](https://hosted.weblate.org/engage/mgba).
- 许许多多的小玩意。
#### Game Boy 映射器mapper
@ -55,10 +51,9 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- MBC5+振动
- MBC7
- Wisdom Tree未授权
- NT "old type" 1 and 2 (未授权多合一卡带)
- NT "new type" (未授权 MBC5-like)
- Pokémon Jade/Diamond未授权
- Sachen MMC1 (未授权)
- BBD未授权、类 MBC5
- Hitek未授权、类 MBC5
部分支持以下 mapper
@ -68,11 +63,6 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- TAMA5缺少 RTC 支持)
- HuC-1缺少 IR 支持)
- HuC-3缺少 IR 和 RTC 支持)
- Sachen MMC2 (缺少备用接线支持)
- BBD (缺少图标切换)
- Hitek (缺少图标切换)
- GGB-81 (缺少图标切换)
- Li Cheng (缺少图标切换)
### 计划加入的功能
@ -80,6 +70,7 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- 支持 Dolphin/JOY 总线链接电缆。
- MP2k 音频混合,获得比硬件更高质量的声音。
- 支持针对工具辅助竞速Tool-Assisted Speedrun的重录功能。
- 支持 Lua 脚本。
- 全方位的调试套件。
- 支持无线适配器。
@ -121,19 +112,17 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
编译
---------
编译需要使用 CMake 3.1 或更新版本。已知 GCC , Clang 和 Visual Studio 2013 都可以编译 mGBA
编译需要使用 CMake 3.1 或更新版本。已知 GCC 和 Clang 都可以编译 mGBA而 Visual Studio 2013 和更旧的版本则无法编译。我们即将实现对 Visual Studio 2015 或更新版本的支持
#### Docker 构建
对于大多数平台来说,建议使用 Docker 进行构建。我们提供了多个 Docker 映像,其中包含在多个平台上构建 mGBA 所需的工具链和依赖项。
注意: 如果你是用的是 Widnows 10 之前的旧版本 Windows 系统, 你可能需要配置你的 Docker 使用 VirtualBox 共享文件夹以正确映射你当前 mGBA 检出目录到 Docker 镜像中的工作目录. 详细细节参见 issue [#1985](https://mgba.io/i/1985)
要使用 Docker 映像构建 mGBA只需在 mGBA 的签出checkout根目录中运行以下命令
docker run --rm -t -v $PWD:/home/mgba/src mgba/windows:w32
启动 Docker 容器之后, 此命令将生成 `build-win32` 目录, 此目录中包含编译产物。将 `mgba/windows:w32` 替换为其他平台上的 Docker 映像会生成相应的其他目录。Docker Hub 上提供了以下 Docker 映像:
此命令将生成 `build-win32` 目录。将 `mgba/windows:w32` 替换为其他平台上的 Docker 映像会生成相应的其他目录。Docker Hub 上提供了以下 Docker 映像:
- mgba/3ds
- mgba/switch
@ -146,8 +135,6 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
- mgba/windows:w32
- mgba/windows:w64
如果你希望加速编译过程, 可以考虑添加编译选项 `-e MAKEFLAGS=-jN`, 使用 `N` 个 CPU 核心来并行构建 mGBA
#### *nix 构建
要在基于 Unix 的系统上使用 CMake 进行构建,推荐执行以下命令:
@ -160,7 +147,7 @@ mGBA 是一个运行 Game Boy Advance 游戏的模拟器。mGBA 的目标是比
这些命令将构建 mGBA 并将其安装到 `/usr/bin``/usr/lib` 中。系统会自动检测已安装的依赖项,如果未找到依赖项,则会在提示找不到依赖项的情况下运行 `cmake` 命令,并显示已被禁用的功能。
如果您使用的是 MacOS则步骤略有不同。假设您使用的 homebrew 软件包管理器,建议使用以下命令来获取依赖项并进行构建:
如果您使用的是 MacOS则步骤略有不同。假设您使用的是自制软件包管理器,建议使用以下命令来获取依赖项并进行构建:
brew install cmake ffmpeg libzip qt5 sdl2 libedit pkg-config
mkdir build
@ -233,12 +220,10 @@ mGBA 没有硬性的依赖项,但是特定功能需要以下可选的依赖项
- libzip 或 zlib载入储存在 ZIP 文件中的 ROM 的所需依赖项。
- SQLite3游戏数据库的所需依赖项
- libelfELF 载入的所需依赖项
- Lua: 脚本支持
- json-c: 脚本 `storage` API 支持
SQLite3、libpng 以及 zlib 已包含在模拟器中,因此不需要先对这些依赖项进行外部编译。
脚注
Footnotes
---------
<a name="missing">[1]</a> 目前缺失的功能有
@ -247,7 +232,7 @@ SQLite3、libpng 以及 zlib 已包含在模拟器中,因此不需要先对这
<a name="flashdetect">[2]</a> 闪存大小检测在某些情况下不起作用。 这些可以在运行时中进行配置,但如果遇到此类情况,建议提交错误。
<a name="osxver">[3]</a> 仅 Qt 移植需要 10.9。应该可以在 10.7 或更早版本上构建或运行 Qt 移植,但这类操作不受官方支持。已知 SDL 移植可以在 10.5 上运行,并且可能能够在旧版本上运行。
<a name="osxver">[3]</a> 仅 Qt 端口需要 10.9。应该可以在 10.7 或更早版本上构建或运行 Qt 端口,但这类操作不受官方支持。已知 SDL 端口可以在 10.5 上运行,并且可能能够在旧版本上运行。
[downloads]: http://mgba.io/downloads.html
[source]: https://github.com/mgba-emu/mgba/
@ -255,11 +240,12 @@ SQLite3、libpng 以及 zlib 已包含在模拟器中,因此不需要先对这
版权
---------
mGBA 版权 © 2013 2023 Jeffrey Pfau。基于 [Mozilla 公共许可证版本 2.0](https://www.mozilla.org/MPL/2.0/) 许可证分发。分发的 LICENSE 文件中提供了许可证的副本。
mGBA 版权 © 2013 2020 Jeffrey Pfau。基于 [Mozilla 公共许可证版本 2.0](https://www.mozilla.org/MPL/2.0/) 许可证分发。分发的 LICENSE 文件中提供了许可证的副本。
mGBA 包含以下第三方库:
- [inih](https://github.com/benhoyt/inih):版权 © 2009 2020 Ben Hoyt基于 BSD 3-clause 许可证使用。
- [blip-buf](https://code.google.com/archive/p/blip-buf):版权 © 2003 2009 Shay Green基于 Lesser GNU 公共许可证使用。
- [LZMA SDK](http://www.7-zip.org/sdk.html):属公有领域使用。
- [MurmurHash3](https://github.com/aappleby/smhasher):由 Austin Appleby 实施,属公有领域使用。
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/):属公有领域使用。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

View File

@ -1,6 +0,0 @@
[testinfo]
skip=15
frames=1
[ports.cinema]
sgb.borders=0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 B

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05db RunTest
00:0b92 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 998 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05db RunTest
00:0b92 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05cb RunTest
00:09ed StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 918 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,45 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:062b RunTest
00:0649 TestGroup
00:0a39 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,45 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:062b RunTest
00:0639 TestGroup
00:0ec9 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05c3 RunTest
00:091d StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 751 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,45 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:062b RunTest
00:0639 TestGroup
00:0ed6 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05bb RunTest
00:0875 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05bb RunTest
00:0875 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05bb RunTest
00:0875 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05bb RunTest
00:088f StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 747 B

View File

@ -1,3 +0,0 @@
[testinfo]
fail=1
skip=180

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05f3 RunTest
00:1a0f StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:063b RunTest
00:1a82 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05bb RunTest
00:085e StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,46 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:05e3 RunTest
00:05f9 TestGroup
00:0801 ShortTestGroup
00:0912 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:063b RunTest
00:1f92 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:063b RunTest
00:1cce StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,45 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:063b RunTest
00:0940 RunTest.round_6
00:1545 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,44 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:062b RunTest
00:1e2a StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -1,45 +0,0 @@
; File generated by rgblink
00:00ff reboot
00:0100 Start
00:0150 LCDOff
00:0157 LCDOff.LCDOffLoop
00:0163 LCDOff.ret
00:0165 LCDOn
00:016e LoadFont
00:0176 LoadFont.loop
00:017c LoadFont.loop2
00:0185 LoadFont.loop3
00:0192 LoadFont.loop4
00:01a1 HexDigits
00:03a1 Palette
00:03b1 LoadObjPalettes
00:03b5 LoadBGPalettes
00:03b7 LoadPalettes
00:03bc LoadPalettes.loop
00:03c2 CommonInit
00:03d0 CommonInit.clearLogoTilemap
00:03e9 ModemSleep
00:0401 ModemCh1Freqs
00:0411 ModemCh2Freqs
00:0421 ModemCh3Freqs
00:0431 ModemSendByte
00:0485 ModemStart
00:04bf ModemStop
00:04c3 ModemSendBuffer
00:04cb _Start
00:04e7 _Start.loop_u16400
00:0502 _Start.failed
00:0509 _Start.sendSerial
00:0521 _Start.loop_u16401
00:052a PrintResults
00:0533 PrintResults.yLoop
00:0557 PrintResults.xLoop
00:0569 PrintResults.correct
00:057d PrintResults.correct2
00:059e SerialSendByte
00:05a4 SerialSendByte.loop
00:05ab CorrectResults
00:062b RunTest
00:0643 SubTestGroup
00:0ac4 StoreResult
01:4000 NopSlide

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1,3 +0,0 @@
[testinfo]
fail=1
skip=120

Some files were not shown because too many files have changed in this diff Show More