all repos — mgba @ 079ceead68fa23b228486e3048e076202f92e506

mGBA Game Boy Advance Emulator

Merge branch 'master' into feature/input-revamp
Vicki Pfau vi@endrift.com
Wed, 04 Oct 2017 10:08:42 -0700
commit

079ceead68fa23b228486e3048e076202f92e506

parent

2e0ba4fa1c81694a7805123305f5883d598fc0dd

640 files changed, 25075 insertions(+), 1979 deletions(-)

jump to
M CHANGESCHANGES

@@ -4,30 +4,69 @@ - ELF support

- Game Boy Camera support - Qt: Set default Game Boy colors - Game Boy Printer support + - Super Game Boy support + - Customizable autofire speed + - Ability to set default Game Boy model + - Map viewer Bugfixes: - GB Audio: Make audio unsigned with bias (fixes mgba.io/i/749) - - Python: Fix importing .gb or .gba before .core - - GBA: Reset active region as needed when loading a ROM - - Qt: Fix command line debugger closing second game - GB Serialize: Fix audio state loading - GB Video: Fix dot clock timing being slightly wrong + - Qt: Fix GL display when loading a game from CLI (fixes mgba.io/i/843) + - ARM: Fix MSR when T bit is set + - GB Serialize: Fix game title check + - GB: Revamp IRQ handling based on new information +Misc: + - GBA Timer: Use global cycles for timers + - GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722) + - All: Make FIXED_ROM_BUFFER an option instead of 3DS-only + - Qt: Redo GameController into multiple classes + - Test: Restructure test suite into multiple executables + - Python: Integrate tests from cinema test suite + - Util: Don't build crc32 if the function already exists + +0.6.1: (2017-10-01) +Bugfixes: + - GB, GBA: Fix crashes when attempting to identify null VFiles + - GB, GBA: Fix sync to video with frameskip + - GB, GBA Savedata: Fix savestate-related save overwriting (fixes mgba.io/i/834) + - GB Audio: Fix NRx2 writes while active (fixes mgba.io/i/866) + - GB Core: Fix palette loading when loading a foreign config - GB MBC: Pocket Cam memory should be accessible without enabling + - GB MBC: Fix SRAM sizes 4 and 5 + - GB MBC: Fix RTC initialization (fixes mgba.io/i/825) + - GB MBC: Fix RTC loading when file size is off - GB Memory: Initialize peripheral pointers - - GB MBC: Fix SRAM sizes 4 and 5 + - GB Memory: Prevent accessing empty SRAM (fixes mgba.io/i/831) + - GB Memory: Fix HDMA count starting in mode 0 (fixes mgba.io/i/855) + - GB Memory: Actually load latch time from savestate + - GB Serialize: Fix deserializing video STAT - GB Video: Fix 16-bit screenshots (fixes mgba.io/i/826) - - GB Core: Fix palette loading when loading a foreign config + - GB Video: Fix potential hang when ending mode 0 + - GB Video: Fix read mode when enabling LCD + - GBA: Reset active region as needed when loading a ROM + - GBA: Fix keypad IRQs not firing when extra buttons are pressed + - GBA BIOS: Use core's VRAM variable instead of renderer's + - GBA Cheats: Fix PARv3 multiline blocks (fixes mgba.io/i/889) + - GBA I/O: Fix reading from a few invalid I/O registers (fixes mgba.io/i/876) + - GBA Savedata: Fix 512 byte EEPROM saving as 8kB (fixes mgba.io/i/877) + - GBA Savedata: Fix size of SRAM saves (fixes mgba.io/i/883) + - GBA Video: Fix broken sprite blending hack (fixes mgba.io/i/532) + - Python: Fix importing .gb or .gba before .core + - Qt: Fix command line debugger closing second game - Qt: Fix LOG argument order - - GB Memory: Prevent accessing empty SRAM (fixes mgba.io/i/831) - - GB, GBA: Fix crashes when attempting to identify null VFiles - - GB MBC: Fix RTC initialization (fixes mgba.io/i/825) - - GB MBC: Fix RTC loading when file size is off + - Qt: Fix timezone issues with time overrides + - Qt: Fix sprite export pausing game indefinitely (fixes mgba.io/i/841) + - SDL: Fix potential race condition when pressing keys (fixes mgba.io/i/872) Misc: - - GBA Timer: Use global cycles for timers - - GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722) - - All: Make FIXED_ROM_BUFFER an option instead of 3DS-only + - CMake: Fix CPack dependencies for libpng 1.6 + - GBA: Detect hardware for Pokémon FireRed ROM hacks + - GBA Cheats: Improve detection of raw cheats - Qt: Don't rebuild library view if style hasn't changed - - Qt: Redo GameController into multiple classes + - Qt: Allow overrides to be saved before a game is loaded + - Qt: Hide mouse immediately when loading - SDL: Fix 2.0.5 build on macOS under some circumstances + - VFS: Make VFile.truncate work growing files on PSV (fixes mgba.io/i/885) 0.6.0: (2017-07-16) Features:
M CMakeLists.txtCMakeLists.txt

@@ -124,6 +124,7 @@ string(TOUPPER ${REQUIRE} UREQUIRE)

set(${UREQUIRE}_CFLAGS_OTHER ${${REQUIRE}_CFLAGS_OTHER} PARENT_SCOPE) set(${UREQUIRE}_FOUND ${${REQUIRE}_FOUND} PARENT_SCOPE) set(${UREQUIRE}_INCLUDE_DIRS ${${REQUIRE}_INCLUDE_DIRS} PARENT_SCOPE) + set(${UREQUIRE}_VERSION_STRING ${${REQUIRE}_VERSION_STRING} PARENT_SCOPE) if (APPLE) set(IS_FRAMEWORK OFF) set(LIBS)

@@ -500,6 +501,14 @@ list(APPEND FEATURES ZLIB)

include_directories(AFTER ${ZLIB_INCLUDE_DIRS}) list(APPEND DEPENDENCY_LIB ${ZLIB_LIBRARIES}) set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},zlib1g") + set(HAVE_CRC32 ON) +else() + # zlib pulls in crc32 + check_function_exists(crc32 HAVE_CRC32) +endif() + +if(HAVE_CRC32) + list(APPEND FUNCTION_DEFINES HAVE_CRC32) endif() if(WANT_PNG AND USE_ZLIB AND NOT USE_PNG)

@@ -518,7 +527,15 @@ if(USE_PNG)

list(APPEND FEATURES PNG) include_directories(AFTER ${PNG_INCLUDE_DIRS}) list(APPEND DEPENDENCY_LIB ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) - set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libpng12-0") + if(PNG_VERSION_STRING) + string(REGEX MATCH "^[0-9]+\\.[0-9]+" PNG_VERSION_PARTIAL ${PNG_VERSION_STRING}) + if(${PNG_VERSION_PARTIAL} STREQUAL "1.6") + set(PNG_DEB_VERSION "16-16") + else() + set(PNG_DEB_VERSION "12-0") + endif() + set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libpng${PNG_DEB_VERSION}") + endif() endif() if(WANT_SQLITE3 AND NOT USE_SQLITE3)

@@ -607,10 +624,6 @@

if(USE_ELF) list(APPEND FEATURES ELF) include_directories(AFTER ${LIBELF_INCLUDE_DIRS}) - find_file(ELF_REPL_H elf_repl.h PATHS ${LIBELF_INCLUDE_DIRS} NO_CMAKE_FIND_ROOT_PATH) - if (ELF_REPL_H) - add_definitions(-DUSE_ELF_REPL) - endif() list(APPEND DEPENDENCY_LIB ${LIBELF_LIBRARIES}) set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libelfg0") endif()

@@ -619,8 +632,7 @@ if(ENABLE_SCRIPTING)

list(APPEND ENABLES SCRIPTING) if(BUILD_PYTHON) - find_program(PYTHON python) - include(FindPythonLibs) + find_package(PythonLibs ${USE_PYTHON_VERSION}) list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES}) include_directories(AFTER ${PYTHON_INCLUDE_DIRS}) list(APPEND ENABLES PYTHON)

@@ -861,10 +873,16 @@ enable_testing()

include_directories(AFTER ${CMOCKA_INCLUDE_DIRS}) link_directories(${CMOCKA_LIBRARY_DIRS}) - add_executable(${BINARY_NAME}-suite ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/test/suite-main.c ${TEST_SRC}) - target_link_libraries(${BINARY_NAME}-suite ${BINARY_NAME} ${PLATFORM_LIBRARY} cmocka) - set_target_properties(${BINARY_NAME}-suite PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") - add_test(${BINARY_NAME}-suite ${BINARY_NAME}-suite) + foreach(TEST IN LISTS TEST_SRC) + string(REPLACE "${CMAKE_SOURCE_DIR}/src/" "" TEST_NAME "${TEST}") + string(REPLACE "/" "-" TEST_NAME "${TEST_NAME}") + string(REPLACE "-test" "" TEST_NAME "${TEST_NAME}") + string(REPLACE ".c" "" TEST_NAME "${TEST_NAME}") + add_executable(test-${TEST_NAME} ${TEST}) + target_link_libraries(test-${TEST_NAME} ${BINARY_NAME} ${PLATFORM_LIBRARY} cmocka) + set_target_properties(test-${TEST_NAME} PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") + add_test(${TEST_NAME} test-${TEST_NAME}) + endforeach() endif() if(BUILD_EXAMPLE)
M README.mdREADME.md

@@ -18,6 +18,7 @@ - Local (same computer) link cable support.

- Save type detection, even for flash memory size[<sup>[2]</sup>](#flashdetect). - Support for cartridges with motion sensors and rumble (only usable with game controllers). - Real-time clock support, even without configuration. +- Game Boy Camera and Game Boy Printer support. - A built-in BIOS implementation, and ability to load external BIOS files. - Turbo/fast-forward support by holding Tab. - Rewind by holding Backquote.

@@ -45,7 +46,6 @@ - Lua support for scripting.

- A comprehensive debug suite. - e-Reader support. - Wireless adapter support. -- Game Boy Printer support. Supported Platforms -------------------
M include/mgba-util/arm-algo.hinclude/mgba-util/arm-algo.h

@@ -7,12 +7,10 @@ #ifndef ARM_ALGO_H

#define ARM_ALGO_H #ifdef __arm__ -void _to16Bit(uint16_t* dest, uint32_t* src, size_t words); - #if defined(__ARM_NEON) void _neon2x(void* dest, void* src, int width, int height); void _neon4x(void* dest, void* src, int width, int height); #endif #endif -#endif+#endif
M include/mgba-util/crc32.hinclude/mgba-util/crc32.h

@@ -12,8 +12,13 @@ CXX_GUARD_START

struct VFile; +#ifndef HAVE_CRC32 +uint32_t crc32(uint32_t crc, const void* buf, size_t size); +#else +#include <zlib.h> +#endif + uint32_t doCrc32(const void* buf, size_t size); -uint32_t updateCrc32(uint32_t crc, const void* buf, size_t size); uint32_t fileCrc32(struct VFile* file, size_t endOffset); CXX_GUARD_END
M include/mgba-util/elf-read.hinclude/mgba-util/elf-read.h

@@ -14,12 +14,6 @@ #ifdef USE_ELF

#include <libelf.h> -#if USE_ELF_REPL -#include <elf_repl.h> -#else -#include <elf.h> -#endif - #include <mgba-util/vector.h> struct ELF;
M include/mgba-util/png-io.hinclude/mgba-util/png-io.h

@@ -26,9 +26,11 @@ };

png_structp PNGWriteOpen(struct VFile* source); png_infop PNGWriteHeader(png_structp png, unsigned width, unsigned height); +png_infop PNGWriteHeaderA(png_structp png, unsigned width, unsigned height); png_infop PNGWriteHeader8(png_structp png, unsigned width, unsigned height); bool PNGWritePalette(png_structp png, png_infop info, const uint32_t* palette, unsigned entries); bool PNGWritePixels(png_structp png, unsigned width, unsigned height, unsigned stride, const void* pixels); +bool PNGWritePixelsA(png_structp png, unsigned width, unsigned height, unsigned stride, const void* pixels); bool PNGWritePixels8(png_structp png, unsigned width, unsigned height, unsigned stride, const void* pixels); bool PNGWriteCustomChunk(png_structp png, const char* name, size_t size, void* data); void PNGWriteClose(png_structp png, png_infop info);
A include/mgba/core/cache-set.h

@@ -0,0 +1,35 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef M_CACHE_SET_H +#define M_CACHE_SET_H + +#include <mgba-util/common.h> + +CXX_GUARD_START + +#include <mgba/core/map-cache.h> +#include <mgba/core/tile-cache.h> +#include <mgba-util/vector.h> + +DECLARE_VECTOR(mMapCacheSet, struct mMapCache); +DECLARE_VECTOR(mTileCacheSet, struct mTileCache); + +struct mCacheSet { + struct mMapCacheSet maps; + struct mTileCacheSet tiles; +}; + +void mCacheSetInit(struct mCacheSet*, size_t nMaps, size_t nTiles); +void mCacheSetDeinit(struct mCacheSet*); + +void mCacheSetAssignVRAM(struct mCacheSet*, void* vram); + +void mCacheSetWriteVRAM(struct mCacheSet*, uint32_t address); +void mCacheSetWritePalette(struct mCacheSet*, uint32_t entry, color_t color); + +CXX_GUARD_END + +#endif
M include/mgba/core/interface.hinclude/mgba/core/interface.h

@@ -35,6 +35,25 @@ #define M_RGB5_TO_BGR8(X) ((M_R5(X) << 3) | (M_G5(X) << 11) | (M_B5(X) << 19))

#define M_RGB8_TO_BGR5(X) ((((X) & 0xF8) >> 3) | (((X) & 0xF800) >> 6) | (((X) & 0xF80000) >> 9)) #define M_RGB8_TO_RGB5(X) ((((X) & 0xF8) << 7) | (((X) & 0xF800) >> 6) | (((X) & 0xF80000) >> 19)) +#ifndef PYCPARSE +static inline color_t mColorFrom555(uint16_t value) { +#ifdef COLOR_16_BIT +#ifdef COLOR_5_6_5 + color_t color = 0; + color |= (value & 0x001F) << 11; + color |= (value & 0x03E0) << 1; + color |= (value & 0x7C00) >> 10; +#else + color_t color = value; +#endif +#else + color_t color = M_RGB5_TO_BGR8(value); + color |= (color >> 5) & 0x070707; +#endif + return color; +} +#endif + struct blip_t; enum mColorFormat {
A include/mgba/core/map-cache.h

@@ -0,0 +1,79 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef M_MAP_CACHE_H +#define M_MAP_CACHE_H + +#include <mgba-util/common.h> + +CXX_GUARD_START + +#include <mgba/core/interface.h> +#include <mgba/core/tile-cache.h> + +DECL_BITFIELD(mMapCacheConfiguration, uint32_t); +DECL_BIT(mMapCacheConfiguration, ShouldStore, 0); + +DECL_BITFIELD(mMapCacheSystemInfo, uint32_t); +DECL_BITS(mMapCacheSystemInfo, PaletteBPP, 0, 2); +DECL_BITS(mMapCacheSystemInfo, PaletteCount, 2, 4); +DECL_BITS(mMapCacheSystemInfo, TilesWide, 8, 4); +DECL_BITS(mMapCacheSystemInfo, TilesHigh, 12, 4); +DECL_BITS(mMapCacheSystemInfo, MacroTileSize, 16, 7); +DECL_BITS(mMapCacheSystemInfo, MapAlign, 23, 2); + +DECL_BITFIELD(mMapCacheEntryFlags, uint16_t); +DECL_BITS(mMapCacheEntryFlags, PaletteId, 0, 4); +DECL_BIT(mMapCacheEntryFlags, VramClean, 4); +DECL_BIT(mMapCacheEntryFlags, HMirror, 5); +DECL_BIT(mMapCacheEntryFlags, VMirror, 6); +DECL_BITS(mMapCacheEntryFlags, Mirror, 5, 2); + +struct mMapCacheEntry { + uint32_t vramVersion; + uint16_t tileId; + mMapCacheEntryFlags flags; + struct mTileCacheEntry tileStatus[16]; +}; + +struct mTileCache; +struct mTileCacheEntry; +struct mMapCache { + color_t* cache; + struct mTileCache* tileCache; + struct mMapCacheEntry* status; + + uint8_t* vram; + + uint32_t mapStart; + uint32_t mapSize; + + uint32_t tileStart; + + mMapCacheConfiguration config; + mMapCacheSystemInfo sysConfig; + + void (*mapParser)(struct mMapCache*, struct mMapCacheEntry* entry, void* vram); + void* context; +}; + +void mMapCacheInit(struct mMapCache* cache); +void mMapCacheDeinit(struct mMapCache* cache); +void mMapCacheConfigure(struct mMapCache* cache, mMapCacheConfiguration config); +void mMapCacheConfigureSystem(struct mMapCache* cache, mMapCacheSystemInfo config); +void mMapCacheConfigureMap(struct mMapCache* cache, uint32_t mapStart); +void mMapCacheWriteVRAM(struct mMapCache* cache, uint32_t address); + +uint32_t mMapCacheTileId(struct mMapCache* cache, unsigned x, unsigned y); + +bool mMapCacheCheckTile(struct mMapCache* cache, const struct mMapCacheEntry* entry, unsigned x, unsigned y); +void mMapCacheCleanTile(struct mMapCache* cache, struct mMapCacheEntry* entry, unsigned x, unsigned y); + +void mMapCacheCleanRow(struct mMapCache* cache, unsigned y); +const color_t* mMapCacheGetRow(struct mMapCache* cache, unsigned y); + +CXX_GUARD_END + +#endif
M include/mgba/core/thread.hinclude/mgba/core/thread.h

@@ -34,6 +34,8 @@ ThreadCallback resetCallback;

ThreadCallback cleanCallback; ThreadCallback frameCallback; ThreadCallback sleepCallback; + ThreadCallback pauseCallback; + ThreadCallback unpauseCallback; void* userData; void (*run)(struct mCoreThread*);

@@ -50,13 +52,19 @@ THREAD_INITIALIZED = -1,

THREAD_RUNNING = 0, THREAD_REWINDING, THREAD_MAX_RUNNING = THREAD_REWINDING, + + THREAD_WAITING, THREAD_INTERRUPTED, - THREAD_INTERRUPTING, THREAD_PAUSED, + THREAD_MAX_WAITING = THREAD_PAUSED, + THREAD_PAUSING, THREAD_RUN_ON, - THREAD_WAITING, THREAD_RESETING, + THREAD_MIN_DEFERRED = THREAD_PAUSING, + THREAD_MAX_DEFERRED = THREAD_RESETING, + + THREAD_INTERRUPTING, THREAD_EXITING, THREAD_SHUTDOWN, THREAD_CRASHED
M include/mgba/core/tile-cache.hinclude/mgba/core/tile-cache.h

@@ -10,14 +10,14 @@ #include <mgba-util/common.h>

CXX_GUARD_START +#include <mgba/core/interface.h> + DECL_BITFIELD(mTileCacheConfiguration, uint32_t); DECL_BIT(mTileCacheConfiguration, ShouldStore, 0); DECL_BITFIELD(mTileCacheSystemInfo, uint32_t); -DECL_BITS(mTileCacheSystemInfo, Palette0BPP, 0, 2); -DECL_BITS(mTileCacheSystemInfo, Palette0Count, 2, 4); -DECL_BITS(mTileCacheSystemInfo, Palette1BPP, 8, 2); -DECL_BITS(mTileCacheSystemInfo, Palette1Count, 10, 4); +DECL_BITS(mTileCacheSystemInfo, PaletteBPP, 0, 2); +DECL_BITS(mTileCacheSystemInfo, PaletteCount, 2, 4); DECL_BITS(mTileCacheSystemInfo, MaxTiles, 16, 13); struct mTileCacheEntry {

@@ -25,24 +25,22 @@ uint32_t paletteVersion;

uint32_t vramVersion; uint8_t vramClean; uint8_t paletteId; - uint8_t activePalette; - uint8_t padding; + uint16_t padding; }; struct mTileCache { - uint16_t* cache; + color_t* cache; struct mTileCacheEntry* status; - uint32_t* globalPaletteVersion[2]; + uint32_t* globalPaletteVersion; - int activePalette; - unsigned entries; - unsigned count; + uint32_t tileBase; + uint32_t paletteBase; unsigned entriesPerTile; unsigned bpp; uint16_t* vram; - uint16_t* palette; - uint16_t temporaryTile[64]; + color_t* palette; + color_t temporaryTile[64]; mTileCacheConfiguration config; mTileCacheSystemInfo sysConfig;

@@ -51,15 +49,14 @@

void mTileCacheInit(struct mTileCache* cache); void mTileCacheDeinit(struct mTileCache* cache); void mTileCacheConfigure(struct mTileCache* cache, mTileCacheConfiguration config); -void mTileCacheConfigureSystem(struct mTileCache* cache, mTileCacheSystemInfo config); +void mTileCacheConfigureSystem(struct mTileCache* cache, mTileCacheSystemInfo config, uint32_t tileBase, uint32_t paletteBase); void mTileCacheWriteVRAM(struct mTileCache* cache, uint32_t address); -void mTileCacheWritePalette(struct mTileCache* cache, uint32_t address); -void mTileCacheSetPalette(struct mTileCache* cache, int palette); +void mTileCacheWritePalette(struct mTileCache* cache, uint32_t entry, color_t color); -const uint16_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId); -const uint16_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId); -const uint8_t* mTileCacheGetRawTile(struct mTileCache* cache, unsigned tileId); -const uint16_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId); +const color_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId); +const color_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId); +const color_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId); +const uint16_t* mTileCacheGetVRAM(struct mTileCache* cache, unsigned tileId); CXX_GUARD_END
M include/mgba/core/timing.hinclude/mgba/core/timing.h

@@ -23,6 +23,7 @@ };

struct mTiming { struct mTimingEvent* root; + struct mTimingEvent* reroot; uint32_t masterCycles; int32_t* relativeCycles;
M include/mgba/gb/interface.hinclude/mgba/gb/interface.h

@@ -12,10 +12,12 @@ CXX_GUARD_START

enum GBModel { GB_MODEL_AUTODETECT = 0xFF, - GB_MODEL_DMG = 0x00, - GB_MODEL_SGB = 0x40, - GB_MODEL_CGB = 0x80, - GB_MODEL_AGB = 0xC0 + GB_MODEL_DMG = 0x00, + GB_MODEL_SGB = 0x20, + GB_MODEL_MGB = 0x40, + GB_MODEL_SGB2 = 0x60, + GB_MODEL_CGB = 0x80, + GB_MODEL_AGB = 0xC0 }; enum GBMemoryBankControllerType {

@@ -44,6 +46,9 @@ void (*deinit)(struct GBSIODriver* driver);

void (*writeSB)(struct GBSIODriver* driver, uint8_t value); uint8_t (*writeSC)(struct GBSIODriver* driver, uint8_t value); }; + +enum GBModel GBNameToModel(const char*); +const char* GBModelToName(enum GBModel); CXX_GUARD_END
M include/mgba/internal/gb/audio.hinclude/mgba/internal/gb/audio.h

@@ -142,6 +142,7 @@ };

enum GBAudioStyle { GB_AUDIO_DMG, + GB_AUDIO_MGB = GB_AUDIO_DMG, // TODO GB_AUDIO_CGB, GB_AUDIO_AGB, // GB in GBA GB_AUDIO_GBA, // GBA PSG
M include/mgba/internal/gb/gb.hinclude/mgba/internal/gb/gb.h

@@ -44,6 +44,34 @@ GB_VECTOR_SIO = 0x58,

GB_VECTOR_KEYPAD = 0x60, }; +enum GBSGBCommand { + SGB_PAL01 = 0, + SGB_PAL23, + SGB_PAL03, + SGB_PAL12, + SGB_ATTR_BLK, + SGB_ATTR_LIN, + SGB_ATTR_DIV, + SGB_ATTR_CHR, + SGB_SOUND, + SGB_SOU_TRN, + SGB_PAL_SET, + SGB_PAL_TRN, + SGB_ATRC_EN, + SGB_TEST_EN, + SGB_PICON_EN, + SGB_DATA_SND, + SGB_DATA_TRN, + SGB_MLT_REG, + SGB_JUMP, + SGB_CHR_TRN, + SGB_PCT_TRN, + SGB_ATTR_TRN, + SGB_ATTR_SET, + SGB_MASK_EN, + SGB_OBJ_TRN +}; + struct LR35902Core; struct mCoreSync; struct mAVStream;

@@ -75,6 +103,10 @@ uint32_t sramSize;

int sramDirty; int32_t sramDirtAge; bool sramMaskWriteback; + + int sgbBit; + int currentSgbBits; + uint8_t sgbPacket[16]; struct mCoreCallbacksList coreCallbacks; struct mAVStream* stream;
M include/mgba/internal/gb/mbc.hinclude/mgba/internal/gb/mbc.h

@@ -19,6 +19,7 @@ struct GBMemory;

void GBMBCInit(struct GB* gb); void GBMBCSwitchBank(struct GB* gb, int bank); void GBMBCSwitchBank0(struct GB* gb, int bank); +void GBMBCSwitchHalfBank(struct GB* gb, int half, int bank); void GBMBCSwitchSramBank(struct GB* gb, int bank); enum GBCam {
M include/mgba/internal/gb/memory.hinclude/mgba/internal/gb/memory.h

@@ -22,6 +22,8 @@

enum { GB_BASE_CART_BANK0 = 0x0000, GB_BASE_CART_BANK1 = 0x4000, + GB_BASE_CART_HALFBANK1 = 0x4000, + GB_BASE_CART_HALFBANK2 = 0x6000, GB_BASE_VRAM = 0x8000, GB_BASE_EXTERNAL_RAM = 0xA000, GB_BASE_WORKING_RAM_BANK0 = 0xC000,

@@ -46,6 +48,7 @@ };

enum { GB_SIZE_CART_BANK0 = 0x4000, + GB_SIZE_CART_HALFBANK = 0x2000, GB_SIZE_CART_MAX = 0x800000, GB_SIZE_VRAM = 0x4000, GB_SIZE_VRAM_BANK0 = 0x2000,

@@ -104,6 +107,11 @@ int mode;

int multicartStride; }; +struct GBMBC6State { + int currentBank1; + uint8_t* romBank1; +}; + struct GBMBC7State { enum GBMBC7MachineState state; uint16_t sr;

@@ -127,6 +135,7 @@ };

union GBMBCState { struct GBMBC1State mbc1; + struct GBMBC6State mbc6; struct GBMBC7State mbc7; struct GBPocketCamState pocketCam; struct GBTAMA5State tama5;
M include/mgba/internal/gb/overrides.hinclude/mgba/internal/gb/overrides.h

@@ -17,7 +17,7 @@ int headerCrc32;

enum GBModel model; enum GBMemoryBankControllerType mbc; - uint32_t gbColors[4]; + uint32_t gbColors[12]; }; struct Configuration;
M include/mgba/internal/gb/renderers/software.hinclude/mgba/internal/gb/renderers/software.h

@@ -23,6 +23,7 @@

uint8_t row[GB_VIDEO_HORIZONTAL_PIXELS + 8]; color_t palette[128]; + uint8_t lookup[64]; uint32_t* temporaryBuffer;

@@ -34,6 +35,14 @@ uint8_t currentWy;

GBRegisterLCDC lcdc; enum GBModel model; + + int sgbTransfer; + uint8_t sgbPacket[16]; + uint8_t sgbCommandHeader; + int sgbPacketId; + int sgbDataSets; + uint8_t sgbPartialDataSet[15]; + bool sgbBorders; }; void GBVideoSoftwareRendererCreate(struct GBVideoSoftwareRenderer*);
M include/mgba/internal/gb/renderers/tile-cache.hinclude/mgba/internal/gb/renderers/cache-set.h

@@ -11,10 +11,12 @@

CXX_GUARD_START struct GBVideo; -struct mTileCache; +struct mCacheSet; -void GBVideoTileCacheInit(struct mTileCache* cache); -void GBVideoTileCacheAssociate(struct mTileCache* cache, struct GBVideo* video); +void GBVideoCacheInit(struct mCacheSet* cache); +void GBVideoCacheAssociate(struct mCacheSet* cache, struct GBVideo* video); + +void GBVideoCacheWriteVideoRegister(struct mCacheSet* cache, uint16_t address, uint8_t value); CXX_GUARD_END
M include/mgba/internal/gb/serialize.hinclude/mgba/internal/gb/serialize.h

@@ -19,7 +19,7 @@

mLOG_DECLARE_CATEGORY(GB_STATE); /* Savestate format: - * 0x00000 - 0x00003: Version Magic (0x01000001) + * 0x00000 - 0x00003: Version Magic (0x01000002) * 0x00004 - 0x00007: ROM CRC32 * 0x00008: Game Boy model * 0x00009 - 0x0000B: Reserved (leave zero)

@@ -42,7 +42,7 @@ * | 0x00034 - 0x00035: Reserved (current instruction)

* | 0x00036 - 0x00037: Index address * | 0x00038: Bus value * | 0x00039: Execution state - * | 0x0003A - 0x0003B: IRQ vector + * | 0x0003A - 0x0003B: Reserved * | 0x0003C - 0x0003F: EI pending cycles * | 0x00040 - 0x00043: Reserved (DI pending cycles) * | 0x00044 - 0x00047: Flags

@@ -161,7 +161,22 @@ * 0x00380 - 0x003FE: HRAM

* 0x003FF: Interrupts enabled * 0x00400 - 0x043FF: VRAM * 0x04400 - 0x0C3FF: WRAM - * Total size: 0xC400 (50,176) bytes + * 0x0C400 - 0x0C77F: Reserved + * 0x0C780 - 0x117FF: Super Game Boy + * | 0x0C780 - 0x0C7D9: Current attributes + * | 0x0C7DA: Current command + * | 0x0C7DB: Current bit count + * | 0x0C7DC - 0x0C7DF: Flags + * | bits 0 - 1: Current P1 bits + * | bits 2 - 3: Current render mode + * | bits 4 - 31: Reserved (leave 0) + * | 0x0C7E0 - 0x0C7EF: Current packet + * | 0x0C7F0 - 0x0C7FF: Reserved + * | 0x0C800 - 0x0E7FF: Character VRAM + * | 0x0E800 - 0x0F7FF: Tile map VRAM + * | 0x0F800 - 0x107FF: Palette VRAM + * | 0x10800 - 0x117FF: Attribute file + * Total size: 0x11800 (71,680) bytes */ DECL_BITFIELD(GBSerializedAudioFlags, uint32_t);

@@ -238,6 +253,10 @@ DECL_BIT(GBSerializedMemoryFlags, Ime, 3);

DECL_BIT(GBSerializedMemoryFlags, IsHdma, 4); DECL_BITS(GBSerializedMemoryFlags, ActiveRtcReg, 5, 3); +DECL_BITFIELD(GBSerializedSGBFlags, uint32_t); +DECL_BITS(GBSerializedSGBFlags, P1Bits, 0, 2); +DECL_BITS(GBSerializedSGBFlags, RenderMode, 2, 2); + #pragma pack(push, 1) struct GBSerializedState { uint32_t versionMagic;

@@ -268,7 +287,7 @@ uint16_t index;

uint8_t bus; uint8_t executionState; - uint16_t irqVector; + uint16_t reserved; uint32_t eiPending; int32_t reservedDiPending;

@@ -366,6 +385,21 @@ uint8_t ie;

uint8_t vram[GB_SIZE_VRAM]; uint8_t wram[GB_SIZE_WORKING_RAM]; + + uint32_t reserved2[0xE0]; + + struct { + uint8_t attributes[90]; + uint8_t command; + uint8_t bits; + GBSerializedSGBFlags flags; + uint8_t packet[16]; + uint32_t reserved[4]; + uint8_t charRam[SGB_SIZE_CHAR_RAM]; + uint8_t mapRam[SGB_SIZE_MAP_RAM]; + uint8_t palRam[SGB_SIZE_PAL_RAM]; + uint8_t atfRam[SGB_SIZE_ATF_RAM]; + } sgb; }; #pragma pack(pop)
M include/mgba/internal/gb/video.hinclude/mgba/internal/gb/video.h

@@ -30,7 +30,12 @@ GB_VIDEO_MODE_1_LENGTH = 65664,

GB_VIDEO_TOTAL_LENGTH = 70224, GB_BASE_MAP = 0x1800, - GB_SIZE_MAP = 0x0400 + GB_SIZE_MAP = 0x0400, + + SGB_SIZE_CHAR_RAM = 0x2000, + SGB_SIZE_MAP_RAM = 0x1000, + SGB_SIZE_PAL_RAM = 0x1000, + SGB_SIZE_ATF_RAM = 0x1000 }; DECL_BITFIELD(GBObjAttributes, uint8_t);

@@ -41,6 +46,13 @@ DECL_BIT(GBObjAttributes, XFlip, 5);

DECL_BIT(GBObjAttributes, YFlip, 6); DECL_BIT(GBObjAttributes, Priority, 7); +DECL_BITFIELD(SGBBgAttributes, uint16_t); +DECL_BITS(SGBBgAttributes, Tile, 0, 10); +DECL_BITS(SGBBgAttributes, Palette, 10, 3); +DECL_BIT(SGBBgAttributes, Priority, 13); +DECL_BIT(SGBBgAttributes, XFlip, 14); +DECL_BIT(SGBBgAttributes, YFlip, 15); + struct GBObj { uint8_t y; uint8_t x;

@@ -53,12 +65,13 @@ struct GBObj obj[40];

uint8_t raw[160]; }; -struct mTileCache; +struct mCacheSet; struct GBVideoRenderer { - void (*init)(struct GBVideoRenderer* renderer, enum GBModel model); + void (*init)(struct GBVideoRenderer* renderer, enum GBModel model, bool borders); void (*deinit)(struct GBVideoRenderer* renderer); uint8_t (*writeVideoRegister)(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value); + void (*writeSGBPacket)(struct GBVideoRenderer* renderer, uint8_t* data); void (*writeVRAM)(struct GBVideoRenderer* renderer, uint16_t address); void (*writePalette)(struct GBVideoRenderer* renderer, int index, uint16_t value); void (*writeOAM)(struct GBVideoRenderer* renderer, uint16_t oam);

@@ -71,7 +84,14 @@ void (*putPixels)(struct GBVideoRenderer* renderer, size_t stride, const void* pixels);

uint8_t* vram; union GBOAM* oam; - struct mTileCache* cache; + struct mCacheSet* cache; + + uint8_t* sgbCharRam; + uint8_t* sgbMapRam; + uint8_t* sgbPalRam; + int sgbRenderMode; + uint8_t* sgbAttributes; + uint8_t* sgbAttributeFiles; bool disableBG; bool disableOBJ;

@@ -123,9 +143,12 @@ int bcpIndex;

bool bcpIncrement; int ocpIndex; bool ocpIncrement; + uint8_t sgbCommandHeader; - uint16_t dmgPalette[4]; + uint16_t dmgPalette[12]; uint16_t palette[64]; + + bool sgbBorders; int32_t frameCounter; int frameskip;

@@ -144,7 +167,10 @@ void GBVideoWriteLYC(struct GBVideo* video, uint8_t value);

void GBVideoWritePalette(struct GBVideo* video, uint16_t address, uint8_t value); void GBVideoSwitchBank(struct GBVideo* video, uint8_t value); +void GBVideoDisableCGB(struct GBVideo* video); void GBVideoSetPalette(struct GBVideo* video, unsigned index, uint32_t color); + +void GBVideoWriteSGBPacket(struct GBVideo* video, uint8_t* data); struct GBSerializedState; void GBVideoSerialize(const struct GBVideo* video, struct GBSerializedState* state);
M include/mgba/internal/gba/memory.hinclude/mgba/internal/gba/memory.h

@@ -64,10 +64,11 @@ SIZE_OAM = 0x00000400,

SIZE_CART0 = 0x02000000, SIZE_CART1 = 0x02000000, SIZE_CART2 = 0x02000000, - SIZE_CART_SRAM = 0x00010000, + SIZE_CART_SRAM = 0x00008000, SIZE_CART_FLASH512 = 0x00010000, SIZE_CART_FLASH1M = 0x00020000, - SIZE_CART_EEPROM = 0x00002000 + SIZE_CART_EEPROM = 0x00002000, + SIZE_CART_EEPROM512 = 0x00000200 }; enum {
M include/mgba/internal/gba/overrides.hinclude/mgba/internal/gba/overrides.h

@@ -28,7 +28,7 @@ void GBAOverrideSave(struct Configuration*, const struct GBACartridgeOverride* override);

struct GBA; void GBAOverrideApply(struct GBA*, const struct GBACartridgeOverride*); -void GBAOverrideApplyDefaults(struct GBA*); +void GBAOverrideApplyDefaults(struct GBA*, const struct Configuration*); CXX_GUARD_END
A include/mgba/internal/gba/renderers/cache-set.h

@@ -0,0 +1,22 @@

+/* Copyright (c) 2013-2016 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef GBA_CACHE_SET_H +#define GBA_CACHE_SET_H + +#include <mgba-util/common.h> + +CXX_GUARD_START + +struct GBAVideo; +struct mCacheSet; + +void GBAVideoCacheInit(struct mCacheSet* cache); +void GBAVideoCacheAssociate(struct mCacheSet* cache, struct GBAVideo* video); +void GBAVideoCacheWriteVideoRegister(struct mCacheSet* cache, uint32_t address, uint16_t value); + +CXX_GUARD_END + +#endif
D include/mgba/internal/gba/renderers/tile-cache.h

@@ -1,21 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef GBA_TILE_CACHE_H -#define GBA_TILE_CACHE_H - -#include <mgba-util/common.h> - -CXX_GUARD_START - -struct GBAVideo; -struct mTileCache; - -void GBAVideoTileCacheInit(struct mTileCache* cache); -void GBAVideoTileCacheAssociate(struct mTileCache* cache, struct GBAVideo* video); - -CXX_GUARD_END - -#endif
M include/mgba/internal/gba/renderers/video-software.hinclude/mgba/internal/gba/renderers/video-software.h

@@ -11,6 +11,7 @@

CXX_GUARD_START #include <mgba/core/core.h> +#include <mgba/internal/gba/io.h> #include <mgba/internal/gba/video.h> struct GBAVideoSoftwareSprite {

@@ -156,6 +157,14 @@

int oamDirty; int oamMax; struct GBAVideoSoftwareSprite sprites[128]; + + uint32_t scanlineDirty[5]; + uint16_t nextIo[REG_SOUND1CNT_LO]; + struct ScanlineCache { + uint16_t io[REG_SOUND1CNT_LO]; + int32_t scale[2][2]; + } cache[VIDEO_VERTICAL_PIXELS]; + int nextY; int start; int end;
M include/mgba/internal/gba/video.hinclude/mgba/internal/gba/video.h

@@ -164,7 +164,7 @@

uint16_t* palette; uint16_t* vram; union GBAOAM* oam; - struct mTileCache* cache; + struct mCacheSet* cache; bool disableBG[4]; bool disableOBJ;
M include/mgba/internal/lr35902/lr35902.hinclude/mgba/internal/lr35902/lr35902.h

@@ -66,6 +66,7 @@ struct LR35902InterruptHandler {

void (*reset)(struct LR35902Core* cpu); void (*processEvents)(struct LR35902Core* cpu); void (*setInterrupts)(struct LR35902Core* cpu, bool enable); + uint16_t (*irqVector)(struct LR35902Core* cpu); void (*halt)(struct LR35902Core* cpu); void (*stop)(struct LR35902Core* cpu);

@@ -118,7 +119,6 @@ bool condition;

LR35902Instruction instruction; bool irqPending; - uint16_t irqVector; struct LR35902Memory memory; struct LR35902InterruptHandler irqh;

@@ -136,7 +136,7 @@ void LR35902HotplugAttach(struct LR35902Core* cpu, size_t slot);

void LR35902HotplugDetach(struct LR35902Core* cpu, size_t slot); void LR35902Reset(struct LR35902Core* cpu); -void LR35902RaiseIRQ(struct LR35902Core* cpu, uint8_t vector); +void LR35902RaiseIRQ(struct LR35902Core* cpu); void LR35902Tick(struct LR35902Core* cpu); void LR35902Run(struct LR35902Core* cpu);
M res/patrons.txtres/patrons.txt

@@ -2,8 +2,8 @@ Jaime J. Denizard

Fog Reilly Grant Philip Horton -Jordan Jorgensen mars +pr1ntf Rohit Nirmal Rhys Powell rootfather
M src/arm/isa-arm.csrc/arm/isa-arm.c

@@ -663,8 +663,9 @@ cpu->cpsr.packed = (cpu->cpsr.packed & ~PSR_PRIV_MASK) | (operand & PSR_PRIV_MASK);

} _ARMReadCPSR(cpu); if (cpu->executionMode == MODE_THUMB) { - LOAD_16(cpu->prefetch[0], (cpu->gprs[ARM_PC] - WORD_SIZE_THUMB) & cpu->memory.activeMask, cpu->memory.activeRegion); - LOAD_16(cpu->prefetch[1], cpu->gprs[ARM_PC] & cpu->memory.activeMask, cpu->memory.activeRegion); + cpu->prefetch[0] = 0x46C0; // nop + cpu->prefetch[1] &= 0xFFFF; + cpu->gprs[ARM_PC] += WORD_SIZE_THUMB; } else { LOAD_32(cpu->prefetch[0], (cpu->gprs[ARM_PC] - WORD_SIZE_ARM) & cpu->memory.activeMask, cpu->memory.activeRegion); LOAD_32(cpu->prefetch[1], cpu->gprs[ARM_PC] & cpu->memory.activeMask, cpu->memory.activeRegion);

@@ -704,8 +705,9 @@ cpu->cpsr.packed = (cpu->cpsr.packed & ~PSR_PRIV_MASK) | (operand & PSR_PRIV_MASK);

} _ARMReadCPSR(cpu); if (cpu->executionMode == MODE_THUMB) { - LOAD_16(cpu->prefetch[0], (cpu->gprs[ARM_PC] - WORD_SIZE_THUMB) & cpu->memory.activeMask, cpu->memory.activeRegion); - LOAD_16(cpu->prefetch[1], cpu->gprs[ARM_PC] & cpu->memory.activeMask, cpu->memory.activeRegion); + cpu->prefetch[0] = 0x46C0; // nop + cpu->prefetch[1] &= 0xFFFF; + cpu->gprs[ARM_PC] += WORD_SIZE_THUMB; } else { LOAD_32(cpu->prefetch[0], (cpu->gprs[ARM_PC] - WORD_SIZE_ARM) & cpu->memory.activeMask, cpu->memory.activeRegion); LOAD_32(cpu->prefetch[1], cpu->gprs[ARM_PC] & cpu->memory.activeMask, cpu->memory.activeRegion);
A src/core/cache-set.c

@@ -0,0 +1,62 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <mgba/core/cache-set.h> + +DEFINE_VECTOR(mMapCacheSet, struct mMapCache); +DEFINE_VECTOR(mTileCacheSet, struct mTileCache); + +void mCacheSetInit(struct mCacheSet* cache, size_t nMaps, size_t nTiles) { + mMapCacheSetInit(&cache->maps, nMaps); + mMapCacheSetResize(&cache->maps, nMaps); + mTileCacheSetInit(&cache->tiles, nTiles); + mTileCacheSetResize(&cache->tiles, nTiles); + + size_t i; + for (i = 0; i < nMaps; ++i) { + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, i)); + } + for (i = 0; i < nTiles; ++i) { + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, i)); + } +} + +void mCacheSetDeinit(struct mCacheSet* cache) { + size_t i; + for (i = 0; i < mMapCacheSetSize(&cache->maps); ++i) { + mMapCacheDeinit(mMapCacheSetGetPointer(&cache->maps, i)); + } + for (i = 0; i < mTileCacheSetSize(&cache->tiles); ++i) { + mTileCacheDeinit(mTileCacheSetGetPointer(&cache->tiles, i)); + } +} + +void mCacheSetAssignVRAM(struct mCacheSet* cache, void* vram) { + size_t i; + for (i = 0; i < mMapCacheSetSize(&cache->maps); ++i) { + mMapCacheSetGetPointer(&cache->maps, i)->vram = vram; + } + for (i = 0; i < mTileCacheSetSize(&cache->tiles); ++i) { + struct mTileCache* tileCache = mTileCacheSetGetPointer(&cache->tiles, i); + tileCache->vram = (void*) ((uintptr_t) vram + tileCache->tileBase); + } +} + +void mCacheSetWriteVRAM(struct mCacheSet* cache, uint32_t address) { + size_t i; + for (i = 0; i < mMapCacheSetSize(&cache->maps); ++i) { + mMapCacheWriteVRAM(mMapCacheSetGetPointer(&cache->maps, i), address); + } + for (i = 0; i < mTileCacheSetSize(&cache->tiles); ++i) { + mTileCacheWriteVRAM(mTileCacheSetGetPointer(&cache->tiles, i), address); + } +} + +void mCacheSetWritePalette(struct mCacheSet* cache, uint32_t entry, color_t color) { + size_t i; + for (i = 0; i < mTileCacheSetSize(&cache->tiles); ++i) { + mTileCacheWritePalette(mTileCacheSetGetPointer(&cache->tiles, i), entry, color); + } +}
M src/core/cheats.csrc/core/cheats.c

@@ -256,35 +256,23 @@ void mCheatRefresh(struct mCheatDevice* device, struct mCheatSet* cheats) {

if (!cheats->enabled) { return; } - bool condition = true; - int conditionRemaining = 0; - int negativeConditionRemaining = 0; cheats->refresh(cheats, device); + size_t elseLoc = 0; + size_t endLoc = 0; size_t nCodes = mCheatListSize(&cheats->list); size_t i; for (i = 0; i < nCodes; ++i) { - if (conditionRemaining > 0) { - --conditionRemaining; - if (!condition) { - continue; - } - } else if (negativeConditionRemaining > 0) { - conditionRemaining = negativeConditionRemaining - 1; - negativeConditionRemaining = 0; - condition = !condition; - if (!condition) { - continue; - } - } else { - condition = true; - } struct mCheat* cheat = mCheatListGetPointer(&cheats->list, i); int32_t value = 0; int32_t operand = cheat->operand; uint32_t operationsRemaining = cheat->repeat; uint32_t address = cheat->address; bool performAssignment = false; + bool condition = true; + int conditionRemaining = 0; + int negativeConditionRemaining = 0; + for (; operationsRemaining; --operationsRemaining) { switch (cheat->type) { case CHEAT_ASSIGN:

@@ -312,46 +300,55 @@ case CHEAT_IF_EQ:

condition = _readMem(device->p, address, cheat->width) == operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_NE: condition = _readMem(device->p, address, cheat->width) != operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_LT: condition = _readMem(device->p, address, cheat->width) < operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_GT: condition = _readMem(device->p, address, cheat->width) > operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_ULT: condition = (uint32_t) _readMem(device->p, address, cheat->width) < (uint32_t) operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_UGT: condition = (uint32_t) _readMem(device->p, address, cheat->width) > (uint32_t) operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_AND: condition = _readMem(device->p, address, cheat->width) & operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_LAND: condition = _readMem(device->p, address, cheat->width) && operand; conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; case CHEAT_IF_NAND: condition = !(_readMem(device->p, address, cheat->width) & operand); conditionRemaining = cheat->repeat; negativeConditionRemaining = cheat->negativeRepeat; + operationsRemaining = 1; break; }

@@ -361,6 +358,18 @@ }

address += cheat->addressOffset; operand += cheat->operandOffset; + } + + + if (elseLoc && i == elseLoc) { + i = endLoc; + endLoc = 0; + } + if (conditionRemaining > 0 && !condition) { + i += conditionRemaining; + } else if (negativeConditionRemaining > 0) { + elseLoc = i + conditionRemaining; + endLoc = elseLoc + negativeConditionRemaining; } } }
A src/core/map-cache.c

@@ -0,0 +1,205 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <mgba/core/map-cache.h> + +#include <mgba-util/memory.h> + +void mMapCacheInit(struct mMapCache* cache) { + // TODO: Reconfigurable cache for space savings + cache->cache = NULL; + cache->config = mMapCacheConfigurationFillShouldStore(0); + cache->status = NULL; +} + +static void _freeCache(struct mMapCache* cache) { + size_t tiles = (1 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig)) * (1 << mMapCacheSystemInfoGetTilesHigh(cache->sysConfig)); + mappedMemoryFree(cache->cache, 8 * 8 * sizeof(color_t) * tiles); + mappedMemoryFree(cache->status, tiles * sizeof(*cache->status)); + cache->cache = NULL; + cache->status = NULL; +} + +static void _redoCacheSize(struct mMapCache* cache) { + if (!mMapCacheConfigurationIsShouldStore(cache->config)) { + return; + } + + size_t tiles = (1 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig)) * (1 << mMapCacheSystemInfoGetTilesHigh(cache->sysConfig)); + cache->cache = anonymousMemoryMap(8 * 8 * sizeof(color_t) * tiles); + cache->status = anonymousMemoryMap(tiles * sizeof(*cache->status)); +} + +void mMapCacheConfigure(struct mMapCache* cache, mMapCacheConfiguration config) { + if (config == cache->config) { + return; + } + _freeCache(cache); + cache->config = config; + _redoCacheSize(cache); +} + +void mMapCacheConfigureSystem(struct mMapCache* cache, mMapCacheSystemInfo config) { + if (config == cache->sysConfig) { + return; + } + _freeCache(cache); + cache->sysConfig = config; + _redoCacheSize(cache); + + size_t mapSize = (1 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig)) * (1 << mMapCacheSystemInfoGetTilesHigh(cache->sysConfig)); + cache->mapSize = mapSize << mMapCacheSystemInfoGetMapAlign(cache->sysConfig); +} + +void mMapCacheConfigureMap(struct mMapCache* cache, uint32_t mapStart) { + size_t tiles = (1 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig)) * (1 << mMapCacheSystemInfoGetTilesHigh(cache->sysConfig)); + memset(cache->status, 0, tiles * sizeof(*cache->status)); + cache->mapStart = mapStart; +} + +void mMapCacheDeinit(struct mMapCache* cache) { + _freeCache(cache); +} + +void mMapCacheWriteVRAM(struct mMapCache* cache, uint32_t address) { + if (address >= cache->mapStart && address < cache->mapStart + cache->mapSize) { + address -= cache->mapStart; + struct mMapCacheEntry* status = &cache->status[address >> mMapCacheSystemInfoGetMapAlign(cache->sysConfig)]; + ++status->vramVersion; + status->flags = mMapCacheEntryFlagsClearVramClean(status->flags); + status->tileStatus[mMapCacheEntryFlagsGetPaletteId(status->flags)].vramClean = 0; + } +} + +static inline void _cleanTile(struct mMapCache* cache, const color_t* tile, color_t* mapOut, const struct mMapCacheEntry* status) { + size_t stride = 8 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + int x, y; + switch (mMapCacheEntryFlagsGetMirror(status->flags)) { + case 0: + memcpy(mapOut, tile, sizeof(color_t) * 8); + memcpy(&mapOut[stride], &tile[0x08], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 2], &tile[0x10], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 3], &tile[0x18], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 4], &tile[0x20], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 5], &tile[0x28], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 6], &tile[0x30], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 7], &tile[0x38], sizeof(color_t) * 8); + break; + case 1: + for (y = 0; y < 8; ++y) { + for (x = 0; x < 8; ++x) { + mapOut[y * stride + (7 - x)] = tile[y * 8 + x]; + } + } + break; + case 2: + memcpy(&mapOut[stride * 7], tile, sizeof(color_t) * 8); + memcpy(&mapOut[stride * 6], &tile[0x08], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 5], &tile[0x10], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 4], &tile[0x18], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 3], &tile[0x20], sizeof(color_t) * 8); + memcpy(&mapOut[stride * 2], &tile[0x28], sizeof(color_t) * 8); + memcpy(&mapOut[stride], &tile[0x30], sizeof(color_t) * 8); + memcpy(mapOut, &tile[0x38], sizeof(color_t) * 8); + break; + case 3: + for (y = 0; y < 8; ++y) { + for (x = 0; x < 8; ++x) { + mapOut[(7 - y) * stride + (7 - x)] = tile[y * 8 + x]; + } + } + break; + } +} + +uint32_t mMapCacheTileId(struct mMapCache* cache, unsigned x, unsigned y) { + int tilesWide = mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + int tilesHigh = mMapCacheSystemInfoGetTilesHigh(cache->sysConfig); + int stride = 1 << mMapCacheSystemInfoGetMacroTileSize(cache->sysConfig); + x &= (1 << tilesWide) - 1; + y &= (1 << tilesHigh) - 1; + unsigned xMajor = x & ~(stride - 1); + unsigned yMajor = y >> mMapCacheSystemInfoGetMacroTileSize(cache->sysConfig); + x &= stride - 1; + y &= stride - 1; + yMajor <<= tilesWide; + y += xMajor + yMajor; + return stride * y + x; +} + +void mMapCacheCleanTile(struct mMapCache* cache, struct mMapCacheEntry* entry, unsigned x, unsigned y) { + size_t location = mMapCacheTileId(cache, x, y); + struct mMapCacheEntry* status = &cache->status[location]; + const color_t* tile = NULL; + if (!mMapCacheEntryFlagsIsVramClean(status->flags)) { + status->flags = mMapCacheEntryFlagsFillVramClean(status->flags); + cache->mapParser(cache, status, &cache->vram[cache->mapStart + (location << mMapCacheSystemInfoGetMapAlign(cache->sysConfig))]); + } + unsigned tileId = status->tileId + cache->tileStart; + if (tileId >= mTileCacheSystemInfoGetMaxTiles(cache->tileCache->sysConfig)) { + tileId = 0; + } + tile = mTileCacheGetTileIfDirty(cache->tileCache, status->tileStatus, tileId, mMapCacheEntryFlagsGetPaletteId(status->flags)); + if (!tile) { + if (mMapCacheEntryFlagsIsVramClean(status->flags) && memcmp(status, &entry[location], sizeof(*entry)) == 0) { + return; + } + tile = mTileCacheGetTile(cache->tileCache, tileId, mMapCacheEntryFlagsGetPaletteId(status->flags)); + } + + size_t stride = 8 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + color_t* mapOut = &cache->cache[(y * stride + x) * 8]; + _cleanTile(cache, tile, mapOut, status); + entry[location] = *status; +} + +bool mMapCacheCheckTile(struct mMapCache* cache, const struct mMapCacheEntry* entry, unsigned x, unsigned y) { + size_t location = mMapCacheTileId(cache, x, y); + struct mMapCacheEntry* status = &cache->status[location]; + int paletteId = mMapCacheEntryFlagsGetPaletteId(status->flags); + const color_t* tile = NULL; + if (mMapCacheEntryFlagsIsVramClean(status->flags) && memcmp(status, &entry[location], sizeof(*entry)) == 0) { + unsigned tileId = status->tileId + cache->tileStart; + if (tileId >= mTileCacheSystemInfoGetMaxTiles(cache->tileCache->sysConfig)) { + tileId = 0; + } + tile = mTileCacheGetTileIfDirty(cache->tileCache, &status->tileStatus[paletteId], tileId, mMapCacheEntryFlagsGetPaletteId(status->flags)); + return !tile; + } + return false; +} + +void mMapCacheCleanRow(struct mMapCache* cache, unsigned y) { + // TODO: Cache + int tilesWide = 1 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + int macroTile = (1 << mMapCacheSystemInfoGetMacroTileSize(cache->sysConfig)) - 1; + size_t stride = 8 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + int location = 0; + int x; + for (x = 0; x < tilesWide; ++x) { + if (!(x & macroTile)) { + location = mMapCacheTileId(cache, x, y); + } else { + ++location; + } + struct mMapCacheEntry* status = &cache->status[location]; + if (!mMapCacheEntryFlagsIsVramClean(status->flags)) { + status->flags = mMapCacheEntryFlagsFillVramClean(status->flags); + cache->mapParser(cache, status, &cache->vram[cache->mapStart + (location << mMapCacheSystemInfoGetMapAlign(cache->sysConfig))]); + } + unsigned tileId = status->tileId + cache->tileStart; + if (tileId >= mTileCacheSystemInfoGetMaxTiles(cache->tileCache->sysConfig)) { + tileId = 0; + } + const color_t* tile = mTileCacheGetTile(cache->tileCache, tileId, mMapCacheEntryFlagsGetPaletteId(status->flags)); + color_t* mapOut = &cache->cache[(y * stride + x) * 8]; + _cleanTile(cache, tile, mapOut, status); + } +} + +const color_t* mMapCacheGetRow(struct mMapCache* cache, unsigned y) { + size_t stride = 8 << mMapCacheSystemInfoGetTilesWide(cache->sysConfig); + return &cache->cache[y * stride]; +}
M src/core/serialize.csrc/core/serialize.c

@@ -409,11 +409,8 @@ return _loadPNGState(core, vf, extdata);

} #endif ssize_t stateSize = core->stateSize(core); + void* state = anonymousMemoryMap(stateSize); vf->seek(vf, 0, SEEK_SET); - if (vf->size(vf) < stateSize) { - return false; - } - void* state = anonymousMemoryMap(stateSize); if (vf->read(vf, state, stateSize) != stateSize) { mappedMemoryFree(state, stateSize); return 0;
M src/core/test/core.csrc/core/test/core.c

@@ -34,9 +34,3 @@ cmocka_unit_test(findNullPath),

#endif cmocka_unit_test(findNullVF), cmocka_unit_test(findEmpty)) - -int TestRunCore(void) { - int failures = 0; - failures += M_TEST_SUITE_RUN(mCore); - return failures; -}
M src/core/thread.csrc/core/thread.c

@@ -158,7 +158,6 @@ .context = threadContext

}; core->addCoreCallbacks(core, &callbacks); core->setSync(core, &threadContext->impl->sync); - core->reset(core); struct mLogFilter filter; if (!threadContext->logger.d.filter) {

@@ -168,12 +167,13 @@ mLogFilterLoad(threadContext->logger.d.filter, &core->config);

} mCoreThreadRewindParamsChanged(threadContext); - - _changeState(threadContext->impl, THREAD_RUNNING, true); - if (threadContext->startCallback) { threadContext->startCallback(threadContext); } + + core->reset(core); + _changeState(threadContext->impl, THREAD_RUNNING, true); + if (threadContext->resetCallback) { threadContext->resetCallback(threadContext); }

@@ -195,38 +195,58 @@ core->runLoop(core);

} } - int resetScheduled = 0; + enum mCoreThreadState deferred = THREAD_RUNNING; MutexLock(&impl->stateMutex); while (impl->state > THREAD_MAX_RUNNING && impl->state < THREAD_EXITING) { - if (impl->state == THREAD_PAUSING) { - impl->state = THREAD_PAUSED; - ConditionWake(&impl->stateCond); - } + deferred = impl->state; + if (impl->state == THREAD_INTERRUPTING) { impl->state = THREAD_INTERRUPTED; ConditionWake(&impl->stateCond); } - if (impl->state == THREAD_RUN_ON) { - if (threadContext->run) { - threadContext->run(threadContext); - } - impl->state = impl->savedState; - ConditionWake(&impl->stateCond); + + if (impl->state == THREAD_PAUSING) { + impl->state = THREAD_PAUSED; } if (impl->state == THREAD_RESETING) { impl->state = THREAD_RUNNING; - resetScheduled = 1; } - while (impl->state == THREAD_PAUSED || impl->state == THREAD_INTERRUPTED || impl->state == THREAD_WAITING) { + + if (deferred >= THREAD_MIN_DEFERRED && deferred <= THREAD_MAX_DEFERRED) { + break; + } + + deferred = impl->state; + while (impl->state >= THREAD_WAITING && impl->state <= THREAD_MAX_WAITING) { ConditionWait(&impl->stateCond, &impl->stateMutex); } } MutexUnlock(&impl->stateMutex); - if (resetScheduled) { + switch (deferred) { + case THREAD_PAUSING: + if (threadContext->pauseCallback) { + threadContext->pauseCallback(threadContext); + } + break; + case THREAD_PAUSED: + if (threadContext->unpauseCallback) { + threadContext->unpauseCallback(threadContext); + } + break; + case THREAD_RUN_ON: + if (threadContext->run) { + threadContext->run(threadContext); + } + threadContext->impl->state = threadContext->impl->savedState; + break; + case THREAD_RESETING: core->reset(core); if (threadContext->resetCallback) { threadContext->resetCallback(threadContext); } + break; + default: + break; } }
M src/core/tile-cache.csrc/core/tile-cache.c

@@ -12,60 +12,42 @@ // TODO: Reconfigurable cache for space savings

cache->cache = NULL; cache->config = mTileCacheConfigurationFillShouldStore(0); cache->status = NULL; - cache->activePalette = 0; - memset(cache->globalPaletteVersion, 0, sizeof(cache->globalPaletteVersion)); + cache->globalPaletteVersion = NULL; + cache->palette = NULL; } static void _freeCache(struct mTileCache* cache) { - unsigned count0; - count0 = 1 << mTileCacheSystemInfoGetPalette0Count(cache->sysConfig); - unsigned count1; - count1 = 1 << mTileCacheSystemInfoGetPalette1Count(cache->sysConfig); + unsigned size = 1 << mTileCacheSystemInfoGetPaletteCount(cache->sysConfig); unsigned tiles = mTileCacheSystemInfoGetMaxTiles(cache->sysConfig); - unsigned size = count0 > count1 ? count0 : count1; if (cache->cache) { - mappedMemoryFree(cache->cache, 8 * 8 * 2 * tiles * size); + mappedMemoryFree(cache->cache, 8 * 8 * sizeof(color_t) * tiles * size); cache->cache = NULL; } if (cache->status) { mappedMemoryFree(cache->status, tiles * size * sizeof(*cache->status)); cache->status = NULL; } - free(cache->globalPaletteVersion[0]); - free(cache->globalPaletteVersion[1]); - memset(cache->globalPaletteVersion, 0, sizeof(cache->globalPaletteVersion)); + free(cache->globalPaletteVersion); + cache->globalPaletteVersion = NULL; + free(cache->palette); + cache->palette = NULL; } static void _redoCacheSize(struct mTileCache* cache) { if (!mTileCacheConfigurationIsShouldStore(cache->config)) { return; } - unsigned count0 = mTileCacheSystemInfoGetPalette0Count(cache->sysConfig); - unsigned bpp0 = mTileCacheSystemInfoGetPalette0BPP(cache->sysConfig); - bpp0 = 1 << (1 << bpp0); - if (count0) { - count0 = 1 << count0; - } - unsigned count1 = mTileCacheSystemInfoGetPalette1Count(cache->sysConfig); - unsigned bpp1 = mTileCacheSystemInfoGetPalette1BPP(cache->sysConfig); - bpp1 = 1 << (1 << bpp1); - if (count1) { - count1 = 1 << count1; - } - unsigned size = count0 > count1 ? count0 : count1; - if (!size) { - return; - } + unsigned size = mTileCacheSystemInfoGetPaletteCount(cache->sysConfig); + unsigned bpp = mTileCacheSystemInfoGetPaletteBPP(cache->sysConfig); + cache->bpp = bpp; + bpp = 1 << (1 << bpp); + size = 1 << size; cache->entriesPerTile = size; unsigned tiles = mTileCacheSystemInfoGetMaxTiles(cache->sysConfig); - cache->cache = anonymousMemoryMap(8 * 8 * 2 * tiles * size); + cache->cache = anonymousMemoryMap(8 * 8 * sizeof(color_t) * tiles * size); cache->status = anonymousMemoryMap(tiles * size * sizeof(*cache->status)); - if (count0) { - cache->globalPaletteVersion[0] = malloc(count0 * bpp0 * sizeof(*cache->globalPaletteVersion[0])); - } - if (count1) { - cache->globalPaletteVersion[1] = malloc(count1 * bpp1 * sizeof(*cache->globalPaletteVersion[1])); - } + cache->globalPaletteVersion = malloc(size * sizeof(*cache->globalPaletteVersion)); + cache->palette = malloc(size * bpp * sizeof(*cache->palette)); } void mTileCacheConfigure(struct mTileCache* cache, mTileCacheConfiguration config) {

@@ -74,9 +56,11 @@ cache->config = config;

_redoCacheSize(cache); } -void mTileCacheConfigureSystem(struct mTileCache* cache, mTileCacheSystemInfo config) { +void mTileCacheConfigureSystem(struct mTileCache* cache, mTileCacheSystemInfo config, uint32_t tileBase, uint32_t paletteBase) { _freeCache(cache); cache->sysConfig = config; + cache->tileBase = tileBase; + cache->paletteBase = paletteBase; _redoCacheSize(cache); }

@@ -85,40 +69,41 @@ _freeCache(cache);

} void mTileCacheWriteVRAM(struct mTileCache* cache, uint32_t address) { + if (address < cache->tileBase) { + return; + } + address -= cache->tileBase; unsigned bpp = cache->bpp + 3; unsigned count = cache->entriesPerTile; + address >>= bpp; + if (address >= mTileCacheSystemInfoGetMaxTiles(cache->sysConfig)) { + return; + } size_t i; for (i = 0; i < count; ++i) { - cache->status[(address >> bpp) * count + i].vramClean = 0; - ++cache->status[(address >> bpp) * count + i].vramVersion; + cache->status[address * count + i].vramClean = 0; + ++cache->status[address * count + i].vramVersion; } } -void mTileCacheWritePalette(struct mTileCache* cache, uint32_t address) { - if (cache->globalPaletteVersion[0]) { - ++cache->globalPaletteVersion[0][address >> 1]; +void mTileCacheWritePalette(struct mTileCache* cache, uint32_t entry, color_t color) { + if (entry < cache->paletteBase) { + return; } - if (cache->globalPaletteVersion[1]) { - ++cache->globalPaletteVersion[1][address >> 1]; - } -} - -void mTileCacheSetPalette(struct mTileCache* cache, int palette) { - cache->activePalette = palette; - if (palette == 0) { - cache->bpp = mTileCacheSystemInfoGetPalette0BPP(cache->sysConfig); - cache->count = 1 << mTileCacheSystemInfoGetPalette0Count(cache->sysConfig); - } else { - cache->bpp = mTileCacheSystemInfoGetPalette1BPP(cache->sysConfig); - cache->count = 1 << mTileCacheSystemInfoGetPalette1Count(cache->sysConfig); + entry -= cache->paletteBase; + unsigned maxEntry = (1 << (1 << cache->bpp)) * cache->entriesPerTile; + if (entry >= maxEntry) { + return; } - cache->entries = 1 << (1 << cache->bpp); + cache->palette[entry] = color; + entry >>= (1 << mTileCacheSystemInfoGetPaletteBPP(cache->sysConfig)); + ++cache->globalPaletteVersion[entry]; } -static void _regenerateTile4(struct mTileCache* cache, uint16_t* tile, unsigned tileId, unsigned paletteId) { +static void _regenerateTile4(struct mTileCache* cache, color_t* tile, unsigned tileId, unsigned paletteId) { uint8_t* start = (uint8_t*) &cache->vram[tileId << 3]; paletteId <<= 2; - uint16_t* palette = &cache->palette[paletteId]; + color_t* palette = &cache->palette[paletteId]; int i; for (i = 0; i < 8; ++i) { uint8_t tileDataLower = start[0];

@@ -126,108 +111,114 @@ uint8_t tileDataUpper = start[1];

start += 2; int pixel; pixel = ((tileDataUpper & 128) >> 6) | ((tileDataLower & 128) >> 7); - tile[0] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[0] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 64) >> 5) | ((tileDataLower & 64) >> 6); - tile[1] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[1] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 32) >> 4) | ((tileDataLower & 32) >> 5); - tile[2] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[2] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 16) >> 3) | ((tileDataLower & 16) >> 4); - tile[3] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[3] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 8) >> 2) | ((tileDataLower & 8) >> 3); - tile[4] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[4] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 4) >> 1) | ((tileDataLower & 4) >> 2); - tile[5] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[5] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (tileDataUpper & 2) | ((tileDataLower & 2) >> 1); - tile[6] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[6] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = ((tileDataUpper & 1) << 1) | (tileDataLower & 1); - tile[7] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[7] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; tile += 8; } } -static void _regenerateTile16(struct mTileCache* cache, uint16_t* tile, unsigned tileId, unsigned paletteId) { +static void _regenerateTile16(struct mTileCache* cache, color_t* tile, unsigned tileId, unsigned paletteId) { uint32_t* start = (uint32_t*) &cache->vram[tileId << 4]; paletteId <<= 4; - uint16_t* palette = &cache->palette[paletteId]; + color_t* palette = &cache->palette[paletteId]; int i; for (i = 0; i < 8; ++i) { uint32_t line = *start; ++start; int pixel; pixel = line & 0xF; - tile[0] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[0] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 4) & 0xF; - tile[1] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[1] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 8) & 0xF; - tile[2] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[2] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 12) & 0xF; - tile[3] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[3] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 16) & 0xF; - tile[4] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[4] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 20) & 0xF; - tile[5] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[5] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 24) & 0xF; - tile[6] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[6] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 28) & 0xF; - tile[7] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[7] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; tile += 8; } } -static void _regenerateTile256(struct mTileCache* cache, uint16_t* tile, unsigned tileId, unsigned paletteId) { +static void _regenerateTile256(struct mTileCache* cache, color_t* tile, unsigned tileId, unsigned paletteId) { uint32_t* start = (uint32_t*) &cache->vram[tileId << 5]; paletteId <<= 8; - uint16_t* palette = &cache->palette[paletteId]; + color_t* palette = &cache->palette[paletteId]; int i; for (i = 0; i < 8; ++i) { uint32_t line = *start; ++start; int pixel; pixel = line & 0xFF; - tile[0] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[0] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 8) & 0xFF; - tile[1] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[1] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 16) & 0xFF; - tile[2] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[2] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 24) & 0xFF; - tile[3] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[3] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; line = *start; ++start; pixel = line & 0xFF; - tile[4] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[4] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 8) & 0xFF; - tile[5] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[5] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 16) & 0xFF; - tile[6] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[6] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; pixel = (line >> 24) & 0xFF; - tile[7] = pixel ? palette[pixel] | 0x8000 : palette[pixel] & 0x7FFF; + tile[7] = pixel ? palette[pixel] | 0xFF000000 : palette[pixel]; tile += 8; } } -static inline uint16_t* _tileLookup(struct mTileCache* cache, unsigned tileId, unsigned paletteId) { +static inline color_t* _tileLookup(struct mTileCache* cache, unsigned tileId, unsigned paletteId) { if (mTileCacheConfigurationIsShouldStore(cache->config)) { unsigned tiles = mTileCacheSystemInfoGetMaxTiles(cache->sysConfig); +#ifndef NDEBUG + if (tileId >= tiles) { + abort(); + } + if (paletteId >= 1 << mTileCacheSystemInfoGetPaletteCount(cache->sysConfig)) { + abort(); + } +#endif return &cache->cache[(tileId + paletteId * tiles) << 6]; } else { return cache->temporaryTile; } } -const uint16_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId) { - unsigned cPaletteId = cache->activePalette; +const color_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId) { unsigned count = cache->entriesPerTile; unsigned bpp = cache->bpp; struct mTileCacheEntry* status = &cache->status[tileId * count + paletteId]; struct mTileCacheEntry desiredStatus = { - .paletteVersion = cache->globalPaletteVersion[cPaletteId][paletteId], + .paletteVersion = cache->globalPaletteVersion[paletteId], .vramVersion = status->vramVersion, .vramClean = 1, - .paletteId = paletteId, - .activePalette = cPaletteId + .paletteId = paletteId }; - uint16_t* tile = _tileLookup(cache, tileId, paletteId); + color_t* tile = _tileLookup(cache, tileId, paletteId); if (!mTileCacheConfigurationIsShouldStore(cache->config) || memcmp(status, &desiredStatus, sizeof(*status))) { switch (bpp) { case 0:

@@ -247,19 +238,17 @@ }

return tile; } -const uint16_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId) { - unsigned cPaletteId = cache->activePalette; +const color_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId) { unsigned count = cache->entriesPerTile; unsigned bpp = cache->bpp; struct mTileCacheEntry* status = &cache->status[tileId * count + paletteId]; struct mTileCacheEntry desiredStatus = { - .paletteVersion = cache->globalPaletteVersion[cPaletteId][paletteId], + .paletteVersion = cache->globalPaletteVersion[paletteId], .vramVersion = status->vramVersion, .vramClean = 1, - .paletteId = paletteId, - .activePalette = cPaletteId + .paletteId = paletteId }; - uint16_t* tile = NULL; + color_t* tile = NULL; if (memcmp(status, &desiredStatus, sizeof(*status))) { tile = _tileLookup(cache, tileId, paletteId); switch (bpp) {

@@ -284,26 +273,10 @@ }

return tile; } -const uint8_t* mTileCacheGetRawTile(struct mTileCache* cache, unsigned tileId) { - unsigned bpp = cache->bpp; - switch (bpp) { - case 0: - return NULL; - default: - return (uint8_t*) &cache->vram[tileId << (2 + bpp)]; - } +const color_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId) { + return &cache->palette[paletteId << (1 << cache->bpp)]; } -const uint16_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId) { - unsigned bpp = cache->bpp; - switch (bpp) { - default: - return NULL; - case 1: - return &cache->palette[paletteId << 2]; - case 2: - return &cache->palette[paletteId << 4]; - case 3: - return &cache->palette[paletteId << 8]; - } +const uint16_t* mTileCacheGetVRAM(struct mTileCache* cache, unsigned tileId) { + return &cache->vram[tileId << (cache->bpp + 2)]; }
M src/core/timing.csrc/core/timing.c

@@ -7,6 +7,7 @@ #include <mgba/core/timing.h>

void mTimingInit(struct mTiming* timing, int32_t* relativeCycles, int32_t* nextEvent) { timing->root = NULL; + timing->reroot = NULL; timing->masterCycles = 0; timing->relativeCycles = relativeCycles; timing->nextEvent = nextEvent;

@@ -17,6 +18,7 @@ }

void mTimingClear(struct mTiming* timing) { timing->root = NULL; + timing->reroot = NULL; timing->masterCycles = 0; }

@@ -76,6 +78,11 @@ return nextWhen;

} timing->root = next->next; next->callback(timing, next->context, -nextWhen); + } + if (timing->reroot) { + timing->root = timing->reroot; + timing->reroot = NULL; + *timing->nextEvent = mTimingNextEvent(timing); } return *timing->nextEvent; }
M src/feature/video-logger.csrc/feature/video-logger.c

@@ -687,8 +687,16 @@ }

void mVideoLogContextRewind(struct mVideoLogContext* context, struct mCore* core) { _readHeader(context); - if (core && core->stateSize(core) == context->initialStateSize) { - core->loadState(core, context->initialState); + if (core) { + size_t size = core->stateSize(core); + if (size <= context->initialStateSize) { + core->loadState(core, context->initialState); + } else { + void* extendedState = anonymousMemoryMap(size); + memcpy(extendedState, context->initialState, context->initialStateSize); + core->loadState(core, extendedState); + mappedMemoryFree(extendedState, size); + } } off_t pointer = context->backing->seek(context->backing, 0, SEEK_CUR);
M src/gb/audio.csrc/gb/audio.c

@@ -25,7 +25,7 @@ const int GB_AUDIO_VOLUME_MAX = 0x100;

static bool _writeSweep(struct GBAudioSweep* sweep, uint8_t value); static void _writeDuty(struct GBAudioEnvelope* envelope, uint8_t value); -static bool _writeEnvelope(struct GBAudioEnvelope* envelope, uint8_t value); +static bool _writeEnvelope(struct GBAudioEnvelope* envelope, uint8_t value, enum GBAudioStyle style); static void _resetSweep(struct GBAudioSweep* sweep); static bool _resetEnvelope(struct GBAudioEnvelope* sweep);

@@ -153,6 +153,10 @@ audio->playingCh1 = false;

audio->playingCh2 = false; audio->playingCh3 = false; audio->playingCh4 = false; + if (audio->p && (audio->p->model == GB_MODEL_DMG || audio->p->model == GB_MODEL_CGB)) { + audio->playingCh1 = true; + *audio->nr52 |= 0x01; + } } void GBAudioResizeBuffer(struct GBAudio* audio, size_t samples) {

@@ -178,7 +182,7 @@ audio->ch1.control.length = 64 - audio->ch1.envelope.length;

} void GBAudioWriteNR12(struct GBAudio* audio, uint8_t value) { - if (!_writeEnvelope(&audio->ch1.envelope, value)) { + if (!_writeEnvelope(&audio->ch1.envelope, value, audio->style)) { mTimingDeschedule(audio->timing, &audio->ch1Event); audio->playingCh1 = false; *audio->nr52 &= ~0x0001;

@@ -236,7 +240,7 @@ audio->ch2.control.length = 64 - audio->ch2.envelope.length;

} void GBAudioWriteNR22(struct GBAudio* audio, uint8_t value) { - if (!_writeEnvelope(&audio->ch2.envelope, value)) { + if (!_writeEnvelope(&audio->ch2.envelope, value, audio->style)) { mTimingDeschedule(audio->timing, &audio->ch2Event); audio->playingCh2 = false; *audio->nr52 &= ~0x0002;

@@ -354,7 +358,7 @@ audio->ch4.length = 64 - audio->ch4.envelope.length;

} void GBAudioWriteNR42(struct GBAudio* audio, uint8_t value) { - if (!_writeEnvelope(&audio->ch4.envelope, value)) { + if (!_writeEnvelope(&audio->ch4.envelope, value, audio->style)) { mTimingDeschedule(audio->timing, &audio->ch4Event); audio->playingCh4 = false; *audio->nr52 &= ~0x0008;

@@ -696,17 +700,16 @@ envelope->length = GBAudioRegisterDutyGetLength(value);

envelope->duty = GBAudioRegisterDutyGetDuty(value); } -bool _writeEnvelope(struct GBAudioEnvelope* envelope, uint8_t value) { +bool _writeEnvelope(struct GBAudioEnvelope* envelope, uint8_t value, enum GBAudioStyle style) { envelope->stepTime = GBAudioRegisterSweepGetStepTime(value); envelope->direction = GBAudioRegisterSweepGetDirection(value); envelope->initialVolume = GBAudioRegisterSweepGetInitialVolume(value); - if (!envelope->stepTime) { + if (style == GB_AUDIO_DMG && !envelope->stepTime) { // TODO: Improve "zombie" mode ++envelope->currentVolume; envelope->currentVolume &= 0xF; } _updateEnvelopeDead(envelope); - envelope->nextStep = envelope->stepTime; return (envelope->initialVolume || envelope->direction) && envelope->dead != 2; }
M src/gb/core.csrc/gb/core.c

@@ -31,8 +31,8 @@ #endif

static const struct mCoreChannelInfo _GBVideoLayers[] = { { 0, "bg", "Background", NULL }, - { 1, "obj", "Objects", NULL }, - { 2, "win", "Window", NULL }, + { 1, "bgwin", "Window", NULL }, + { 2, "obj", "Objects", NULL }, }; static const struct mCoreChannelInfo _GBAudioChannels[] = {

@@ -188,9 +188,38 @@ }

if (mCoreConfigGetIntValue(config, "gb.pal[3]", &color)) { GBVideoSetPalette(&gb->video, 3, color); } + if (mCoreConfigGetIntValue(config, "gb.pal[4]", &color)) { + GBVideoSetPalette(&gb->video, 4, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[5]", &color)) { + GBVideoSetPalette(&gb->video, 5, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[6]", &color)) { + GBVideoSetPalette(&gb->video, 6, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[7]", &color)) { + GBVideoSetPalette(&gb->video, 7, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[8]", &color)) { + GBVideoSetPalette(&gb->video, 8, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[9]", &color)) { + GBVideoSetPalette(&gb->video, 9, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[10]", &color)) { + GBVideoSetPalette(&gb->video, 10, color); + } + if (mCoreConfigGetIntValue(config, "gb.pal[11]", &color)) { + GBVideoSetPalette(&gb->video, 11, color); + } mCoreConfigCopyValue(&core->config, config, "gb.bios"); + mCoreConfigCopyValue(&core->config, config, "sgb.bios"); mCoreConfigCopyValue(&core->config, config, "gbc.bios"); + mCoreConfigCopyValue(&core->config, config, "gb.model"); + mCoreConfigCopyValue(&core->config, config, "sgb.model"); + mCoreConfigCopyValue(&core->config, config, "cgb.model"); + mCoreConfigCopyValue(&core->config, config, "sgb.borders"); #if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2 struct GBCore* gbcore = (struct GBCore*) core;

@@ -199,9 +228,14 @@ #endif

} static void _GBCoreDesiredVideoDimensions(struct mCore* core, unsigned* width, unsigned* height) { - UNUSED(core); - *width = GB_VIDEO_HORIZONTAL_PIXELS; - *height = GB_VIDEO_VERTICAL_PIXELS; + struct GB* gb = core->board; + if (gb && (gb->model != GB_MODEL_SGB || !gb->video.sgbBorders)) { + *width = GB_VIDEO_HORIZONTAL_PIXELS; + *height = GB_VIDEO_VERTICAL_PIXELS; + } else { + *width = 256; + *height = 224; + } } static void _GBCoreSetVideoBuffer(struct mCore* core, color_t* buffer, size_t stride) {

@@ -330,6 +364,25 @@ GBOverrideApply(gb, &override);

} } + const char* modelGB = mCoreConfigGetValue(&core->config, "gb.model"); + const char* modelCGB = mCoreConfigGetValue(&core->config, "cgb.model"); + const char* modelSGB = mCoreConfigGetValue(&core->config, "sgb.model"); + if (modelGB || modelCGB || modelSGB) { + GBDetectModel(gb); + if (gb->model == GB_MODEL_DMG && modelGB) { + gb->model = GBNameToModel(modelGB); + } else if (gb->model == GB_MODEL_CGB && modelCGB) { + gb->model = GBNameToModel(modelCGB); + } else if (gb->model == GB_MODEL_SGB && modelSGB) { + gb->model = GBNameToModel(modelSGB); + } + } + + int fakeBool; + if (mCoreConfigGetIntValue(&core->config, "sgb.borders", &fakeBool)) { + gb->video.sgbBorders = fakeBool; + } + #if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2 if (!gb->biosVf && core->opts.useBios) { struct VFile* bios = NULL;

@@ -349,9 +402,13 @@ const char* configPath = NULL;

switch (gb->model) { case GB_MODEL_DMG: - case GB_MODEL_SGB: // TODO + case GB_MODEL_MGB: // TODO configPath = mCoreConfigGetValue(&core->config, "gb.bios"); break; + case GB_MODEL_SGB: + case GB_MODEL_SGB2: // TODO + configPath = mCoreConfigGetValue(&core->config, "sgb.bios"); + break; case GB_MODEL_CGB: case GB_MODEL_AGB: configPath = mCoreConfigGetValue(&core->config, "gbc.bios");

@@ -374,8 +431,12 @@ char path[PATH_MAX];

mCoreConfigDirectory(path, PATH_MAX); switch (gb->model) { case GB_MODEL_DMG: - case GB_MODEL_SGB: // TODO + case GB_MODEL_MGB: // TODO strncat(path, PATH_SEP "gb_bios.bin", PATH_MAX - strlen(path)); + break; + case GB_MODEL_SGB: + case GB_MODEL_SGB2: // TODO + strncat(path, PATH_SEP "sgb_bios.bin", PATH_MAX - strlen(path)); break; case GB_MODEL_CGB: case GB_MODEL_AGB:

@@ -570,7 +631,9 @@ size_t _GBListMemoryBlocks(const struct mCore* core, const struct mCoreMemoryBlock** blocks) {

const struct GB* gb = core->board; switch (gb->model) { case GB_MODEL_DMG: + case GB_MODEL_MGB: case GB_MODEL_SGB: + case GB_MODEL_SGB2: default: *blocks = _GBMemoryBlocks; return sizeof(_GBMemoryBlocks) / sizeof(*_GBMemoryBlocks);
M src/gb/extra/proxy.csrc/gb/extra/proxy.c

@@ -5,15 +5,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include <mgba/internal/gb/renderers/proxy.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/gb/gb.h> #include <mgba/internal/gb/io.h> #define BUFFER_OAM 1 +#define BUFFER_SGB 2 -static void GBVideoProxyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model); +static void GBVideoProxyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool borders); static void GBVideoProxyRendererDeinit(struct GBVideoRenderer* renderer); static uint8_t GBVideoProxyRendererWriteVideoRegister(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value); +static void GBVideoProxyRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data); static void GBVideoProxyRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address); static void GBVideoProxyRendererWriteOAM(struct GBVideoRenderer* renderer, uint16_t oam); static void GBVideoProxyRendererWritePalette(struct GBVideoRenderer* renderer, int address, uint16_t value);

@@ -30,6 +32,7 @@ void GBVideoProxyRendererCreate(struct GBVideoProxyRenderer* renderer, struct GBVideoRenderer* backend) {

renderer->d.init = GBVideoProxyRendererInit; renderer->d.deinit = GBVideoProxyRendererDeinit; renderer->d.writeVideoRegister = GBVideoProxyRendererWriteVideoRegister; + renderer->d.writeSGBPacket = GBVideoProxyRendererWriteSGBPacket; renderer->d.writeVRAM = GBVideoProxyRendererWriteVRAM; renderer->d.writeOAM = GBVideoProxyRendererWriteOAM; renderer->d.writePalette = GBVideoProxyRendererWritePalette;

@@ -93,12 +96,12 @@

mVideoLoggerRendererDeinit(renderer->logger); } -void GBVideoProxyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model) { +void GBVideoProxyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool borders) { struct GBVideoProxyRenderer* proxyRenderer = (struct GBVideoProxyRenderer*) renderer; _init(proxyRenderer); - proxyRenderer->backend->init(proxyRenderer->backend, model); + proxyRenderer->backend->init(proxyRenderer->backend, model, borders); } void GBVideoProxyRendererDeinit(struct GBVideoRenderer* renderer) {

@@ -111,6 +114,7 @@ }

static bool _parsePacket(struct mVideoLogger* logger, const struct mVideoLoggerDirtyInfo* item) { struct GBVideoProxyRenderer* proxyRenderer = logger->context; + uint8_t sgbPacket[16]; switch (item->type) { case DIRTY_REGISTER: proxyRenderer->backend->writeVideoRegister(proxyRenderer->backend, item->address, item->value);

@@ -154,6 +158,11 @@ proxyRenderer->oamMax = 0;

return false; } logger->readData(logger, &proxyRenderer->objThisLine, item->value2, true); + break; + case BUFFER_SGB: + logger->readData(logger, sgbPacket, 16, true); + proxyRenderer->backend->writeSGBPacket(proxyRenderer->backend, sgbPacket); + break; } break; case DIRTY_FLUSH:

@@ -179,6 +188,14 @@ }

return value; } +void GBVideoProxyRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data) { + struct GBVideoProxyRenderer* proxyRenderer = (struct GBVideoProxyRenderer*) renderer; + if (!proxyRenderer->logger->block) { + proxyRenderer->backend->writeSGBPacket(proxyRenderer->backend, data); + } + mVideoLoggerWriteBuffer(proxyRenderer->logger, BUFFER_SGB, 0, 16, data); +} + void GBVideoProxyRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address) { struct GBVideoProxyRenderer* proxyRenderer = (struct GBVideoProxyRenderer*) renderer; mVideoLoggerRendererWriteVRAM(proxyRenderer->logger, address);

@@ -186,7 +203,7 @@ if (!proxyRenderer->logger->block) {

proxyRenderer->backend->writeVRAM(proxyRenderer->backend, address); } if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } }

@@ -197,7 +214,7 @@ if (!proxyRenderer->logger->block) {

proxyRenderer->backend->writePalette(proxyRenderer->backend, address, value); } if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, address); + mCacheSetWritePalette(renderer->cache, address, mColorFrom555(value)); } }
M src/gb/gb.csrc/gb/gb.c

@@ -28,6 +28,8 @@ static const uint8_t _knownHeader[4] = { 0xCE, 0xED, 0x66, 0x66};

#define DMG_BIOS_CHECKSUM 0xC2F5CC97 #define DMG_2_BIOS_CHECKSUM 0x59C8598E +#define MGB_BIOS_CHECKSUM 0xE6920754 +#define SGB_BIOS_CHECKSUM 0xEC8A83B9 #define CGB_BIOS_CHECKSUM 0x41884E46 mLOG_DEFINE_CATEGORY(GB, "GB", "gb");

@@ -37,6 +39,7 @@ static void GBDeinit(struct mCPUComponent* component);

static void GBInterruptHandlerInit(struct LR35902InterruptHandler* irqh); static void GBProcessEvents(struct LR35902Core* cpu); static void GBSetInterrupts(struct LR35902Core* cpu, bool enable); +static uint16_t GBIRQVector(struct LR35902Core* cpu); static void GBIllegal(struct LR35902Core* cpu); static void GBStop(struct LR35902Core* cpu);

@@ -162,7 +165,6 @@ void GBResizeSram(struct GB* gb, size_t size) {

if (gb->memory.sram && size <= gb->sramSize) { return; } - mLOG(GB, INFO, "Resizing SRAM to %"PRIz"u bytes", size); struct VFile* vf = gb->sramVf; if (vf) { if (vf == gb->sramRealVf) {

@@ -220,7 +222,7 @@ }

void GBSramClean(struct GB* gb, uint32_t frameCount) { // TODO: Share with GBASavedataClean - if (!gb->sramVf || gb->sramVf != gb->sramRealVf) { + if (!gb->sramVf) { return; } if (gb->sramDirty & GB_SRAM_DIRT_NEW) {

@@ -230,6 +232,9 @@ if (!(gb->sramDirty & GB_SRAM_DIRT_SEEN)) {

gb->sramDirty |= GB_SRAM_DIRT_SEEN; } } else if ((gb->sramDirty & GB_SRAM_DIRT_SEEN) && frameCount - gb->sramDirtAge > CLEANUP_THRESHOLD) { + if (gb->sramMaskWriteback) { + GBSavedataUnmask(gb); + } if (gb->memory.mbcType == GB_MBC3_RTC) { GBMBCRTCWrite(gb); }

@@ -259,7 +264,9 @@ GBSramDeinit(gb);

gb->sramVf = gb->sramRealVf; gb->memory.sram = gb->sramVf->map(gb->sramVf, gb->sramSize, MAP_WRITE); if (gb->sramMaskWriteback) { + vf->seek(vf, 0, SEEK_SET); vf->read(vf, gb->memory.sram, gb->sramSize); + gb->sramMaskWriteback = false; } vf->close(vf); }

@@ -287,6 +294,7 @@ gb->memory.rom = NULL;

gb->memory.mbcType = GB_MBC_AUTODETECT; gb->isPristine = false; + gb->sramMaskWriteback = false; GBSavedataUnmask(gb); GBSramDeinit(gb); if (gb->sramRealVf) {

@@ -364,6 +372,7 @@ void GBInterruptHandlerInit(struct LR35902InterruptHandler* irqh) {

irqh->reset = GBReset; irqh->processEvents = GBProcessEvents; irqh->setInterrupts = GBSetInterrupts; + irqh->irqVector = GBIRQVector; irqh->hitIllegal = GBIllegal; irqh->stop = GBStop; irqh->halt = GBHalt;

@@ -384,6 +393,8 @@ bool GBIsBIOS(struct VFile* vf) {

switch (_GBBiosCRC32(vf)) { case DMG_BIOS_CHECKSUM: case DMG_2_BIOS_CHECKSUM: + case MGB_BIOS_CHECKSUM: + case SGB_BIOS_CHECKSUM: case CGB_BIOS_CHECKSUM: return true; default:

@@ -423,24 +434,63 @@

cpu->b = 0; cpu->d = 0; + gb->timer.internalDiv = 0; + int nextDiv = 0; if (!gb->biosVf) { switch (gb->model) { + case GB_MODEL_AUTODETECT: // Silence warnings + gb->model = GB_MODEL_DMG; case GB_MODEL_DMG: - // TODO: SGB + cpu->a = 1; + cpu->f.packed = 0xB0; + cpu->c = 0x13; + cpu->e = 0xD8; + cpu->h = 1; + cpu->l = 0x4D; + gb->timer.internalDiv = 0xABC; + nextDiv = 4; + break; case GB_MODEL_SGB: - case GB_MODEL_AUTODETECT: // Silence warnings - gb->model = GB_MODEL_DMG; cpu->a = 1; + cpu->f.packed = 0x00; + cpu->c = 0x14; + cpu->e = 0x00; + cpu->h = 0xC0; + cpu->l = 0x60; + gb->timer.internalDiv = 0xABC; + nextDiv = 4; + break; + case GB_MODEL_MGB: + cpu->a = 0xFF; cpu->f.packed = 0xB0; cpu->c = 0x13; cpu->e = 0xD8; cpu->h = 1; cpu->l = 0x4D; - gb->timer.internalDiv = 0x2AF3; + gb->timer.internalDiv = 0xABC; + nextDiv = 4; + break; + case GB_MODEL_SGB2: + cpu->a = 0xFF; + cpu->f.packed = 0x00; + cpu->c = 0x14; + cpu->e = 0x00; + cpu->h = 0xC0; + cpu->l = 0x60; + gb->timer.internalDiv = 0xABC; + nextDiv = 4; break; case GB_MODEL_AGB: + cpu->a = 0x11; cpu->b = 1; - // Fall through + cpu->f.packed = 0x00; + cpu->c = 0; + cpu->e = 0x08; + cpu->h = 0; + cpu->l = 0x7C; + gb->timer.internalDiv = 0x1EA; + nextDiv = 0xC; + break; case GB_MODEL_CGB: cpu->a = 0x11; cpu->f.packed = 0x80;

@@ -448,7 +498,8 @@ cpu->c = 0;

cpu->e = 0x08; cpu->h = 0; cpu->l = 0x7C; - gb->timer.internalDiv = 0x7A8; + gb->timer.internalDiv = 0x1EA; + nextDiv = 0xC; break; }

@@ -467,15 +518,19 @@ gb->memory.romSize = gb->yankedRomSize;

gb->yankedRomSize = 0; } + gb->sgbBit = -1; + gb->currentSgbBits = 0; + memset(gb->sgbPacket, 0, sizeof(gb->sgbPacket)); + mTimingClear(&gb->timing); GBMemoryReset(gb); GBVideoReset(&gb->video); GBTimerReset(&gb->timer); - mTimingSchedule(&gb->timing, &gb->timer.event, GB_DMG_DIV_PERIOD); + mTimingSchedule(&gb->timing, &gb->timer.event, nextDiv); - GBAudioReset(&gb->audio); GBIOReset(gb); + GBAudioReset(&gb->audio); GBSIOReset(&gb->sio); GBSavedataUnmask(gb);

@@ -491,6 +546,12 @@ case DMG_BIOS_CHECKSUM:

case DMG_2_BIOS_CHECKSUM: gb->model = GB_MODEL_DMG; break; + case MGB_BIOS_CHECKSUM: + gb->model = GB_MODEL_MGB; + break; + case SGB_BIOS_CHECKSUM: + gb->model = GB_MODEL_SGB; + break; case CGB_BIOS_CHECKSUM: gb->model = GB_MODEL_CGB; break;

@@ -503,6 +564,8 @@ if (gb->model == GB_MODEL_AUTODETECT && gb->memory.rom) {

const struct GBCartridge* cart = (const struct GBCartridge*) &gb->memory.rom[0x100]; if (cart->cgb & 0x80) { gb->model = GB_MODEL_CGB; + } else if (cart->sgb == 0x03 && cart->oldLicensee == 0x33) { + gb->model = GB_MODEL_SGB; } else { gb->model = GB_MODEL_DMG; }

@@ -514,6 +577,10 @@ case GB_MODEL_SGB:

case GB_MODEL_AUTODETECT: //Silence warnings gb->audio.style = GB_AUDIO_DMG; break; + case GB_MODEL_MGB: + case GB_MODEL_SGB2: + gb->audio.style = GB_AUDIO_MGB; + break; case GB_MODEL_AGB: case GB_MODEL_CGB: gb->audio.style = GB_AUDIO_CGB;

@@ -531,31 +598,7 @@

if (!gb->memory.ime || gb->cpu->irqPending) { return; } - - if (irqs & (1 << GB_IRQ_VBLANK)) { - LR35902RaiseIRQ(gb->cpu, GB_VECTOR_VBLANK); - gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_VBLANK); - return; - } - if (irqs & (1 << GB_IRQ_LCDSTAT)) { - LR35902RaiseIRQ(gb->cpu, GB_VECTOR_LCDSTAT); - gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_LCDSTAT); - return; - } - if (irqs & (1 << GB_IRQ_TIMER)) { - LR35902RaiseIRQ(gb->cpu, GB_VECTOR_TIMER); - gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_TIMER); - return; - } - if (irqs & (1 << GB_IRQ_SIO)) { - LR35902RaiseIRQ(gb->cpu, GB_VECTOR_SIO); - gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_SIO); - return; - } - if (irqs & (1 << GB_IRQ_KEYPAD)) { - LR35902RaiseIRQ(gb->cpu, GB_VECTOR_KEYPAD); - gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_KEYPAD); - } + LR35902RaiseIRQ(gb->cpu); } void GBProcessEvents(struct LR35902Core* cpu) {

@@ -596,6 +639,33 @@ } else {

mTimingDeschedule(&gb->timing, &gb->eiPending); mTimingSchedule(&gb->timing, &gb->eiPending, 4); } +} + +uint16_t GBIRQVector(struct LR35902Core* cpu) { + struct GB* gb = (struct GB*) cpu->master; + int irqs = gb->memory.ie & gb->memory.io[REG_IF]; + + if (irqs & (1 << GB_IRQ_VBLANK)) { + gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_VBLANK); + return GB_VECTOR_VBLANK; + } + if (irqs & (1 << GB_IRQ_LCDSTAT)) { + gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_LCDSTAT); + return GB_VECTOR_LCDSTAT; + } + if (irqs & (1 << GB_IRQ_TIMER)) { + gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_TIMER); + return GB_VECTOR_TIMER; + } + if (irqs & (1 << GB_IRQ_SIO)) { + gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_SIO); + return GB_VECTOR_SIO; + } + if (irqs & (1 << GB_IRQ_KEYPAD)) { + gb->memory.io[REG_IF] &= ~(1 << GB_IRQ_KEYPAD); + return GB_VECTOR_KEYPAD; + } + return 0; } static void _enableInterrupts(struct mTiming* timing, void* user, uint32_t cyclesLate) {

@@ -721,3 +791,40 @@ }

GBTestKeypadIRQ(gb); } + +enum GBModel GBNameToModel(const char* model) { + if (strcasecmp(model, "DMG") == 0) { + return GB_MODEL_DMG; + } else if (strcasecmp(model, "CGB") == 0) { + return GB_MODEL_CGB; + } else if (strcasecmp(model, "AGB") == 0) { + return GB_MODEL_AGB; + } else if (strcasecmp(model, "SGB") == 0) { + return GB_MODEL_SGB; + } else if (strcasecmp(model, "MGB") == 0) { + return GB_MODEL_MGB; + } else if (strcasecmp(model, "SGB2") == 0) { + return GB_MODEL_SGB2; + } + return GB_MODEL_AUTODETECT; +} + +const char* GBModelToName(enum GBModel model) { + switch (model) { + case GB_MODEL_DMG: + return "DMG"; + case GB_MODEL_SGB: + return "SGB"; + case GB_MODEL_MGB: + return "MGB"; + case GB_MODEL_SGB2: + return "SGB2"; + case GB_MODEL_CGB: + return "CGB"; + case GB_MODEL_AGB: + return "AGB"; + default: + case GB_MODEL_AUTODETECT: + return NULL; + } +}
M src/gb/io.csrc/gb/io.c

@@ -105,6 +105,33 @@ [REG_UNK75] = 0x8F,

[REG_IE] = 0xE0, }; +static void _writeSGBBits(struct GB* gb, int bits) { + if (!bits) { + gb->sgbBit = 0; + memset(gb->sgbPacket, 0, sizeof(gb->sgbPacket)); + } + if (bits == gb->currentSgbBits) { + return; + } + gb->currentSgbBits = bits; + if (gb->sgbBit == 128 && bits == 2) { + GBVideoWriteSGBPacket(&gb->video, gb->sgbPacket); + ++gb->sgbBit; + } + if (gb->sgbBit >= 128) { + return; + } + switch (bits) { + case 1: + gb->sgbPacket[gb->sgbBit >> 3] |= 1 << (gb->sgbBit & 7); + // Fall through + case 2: + ++gb->sgbBit; + default: + break; + } +} + void GBIOInit(struct GB* gb) { memset(gb->memory.io, 0, sizeof(gb->memory.io)); }

@@ -117,19 +144,19 @@ GBIOWrite(gb, REG_TMA, 0);

GBIOWrite(gb, REG_TAC, 0); GBIOWrite(gb, REG_IF, 1); GBIOWrite(gb, REG_NR52, 0xF1); - GBIOWrite(gb, REG_NR14, 0xBF); + GBIOWrite(gb, REG_NR14, 0x3F); GBIOWrite(gb, REG_NR10, 0x80); GBIOWrite(gb, REG_NR11, 0xBF); GBIOWrite(gb, REG_NR12, 0xF3); GBIOWrite(gb, REG_NR13, 0xF3); - GBIOWrite(gb, REG_NR24, 0xBF); + GBIOWrite(gb, REG_NR24, 0x3F); GBIOWrite(gb, REG_NR21, 0x3F); GBIOWrite(gb, REG_NR22, 0x00); - GBIOWrite(gb, REG_NR34, 0xBF); + GBIOWrite(gb, REG_NR34, 0x3F); GBIOWrite(gb, REG_NR30, 0x7F); GBIOWrite(gb, REG_NR31, 0xFF); GBIOWrite(gb, REG_NR32, 0x9F); - GBIOWrite(gb, REG_NR44, 0xBF); + GBIOWrite(gb, REG_NR44, 0x3F); GBIOWrite(gb, REG_NR41, 0xFF); GBIOWrite(gb, REG_NR42, 0x00); GBIOWrite(gb, REG_NR43, 0x00);

@@ -140,19 +167,26 @@ GBIOWrite(gb, REG_SCY, 0x00);

GBIOWrite(gb, REG_SCX, 0x00); GBIOWrite(gb, REG_LYC, 0x00); GBIOWrite(gb, REG_BGP, 0xFC); - GBIOWrite(gb, REG_OBP0, 0xFF); - GBIOWrite(gb, REG_OBP1, 0xFF); + if (gb->model < GB_MODEL_CGB) { + GBIOWrite(gb, REG_OBP0, 0xFF); + GBIOWrite(gb, REG_OBP1, 0xFF); + } GBIOWrite(gb, REG_WY, 0x00); GBIOWrite(gb, REG_WX, 0x00); - GBIOWrite(gb, REG_VBK, 0); - GBIOWrite(gb, REG_BCPS, 0); - GBIOWrite(gb, REG_OCPS, 0); - GBIOWrite(gb, REG_SVBK, 1); - GBIOWrite(gb, REG_HDMA1, 0xFF); - GBIOWrite(gb, REG_HDMA2, 0xFF); - GBIOWrite(gb, REG_HDMA3, 0xFF); - GBIOWrite(gb, REG_HDMA4, 0xFF); - gb->memory.io[REG_HDMA5] = 0xFF; + if (gb->model >= GB_MODEL_CGB) { + GBIOWrite(gb, REG_JOYP, 0xFF); + GBIOWrite(gb, REG_VBK, 0); + GBIOWrite(gb, REG_BCPS, 0); + GBIOWrite(gb, REG_OCPS, 0); + GBIOWrite(gb, REG_SVBK, 1); + GBIOWrite(gb, REG_HDMA1, 0xFF); + GBIOWrite(gb, REG_HDMA2, 0xFF); + GBIOWrite(gb, REG_HDMA3, 0xFF); + GBIOWrite(gb, REG_HDMA4, 0xFF); + gb->memory.io[REG_HDMA5] = 0xFF; + } else if (gb->model == GB_MODEL_SGB) { + GBIOWrite(gb, REG_JOYP, 0xFF); + } GBIOWrite(gb, REG_IE, 0x00); }

@@ -341,6 +375,10 @@ gb->audio.ch3.wavedata8[gb->audio.ch3.window >> 1] = value;

} break; case REG_JOYP: + if (gb->model == GB_MODEL_SGB) { + _writeSGBBits(gb, (value >> 4) & 3); + } + break; case REG_TIMA: case REG_TMA: // Handled transparently by the registers

@@ -385,6 +423,10 @@ case 0x50:

if (gb->memory.romBase < gb->memory.rom || gb->memory.romBase > &gb->memory.rom[gb->memory.romSize - 1]) { free(gb->memory.romBase); gb->memory.romBase = gb->memory.rom; + } + if (gb->model >= GB_MODEL_CGB && gb->memory.io[0x6C]) { + gb->model = GB_MODEL_DMG; + GBVideoDisableCGB(&gb->video); } break; case REG_IE:

@@ -453,7 +495,8 @@ static uint8_t _readKeys(struct GB* gb) {

uint8_t keys = *gb->keySource; switch (gb->memory.io[REG_JOYP] & 0x30) { case 0x30: - keys = 0; + // TODO: Increment + keys = (gb->video.sgbCommandHeader >> 3) == SGB_MLT_REG ? 0xF : 0; break; case 0x20: keys >>= 4;

@@ -553,6 +596,9 @@ case REG_OCPD:

case REG_SVBK: // Handled transparently by the registers goto success; + case REG_DMA: + mLOG(GB_IO, STUB, "Reading from unknown register FF%02X", address); + return 0; default: break; }

@@ -615,4 +661,10 @@ gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_SCY, state->io[REG_SCY]);

gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_SCX, state->io[REG_SCX]); gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_WY, state->io[REG_WY]); gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_WX, state->io[REG_WX]); + if (gb->model == GB_MODEL_SGB) { + gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_BGP, state->io[REG_BGP]); + gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_OBP0, state->io[REG_OBP0]); + gb->video.renderer->writeVideoRegister(gb->video.renderer, REG_OBP1, state->io[REG_OBP1]); + } + gb->video.stat = state->io[REG_STAT]; }
M src/gb/mbc.csrc/gb/mbc.c

@@ -68,6 +68,28 @@ gb->cpu->memory.setActiveRegion(gb->cpu, gb->cpu->pc);

} } +void GBMBCSwitchHalfBank(struct GB* gb, int half, int bank) { + size_t bankStart = bank * GB_SIZE_CART_HALFBANK; + if (bankStart + GB_SIZE_CART_HALFBANK > gb->memory.romSize) { + mLOG(GB_MBC, GAME_ERROR, "Attempting to switch to an invalid ROM bank: %0X", bank); + bankStart &= (gb->memory.romSize - 1); + bank = bankStart / GB_SIZE_CART_HALFBANK; + if (!bank) { + ++bank; + } + } + if (!half) { + gb->memory.romBank = &gb->memory.rom[bankStart]; + gb->memory.currentBank = bank; + } else { + gb->memory.mbcState.mbc6.romBank1 = &gb->memory.rom[bankStart]; + gb->memory.mbcState.mbc6.currentBank1 = bank; + } + if (gb->cpu->pc < GB_BASE_VRAM) { + gb->cpu->memory.setActiveRegion(gb->cpu, gb->cpu->pc); + } +} + static bool _isMulticart(const uint8_t* mem) { bool success = true; struct VFile* vf;

@@ -496,11 +518,34 @@ }

} void _GBMBC6(struct GB* gb, uint16_t address, uint8_t value) { - // TODO - mLOG(GB_MBC, STUB, "MBC6 unimplemented"); - UNUSED(gb); - UNUSED(address); - UNUSED(value); + struct GBMemory* memory = &gb->memory; + int bank = value & 0x7F; + switch (address >> 10) { + case 0: + switch (value) { + case 0: + memory->sramAccess = false; + break; + case 0xA: + memory->sramAccess = true; + GBMBCSwitchSramBank(gb, memory->sramCurrentBank); + break; + default: + // TODO + mLOG(GB_MBC, STUB, "MBC6 unknown value %02X", value); + break; + } + break; + case 0x9: + GBMBCSwitchHalfBank(gb, 0, bank); + break; + case 0xD: + GBMBCSwitchHalfBank(gb, 1, bank); + break; + default: + mLOG(GB_MBC, STUB, "MBC6 unknown address: %04X:%02X", address, value); + break; + } } void _GBMBC7(struct GB* gb, uint16_t address, uint8_t value) {
M src/gb/memory.csrc/gb/memory.c

@@ -207,10 +207,14 @@ case GB_REGION_CART_BANK0 + 1:

case GB_REGION_CART_BANK0 + 2: case GB_REGION_CART_BANK0 + 3: return memory->romBase[address & (GB_SIZE_CART_BANK0 - 1)]; - case GB_REGION_CART_BANK1: - case GB_REGION_CART_BANK1 + 1: case GB_REGION_CART_BANK1 + 2: case GB_REGION_CART_BANK1 + 3: + if (memory->mbcType == GB_MBC6) { + return memory->mbcState.mbc6.romBank1[address & (GB_SIZE_CART_HALFBANK - 1)]; + } + // Fall through + case GB_REGION_CART_BANK1: + case GB_REGION_CART_BANK1 + 1: return memory->romBank[address & (GB_SIZE_CART_BANK0 - 1)]; case GB_REGION_VRAM: case GB_REGION_VRAM + 1:

@@ -465,10 +469,13 @@ gb->memory.hdmaDest |= 0x8000;

bool wasHdma = gb->memory.isHdma; gb->memory.isHdma = value & 0x80; if ((!wasHdma && !gb->memory.isHdma) || gb->video.mode == 0) { - gb->memory.hdmaRemaining = ((value & 0x7F) + 1) * 0x10; + if (gb->memory.isHdma) { + gb->memory.hdmaRemaining = 0x10; + } else { + gb->memory.hdmaRemaining = ((value & 0x7F) + 1) * 0x10; + } gb->cpuBlocked = true; mTimingSchedule(&gb->timing, &gb->memory.hdmaEvent, 0); - gb->cpu->nextEvent = gb->cpu->cycles; } }

@@ -706,8 +713,7 @@ GBMBCSwitchBank0(gb, memory->currentBank >> memory->mbcState.mbc1.multicartStride);

} break; case GB_MBC3_RTC: - // TODO? - //LOAD_64LE(gb->memory.rtcLastLatch, 0, &state->memory.rtc.lastLatch); + LOAD_64LE(gb->memory.rtcLastLatch, 0, &state->memory.rtc.lastLatch); break; case GB_MBC7: memory->mbcState.mbc7.state = state->memory.mbc7.state;
M src/gb/overrides.csrc/gb/overrides.c

@@ -19,6 +19,7 @@

bool GBOverrideFind(const struct Configuration* config, struct GBCartridgeOverride* override) { override->model = GB_MODEL_AUTODETECT; override->mbc = GB_MBC_AUTODETECT; + memset(override->gbColors, 0, sizeof(override->gbColors)); bool found = false; int i;

@@ -35,30 +36,24 @@ char sectionName[24] = "";

snprintf(sectionName, sizeof(sectionName), "gb.override.%08X", override->headerCrc32); const char* model = ConfigurationGetValue(config, sectionName, "model"); const char* mbc = ConfigurationGetValue(config, sectionName, "mbc"); - const char* pal[4] = { + const char* pal[12] = { ConfigurationGetValue(config, sectionName, "pal[0]"), ConfigurationGetValue(config, sectionName, "pal[1]"), ConfigurationGetValue(config, sectionName, "pal[2]"), - ConfigurationGetValue(config, sectionName, "pal[3]") + ConfigurationGetValue(config, sectionName, "pal[3]"), + ConfigurationGetValue(config, sectionName, "pal[4]"), + ConfigurationGetValue(config, sectionName, "pal[5]"), + ConfigurationGetValue(config, sectionName, "pal[6]"), + ConfigurationGetValue(config, sectionName, "pal[7]"), + ConfigurationGetValue(config, sectionName, "pal[8]"), + ConfigurationGetValue(config, sectionName, "pal[9]"), + ConfigurationGetValue(config, sectionName, "pal[10]"), + ConfigurationGetValue(config, sectionName, "pal[11]") }; if (model) { - if (strcasecmp(model, "DMG") == 0) { - found = true; - override->model = GB_MODEL_DMG; - } else if (strcasecmp(model, "CGB") == 0) { - found = true; - override->model = GB_MODEL_CGB; - } else if (strcasecmp(model, "AGB") == 0) { - found = true; - override->model = GB_MODEL_AGB; - } else if (strcasecmp(model, "SGB") == 0) { - found = true; - override->model = GB_MODEL_DMG; // TODO - } else if (strcasecmp(model, "MGB") == 0) { - found = true; - override->model = GB_MODEL_DMG; // TODO - } + override->model = GBNameToModel(model); + found = override->model != GB_MODEL_AUTODETECT; } if (mbc) {

@@ -70,18 +65,25 @@ found = true;

} } - if (pal[0] && pal[1] && pal[2] && pal[3]) { - int i; - for (i = 0; i < 4; ++i) { - char* end; - unsigned long value = strtoul(pal[i], &end, 10); - if (end == &pal[i][1] && *end == 'x') { - value = strtoul(pal[i], &end, 16); - } - if (*end) { - continue; - } - override->gbColors[i] = value; + for (i = 0; i < 12; ++i) { + if (!pal[i]) { + continue; + } + char* end; + unsigned long value = strtoul(pal[i], &end, 10); + if (end == &pal[i][1] && *end == 'x') { + value = strtoul(pal[i], &end, 16); + } + if (*end) { + continue; + } + value |= 0xFF000000; + override->gbColors[i] = value; + if (i < 8) { + override->gbColors[i + 4] = value; + } + if (i < 4) { + override->gbColors[i + 8] = value; } } }

@@ -91,31 +93,46 @@

void GBOverrideSave(struct Configuration* config, const struct GBCartridgeOverride* override) { char sectionName[24] = ""; snprintf(sectionName, sizeof(sectionName), "gb.override.%08X", override->headerCrc32); - const char* model = 0; - switch (override->model) { - case GB_MODEL_DMG: - model = "DMG"; - break; - case GB_MODEL_SGB: - model = "SGB"; - break; - case GB_MODEL_CGB: - model = "CGB"; - break; - case GB_MODEL_AGB: - model = "AGB"; - break; - case GB_MODEL_AUTODETECT: - break; - } + const char* model = GBModelToName(override->model); ConfigurationSetValue(config, sectionName, "model", model); - if (override->gbColors[0] | override->gbColors[1] | override->gbColors[2] | override->gbColors[3]) { - ConfigurationSetIntValue(config, sectionName, "pal[0]", override->gbColors[0]); - ConfigurationSetIntValue(config, sectionName, "pal[1]", override->gbColors[1]); - ConfigurationSetIntValue(config, sectionName, "pal[2]", override->gbColors[2]); - ConfigurationSetIntValue(config, sectionName, "pal[3]", override->gbColors[3]); + if (override->gbColors[0] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[0]", override->gbColors[0] & ~0xFF000000); + } + if (override->gbColors[1] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[1]", override->gbColors[1] & ~0xFF000000); + } + if (override->gbColors[2] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[2]", override->gbColors[2] & ~0xFF000000); + } + if (override->gbColors[3] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[3]", override->gbColors[3] & ~0xFF000000); + } + if (override->gbColors[4] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[4]", override->gbColors[4] & ~0xFF000000); + } + if (override->gbColors[5] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[5]", override->gbColors[5] & ~0xFF000000); + } + if (override->gbColors[6] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[6]", override->gbColors[6] & ~0xFF000000); + } + if (override->gbColors[7] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[7]", override->gbColors[7] & ~0xFF000000); + } + if (override->gbColors[8] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[8]", override->gbColors[8] & ~0xFF000000); + } + if (override->gbColors[9] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[9]", override->gbColors[9] & ~0xFF000000); + } + if (override->gbColors[10] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[10]", override->gbColors[10] & ~0xFF000000); + } + if (override->gbColors[11] & 0xFF000000) { + ConfigurationSetIntValue(config, sectionName, "pal[11]", override->gbColors[11] & ~0xFF000000); } + if (override->mbc != GB_MBC_AUTODETECT) { ConfigurationSetIntValue(config, sectionName, "mbc", override->mbc); } else {

@@ -133,11 +150,18 @@ gb->memory.mbcType = override->mbc;

GBMBCInit(gb); } - if (override->gbColors[0] | override->gbColors[1] | override->gbColors[2] | override->gbColors[3]) { - GBVideoSetPalette(&gb->video, 0, override->gbColors[0]); - GBVideoSetPalette(&gb->video, 1, override->gbColors[1]); - GBVideoSetPalette(&gb->video, 2, override->gbColors[2]); - GBVideoSetPalette(&gb->video, 3, override->gbColors[3]); + int i; + for (i = 0; i < 12; ++i) { + if (!(override->gbColors[i] & 0xFF000000)) { + continue; + } + GBVideoSetPalette(&gb->video, i, override->gbColors[i]); + if (i < 8) { + GBVideoSetPalette(&gb->video, i + 4, override->gbColors[i]); + } + if (i < 4) { + GBVideoSetPalette(&gb->video, i + 8, override->gbColors[i]); + } } }
A src/gb/renderers/cache-set.c

@@ -0,0 +1,129 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <mgba/internal/gb/renderers/cache-set.h> + +#include <mgba/core/cache-set.h> +#include <mgba/internal/gb/gb.h> +#include <mgba/internal/gb/io.h> +#include <mgba/internal/gb/video.h> + +void GBVideoCacheInit(struct mCacheSet* cache) { + mCacheSetInit(cache, 2, 1); + mTileCacheConfiguration config = 0; + config = mTileCacheSystemInfoSetPaletteBPP(config, 1); // 2^(2^1) = 4 entries + config = mTileCacheSystemInfoSetPaletteCount(config, 4); // 16 palettes + config = mTileCacheSystemInfoSetMaxTiles(config, 1024); + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, 0)); + mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 0), config, 0, 0); + + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 0)); + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 1)); + mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); +} + +void GBVideoCacheAssociate(struct mCacheSet* cache, struct GBVideo* video) { + mCacheSetAssignVRAM(cache, video->vram); + video->renderer->cache = cache; + size_t i; + for (i = 0; i < 64; ++i) { + mCacheSetWritePalette(cache, i, mColorFrom555(video->palette[i])); + } + mMapCacheSystemInfo sysconfig = mMapCacheSystemInfoSetPaletteCount(0, 0); + if (video->p->model >= GB_MODEL_CGB) { + sysconfig = mMapCacheSystemInfoSetPaletteCount(0, 2); + } + mMapCacheConfigureSystem(mMapCacheSetGetPointer(&cache->maps, 0), sysconfig); + mMapCacheConfigureSystem(mMapCacheSetGetPointer(&cache->maps, 1), sysconfig); + + GBVideoCacheWriteVideoRegister(cache, REG_LCDC, video->p->memory.io[REG_LCDC]); +} + +static void mapParserDMG0(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + int map = *(uint8_t*) vram; + entry->tileId = map; + entry->flags = mMapCacheEntryFlagsClearHMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsClearVMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, 0); +} + +static void mapParserDMG1(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + int map = *(int8_t*) vram; + entry->tileId = map + 128; + entry->flags = mMapCacheEntryFlagsClearHMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsClearVMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, 0); +} + +static void mapParserCGB0(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + int map = *(uint8_t*) vram; + uint8_t attr = ((uint8_t*) vram)[0x2000]; + entry->tileId = map + GBObjAttributesGetBank(attr) * 512; + entry->flags = mMapCacheEntryFlagsSetHMirror(entry->flags, GBObjAttributesGetXFlip(attr)); + entry->flags = mMapCacheEntryFlagsSetVMirror(entry->flags, GBObjAttributesGetYFlip(attr)); + entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, GBObjAttributesGetCGBPalette(attr)); +} + +static void mapParserCGB1(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + int map = *(int8_t*) vram; + uint8_t attr = ((uint8_t*) vram)[0x2000]; + entry->tileId = map + 128 + GBObjAttributesGetBank(attr) * 512; + entry->flags = mMapCacheEntryFlagsSetHMirror(entry->flags, GBObjAttributesGetXFlip(attr)); + entry->flags = mMapCacheEntryFlagsSetVMirror(entry->flags, GBObjAttributesGetYFlip(attr)); + entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, GBObjAttributesGetCGBPalette(attr)); +} + +void GBVideoCacheWriteVideoRegister(struct mCacheSet* cache, uint16_t address, uint8_t value) { + if (address != REG_LCDC) { + return; + } + struct mMapCache* map = mMapCacheSetGetPointer(&cache->maps, 0); + struct mMapCache* window = mMapCacheSetGetPointer(&cache->maps, 1); + + mMapCacheSystemInfo sysconfig = mMapCacheSystemInfoIsPaletteCount(map->sysConfig); + int tileStart = 0; + int mapStart = GB_BASE_MAP; + int windowStart = GB_BASE_MAP; + if (GBRegisterLCDCIsTileMap(value)) { + mapStart += GB_SIZE_MAP; + } + if (GBRegisterLCDCIsWindowTileMap(value)) { + windowStart += GB_SIZE_MAP; + } + if (GBRegisterLCDCIsTileData(value)) { + if (!sysconfig) { + map->mapParser = mapParserDMG0; + window->mapParser = mapParserDMG0; + } else { + map->mapParser = mapParserCGB0; + window->mapParser = mapParserCGB0; + } + } else { + if (!sysconfig) { + map->mapParser = mapParserDMG1; + window->mapParser = mapParserDMG1; + } else { + map->mapParser = mapParserCGB1; + window->mapParser = mapParserCGB1; + } + tileStart = 0x80; + } + map->tileStart = tileStart; + window->tileStart = tileStart; + sysconfig = mMapCacheSystemInfoSetMacroTileSize(sysconfig, 5); + sysconfig = mMapCacheSystemInfoSetPaletteBPP(sysconfig, 1); + sysconfig = mMapCacheSystemInfoSetMapAlign(sysconfig, 0); + sysconfig = mMapCacheSystemInfoSetTilesHigh(sysconfig, 5); + sysconfig = mMapCacheSystemInfoSetTilesWide(sysconfig, 5); + mMapCacheConfigureSystem(map, sysconfig); + mMapCacheConfigureSystem(window, sysconfig); + mMapCacheConfigureMap(map, mapStart); + mMapCacheConfigureMap(window, windowStart); +}
M src/gb/renderers/software.csrc/gb/renderers/software.c

@@ -5,13 +5,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include <mgba/internal/gb/renderers/software.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/gb/io.h> +#include <mgba/internal/gb/renderers/cache-set.h> +#include <mgba-util/math.h> #include <mgba-util/memory.h> -static void GBVideoSoftwareRendererInit(struct GBVideoRenderer* renderer, enum GBModel model); +static void GBVideoSoftwareRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool borders); static void GBVideoSoftwareRendererDeinit(struct GBVideoRenderer* renderer); static uint8_t GBVideoSoftwareRendererWriteVideoRegister(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value); +static void GBVideoSoftwareRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data); static void GBVideoSoftwareRendererWritePalette(struct GBVideoRenderer* renderer, int index, uint16_t value); static void GBVideoSoftwareRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address); static void GBVideoSoftwareRendererWriteOAM(struct GBVideoRenderer* renderer, uint16_t oam);

@@ -25,9 +28,13 @@ static void GBVideoSoftwareRendererDrawBackground(struct GBVideoSoftwareRenderer* renderer, uint8_t* maps, int startX, int endX, int sx, int sy);

static void GBVideoSoftwareRendererDrawObj(struct GBVideoSoftwareRenderer* renderer, struct GBObj* obj, int startX, int endX, int y); static void _clearScreen(struct GBVideoSoftwareRenderer* renderer) { + size_t sgbOffset = 0; + if (renderer->model == GB_MODEL_SGB && renderer->sgbBorders) { + sgbOffset = renderer->outputBufferStride * 40 + 48; + } int y; for (y = 0; y < GB_VIDEO_VERTICAL_PIXELS; ++y) { - color_t* row = &renderer->outputBuffer[renderer->outputBufferStride * y]; + color_t* row = &renderer->outputBuffer[renderer->outputBufferStride * y + sgbOffset]; int x; for (x = 0; x < GB_VIDEO_HORIZONTAL_PIXELS; x += 4) { row[x + 0] = renderer->palette[0];

@@ -38,10 +45,112 @@ }

} } +static void _regenerateSGBBorder(struct GBVideoSoftwareRenderer* renderer) { + int i; + for (i = 0; i < 0x40; ++i) { + uint16_t color; + LOAD_16LE(color, 0x800 + i * 2, renderer->d.sgbMapRam); + renderer->d.writePalette(&renderer->d, i + 0x40, color); + } + int x, y; + for (y = 0; y < 224; ++y) { + for (x = 0; x < 256; x += 8) { + if (x >= 48 && x < 208 && y >= 40 && y < 104) { + continue; + } + uint16_t mapData; + LOAD_16LE(mapData, (x >> 2) + (y & ~7) * 8, renderer->d.sgbMapRam); + if (UNLIKELY(SGBBgAttributesGetTile(mapData) >= 0x100)) { + continue; + } + + int localY = y & 0x7; + if (SGBBgAttributesIsYFlip(mapData)) { + localY = 7 - localY; + } + uint8_t tileData[4]; + tileData[0] = renderer->d.sgbCharRam[(SGBBgAttributesGetTile(mapData) * 16 + localY) * 2 + 0x00]; + tileData[1] = renderer->d.sgbCharRam[(SGBBgAttributesGetTile(mapData) * 16 + localY) * 2 + 0x01]; + tileData[2] = renderer->d.sgbCharRam[(SGBBgAttributesGetTile(mapData) * 16 + localY) * 2 + 0x10]; + tileData[3] = renderer->d.sgbCharRam[(SGBBgAttributesGetTile(mapData) * 16 + localY) * 2 + 0x11]; + + size_t base = y * renderer->outputBufferStride + x; + int p = SGBBgAttributesGetPalette(mapData) * 0x10; + if (SGBBgAttributesIsXFlip(mapData)) { + renderer->outputBuffer[base + 0] = renderer->palette[p | ((tileData[0] >> 0) & 0x1) | ((tileData[1] << 1) & 0x2) | ((tileData[2] << 2) & 0x4) | ((tileData[3] << 3) & 0x8)]; + renderer->outputBuffer[base + 1] = renderer->palette[p | ((tileData[0] >> 1) & 0x1) | ((tileData[1] >> 0) & 0x2) | ((tileData[2] << 1) & 0x4) | ((tileData[3] << 2) & 0x8)]; + renderer->outputBuffer[base + 2] = renderer->palette[p | ((tileData[0] >> 2) & 0x1) | ((tileData[1] >> 1) & 0x2) | ((tileData[2] >> 0) & 0x4) | ((tileData[3] << 1) & 0x8)]; + renderer->outputBuffer[base + 3] = renderer->palette[p | ((tileData[0] >> 3) & 0x1) | ((tileData[1] >> 2) & 0x2) | ((tileData[2] >> 1) & 0x4) | ((tileData[3] >> 0) & 0x8)]; + renderer->outputBuffer[base + 4] = renderer->palette[p | ((tileData[0] >> 4) & 0x1) | ((tileData[1] >> 3) & 0x2) | ((tileData[2] >> 2) & 0x4) | ((tileData[3] >> 1) & 0x8)]; + renderer->outputBuffer[base + 5] = renderer->palette[p | ((tileData[0] >> 5) & 0x1) | ((tileData[1] >> 4) & 0x2) | ((tileData[2] >> 3) & 0x4) | ((tileData[3] >> 2) & 0x8)]; + renderer->outputBuffer[base + 6] = renderer->palette[p | ((tileData[0] >> 6) & 0x1) | ((tileData[1] >> 5) & 0x2) | ((tileData[2] >> 4) & 0x4) | ((tileData[3] >> 3) & 0x8)]; + renderer->outputBuffer[base + 7] = renderer->palette[p | ((tileData[0] >> 7) & 0x1) | ((tileData[1] >> 6) & 0x2) | ((tileData[2] >> 5) & 0x4) | ((tileData[3] >> 4) & 0x8)]; + } else { + renderer->outputBuffer[base + 0] = renderer->palette[p | ((tileData[0] >> 7) & 0x1) | ((tileData[1] >> 6) & 0x2) | ((tileData[2] >> 5) & 0x4) | ((tileData[3] >> 4) & 0x8)]; + renderer->outputBuffer[base + 1] = renderer->palette[p | ((tileData[0] >> 6) & 0x1) | ((tileData[1] >> 5) & 0x2) | ((tileData[2] >> 4) & 0x4) | ((tileData[3] >> 3) & 0x8)]; + renderer->outputBuffer[base + 2] = renderer->palette[p | ((tileData[0] >> 5) & 0x1) | ((tileData[1] >> 4) & 0x2) | ((tileData[2] >> 3) & 0x4) | ((tileData[3] >> 2) & 0x8)]; + renderer->outputBuffer[base + 3] = renderer->palette[p | ((tileData[0] >> 4) & 0x1) | ((tileData[1] >> 3) & 0x2) | ((tileData[2] >> 2) & 0x4) | ((tileData[3] >> 1) & 0x8)]; + renderer->outputBuffer[base + 4] = renderer->palette[p | ((tileData[0] >> 3) & 0x1) | ((tileData[1] >> 2) & 0x2) | ((tileData[2] >> 1) & 0x4) | ((tileData[3] >> 0) & 0x8)]; + renderer->outputBuffer[base + 5] = renderer->palette[p | ((tileData[0] >> 2) & 0x1) | ((tileData[1] >> 1) & 0x2) | ((tileData[2] >> 0) & 0x4) | ((tileData[3] << 1) & 0x8)]; + renderer->outputBuffer[base + 6] = renderer->palette[p | ((tileData[0] >> 1) & 0x1) | ((tileData[1] >> 0) & 0x2) | ((tileData[2] << 1) & 0x4) | ((tileData[3] << 2) & 0x8)]; + renderer->outputBuffer[base + 7] = renderer->palette[p | ((tileData[0] >> 0) & 0x1) | ((tileData[1] << 1) & 0x2) | ((tileData[2] << 2) & 0x4) | ((tileData[3] << 3) & 0x8)]; + } + } + } +} + +static inline void _setAttribute(uint8_t* sgbAttributes, unsigned x, unsigned y, int palette) { + int p = sgbAttributes[(x >> 2) + 5 * y]; + p &= ~(3 << (2 * (3 - (x & 3)))); + p |= palette << (2 * (3 - (x & 3))); + sgbAttributes[(x >> 2) + 5 * y] = p; +} + +static void _parseAttrBlock(struct GBVideoSoftwareRenderer* renderer, int start) { + uint8_t block[6]; + if (start < 0) { + memcpy(block, renderer->sgbPartialDataSet, -start); + memcpy(&block[-start], renderer->sgbPacket, 6 + start); + } else { + memcpy(block, &renderer->sgbPacket[start], 6); + } + unsigned x0 = block[2]; + unsigned x1 = block[4]; + unsigned y0 = block[3]; + unsigned y1 = block[5]; + unsigned x, y; + int pIn = block[1] & 3; + int pPerim = (block[1] >> 2) & 3; + int pOut = (block[1] >> 4) & 3; + + for (y = 0; y < GB_VIDEO_VERTICAL_PIXELS / 8; ++y) { + for (x = 0; x < GB_VIDEO_HORIZONTAL_PIXELS / 8; ++x) { + if (y > y0 && y < y1 && x > x0 && x < x1) { + if (block[0] & 1) { + _setAttribute(renderer->d.sgbAttributes, x, y, pIn); + } + } else if (y < y0 || y > y1 || x < x0 || x > x1) { + if (block[0] & 4) { + _setAttribute(renderer->d.sgbAttributes, x, y, pOut); + } + } else { + if (block[0] & 2) { + _setAttribute(renderer->d.sgbAttributes, x, y, pPerim); + } else if (block[0] & 1) { + _setAttribute(renderer->d.sgbAttributes, x, y, pIn); + } else if (block[0] & 4) { + _setAttribute(renderer->d.sgbAttributes, x, y, pOut); + } + } + } + } +} + void GBVideoSoftwareRendererCreate(struct GBVideoSoftwareRenderer* renderer) { renderer->d.init = GBVideoSoftwareRendererInit; renderer->d.deinit = GBVideoSoftwareRendererDeinit; renderer->d.writeVideoRegister = GBVideoSoftwareRendererWriteVideoRegister; + renderer->d.writeSGBPacket = GBVideoSoftwareRendererWriteSGBPacket; renderer->d.writePalette = GBVideoSoftwareRendererWritePalette; renderer->d.writeVRAM = GBVideoSoftwareRendererWriteVRAM; renderer->d.writeOAM = GBVideoSoftwareRendererWriteOAM;

@@ -58,7 +167,7 @@

renderer->temporaryBuffer = 0; } -static void GBVideoSoftwareRendererInit(struct GBVideoRenderer* renderer, enum GBModel model) { +static void GBVideoSoftwareRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool sgbBorders) { struct GBVideoSoftwareRenderer* softwareRenderer = (struct GBVideoSoftwareRenderer*) renderer; softwareRenderer->lcdc = 0; softwareRenderer->scy = 0;

@@ -67,6 +176,16 @@ softwareRenderer->wy = 0;

softwareRenderer->currentWy = 0; softwareRenderer->wx = 0; softwareRenderer->model = model; + softwareRenderer->sgbTransfer = 0; + softwareRenderer->sgbCommandHeader = 0; + softwareRenderer->sgbBorders = sgbBorders; + int i; + for (i = 0; i < 64; ++i) { + softwareRenderer->lookup[i] = i; + softwareRenderer->lookup[i] = i; + softwareRenderer->lookup[i] = i; + softwareRenderer->lookup[i] = i; + } } static void GBVideoSoftwareRendererDeinit(struct GBVideoRenderer* renderer) {

@@ -76,6 +195,9 @@ }

static uint8_t GBVideoSoftwareRendererWriteVideoRegister(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value) { struct GBVideoSoftwareRenderer* softwareRenderer = (struct GBVideoSoftwareRenderer*) renderer; + if (renderer->cache) { + GBVideoCacheWriteVideoRegister(renderer->cache, address, value); + } switch (address) { case REG_LCDC: softwareRenderer->lcdc = value;

@@ -92,37 +214,87 @@ break;

case REG_WX: softwareRenderer->wx = value; break; + case REG_BGP: + softwareRenderer->lookup[0] = value & 3; + softwareRenderer->lookup[1] = (value >> 2) & 3; + softwareRenderer->lookup[2] = (value >> 4) & 3; + softwareRenderer->lookup[3] = (value >> 6) & 3; + break; + case REG_OBP0: + softwareRenderer->lookup[0x20 + 0] = value & 3; + softwareRenderer->lookup[0x20 + 1] = (value >> 2) & 3; + softwareRenderer->lookup[0x20 + 2] = (value >> 4) & 3; + softwareRenderer->lookup[0x20 + 3] = (value >> 6) & 3; + break; + case REG_OBP1: + softwareRenderer->lookup[0x24 + 0] = value & 3; + softwareRenderer->lookup[0x24 + 1] = (value >> 2) & 3; + softwareRenderer->lookup[0x24 + 2] = (value >> 4) & 3; + softwareRenderer->lookup[0x24 + 3] = (value >> 6) & 3; + break; } return value; +} + +static void GBVideoSoftwareRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data) { + struct GBVideoSoftwareRenderer* softwareRenderer = (struct GBVideoSoftwareRenderer*) renderer; + memcpy(softwareRenderer->sgbPacket, data, sizeof(softwareRenderer->sgbPacket)); + int i; + if (!(softwareRenderer->sgbCommandHeader & 7)) { + softwareRenderer->sgbCommandHeader = data[0]; + softwareRenderer->sgbPacketId = 0; + softwareRenderer->sgbTransfer = 0; + } + --softwareRenderer->sgbCommandHeader; + ++softwareRenderer->sgbPacketId; + int set; + switch (softwareRenderer->sgbCommandHeader >> 3) { + case SGB_PAL_SET: + softwareRenderer->sgbPacket[1] = data[9]; + if (!(data[9] & 0x80)) { + break; + } + // Fall through + case SGB_ATTR_SET: + set = softwareRenderer->sgbPacket[1] & 0x3F; + if (set <= 0x2C) { + memcpy(renderer->sgbAttributes, &renderer->sgbAttributeFiles[set * 90], 90); + } + break; + case SGB_ATTR_BLK: + if (softwareRenderer->sgbPacketId == 1) { + softwareRenderer->sgbDataSets = softwareRenderer->sgbPacket[1]; + i = 2; + } else { + i = (9 - softwareRenderer->sgbPacketId) % 3 * -2; + } + for (; i <= 10 && softwareRenderer->sgbDataSets; i += 6, --softwareRenderer->sgbDataSets) { + _parseAttrBlock(softwareRenderer, i); + } + if (i < 16 && softwareRenderer->sgbDataSets) { + memcpy(softwareRenderer->sgbPartialDataSet, &softwareRenderer->sgbPacket[i], 16 - i); + } + break; + case SGB_ATRC_EN: + if (softwareRenderer->sgbBorders) { + _regenerateSGBBorder(softwareRenderer); + } + break; + } } static void GBVideoSoftwareRendererWritePalette(struct GBVideoRenderer* renderer, int index, uint16_t value) { struct GBVideoSoftwareRenderer* softwareRenderer = (struct GBVideoSoftwareRenderer*) renderer; -#ifdef COLOR_16_BIT -#ifdef COLOR_5_6_5 - color_t color = 0; - color |= (value & 0x001F) << 11; - color |= (value & 0x03E0) << 1; - color |= (value & 0x7C00) >> 10; -#else - color_t color = value; -#endif -#else - color_t color = 0; - color |= (value << 3) & 0xF8; - color |= (value << 6) & 0xF800; - color |= (value << 9) & 0xF80000; - color |= (color >> 5) & 0x070707; -#endif + color_t color = mColorFrom555(value); softwareRenderer->palette[index] = color; if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, index << 1); + mCacheSetWritePalette(renderer->cache, index, color); } } static void GBVideoSoftwareRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address) { if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } }

@@ -167,28 +339,149 @@ for (i = 0; i < oamMax; ++i) {

GBVideoSoftwareRendererDrawObj(softwareRenderer, &obj[i], startX, endX, y); } } - color_t* row = &softwareRenderer->outputBuffer[softwareRenderer->outputBufferStride * y]; - int x; - for (x = startX; x + 7 < (endX & ~7); x += 8) { - row[x] = softwareRenderer->palette[softwareRenderer->row[x] & 0x7F]; - row[x + 1] = softwareRenderer->palette[softwareRenderer->row[x + 1] & 0x7F]; - row[x + 2] = softwareRenderer->palette[softwareRenderer->row[x + 2] & 0x7F]; - row[x + 3] = softwareRenderer->palette[softwareRenderer->row[x + 3] & 0x7F]; - row[x + 4] = softwareRenderer->palette[softwareRenderer->row[x + 4] & 0x7F]; - row[x + 5] = softwareRenderer->palette[softwareRenderer->row[x + 5] & 0x7F]; - row[x + 6] = softwareRenderer->palette[softwareRenderer->row[x + 6] & 0x7F]; - row[x + 7] = softwareRenderer->palette[softwareRenderer->row[x + 7] & 0x7F]; + + size_t sgbOffset = 0; + if (softwareRenderer->model == GB_MODEL_SGB && softwareRenderer->sgbBorders) { + sgbOffset = softwareRenderer->outputBufferStride * 40 + 48; } - for (; x < endX; ++x) { - row[x] = softwareRenderer->palette[softwareRenderer->row[x] & 0x7F]; + color_t* row = &softwareRenderer->outputBuffer[softwareRenderer->outputBufferStride * y + sgbOffset]; + int x = startX; + int p = 0; + switch (softwareRenderer->d.sgbRenderMode) { + case 0: + if (softwareRenderer->model == GB_MODEL_SGB) { + p = softwareRenderer->d.sgbAttributes[(startX >> 5) + 5 * (y >> 3)]; + p >>= 6 - ((x / 4) & 0x6); + p &= 3; + p <<= 2; + } + for (; x < ((startX + 7) & ~7) && x < endX; ++x) { + row[x] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x] & 0x7F]]; + } + for (; x + 7 < (endX & ~7); x += 8) { + if (softwareRenderer->model == GB_MODEL_SGB) { + p = softwareRenderer->d.sgbAttributes[(x >> 5) + 5 * (y >> 3)]; + p >>= 6 - ((x / 4) & 0x6); + p &= 3; + p <<= 2; + } + row[x + 0] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x] & 0x7F]]; + row[x + 1] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 1] & 0x7F]]; + row[x + 2] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 2] & 0x7F]]; + row[x + 3] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 3] & 0x7F]]; + row[x + 4] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 4] & 0x7F]]; + row[x + 5] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 5] & 0x7F]]; + row[x + 6] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 6] & 0x7F]]; + row[x + 7] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x + 7] & 0x7F]]; + } + if (softwareRenderer->model == GB_MODEL_SGB) { + p = softwareRenderer->d.sgbAttributes[(x >> 5) + 5 * (y >> 3)]; + p >>= 6 - ((x / 4) & 0x6); + p &= 3; + p <<= 2; + } + for (; x < endX; ++x) { + row[x] = softwareRenderer->palette[p | softwareRenderer->lookup[softwareRenderer->row[x] & 0x7F]]; + } + break; + case 1: + break; + case 2: + for (; x < ((startX + 7) & ~7) && x < endX; ++x) { + row[x] = 0; + } + for (; x + 7 < (endX & ~7); x += 8) { + row[x] = 0; + row[x + 1] = 0; + row[x + 2] = 0; + row[x + 3] = 0; + row[x + 4] = 0; + row[x + 5] = 0; + row[x + 6] = 0; + row[x + 7] = 0; + } + for (; x < endX; ++x) { + row[x] = 0; + } + break; + case 3: + for (; x < ((startX + 7) & ~7) && x < endX; ++x) { + row[x] = softwareRenderer->palette[0]; + } + for (; x + 7 < (endX & ~7); x += 8) { + row[x] = softwareRenderer->palette[0]; + row[x + 1] = softwareRenderer->palette[0]; + row[x + 2] = softwareRenderer->palette[0]; + row[x + 3] = softwareRenderer->palette[0]; + row[x + 4] = softwareRenderer->palette[0]; + row[x + 5] = softwareRenderer->palette[0]; + row[x + 6] = softwareRenderer->palette[0]; + row[x + 7] = softwareRenderer->palette[0]; + } + for (; x < endX; ++x) { + row[x] = softwareRenderer->palette[0]; + } + break; } } static void GBVideoSoftwareRendererFinishScanline(struct GBVideoRenderer* renderer, int y) { struct GBVideoSoftwareRenderer* softwareRenderer = (struct GBVideoSoftwareRenderer*) renderer; + if (GBRegisterLCDCIsWindow(softwareRenderer->lcdc) && softwareRenderer->wy <= y && softwareRenderer->wx - 7 < GB_VIDEO_HORIZONTAL_PIXELS) { ++softwareRenderer->currentWy; } + if (softwareRenderer->sgbTransfer == 1) { + size_t offset = 2 * ((y & 7) + (y >> 3) * GB_VIDEO_HORIZONTAL_PIXELS); + if (offset >= 0x1000) { + return; + } + uint8_t* buffer = NULL; + switch (softwareRenderer->sgbCommandHeader >> 3) { + case SGB_PAL_TRN: + buffer = renderer->sgbPalRam; + break; + case SGB_CHR_TRN: + buffer = &renderer->sgbCharRam[SGB_SIZE_CHAR_RAM / 2 * (softwareRenderer->sgbPacket[1] & 1)]; + break; + case SGB_PCT_TRN: + buffer = renderer->sgbMapRam; + break; + case SGB_ATTR_TRN: + buffer = renderer->sgbAttributeFiles; + break; + default: + break; + } + if (buffer) { + int i; + for (i = 0; i < GB_VIDEO_HORIZONTAL_PIXELS; i += 8) { + if (UNLIKELY(offset + (i << 1) + 1 >= 0x1000)) { + break; + } + uint8_t hi = 0; + uint8_t lo = 0; + hi |= (softwareRenderer->row[i + 0] & 0x2) << 6; + lo |= (softwareRenderer->row[i + 0] & 0x1) << 7; + hi |= (softwareRenderer->row[i + 1] & 0x2) << 5; + lo |= (softwareRenderer->row[i + 1] & 0x1) << 6; + hi |= (softwareRenderer->row[i + 2] & 0x2) << 4; + lo |= (softwareRenderer->row[i + 2] & 0x1) << 5; + hi |= (softwareRenderer->row[i + 3] & 0x2) << 3; + lo |= (softwareRenderer->row[i + 3] & 0x1) << 4; + hi |= (softwareRenderer->row[i + 4] & 0x2) << 2; + lo |= (softwareRenderer->row[i + 4] & 0x1) << 3; + hi |= (softwareRenderer->row[i + 5] & 0x2) << 1; + lo |= (softwareRenderer->row[i + 5] & 0x1) << 2; + hi |= (softwareRenderer->row[i + 6] & 0x2) << 0; + lo |= (softwareRenderer->row[i + 6] & 0x1) << 1; + hi |= (softwareRenderer->row[i + 7] & 0x2) >> 1; + lo |= (softwareRenderer->row[i + 7] & 0x1) >> 0; + buffer[offset + (i << 1) + 0] = lo; + buffer[offset + (i << 1) + 1] = hi; + } + } + } } static void GBVideoSoftwareRendererFinishFrame(struct GBVideoRenderer* renderer) {

@@ -200,6 +493,32 @@ softwareRenderer->temporaryBuffer = 0;

} if (!GBRegisterLCDCIsEnable(softwareRenderer->lcdc)) { _clearScreen(softwareRenderer); + } + if (softwareRenderer->model == GB_MODEL_SGB) { + switch (softwareRenderer->sgbCommandHeader >> 3) { + case SGB_PAL_SET: + case SGB_ATTR_SET: + if (softwareRenderer->sgbPacket[1] & 0x40) { + renderer->sgbRenderMode = 0; + } + break; + case SGB_PAL_TRN: + case SGB_CHR_TRN: + case SGB_PCT_TRN: + if (softwareRenderer->sgbTransfer > 0 && softwareRenderer->sgbBorders) { + // Make sure every buffer sees this if we're multibuffering + _regenerateSGBBorder(softwareRenderer); + } + // Fall through + case SGB_ATTR_TRN: + ++softwareRenderer->sgbTransfer; + if (softwareRenderer->sgbTransfer == 5) { + softwareRenderer->sgbCommandHeader = 0; + } + break; + default: + break; + } } softwareRenderer->currentWy = 0; }
D src/gb/renderers/tile-cache.c

@@ -1,27 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include <mgba/internal/gb/renderers/tile-cache.h> - -#include <mgba/core/tile-cache.h> -#include <mgba/internal/gb/video.h> -#include <mgba/internal/gb/renderers/tile-cache.h> - -void GBVideoTileCacheInit(struct mTileCache* cache) { - mTileCacheInit(cache); - mTileCacheConfiguration config = 0; - config = mTileCacheSystemInfoSetPalette0BPP(config, 1); // 2^(2^2) = 4 entries - config = mTileCacheSystemInfoSetPalette0Count(config, 4); // 16 palettes - config = mTileCacheSystemInfoSetPalette1BPP(config, 0); // Disable - config = mTileCacheSystemInfoSetPalette1Count(config, 0); // Disable - config = mTileCacheSystemInfoSetMaxTiles(config, 1024); - mTileCacheConfigureSystem(cache, config); -} - -void GBVideoTileCacheAssociate(struct mTileCache* cache, struct GBVideo* video) { - cache->vram = (uint16_t*) video->vram; - cache->palette = video->palette; - video->renderer->cache = cache; -}
M src/gb/serialize.csrc/gb/serialize.c

@@ -12,7 +12,10 @@

mLOG_DEFINE_CATEGORY(GB_STATE, "GB Savestate", "gb.serialize"); const uint32_t GB_SAVESTATE_MAGIC = 0x00400000; -const uint32_t GB_SAVESTATE_VERSION = 0x00000001; +const uint32_t GB_SAVESTATE_VERSION = 0x00000002; + +static void GBSGBSerialize(struct GB* gb, struct GBSerializedState* state); +static void GBSGBDeserialize(struct GB* gb, const struct GBSerializedState* state); void GBSerialize(struct GB* gb, struct GBSerializedState* state) { STORE_32LE(GB_SAVESTATE_MAGIC + GB_SAVESTATE_VERSION, 0, &state->versionMagic);

@@ -20,7 +23,7 @@ STORE_32LE(gb->romCrc32, 0, &state->romCrc32);

STORE_32LE(gb->timing.masterCycles, 0, &state->masterCycles); if (gb->memory.rom) { - memcpy(state->title, ((struct GBCartridge*) gb->memory.rom)->titleLong, sizeof(state->title)); + memcpy(state->title, ((struct GBCartridge*) &gb->memory.rom[0x100])->titleLong, sizeof(state->title)); } else { memset(state->title, 0, sizeof(state->title)); }

@@ -44,7 +47,6 @@

STORE_16LE(gb->cpu->index, 0, &state->cpu.index); state->cpu.bus = gb->cpu->bus; state->cpu.executionState = gb->cpu->executionState; - STORE_16LE(gb->cpu->irqVector, 0, &state->cpu.irqVector); GBSerializedCpuFlags flags = 0; flags = GBSerializedCpuFlagsSetCondition(flags, gb->cpu->condition);

@@ -59,6 +61,10 @@ GBIOSerialize(gb, state);

GBVideoSerialize(&gb->video, state); GBTimerSerialize(&gb->timer, state); GBAudioSerialize(&gb->audio, state); + + if (gb->model == GB_MODEL_SGB) { + GBSGBSerialize(gb, state); + } } bool GBDeserialize(struct GB* gb, const struct GBSerializedState* state) {

@@ -77,10 +83,15 @@ error = true;

} else if (ucheck < GB_SAVESTATE_MAGIC + GB_SAVESTATE_VERSION) { mLOG(GB_STATE, WARN, "Old savestate: expected %08X, got %08X, continuing anyway", GB_SAVESTATE_MAGIC + GB_SAVESTATE_VERSION, ucheck); } + bool canSgb = ucheck >= GB_SAVESTATE_MAGIC + 2; - if (gb->memory.rom && memcmp(state->title, ((struct GBCartridge*) gb->memory.rom)->titleLong, sizeof(state->title))) { - mLOG(GB_STATE, WARN, "Savestate is for a different game"); - error = true; + if (gb->memory.rom && memcmp(state->title, ((struct GBCartridge*) &gb->memory.rom[0x100])->titleLong, sizeof(state->title))) { + LOAD_32LE(ucheck, 0, &state->versionMagic); + if (ucheck > GB_SAVESTATE_MAGIC + 2 || memcmp(state->title, ((struct GBCartridge*) gb->memory.rom)->titleLong, sizeof(state->title))) { + // There was a bug in previous versions where the memory address being compared was wrong + mLOG(GB_STATE, WARN, "Savestate is for a different game"); + error = true; + } } LOAD_32LE(ucheck, 0, &state->romCrc32); if (ucheck != gb->romCrc32) {

@@ -126,6 +137,7 @@ if (error) {

return false; } gb->timing.root = NULL; + LOAD_32LE(gb->timing.masterCycles, 0, &state->masterCycles); gb->cpu->a = state->cpu.a; gb->cpu->f.packed = state->cpu.f;

@@ -141,7 +153,6 @@

LOAD_16LE(gb->cpu->index, 0, &state->cpu.index); gb->cpu->bus = state->cpu.bus; gb->cpu->executionState = state->cpu.executionState; - LOAD_16LE(gb->cpu->irqVector, 0, &state->cpu.irqVector); GBSerializedCpuFlags flags; LOAD_32LE(flags, 0, &state->cpu.flags);

@@ -174,7 +185,74 @@ GBIODeserialize(gb, state);

GBTimerDeserialize(&gb->timer, state); GBAudioDeserialize(&gb->audio, state); + if (gb->model == GB_MODEL_SGB && canSgb) { + GBSGBDeserialize(gb, state); + } + gb->cpu->memory.setActiveRegion(gb->cpu, gb->cpu->pc); + gb->timing.reroot = gb->timing.root; + gb->timing.root = NULL; + return true; } + +// TODO: Reorganize SGB into its own file +void GBSGBSerialize(struct GB* gb, struct GBSerializedState* state) { + state->sgb.command = gb->video.sgbCommandHeader; + state->sgb.bits = gb->sgbBit; + + GBSerializedSGBFlags flags = 0; + flags = GBSerializedSGBFlagsSetP1Bits(flags, gb->currentSgbBits); + flags = GBSerializedSGBFlagsSetRenderMode(flags, gb->video.renderer->sgbRenderMode); + STORE_32LE(flags, 0, &state->sgb.flags); + + memcpy(state->sgb.packet, gb->sgbPacket, sizeof(state->sgb.packet)); + + if (gb->video.renderer->sgbCharRam) { + memcpy(state->sgb.charRam, gb->video.renderer->sgbCharRam, sizeof(state->sgb.charRam)); + } + if (gb->video.renderer->sgbMapRam) { + memcpy(state->sgb.mapRam, gb->video.renderer->sgbMapRam, sizeof(state->sgb.mapRam)); + } + if (gb->video.renderer->sgbPalRam) { + memcpy(state->sgb.palRam, gb->video.renderer->sgbPalRam, sizeof(state->sgb.palRam)); + } + if (gb->video.renderer->sgbAttributeFiles) { + memcpy(state->sgb.atfRam, gb->video.renderer->sgbAttributeFiles, sizeof(state->sgb.atfRam)); + } + if (gb->video.renderer->sgbAttributes) { + memcpy(state->sgb.attributes, gb->video.renderer->sgbAttributes, sizeof(state->sgb.attributes)); + } +} + +void GBSGBDeserialize(struct GB* gb, const struct GBSerializedState* state) { + gb->video.sgbCommandHeader = state->sgb.command; + gb->sgbBit = state->sgb.bits; + + GBSerializedSGBFlags flags; + LOAD_32LE(flags, 0, &state->sgb.flags); + gb->currentSgbBits = GBSerializedSGBFlagsGetP1Bits(flags); + gb->video.renderer->sgbRenderMode = GBSerializedSGBFlagsGetRenderMode(flags); + + memcpy(gb->sgbPacket, state->sgb.packet, sizeof(state->sgb.packet)); + + if (gb->video.renderer->sgbCharRam) { + memcpy(gb->video.renderer->sgbCharRam, state->sgb.charRam, sizeof(state->sgb.charRam)); + } + if (gb->video.renderer->sgbMapRam) { + memcpy(gb->video.renderer->sgbMapRam, state->sgb.mapRam, sizeof(state->sgb.mapRam)); + } + if (gb->video.renderer->sgbPalRam) { + memcpy(gb->video.renderer->sgbPalRam, state->sgb.palRam, sizeof(state->sgb.palRam)); + } + if (gb->video.renderer->sgbAttributeFiles) { + memcpy(gb->video.renderer->sgbAttributeFiles, state->sgb.atfRam, sizeof(state->sgb.atfRam)); + } + if (gb->video.renderer->sgbAttributes) { + memcpy(gb->video.renderer->sgbAttributes, state->sgb.attributes, sizeof(state->sgb.attributes)); + } + + GBVideoWriteSGBPacket(&gb->video, (uint8_t[16]) { (SGB_ATRC_EN << 3) | 1, 0 }); + GBVideoWriteSGBPacket(&gb->video, gb->sgbPacket); +}
M src/gb/test/core.csrc/gb/test/core.c

@@ -29,6 +29,7 @@ M_TEST_DEFINE(reset) {

struct mCore* core = GBCoreCreate(); assert_non_null(core); assert_true(core->init(core)); + mCoreInitConfig(core, NULL); core->reset(core); core->deinit(core); }

@@ -37,6 +38,7 @@ M_TEST_DEFINE(loadNullROM) {

struct mCore* core = GBCoreCreate(); assert_non_null(core); assert_true(core->init(core)); + mCoreInitConfig(core, NULL); assert_false(core->loadROM(core, NULL)); core->reset(core); core->deinit(core);
D src/gb/test/gb.c

@@ -1,20 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "util/test/suite.h" - -M_TEST_SUITE_DECLARE(GBCore); -M_TEST_SUITE_DECLARE(GBMBC); -M_TEST_SUITE_DECLARE(GBMemory); -M_TEST_SUITE_DECLARE(GBRTC); - -int TestRunGB(void) { - int failures = 0; - failures += M_TEST_SUITE_RUN(GBCore); - failures += M_TEST_SUITE_RUN(GBMBC); - failures += M_TEST_SUITE_RUN(GBMemory); - failures += M_TEST_SUITE_RUN(GBRTC); - return failures; -}
D src/gb/test/gb.h

@@ -1,12 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef TEST_GB_H -#define TEST_GB_H -#include <mgba-util/common.h> - -int TestRunGB(void); - -#endif
M src/gb/test/mbc.csrc/gb/test/mbc.c

@@ -16,6 +16,7 @@ struct VFile* vf = VFileMemChunk(NULL, 2048);

GBSynthesizeROM(vf); struct mCore* core = GBCoreCreate(); core->init(core); + mCoreInitConfig(core, NULL); core->loadROM(core, vf); *state = core; return 0;
M src/gb/test/memory.csrc/gb/test/memory.c

@@ -16,6 +16,7 @@ struct VFile* vf = VFileMemChunk(NULL, GB_SIZE_CART_BANK0 * 4);

GBSynthesizeROM(vf); struct mCore* core = GBCoreCreate(); core->init(core); + mCoreInitConfig(core, NULL); core->loadROM(core, vf); *state = core; return 0;
M src/gb/test/rtc.csrc/gb/test/rtc.c

@@ -48,6 +48,7 @@ *state = NULL;

return -1; } test->core->init(test->core); + mCoreInitConfig(test->core, NULL); struct VFile* vf = VFileMemChunk(NULL, 2048); GBSynthesizeROM(vf); test->core->loadROM(test->core, vf);
M src/gb/timer.csrc/gb/timer.c

@@ -64,7 +64,6 @@ timer->event.priority = 0x21;

timer->nextDiv = GB_DMG_DIV_PERIOD; // TODO: GBC differences timer->timaPeriod = 1024 >> 4; - timer->internalDiv = 0; } void GBTimerDivReset(struct GBTimer* timer) {
M src/gb/video.csrc/gb/video.c

@@ -7,17 +7,19 @@ #include <mgba/internal/gb/video.h>

#include <mgba/core/sync.h> #include <mgba/core/thread.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/gb/gb.h> #include <mgba/internal/gb/io.h> +#include <mgba/internal/gb/renderers/cache-set.h> #include <mgba/internal/gb/serialize.h> #include <mgba/internal/lr35902/lr35902.h> #include <mgba-util/memory.h> -static void GBVideoDummyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model); +static void GBVideoDummyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool borders); static void GBVideoDummyRendererDeinit(struct GBVideoRenderer* renderer); static uint8_t GBVideoDummyRendererWriteVideoRegister(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value); +static void GBVideoDummyRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data); static void GBVideoDummyRendererWritePalette(struct GBVideoRenderer* renderer, int index, uint16_t value); static void GBVideoDummyRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address); static void GBVideoDummyRendererWriteOAM(struct GBVideoRenderer* renderer, uint16_t oam);

@@ -39,6 +41,7 @@ static struct GBVideoRenderer dummyRenderer = {

.init = GBVideoDummyRendererInit, .deinit = GBVideoDummyRendererDeinit, .writeVideoRegister = GBVideoDummyRendererWriteVideoRegister, + .writeSGBPacket = GBVideoDummyRendererWriteSGBPacket, .writeVRAM = GBVideoDummyRendererWriteVRAM, .writeOAM = GBVideoDummyRendererWriteOAM, .writePalette = GBVideoDummyRendererWritePalette,

@@ -52,6 +55,7 @@

void GBVideoInit(struct GBVideo* video) { video->renderer = &dummyRenderer; video->renderer->cache = NULL; + video->renderer->sgbRenderMode = 0; video->vram = 0; video->frameskip = 0;

@@ -68,6 +72,22 @@ video->dmgPalette[0] = 0x7FFF;

video->dmgPalette[1] = 0x56B5; video->dmgPalette[2] = 0x294A; video->dmgPalette[3] = 0x0000; + video->dmgPalette[4] = 0x7FFF; + video->dmgPalette[5] = 0x56B5; + video->dmgPalette[6] = 0x294A; + video->dmgPalette[7] = 0x0000; + video->dmgPalette[8] = 0x7FFF; + video->dmgPalette[9] = 0x56B5; + video->dmgPalette[10] = 0x294A; + video->dmgPalette[11] = 0x0000; + + video->sgbBorders = true; + + video->renderer->sgbCharRam = NULL; + video->renderer->sgbMapRam = NULL; + video->renderer->sgbPalRam = NULL; + video->renderer->sgbAttributes = NULL; + video->renderer->sgbAttributeFiles = NULL; } void GBVideoReset(struct GBVideo* video) {

@@ -89,21 +109,83 @@ memset(&video->oam, 0, sizeof(video->oam));

video->renderer->oam = &video->oam; memset(&video->palette, 0, sizeof(video->palette)); + if (video->p->model == GB_MODEL_SGB) { + video->renderer->sgbCharRam = anonymousMemoryMap(SGB_SIZE_CHAR_RAM); + video->renderer->sgbMapRam = anonymousMemoryMap(SGB_SIZE_MAP_RAM); + video->renderer->sgbPalRam = anonymousMemoryMap(SGB_SIZE_PAL_RAM); + video->renderer->sgbAttributeFiles = anonymousMemoryMap(SGB_SIZE_ATF_RAM); + video->renderer->sgbAttributes = malloc(90 * 45); + memset(video->renderer->sgbAttributes, 0, 90 * 45); + video->sgbCommandHeader = 0; + } + + video->palette[0] = video->dmgPalette[0]; + video->palette[1] = video->dmgPalette[1]; + video->palette[2] = video->dmgPalette[2]; + video->palette[3] = video->dmgPalette[3]; + video->palette[8 * 4 + 0] = video->dmgPalette[4]; + video->palette[8 * 4 + 1] = video->dmgPalette[5]; + video->palette[8 * 4 + 2] = video->dmgPalette[6]; + video->palette[8 * 4 + 3] = video->dmgPalette[7]; + video->palette[9 * 4 + 0] = video->dmgPalette[8]; + video->palette[9 * 4 + 1] = video->dmgPalette[9]; + video->palette[9 * 4 + 2] = video->dmgPalette[10]; + video->palette[9 * 4 + 3] = video->dmgPalette[11]; + video->renderer->deinit(video->renderer); - video->renderer->init(video->renderer, video->p->model); + video->renderer->init(video->renderer, video->p->model, video->sgbBorders); + + video->renderer->writePalette(video->renderer, 0, video->palette[0]); + video->renderer->writePalette(video->renderer, 1, video->palette[1]); + video->renderer->writePalette(video->renderer, 2, video->palette[2]); + video->renderer->writePalette(video->renderer, 3, video->palette[3]); + video->renderer->writePalette(video->renderer, 8 * 4 + 0, video->palette[8 * 4 + 0]); + video->renderer->writePalette(video->renderer, 8 * 4 + 1, video->palette[8 * 4 + 1]); + video->renderer->writePalette(video->renderer, 8 * 4 + 2, video->palette[8 * 4 + 2]); + video->renderer->writePalette(video->renderer, 8 * 4 + 3, video->palette[8 * 4 + 3]); + video->renderer->writePalette(video->renderer, 9 * 4 + 0, video->palette[9 * 4 + 0]); + video->renderer->writePalette(video->renderer, 9 * 4 + 1, video->palette[9 * 4 + 1]); + video->renderer->writePalette(video->renderer, 9 * 4 + 2, video->palette[9 * 4 + 2]); + video->renderer->writePalette(video->renderer, 9 * 4 + 3, video->palette[9 * 4 + 3]); } void GBVideoDeinit(struct GBVideo* video) { GBVideoAssociateRenderer(video, &dummyRenderer); mappedMemoryFree(video->vram, GB_SIZE_VRAM); + if (video->renderer->sgbCharRam) { + mappedMemoryFree(video->renderer->sgbCharRam, SGB_SIZE_CHAR_RAM); + video->renderer->sgbCharRam = NULL; + } + if (video->renderer->sgbMapRam) { + mappedMemoryFree(video->renderer->sgbMapRam, SGB_SIZE_MAP_RAM); + video->renderer->sgbMapRam = NULL; + } + if (video->renderer->sgbPalRam) { + mappedMemoryFree(video->renderer->sgbPalRam, SGB_SIZE_PAL_RAM); + video->renderer->sgbPalRam = NULL; + } + if (video->renderer->sgbAttributeFiles) { + mappedMemoryFree(video->renderer->sgbAttributeFiles, SGB_SIZE_ATF_RAM); + video->renderer->sgbAttributeFiles = NULL; + } + if (video->renderer->sgbAttributes) { + free(video->renderer->sgbAttributes); + video->renderer->sgbAttributes = NULL; + } } void GBVideoAssociateRenderer(struct GBVideo* video, struct GBVideoRenderer* renderer) { video->renderer->deinit(video->renderer); renderer->cache = video->renderer->cache; + renderer->sgbRenderMode = video->renderer->sgbRenderMode; + renderer->sgbCharRam = video->renderer->sgbCharRam; + renderer->sgbMapRam = video->renderer->sgbMapRam; + renderer->sgbPalRam = video->renderer->sgbPalRam; + renderer->sgbAttributeFiles = video->renderer->sgbAttributeFiles; + renderer->sgbAttributes = video->renderer->sgbAttributes; video->renderer = renderer; renderer->vram = video->vram; - video->renderer->init(video->renderer, video->p->model); + video->renderer->init(video->renderer, video->p->model, video->sgbBorders); } static bool _statIRQAsserted(struct GBVideo* video, GBRegisterSTAT stat) {

@@ -154,6 +236,7 @@ next = GB_VIDEO_HORIZONTAL_LENGTH;

video->mode = 1; video->modeEvent.callback = _endMode1; + mTimingDeschedule(&video->p->timing, &video->frameEvent); mTimingSchedule(&video->p->timing, &video->frameEvent, -cyclesLate); if (!_statIRQAsserted(video, oldStat) && GBRegisterSTATIsOAMIRQ(video->stat)) {

@@ -230,6 +313,7 @@ struct GBVideo* video = context;

GBVideoProcessDots(video); if (video->ly < GB_VIDEO_VERTICAL_PIXELS && video->p->memory.isHdma && video->p->memory.io[REG_HDMA5] != 0xFF) { video->p->memory.hdmaRemaining = 0x10; + video->p->cpuBlocked = true; mTimingDeschedule(timing, &video->p->memory.hdmaEvent); mTimingSchedule(timing, &video->p->memory.hdmaEvent, 0); }

@@ -263,10 +347,10 @@ }

} GBFrameEnded(video->p); + mCoreSyncPostFrame(video->p->sync); --video->frameskipCounter; if (video->frameskipCounter < 0) { video->renderer->finishFrame(video->renderer); - mCoreSyncPostFrame(video->p->sync); video->frameskipCounter = video->frameskip; } ++video->frameCounter;

@@ -342,9 +426,8 @@ mTimingSchedule(&video->p->timing, &video->modeEvent, next << video->p->doubleSpeed);

video->ly = 0; video->p->memory.io[REG_LY] = 0; - // TODO: Does this read as 0 for 4 T-cycles? GBRegisterSTAT oldStat = video->stat; - video->stat = GBRegisterSTATSetMode(video->stat, 2); + video->stat = GBRegisterSTATSetMode(video->stat, 0); video->stat = GBRegisterSTATSetLYC(video->stat, video->ly == video->p->memory.io[REG_LYC]); if (!_statIRQAsserted(video, oldStat) && _statIRQAsserted(video, video->stat)) { video->p->memory.io[REG_IF] |= (1 << GB_IRQ_LCDSTAT);

@@ -372,7 +455,7 @@

void GBVideoWriteSTAT(struct GBVideo* video, GBRegisterSTAT value) { GBRegisterSTAT oldStat = video->stat; video->stat = (video->stat & 0x7) | (value & 0x78); - if (video->p->model == GB_MODEL_DMG && !_statIRQAsserted(video, oldStat) && video->mode < 3) { + if (video->p->model < GB_MODEL_CGB && !_statIRQAsserted(video, oldStat) && video->mode < 3) { // TODO: variable for the IRQ line value? video->p->memory.io[REG_IF] |= (1 << GB_IRQ_LCDSTAT); GBUpdateIRQs(video->p);

@@ -390,7 +473,7 @@ video->p->memory.io[REG_STAT] = video->stat;

} void GBVideoWritePalette(struct GBVideo* video, uint16_t address, uint8_t value) { - if (video->p->model < GB_MODEL_CGB) { + if (video->p->model < GB_MODEL_SGB) { switch (address) { case REG_BGP: video->palette[0] = video->dmgPalette[value & 3];

@@ -403,26 +486,28 @@ video->renderer->writePalette(video->renderer, 2, video->palette[2]);

video->renderer->writePalette(video->renderer, 3, video->palette[3]); break; case REG_OBP0: - video->palette[8 * 4 + 0] = video->dmgPalette[value & 3]; - video->palette[8 * 4 + 1] = video->dmgPalette[(value >> 2) & 3]; - video->palette[8 * 4 + 2] = video->dmgPalette[(value >> 4) & 3]; - video->palette[8 * 4 + 3] = video->dmgPalette[(value >> 6) & 3]; + video->palette[8 * 4 + 0] = video->dmgPalette[(value & 3) + 4]; + video->palette[8 * 4 + 1] = video->dmgPalette[((value >> 2) & 3) + 4]; + video->palette[8 * 4 + 2] = video->dmgPalette[((value >> 4) & 3) + 4]; + video->palette[8 * 4 + 3] = video->dmgPalette[((value >> 6) & 3) + 4]; video->renderer->writePalette(video->renderer, 8 * 4 + 0, video->palette[8 * 4 + 0]); video->renderer->writePalette(video->renderer, 8 * 4 + 1, video->palette[8 * 4 + 1]); video->renderer->writePalette(video->renderer, 8 * 4 + 2, video->palette[8 * 4 + 2]); video->renderer->writePalette(video->renderer, 8 * 4 + 3, video->palette[8 * 4 + 3]); break; case REG_OBP1: - video->palette[9 * 4 + 0] = video->dmgPalette[value & 3]; - video->palette[9 * 4 + 1] = video->dmgPalette[(value >> 2) & 3]; - video->palette[9 * 4 + 2] = video->dmgPalette[(value >> 4) & 3]; - video->palette[9 * 4 + 3] = video->dmgPalette[(value >> 6) & 3]; + video->palette[9 * 4 + 0] = video->dmgPalette[(value & 3) + 8]; + video->palette[9 * 4 + 1] = video->dmgPalette[((value >> 2) & 3) + 8]; + video->palette[9 * 4 + 2] = video->dmgPalette[((value >> 4) & 3) + 8]; + video->palette[9 * 4 + 3] = video->dmgPalette[((value >> 6) & 3) + 8]; video->renderer->writePalette(video->renderer, 9 * 4 + 0, video->palette[9 * 4 + 0]); video->renderer->writePalette(video->renderer, 9 * 4 + 1, video->palette[9 * 4 + 1]); video->renderer->writePalette(video->renderer, 9 * 4 + 2, video->palette[9 * 4 + 2]); video->renderer->writePalette(video->renderer, 9 * 4 + 3, video->palette[9 * 4 + 3]); break; } + } else if (video->p->model == GB_MODEL_SGB) { + video->renderer->writeVideoRegister(video->renderer, address, value); } else { switch (address) { case REG_BCPD:

@@ -470,15 +555,160 @@ video->vramCurrentBank = value;

} void GBVideoSetPalette(struct GBVideo* video, unsigned index, uint32_t color) { - if (index >= 4) { + if (index >= 12) { return; } video->dmgPalette[index] = M_RGB8_TO_RGB5(color); } -static void GBVideoDummyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model) { +void GBVideoDisableCGB(struct GBVideo* video) { + video->dmgPalette[0] = video->palette[0]; + video->dmgPalette[1] = video->palette[1]; + video->dmgPalette[2] = video->palette[2]; + video->dmgPalette[3] = video->palette[3]; + video->dmgPalette[4] = video->palette[8 * 4 + 0]; + video->dmgPalette[5] = video->palette[8 * 4 + 1]; + video->dmgPalette[6] = video->palette[8 * 4 + 2]; + video->dmgPalette[7] = video->palette[8 * 4 + 3]; + video->dmgPalette[8] = video->palette[9 * 4 + 0]; + video->dmgPalette[9] = video->palette[9 * 4 + 1]; + video->dmgPalette[10] = video->palette[9 * 4 + 2]; + video->dmgPalette[11] = video->palette[9 * 4 + 3]; + video->renderer->deinit(video->renderer); + video->renderer->init(video->renderer, video->p->model, video->sgbBorders); +} + +void GBVideoWriteSGBPacket(struct GBVideo* video, uint8_t* data) { + int i; + if (!(video->sgbCommandHeader & 7)) { + if ((data[0] >> 3) > SGB_OBJ_TRN) { + video->sgbCommandHeader = 0; + return; + } + video->sgbCommandHeader = data[0]; + } + --video->sgbCommandHeader; + switch (video->sgbCommandHeader >> 3) { + case SGB_PAL01: + video->palette[0] = data[1] | (data[2] << 8); + video->palette[1] = data[3] | (data[4] << 8); + video->palette[2] = data[5] | (data[6] << 8); + video->palette[3] = data[7] | (data[8] << 8); + + video->palette[16] = data[1] | (data[2] << 8); + video->palette[17] = data[9] | (data[10] << 8); + video->palette[18] = data[11] | (data[12] << 8); + video->palette[19] = data[13] | (data[14] << 8); + + video->palette[32] = data[1] | (data[2] << 8); + video->palette[48] = data[1] | (data[2] << 8); + + video->renderer->writePalette(video->renderer, 0, video->palette[0]); + video->renderer->writePalette(video->renderer, 1, video->palette[1]); + video->renderer->writePalette(video->renderer, 2, video->palette[2]); + video->renderer->writePalette(video->renderer, 3, video->palette[3]); + video->renderer->writePalette(video->renderer, 16, video->palette[0]); + video->renderer->writePalette(video->renderer, 17, video->palette[17]); + video->renderer->writePalette(video->renderer, 18, video->palette[18]); + video->renderer->writePalette(video->renderer, 19, video->palette[19]); + video->renderer->writePalette(video->renderer, 32, video->palette[0]); + video->renderer->writePalette(video->renderer, 48, video->palette[0]); + break; + case SGB_PAL23: + video->palette[33] = data[3] | (data[4] << 8); + video->palette[34] = data[5] | (data[6] << 8); + video->palette[35] = data[7] | (data[8] << 8); + + video->palette[49] = data[9] | (data[10] << 8); + video->palette[50] = data[11] | (data[12] << 8); + video->palette[51] = data[13] | (data[14] << 8); + video->renderer->writePalette(video->renderer, 33, video->palette[33]); + video->renderer->writePalette(video->renderer, 34, video->palette[34]); + video->renderer->writePalette(video->renderer, 35, video->palette[35]); + video->renderer->writePalette(video->renderer, 49, video->palette[49]); + video->renderer->writePalette(video->renderer, 50, video->palette[50]); + video->renderer->writePalette(video->renderer, 51, video->palette[51]); + break; + case SGB_PAL03: + video->palette[0] = data[1] | (data[2] << 8); + video->palette[1] = data[3] | (data[4] << 8); + video->palette[2] = data[5] | (data[6] << 8); + video->palette[3] = data[7] | (data[8] << 8); + + video->palette[16] = data[1] | (data[2] << 8); + video->palette[32] = data[1] | (data[2] << 8); + + video->palette[48] = data[1] | (data[2] << 8); + video->palette[49] = data[9] | (data[10] << 8); + video->palette[50] = data[11] | (data[12] << 8); + video->palette[51] = data[13] | (data[14] << 8); + video->renderer->writePalette(video->renderer, 0, video->palette[0]); + video->renderer->writePalette(video->renderer, 1, video->palette[1]); + video->renderer->writePalette(video->renderer, 2, video->palette[2]); + video->renderer->writePalette(video->renderer, 3, video->palette[3]); + video->renderer->writePalette(video->renderer, 16, video->palette[0]); + video->renderer->writePalette(video->renderer, 32, video->palette[0]); + video->renderer->writePalette(video->renderer, 48, video->palette[0]); + video->renderer->writePalette(video->renderer, 49, video->palette[49]); + video->renderer->writePalette(video->renderer, 50, video->palette[50]); + video->renderer->writePalette(video->renderer, 51, video->palette[51]); + break; + case SGB_PAL12: + video->palette[17] = data[3] | (data[4] << 8); + video->palette[18] = data[5] | (data[6] << 8); + video->palette[19] = data[7] | (data[8] << 8); + + video->palette[33] = data[9] | (data[10] << 8); + video->palette[34] = data[11] | (data[12] << 8); + video->palette[35] = data[13] | (data[14] << 8); + video->renderer->writePalette(video->renderer, 17, video->palette[17]); + video->renderer->writePalette(video->renderer, 18, video->palette[18]); + video->renderer->writePalette(video->renderer, 19, video->palette[19]); + video->renderer->writePalette(video->renderer, 33, video->palette[33]); + video->renderer->writePalette(video->renderer, 34, video->palette[34]); + video->renderer->writePalette(video->renderer, 35, video->palette[35]); + break; + case SGB_PAL_SET: + for (i = 0; i < 4; ++i) { + uint16_t entry = (data[2 + (i * 2)] << 8) | data[1 + (i * 2)]; + if (entry >= 0x200) { + mLOG(GB, STUB, "Unimplemented SGB palette overflow: %03X", entry); + continue; + } + LOAD_16LE(video->palette[i * 4 + 0], entry * 8 + 0, video->renderer->sgbPalRam); + video->renderer->writePalette(video->renderer, i * 4 + 0, video->palette[0]); + LOAD_16LE(video->palette[i * 4 + 1], entry * 8 + 2, video->renderer->sgbPalRam); + video->renderer->writePalette(video->renderer, i * 4 + 1, video->palette[i * 4 + 1]); + LOAD_16LE(video->palette[i * 4 + 2], entry * 8 + 4, video->renderer->sgbPalRam); + video->renderer->writePalette(video->renderer, i * 4 + 2, video->palette[i * 4 + 2]); + LOAD_16LE(video->palette[i * 4 + 3], entry * 8 + 6, video->renderer->sgbPalRam); + video->renderer->writePalette(video->renderer, i * 4 + 3, video->palette[i * 4 + 3]); + } + break; + case SGB_ATTR_BLK: + case SGB_PAL_TRN: + case SGB_ATRC_EN: + case SGB_CHR_TRN: + case SGB_PCT_TRN: + case SGB_ATTR_TRN: + case SGB_ATTR_SET: + break; + case SGB_MLT_REG: + return; + case SGB_MASK_EN: + video->renderer->sgbRenderMode = data[1] & 0x3; + break; + default: + mLOG(GB, STUB, "Unimplemented SGB command: %02X", data[0] >> 3); + return; + } + video->renderer->writeSGBPacket(video->renderer, data); +} + +static void GBVideoDummyRendererInit(struct GBVideoRenderer* renderer, enum GBModel model, bool borders) { UNUSED(renderer); UNUSED(model); + UNUSED(borders); // Nothing to do }

@@ -488,14 +718,20 @@ // Nothing to do

} static uint8_t GBVideoDummyRendererWriteVideoRegister(struct GBVideoRenderer* renderer, uint16_t address, uint8_t value) { + if (renderer->cache) { + GBVideoCacheWriteVideoRegister(renderer->cache, address, value); + } + return value; +} + +static void GBVideoDummyRendererWriteSGBPacket(struct GBVideoRenderer* renderer, uint8_t* data) { UNUSED(renderer); - UNUSED(address); - return value; + UNUSED(data); } static void GBVideoDummyRendererWriteVRAM(struct GBVideoRenderer* renderer, uint16_t address) { if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } }

@@ -506,9 +742,8 @@ // Nothing to do

} static void GBVideoDummyRendererWritePalette(struct GBVideoRenderer* renderer, int index, uint16_t value) { - UNUSED(value); if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, index << 1); + mCacheSetWritePalette(renderer->cache, index, mColorFrom555(value)); } }

@@ -628,5 +863,5 @@ _cleanOAM(video, video->ly);

GBVideoSwitchBank(video, video->vramCurrentBank); video->renderer->deinit(video->renderer); - video->renderer->init(video->renderer, video->p->model); + video->renderer->init(video->renderer, video->p->model, video->sgbBorders); }
M src/gba/bios.csrc/gba/bios.c

@@ -61,7 +61,7 @@ if (registers & 0x04) {

memset(gba->video.palette, 0, SIZE_PALETTE_RAM); } if (registers & 0x08) { - memset(gba->video.renderer->vram, 0, SIZE_VRAM); + memset(gba->video.vram, 0, SIZE_VRAM); } if (registers & 0x10) { memset(gba->video.oam.raw, 0, SIZE_OAM);
M src/gba/cheats.csrc/gba/cheats.c

@@ -139,7 +139,8 @@ uint32_t o2 = op2;

char line[18] = "XXXXXXXX XXXXXXXX"; snprintf(line, sizeof(line), "%08X %08X", op1, op2); - int gsaP, parP; + int gsaP, rgsaP, parP, rparP; + int maxProbability = INT_MIN; switch (set->gsaVersion) { case 0: // Try to detect GameShark version

@@ -147,27 +148,42 @@ GBACheatDecryptGameShark(&o1, &o2, GBACheatGameSharkSeeds);

gsaP = GBACheatGameSharkProbability(o1, o2); o1 = op1; o2 = op2; + if (gsaP > maxProbability) { + maxProbability = gsaP; + GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1); + } + GBACheatDecryptGameShark(&o1, &o2, GBACheatProActionReplaySeeds); parP = GBACheatProActionReplayProbability(o1, o2); - o1 = op1; - o2 = op2; - if (gsaP > parP) { - GBACheatSetGameSharkVersion(set, 1); - GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); - return GBACheatAddGameSharkRaw(set, o1, o2); + if (parP > maxProbability) { + maxProbability = parP; + GBACheatSetGameSharkVersion(set, GBA_GS_PARV3); + } + + rgsaP = GBACheatGameSharkProbability(op1, op1); + if (rgsaP > maxProbability) { + maxProbability = rgsaP; + GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1_RAW); + } + + rparP = GBACheatProActionReplayProbability(op1, op1); + if (rparP > maxProbability) { + maxProbability = rparP; + GBACheatSetGameSharkVersion(set, GBA_GS_PARV3_RAW); + } + + if (set->gsaVersion < 3) { + return GBACheatAddGameShark(set, op1, op2); } else { - // If probabilities are equal, assume PARv3 - GBACheatSetGameSharkVersion(set, 3); - GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); - return GBACheatAddProActionReplayRaw(set, o1, o2); + return GBACheatAddProActionReplay(set, op1, op2); } break; case 1: - GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); - return GBACheatAddGameSharkRaw(set, o1, o2); + case 2: + return GBACheatAddGameShark(set, o1, o2); case 3: - GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); - return GBACheatAddProActionReplayRaw(set, o1, o2); + case 4: + return GBACheatAddProActionReplay(set, o1, o2); } return false; }

@@ -288,11 +304,19 @@ size_t d;

for (d = 0; d < StringListSize(directives); ++d) { const char* directive = *StringListGetConstPointer(directives, d); if (strcmp(directive, "GSAv1") == 0) { - GBACheatSetGameSharkVersion(cheats, 1); + GBACheatSetGameSharkVersion(cheats, GBA_GS_GSAV1); + continue; + } + if (strcmp(directive, "GSAv1 raw") == 0) { + GBACheatSetGameSharkVersion(cheats, GBA_GS_GSAV1_RAW); continue; } if (strcmp(directive, "PARv3") == 0) { - GBACheatSetGameSharkVersion(cheats, 3); + GBACheatSetGameSharkVersion(cheats, GBA_GS_PARV3); + continue; + } + if (strcmp(directive, "PARv3 raw") == 0) { + GBACheatSetGameSharkVersion(cheats, GBA_GS_PARV3_RAW); continue; } }

@@ -311,14 +335,20 @@

char** directive; switch (cheats->gsaVersion) { case 1: + directive = StringListAppend(directives); + *directive = strdup("GSAv1"); + break; case 2: directive = StringListAppend(directives); - *directive = strdup("GSAv1"); + *directive = strdup("GSAv1 raw"); break; case 3: + directive = StringListAppend(directives); + *directive = strdup("PARv3"); + break; case 4: directive = StringListAppend(directives); - *directive = strdup("PARv3"); + *directive = strdup("PARv3 raw"); break; } }

@@ -367,7 +397,7 @@ case REGION_CART2_EX:

return -0x8; case REGION_CART_SRAM: case REGION_CART_SRAM_MIRROR: - if ((address & OFFSET_MASK) > SIZE_CART_SRAM) { + if ((address & OFFSET_MASK) > SIZE_CART_FLASH512) { return -0x80; } return -0x8;
M src/gba/cheats/gameshark.csrc/gba/cheats/gameshark.c

@@ -5,6 +5,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include <mgba/internal/gba/cheats.h> +#include "gba/cheats/gameshark.h" #include "gba/cheats/parv3.h" #include <mgba/internal/gba/gba.h> #include <mgba-util/string.h>

@@ -73,16 +74,18 @@ }

} } -void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, int version) { +void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, enum GBACheatGameSharkVersion version) { cheats->gsaVersion = version; switch (version) { - case 1: - case 2: + case GBA_GS_GSAV1: + case GBA_GS_GSAV1_RAW: memcpy(cheats->gsaSeeds, GBACheatGameSharkSeeds, 4 * sizeof(uint32_t)); break; - case 3: - case 4: + case GBA_GS_PARV3: + case GBA_GS_PARV3_RAW: memcpy(cheats->gsaSeeds, GBACheatProActionReplaySeeds, 4 * sizeof(uint32_t)); + break; + default: break; } }

@@ -197,14 +200,13 @@ char line[18] = "XXXXXXXX XXXXXXXX";

snprintf(line, sizeof(line), "%08X %08X", op1, op2); switch (set->gsaVersion) { - case 0: - case 3: - case 4: - GBACheatSetGameSharkVersion(set, 1); + default: + GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1); // Fall through - case 1: - case 2: + case GBA_GS_GSAV1: GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); + // Fall through + case GBA_GS_GSAV1_RAW: return GBACheatAddGameSharkRaw(set, o1, o2); } return false;
M src/gba/cheats/gameshark.hsrc/gba/cheats/gameshark.h

@@ -12,10 +12,18 @@ CXX_GUARD_START

extern const uint32_t GBACheatGameSharkSeeds[4]; +enum GBACheatGameSharkVersion { + GBA_GS_NOT_SET = 0, + GBA_GS_GSAV1 = 1, + GBA_GS_GSAV1_RAW = 2, + GBA_GS_PARV3 = 3, + GBA_GS_PARV3_RAW = 4 +}; + struct GBACheatSet; void GBACheatDecryptGameShark(uint32_t* op1, uint32_t* op2, const uint32_t* seeds); void GBACheatReseedGameShark(uint32_t* seeds, uint16_t params, const uint8_t* t1, const uint8_t* t2); -void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, int version); +void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, enum GBACheatGameSharkVersion version); bool GBACheatAddGameSharkRaw(struct GBACheatSet* cheats, uint32_t op1, uint32_t op2); int GBACheatGameSharkProbability(uint32_t op1, uint32_t op2);
M src/gba/cheats/parv3.csrc/gba/cheats/parv3.c

@@ -53,7 +53,7 @@ return (x & 0xFFFFF) | ((x << 4) & 0x0F000000);

} static void _parEndBlock(struct GBACheatSet* cheats) { - size_t size = mCheatListSize(&cheats->d.list) - cheats->currentBlock; + size_t size = mCheatListSize(&cheats->d.list) - cheats->currentBlock - 1; struct mCheat* currentBlock = mCheatListGetPointer(&cheats->d.list, cheats->currentBlock); if (currentBlock->repeat) { currentBlock->negativeRepeat = size - currentBlock->repeat;

@@ -64,7 +64,7 @@ cheats->currentBlock = COMPLETE;

} static void _parElseBlock(struct GBACheatSet* cheats) { - size_t size = mCheatListSize(&cheats->d.list) - cheats->currentBlock; + size_t size = mCheatListSize(&cheats->d.list) - cheats->currentBlock - 1; struct mCheat* currentBlock = mCheatListGetPointer(&cheats->d.list, cheats->currentBlock); currentBlock->repeat = size; }

@@ -284,6 +284,10 @@ cheat->type = CHEAT_ASSIGN;

cheat->address = BASE_IO | (op1 & OFFSET_MASK); break; } + if (op1 & 0x01000000 && (op1 & 0xFE000000) != 0xC6000000) { + return false; + } + cheat->width = width; cheat->operand = op2 & (0xFFFFFFFFU >> ((4 - width) * 8));

@@ -297,14 +301,13 @@ char line[18] = "XXXXXXXX XXXXXXXX";

snprintf(line, sizeof(line), "%08X %08X", op1, op2); switch (set->gsaVersion) { - case 0: - case 1: - case 2: - GBACheatSetGameSharkVersion(set, 3); + default: + GBACheatSetGameSharkVersion(set, GBA_GS_PARV3); // Fall through - case 3: - case 4: + case GBA_GS_PARV3: GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds); + // Fall through + case GBA_GS_PARV3_RAW: return GBACheatAddProActionReplayRaw(set, o1, o2); } return false;

@@ -370,7 +373,7 @@ }

int width = ((op1 & PAR3_WIDTH) >> (PAR3_WIDTH_BASE - 3)); if (op1 & PAR3_COND) { probability += 0x20; - if (width == 32) { + if (width >= 24) { return 0; } if (op2 & ~((1 << width) - 1)) {

@@ -384,10 +387,13 @@ case PAR3_BASE_ADD:

if (op2 & ~((1 << width) - 1)) { probability -= 0x10; } + // Fall through case PAR3_BASE_ASSIGN: case PAR3_BASE_INDIRECT: probability += GBACheatAddressIsReal(address); - // Fall through + if (op1 & 0x01000000) { + return 0; + } break; case PAR3_BASE_OTHER: break;
M src/gba/core.csrc/gba/core.c

@@ -266,6 +266,7 @@ static void _GBACoreSetVideoBuffer(struct mCore* core, color_t* buffer, size_t stride) {

struct GBACore* gbacore = (struct GBACore*) core; gbacore->renderer.outputBuffer = buffer; gbacore->renderer.outputBufferStride = stride; + memset(gbacore->renderer.scanlineDirty, 0xFFFFFFFF, sizeof(gbacore->renderer.scanlineDirty)); } static void _GBACoreGetPixels(struct mCore* core, const void** buffer, size_t* stride) {

@@ -402,14 +403,7 @@ #endif

GBAVideoAssociateRenderer(&gba->video, renderer); } - struct GBACartridgeOverride override; - const struct GBACartridge* cart = (const struct GBACartridge*) gba->memory.rom; - if (cart) { - memcpy(override.id, &cart->id, sizeof(override.id)); - if (GBAOverrideFind(gbacore->overrides, &override)) { - GBAOverrideApply(gba, &override); - } - } + GBAOverrideApplyDefaults(gba, gbacore->overrides); #if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2 if (!gba->biosVf && core->opts.useBios) {

@@ -505,7 +499,6 @@

static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) { struct GBACore* gbacore = (struct GBACore*) core; gbacore->keys &= ~keys; - GBATestKeypadIRQ(core->board); } static int32_t _GBACoreFrameCounter(const struct mCore* core) {
M src/gba/extra/proxy.csrc/gba/extra/proxy.c

@@ -5,7 +5,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include <mgba/internal/gba/renderers/proxy.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/gba/gba.h> #include <mgba/internal/gba/io.h>

@@ -206,7 +206,7 @@ if (!proxyRenderer->logger->block) {

proxyRenderer->backend->writeVRAM(proxyRenderer->backend, address); } if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } }

@@ -217,7 +217,7 @@ if (!proxyRenderer->logger->block) {

proxyRenderer->backend->writePalette(proxyRenderer->backend, address, value); } if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, address); + mCacheSetWritePalette(renderer->cache, address >> 1, mColorFrom555(value)); } }
M src/gba/gba.csrc/gba/gba.c

@@ -755,19 +755,17 @@ if (!(keycnt & 0x4000)) {

return; } int isAnd = keycnt & 0x8000; - uint16_t keyInput; - if (!gba->keySource) { // TODO? return; } keycnt &= 0x3FF; - keyInput = *gba->keySource; + uint16_t keyInput = *gba->keySource & keycnt; if (isAnd && keycnt == keyInput) { GBARaiseIRQ(gba, IRQ_KEYPAD); - } else if (!isAnd && keycnt & keyInput) { + } else if (!isAnd && keyInput) { GBARaiseIRQ(gba, IRQ_KEYPAD); } }
M src/gba/io.csrc/gba/io.c

@@ -890,14 +890,17 @@ // Handled transparently by registers

break; case REG_MAX: // Some bad interrupt libraries will read from this - break; - case 0x66: - case 0x6E: - case 0x76: - case 0x7A: - case 0x7E: - case 0x86: - case 0x8A: + case 0x066: + case 0x06E: + case 0x076: + case 0x07A: + case 0x07E: + case 0x086: + case 0x08A: + case 0x136: + case 0x142: + case 0x15A: + case 0x206: mLOG(GBA_IO, GAME_ERROR, "Read from unused I/O register: %03X", address); return 0; case REG_DEBUG_ENABLE:
M src/gba/memory.csrc/gba/memory.c

@@ -92,6 +92,7 @@ mappedMemoryFree(gba->memory.iwram, SIZE_WORKING_IRAM);

if (gba->memory.rom) { mappedMemoryFree(gba->memory.rom, gba->memory.romSize); } + gba->memory.savedata.maskWriteback = false; GBASavedataUnmask(&gba->memory.savedata); GBASavedataDeinit(&gba->memory.savedata); if (gba->memory.savedata.realVf) {

@@ -683,27 +684,39 @@ #define STORE_IO \

GBAIOWrite32(gba, address & (OFFSET_MASK - 3), value); #define STORE_PALETTE_RAM \ - STORE_32(value, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \ - gba->video.renderer->writePalette(gba->video.renderer, (address & (SIZE_PALETTE_RAM - 4)) + 2, value >> 16); \ - wait += waitstatesRegion[REGION_PALETTE_RAM]; \ - gba->video.renderer->writePalette(gba->video.renderer, address & (SIZE_PALETTE_RAM - 4), value); + LOAD_32(oldValue, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \ + if (oldValue != value) { \ + STORE_32(value, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \ + gba->video.renderer->writePalette(gba->video.renderer, (address & (SIZE_PALETTE_RAM - 4)) + 2, value >> 16); \ + gba->video.renderer->writePalette(gba->video.renderer, address & (SIZE_PALETTE_RAM - 4), value); \ + } \ + wait += waitstatesRegion[REGION_PALETTE_RAM]; #define STORE_VRAM \ if ((address & 0x0001FFFF) < SIZE_VRAM) { \ - STORE_32(value, address & 0x0001FFFC, gba->video.vram); \ - gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x0001FFFC) + 2); \ - gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x0001FFFC)); \ + LOAD_32(oldValue, address & 0x0001FFFC, gba->video.vram); \ + if (oldValue != value) { \ + STORE_32(value, address & 0x0001FFFC, gba->video.vram); \ + gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x0001FFFC) + 2); \ + gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x0001FFFC)); \ + } \ } else { \ - STORE_32(value, address & 0x00017FFC, gba->video.vram); \ - gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x00017FFC) + 2); \ - gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x00017FFC)); \ + LOAD_32(oldValue, address & 0x00017FFC, gba->video.vram); \ + if (oldValue != value) { \ + STORE_32(value, address & 0x00017FFC, gba->video.vram); \ + gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x00017FFC) + 2); \ + gba->video.renderer->writeVRAM(gba->video.renderer, (address & 0x00017FFC)); \ + } \ } \ wait += waitstatesRegion[REGION_VRAM]; #define STORE_OAM \ - STORE_32(value, address & (SIZE_OAM - 4), gba->video.oam.raw); \ - gba->video.renderer->writeOAM(gba->video.renderer, (address & (SIZE_OAM - 4)) >> 1); \ - gba->video.renderer->writeOAM(gba->video.renderer, ((address & (SIZE_OAM - 4)) >> 1) + 1); + LOAD_32(oldValue, address & (SIZE_OAM - 4), gba->video.oam.raw); \ + if (oldValue != value) { \ + STORE_32(value, address & (SIZE_OAM - 4), gba->video.oam.raw); \ + gba->video.renderer->writeOAM(gba->video.renderer, (address & (SIZE_OAM - 4)) >> 1); \ + gba->video.renderer->writeOAM(gba->video.renderer, ((address & (SIZE_OAM - 4)) >> 1) + 1); \ + } #define STORE_CART \ wait += waitstatesRegion[address >> BASE_OFFSET]; \

@@ -726,6 +739,7 @@ void GBAStore32(struct ARMCore* cpu, uint32_t address, int32_t value, int* cycleCounter) {

struct GBA* gba = (struct GBA*) cpu->master; struct GBAMemory* memory = &gba->memory; int wait = 0; + int32_t oldValue; char* waitstatesRegion = memory->waitstatesNonseq32; switch (address >> BASE_OFFSET) {

@@ -777,6 +791,7 @@ void GBAStore16(struct ARMCore* cpu, uint32_t address, int16_t value, int* cycleCounter) {

struct GBA* gba = (struct GBA*) cpu->master; struct GBAMemory* memory = &gba->memory; int wait = 0; + int16_t oldValue; switch (address >> BASE_OFFSET) { case REGION_WORKING_RAM:

@@ -790,21 +805,33 @@ case REGION_IO:

GBAIOWrite(gba, address & (OFFSET_MASK - 1), value); break; case REGION_PALETTE_RAM: - STORE_16(value, address & (SIZE_PALETTE_RAM - 2), gba->video.palette); - gba->video.renderer->writePalette(gba->video.renderer, address & (SIZE_PALETTE_RAM - 2), value); + LOAD_16(oldValue, address & (SIZE_PALETTE_RAM - 2), gba->video.palette); + if (oldValue != value) { + STORE_16(value, address & (SIZE_PALETTE_RAM - 2), gba->video.palette); + gba->video.renderer->writePalette(gba->video.renderer, address & (SIZE_PALETTE_RAM - 2), value); + } break; case REGION_VRAM: if ((address & 0x0001FFFF) < SIZE_VRAM) { - STORE_16(value, address & 0x0001FFFE, gba->video.vram); - gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x0001FFFE); + LOAD_16(oldValue, address & 0x0001FFFE, gba->video.vram); + if (value != oldValue) { + STORE_16(value, address & 0x0001FFFE, gba->video.vram); + gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x0001FFFE); + } } else { - STORE_16(value, address & 0x00017FFE, gba->video.vram); - gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x00017FFE); + LOAD_16(oldValue, address & 0x00017FFE, gba->video.vram); + if (value != oldValue) { + STORE_16(value, address & 0x00017FFE, gba->video.vram); + gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x00017FFE); + } } break; case REGION_OAM: - STORE_16(value, address & (SIZE_OAM - 2), gba->video.oam.raw); - gba->video.renderer->writeOAM(gba->video.renderer, (address & (SIZE_OAM - 2)) >> 1); + LOAD_16(oldValue, address & (SIZE_OAM - 2), gba->video.oam.raw); + if (value != oldValue) { + STORE_16(value, address & (SIZE_OAM - 2), gba->video.oam.raw); + gba->video.renderer->writeOAM(gba->video.renderer, (address & (SIZE_OAM - 2)) >> 1); + } break; case REGION_CART0: if (memory->hw.devices != HW_NONE && IS_GPIO_REGISTER(address & 0xFFFFFE)) {

@@ -844,6 +871,7 @@ void GBAStore8(struct ARMCore* cpu, uint32_t address, int8_t value, int* cycleCounter) {

struct GBA* gba = (struct GBA*) cpu->master; struct GBAMemory* memory = &gba->memory; int wait = 0; + uint16_t oldValue; switch (address >> BASE_OFFSET) { case REGION_WORKING_RAM:

@@ -865,8 +893,11 @@ // TODO: check BG mode

mLOG(GBA_MEM, GAME_ERROR, "Cannot Store8 to OBJ: 0x%08X", address); break; } - gba->video.renderer->vram[(address & 0x1FFFE) >> 1] = ((uint8_t) value) | (value << 8); - gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x0001FFFE); + oldValue = gba->video.renderer->vram[(address & 0x1FFFE) >> 1]; + if (oldValue != (((uint8_t) value) | (value << 8))) { + gba->video.renderer->vram[(address & 0x1FFFE) >> 1] = ((uint8_t) value) | (value << 8); + gba->video.renderer->writeVRAM(gba->video.renderer, address & 0x0001FFFE); + } break; case REGION_OAM: mLOG(GBA_MEM, GAME_ERROR, "Cannot Store8 to OAM: 0x%08X", address);

@@ -1369,6 +1400,7 @@ uint32_t GBAStoreMultiple(struct ARMCore* cpu, uint32_t address, int mask, enum LSMDirection direction, int* cycleCounter) {

struct GBA* gba = (struct GBA*) cpu->master; struct GBAMemory* memory = &gba->memory; uint32_t value; + uint32_t oldValue; char* waitstatesRegion = memory->waitstatesSeq32; int i;
M src/gba/overrides.csrc/gba/overrides.c

@@ -338,11 +338,19 @@ gba->memory.mirroring = true;

} } -void GBAOverrideApplyDefaults(struct GBA* gba) { - struct GBACartridgeOverride override; +void GBAOverrideApplyDefaults(struct GBA* gba, const struct Configuration* overrides) { + struct GBACartridgeOverride override = { .idleLoop = IDLE_LOOP_NONE }; const struct GBACartridge* cart = (const struct GBACartridge*) gba->memory.rom; - memcpy(override.id, &cart->id, sizeof(override.id)); - if (GBAOverrideFind(0, &override)) { - GBAOverrideApply(gba, &override); + if (cart) { + memcpy(override.id, &cart->id, sizeof(override.id)); + + if (!strncmp("pokemon red version", &((const char*) gba->memory.rom)[0x108], 20) && gba->romCrc32 != 0xDD88761C) { + // Enable FLASH1M and RTC on Pokémon FireRed ROM hacks + override.savetype = SAVEDATA_FLASH1M; + override.hardware = HW_RTC; + GBAOverrideApply(gba, &override); + } else if (GBAOverrideFind(overrides, &override)) { + GBAOverrideApply(gba, &override); + } } }
A src/gba/renderers/cache-set.c

@@ -0,0 +1,168 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <mgba/internal/gba/renderers/cache-set.h> + +#include <mgba/core/cache-set.h> +#include <mgba/internal/gba/gba.h> +#include <mgba/internal/gba/io.h> +#include <mgba/internal/gba/video.h> + +void GBAVideoCacheInit(struct mCacheSet* cache) { + mCacheSetInit(cache, 4, 4); + mTileCacheSystemInfo sysconfig = 0; + mTileCacheConfiguration config = mTileCacheConfigurationFillShouldStore(0); + sysconfig = mTileCacheSystemInfoSetPaletteBPP(sysconfig, 2); // 2^(2^2) = 16 entries + sysconfig = mTileCacheSystemInfoSetPaletteCount(sysconfig, 4); // 16 palettes + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 2048); + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, 0)); + mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 0), config); + mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 0), sysconfig, 0, 0); + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024); + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, 2)); + mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 2), config); + mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 2), sysconfig, 0x10000, 0x100); + + sysconfig = mTileCacheSystemInfoSetPaletteBPP(sysconfig, 3); // 2^(2^3) = 256 entries + sysconfig = mTileCacheSystemInfoSetPaletteCount(sysconfig, 0); // 1 palettes + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 2048); + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, 1)); + mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 1), config); + mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 1), sysconfig, 0, 0); + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024); + mTileCacheInit(mTileCacheSetGetPointer(&cache->tiles, 3)); + mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 3), config); + mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 3), sysconfig, 0x10000, 0x100); + + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 0)); + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 1)); + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 2)); + mMapCacheInit(mMapCacheSetGetPointer(&cache->maps, 3)); +} + +void GBAVideoCacheAssociate(struct mCacheSet* cache, struct GBAVideo* video) { + mCacheSetAssignVRAM(cache, video->vram); + video->renderer->cache = cache; + size_t i; + for (i = 0; i < SIZE_PALETTE_RAM / 2; ++i) { + mCacheSetWritePalette(cache, i, mColorFrom555(video->palette[i])); + } + GBAVideoCacheWriteVideoRegister(cache, REG_DISPCNT, video->p->memory.io[REG_DISPCNT >> 1]); + GBAVideoCacheWriteVideoRegister(cache, REG_BG0CNT, video->p->memory.io[REG_BG0CNT >> 1]); + GBAVideoCacheWriteVideoRegister(cache, REG_BG1CNT, video->p->memory.io[REG_BG1CNT >> 1]); + GBAVideoCacheWriteVideoRegister(cache, REG_BG2CNT, video->p->memory.io[REG_BG2CNT >> 1]); + GBAVideoCacheWriteVideoRegister(cache, REG_BG3CNT, video->p->memory.io[REG_BG3CNT >> 1]); +} + +static void mapParser0(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + uint16_t map = *(uint16_t*) vram; + entry->tileId = GBA_TEXT_MAP_TILE(map); + entry->flags = mMapCacheEntryFlagsSetHMirror(entry->flags, !!GBA_TEXT_MAP_HFLIP(map)); + entry->flags = mMapCacheEntryFlagsSetVMirror(entry->flags, !!GBA_TEXT_MAP_VFLIP(map)); + entry->flags = mMapCacheEntryFlagsSetPaletteId(entry->flags, GBA_TEXT_MAP_PALETTE(map)); +} + +static void mapParser2(struct mMapCache* cache, struct mMapCacheEntry* entry, void* vram) { + UNUSED(cache); + entry->tileId = *(uint8_t*) vram; + entry->flags = mMapCacheEntryFlagsClearHMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsClearVMirror(entry->flags); + entry->flags = mMapCacheEntryFlagsClearPaletteId(entry->flags); +} + +static void GBAVideoCacheWriteDISPCNT(struct mCacheSet* cache, uint16_t value) { + switch (GBARegisterDISPCNTGetMode(value)) { + case 0: + default: + mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; + mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; + mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser0; + mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser0; + + mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + break; + case 1: + case 2: + mMapCacheSetGetPointer(&cache->maps, 0)->mapParser = mapParser0; + mMapCacheSetGetPointer(&cache->maps, 1)->mapParser = mapParser0; + mMapCacheSetGetPointer(&cache->maps, 2)->mapParser = mapParser2; + mMapCacheSetGetPointer(&cache->maps, 3)->mapParser = mapParser2; + + mMapCacheSetGetPointer(&cache->maps, 0)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 1)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 0); + mMapCacheSetGetPointer(&cache->maps, 2)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); + mMapCacheSetGetPointer(&cache->maps, 3)->tileCache = mTileCacheSetGetPointer(&cache->tiles, 1); + break; + } +} + +static void GBAVideoCacheWriteBGCNT(struct mCacheSet* cache, size_t bg, uint16_t value) { + struct mMapCache* map = mMapCacheSetGetPointer(&cache->maps, bg); + map->context = (void*) (uintptr_t) value; + + int tileStart = GBARegisterBGCNTGetCharBase(value) * 256; + bool p = GBARegisterBGCNTGet256Color(value); + int size = GBARegisterBGCNTGetSize(value); + int tilesWide = 0; + int tilesHigh = 0; + mMapCacheSystemInfo sysconfig = 0; + if (map->mapParser == mapParser0) { + sysconfig = mMapCacheSystemInfoSetPaletteBPP(sysconfig, 2 + p); + sysconfig = mMapCacheSystemInfoSetPaletteCount(sysconfig, 4 * !p); + sysconfig = mMapCacheSystemInfoSetMacroTileSize(sysconfig, 5); + sysconfig = mMapCacheSystemInfoSetMapAlign(sysconfig, 1); + tilesWide = 5; + tilesHigh = 5; + if (size & 1) { + ++tilesWide; + } + if (size & 2) { + ++tilesHigh; + } + map->tileStart = tileStart * 2; + } else if (map->mapParser == mapParser2) { + sysconfig = mMapCacheSystemInfoSetPaletteBPP(sysconfig, 3); + sysconfig = mMapCacheSystemInfoSetPaletteCount(sysconfig, 0); + sysconfig = mMapCacheSystemInfoSetMacroTileSize(sysconfig, 4 + size); + sysconfig = mMapCacheSystemInfoSetMapAlign(sysconfig, 0); + + tilesHigh = 4 + size; + tilesWide = 4 + size; + map->tileStart = tileStart; + } + sysconfig = mMapCacheSystemInfoSetTilesHigh(sysconfig, tilesHigh); + sysconfig = mMapCacheSystemInfoSetTilesWide(sysconfig, tilesWide); + mMapCacheConfigureSystem(map, sysconfig); + mMapCacheConfigureMap(map, GBARegisterBGCNTGetScreenBase(value) << 11); +} + +void GBAVideoCacheWriteVideoRegister(struct mCacheSet* cache, uint32_t address, uint16_t value) { + switch (address) { + case REG_DISPCNT: + GBAVideoCacheWriteDISPCNT(cache, value); + GBAVideoCacheWriteBGCNT(cache, 0, (uint16_t) mMapCacheSetGetPointer(&cache->maps, 0)->context); + GBAVideoCacheWriteBGCNT(cache, 1, (uint16_t) mMapCacheSetGetPointer(&cache->maps, 1)->context); + GBAVideoCacheWriteBGCNT(cache, 2, (uint16_t) mMapCacheSetGetPointer(&cache->maps, 2)->context); + GBAVideoCacheWriteBGCNT(cache, 3, (uint16_t) mMapCacheSetGetPointer(&cache->maps, 3)->context); + break; + case REG_BG0CNT: + GBAVideoCacheWriteBGCNT(cache, 0, value); + break; + case REG_BG1CNT: + GBAVideoCacheWriteBGCNT(cache, 1, value); + break; + case REG_BG2CNT: + GBAVideoCacheWriteBGCNT(cache, 2, value); + break; + case REG_BG3CNT: + GBAVideoCacheWriteBGCNT(cache, 3, value); + break; + + } +}
M src/gba/renderers/software-bg.csrc/gba/renderers/software-bg.c

@@ -5,6 +5,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "gba/renderers/software-private.h" +#include <mgba/core/interface.h> #include <mgba/internal/gba/gba.h> #define MODE_2_COORD_OVERFLOW \

@@ -101,21 +102,7 @@ BACKGROUND_BITMAP_ITERATE(VIDEO_HORIZONTAL_PIXELS, VIDEO_VERTICAL_PIXELS);

if (!mosaicWait) { LOAD_16(color, ((localX >> 8) + (localY >> 8) * VIDEO_HORIZONTAL_PIXELS) << 1, renderer->d.vram); -#ifndef COLOR_16_BIT - unsigned color32; - color32 = 0; - color32 |= (color << 3) & 0xF8; - color32 |= (color << 6) & 0xF800; - color32 |= (color << 9) & 0xF80000; - color32 |= (color32 >> 5) & 0x070707; - color = color32; -#elif COLOR_5_6_5 - uint16_t color16 = 0; - color16 |= (color & 0x001F) << 11; - color16 |= (color & 0x03E0) << 1; - color16 |= (color & 0x7C00) >> 10; - color = color16; -#endif + color = mColorFrom555(color); mosaicWait = mosaicH; } else { --mosaicWait;

@@ -192,20 +179,7 @@ BACKGROUND_BITMAP_ITERATE(160, 128);

if (!mosaicWait) { LOAD_16(color, offset + (localX >> 8) * 2 + (localY >> 8) * 320, renderer->d.vram); -#ifndef COLOR_16_BIT - unsigned color32 = 0; - color32 |= (color << 9) & 0xF80000; - color32 |= (color << 3) & 0xF8; - color32 |= (color << 6) & 0xF800; - color32 |= (color32 >> 5) & 0x070707; - color = color32; -#elif COLOR_5_6_5 - uint16_t color16 = 0; - color16 |= (color & 0x001F) << 11; - color16 |= (color & 0x03E0) << 1; - color16 |= (color & 0x7C00) >> 10; - color = color16; -#endif + color = mColorFrom555(color); mosaicWait = mosaicH; } else { --mosaicWait;
M src/gba/renderers/software-obj.csrc/gba/renderers/software-obj.c

@@ -166,9 +166,13 @@ target2 |= renderer->bg[1].target2 << (renderer->bg[1].priority);

target2 |= renderer->bg[2].target2 << (renderer->bg[2].priority); target2 |= renderer->bg[3].target2 << (renderer->bg[3].priority); if ((1 << GBAObjAttributesCGetPriority(sprite->c)) <= target2) { + flags |= FLAG_REBLEND; variant = 0; + } else if (!target2) { + flags &= ~FLAG_TARGET_1; } } + color_t* palette = &renderer->normalPalette[0x100]; color_t* objwinPalette = palette; int objwinSlowPath = GBARegisterDISPCNTIsObjwinEnable(renderer->dispcnt) && GBAWindowControlGetBlendEnable(renderer->objwin.packed) != GBAWindowControlIsBlendEnable(renderer->currentWindow.packed);
M src/gba/renderers/software-private.hsrc/gba/renderers/software-private.h

@@ -43,7 +43,7 @@ if (color >= current) {

if (current & FLAG_TARGET_1 && color & FLAG_TARGET_2) { color = _mix(renderer->blda, current, renderer->bldb, color); } else { - color = (current & 0x00FFFFFF) | ((current << 1) & FLAG_REBLEND); + color = (current & 0x00FFFFFF) | (current & FLAG_REBLEND); } } else { color = (color & ~FLAG_TARGET_2) | (current & FLAG_OBJWIN);

@@ -59,7 +59,7 @@ if (color >= current) {

if (current & FLAG_TARGET_1 && color & FLAG_TARGET_2) { color = _mix(renderer->blda, current, renderer->bldb, color); } else { - color = (current & 0x00FFFFFF) | ((current << 1) & FLAG_REBLEND); + color = (current & 0x00FFFFFF) | (current & FLAG_REBLEND); } } else { color = color & ~FLAG_TARGET_2;

@@ -73,7 +73,7 @@ UNUSED(renderer);

if (color < current) { color |= (current & FLAG_OBJWIN); } else { - color = (current & 0x00FFFFFF) | ((current << 1) & FLAG_REBLEND); + color = (current & 0x00FFFFFF) | (current & FLAG_REBLEND); } *pixel = color; }

@@ -82,7 +82,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* renderer, uint32_t* pixel, uint32_t color,

uint32_t current) { UNUSED(renderer); if (color >= current) { - color = (current & 0x00FFFFFF) | ((current << 1) & FLAG_REBLEND); + color = (current & 0x00FFFFFF) | (current & FLAG_REBLEND); } *pixel = color; }
D src/gba/renderers/tile-cache.c

@@ -1,26 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include <mgba/internal/gba/renderers/tile-cache.h> - -#include <mgba/core/tile-cache.h> -#include <mgba/internal/gba/video.h> - -void GBAVideoTileCacheInit(struct mTileCache* cache) { - mTileCacheInit(cache); - mTileCacheConfiguration config = 0; - config = mTileCacheSystemInfoSetPalette0BPP(config, 2); // 2^(2^2) = 16 entries - config = mTileCacheSystemInfoSetPalette0Count(config, 5); // 32 palettes - config = mTileCacheSystemInfoSetPalette1BPP(config, 3); // 2^(2^3) = 256 entries - config = mTileCacheSystemInfoSetPalette1Count(config, 1); // 2 palettes - config = mTileCacheSystemInfoSetMaxTiles(config, 3072); - mTileCacheConfigureSystem(cache, config); -} - -void GBAVideoTileCacheAssociate(struct mTileCache* cache, struct GBAVideo* video) { - cache->vram = video->vram; - cache->palette = video->palette; - video->renderer->cache = cache; -}
M src/gba/renderers/video-software.csrc/gba/renderers/video-software.c

@@ -5,12 +5,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "gba/renderers/software-private.h" -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/arm/macros.h> #include <mgba/internal/gba/io.h> +#include <mgba/internal/gba/renderers/cache-set.h> #include <mgba-util/arm-algo.h> #include <mgba-util/memory.h> + +#define DIRTY_SCANLINE(R, Y) R->scanlineDirty[Y >> 5] |= (1 << (Y & 0x1F)) +#define CLEAN_SCANLINE(R, Y) R->scanlineDirty[Y >> 5] &= ~(1 << (Y & 0x1F)) static void GBAVideoSoftwareRendererInit(struct GBAVideoRenderer* renderer); static void GBAVideoSoftwareRendererDeinit(struct GBAVideoRenderer* renderer);

@@ -26,10 +30,6 @@ static void GBAVideoSoftwareRendererPutPixels(struct GBAVideoRenderer* renderer, size_t stride, const void* pixels);

static void GBAVideoSoftwareRendererUpdateDISPCNT(struct GBAVideoSoftwareRenderer* renderer); static void GBAVideoSoftwareRendererWriteBGCNT(struct GBAVideoSoftwareRenderer* renderer, struct GBAVideoSoftwareBackground* bg, uint16_t value); -static void GBAVideoSoftwareRendererWriteBGPA(struct GBAVideoSoftwareBackground* bg, uint16_t value); -static void GBAVideoSoftwareRendererWriteBGPB(struct GBAVideoSoftwareBackground* bg, uint16_t value); -static void GBAVideoSoftwareRendererWriteBGPC(struct GBAVideoSoftwareBackground* bg, uint16_t value); -static void GBAVideoSoftwareRendererWriteBGPD(struct GBAVideoSoftwareBackground* bg, uint16_t value); static void GBAVideoSoftwareRendererWriteBGX_LO(struct GBAVideoSoftwareBackground* bg, uint16_t value); static void GBAVideoSoftwareRendererWriteBGX_HI(struct GBAVideoSoftwareBackground* bg, uint16_t value); static void GBAVideoSoftwareRendererWriteBGY_LO(struct GBAVideoSoftwareBackground* bg, uint16_t value);

@@ -111,6 +111,11 @@ softwareRenderer->winout = (struct WindowControl) { .priority = 3 };

softwareRenderer->oamMax = 0; softwareRenderer->mosaic = 0; + softwareRenderer->nextY = 0; + + memset(softwareRenderer->scanlineDirty, 0xFFFFFFFF, sizeof(softwareRenderer->scanlineDirty)); + memset(softwareRenderer->cache, 0, sizeof(softwareRenderer->cache)); + memset(softwareRenderer->nextIo, 0, sizeof(softwareRenderer->nextIo)); for (i = 0; i < 4; ++i) { struct GBAVideoSoftwareBackground* bg = &softwareRenderer->bg[i];

@@ -145,6 +150,10 @@ }

static uint16_t GBAVideoSoftwareRendererWriteVideoRegister(struct GBAVideoRenderer* renderer, uint32_t address, uint16_t value) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; + if (renderer->cache) { + GBAVideoCacheWriteVideoRegister(renderer->cache, address, value); + } + switch (address) { case REG_DISPCNT: softwareRenderer->dispcnt = value;

@@ -199,52 +208,76 @@ value &= 0x01FF;

softwareRenderer->bg[3].y = value; break; case REG_BG2PA: - GBAVideoSoftwareRendererWriteBGPA(&softwareRenderer->bg[2], value); + softwareRenderer->bg[2].dx = value; break; case REG_BG2PB: - GBAVideoSoftwareRendererWriteBGPB(&softwareRenderer->bg[2], value); + softwareRenderer->bg[2].dmx = value; break; case REG_BG2PC: - GBAVideoSoftwareRendererWriteBGPC(&softwareRenderer->bg[2], value); + softwareRenderer->bg[2].dy = value; break; case REG_BG2PD: - GBAVideoSoftwareRendererWriteBGPD(&softwareRenderer->bg[2], value); + softwareRenderer->bg[2].dmy = value; break; case REG_BG2X_LO: GBAVideoSoftwareRendererWriteBGX_LO(&softwareRenderer->bg[2], value); + if (softwareRenderer->bg[2].sx != softwareRenderer->cache[softwareRenderer->nextY].scale[0][0]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG2X_HI: GBAVideoSoftwareRendererWriteBGX_HI(&softwareRenderer->bg[2], value); + if (softwareRenderer->bg[2].sx != softwareRenderer->cache[softwareRenderer->nextY].scale[0][0]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG2Y_LO: GBAVideoSoftwareRendererWriteBGY_LO(&softwareRenderer->bg[2], value); + if (softwareRenderer->bg[2].sy != softwareRenderer->cache[softwareRenderer->nextY].scale[0][1]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG2Y_HI: GBAVideoSoftwareRendererWriteBGY_HI(&softwareRenderer->bg[2], value); + if (softwareRenderer->bg[2].sy != softwareRenderer->cache[softwareRenderer->nextY].scale[0][1]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG3PA: - GBAVideoSoftwareRendererWriteBGPA(&softwareRenderer->bg[3], value); + softwareRenderer->bg[3].dx = value; break; case REG_BG3PB: - GBAVideoSoftwareRendererWriteBGPB(&softwareRenderer->bg[3], value); + softwareRenderer->bg[3].dmx = value; break; case REG_BG3PC: - GBAVideoSoftwareRendererWriteBGPC(&softwareRenderer->bg[3], value); + softwareRenderer->bg[3].dy = value; break; case REG_BG3PD: - GBAVideoSoftwareRendererWriteBGPD(&softwareRenderer->bg[3], value); + softwareRenderer->bg[3].dmy = value; break; case REG_BG3X_LO: GBAVideoSoftwareRendererWriteBGX_LO(&softwareRenderer->bg[3], value); + if (softwareRenderer->bg[3].sx != softwareRenderer->cache[softwareRenderer->nextY].scale[1][0]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG3X_HI: GBAVideoSoftwareRendererWriteBGX_HI(&softwareRenderer->bg[3], value); + if (softwareRenderer->bg[3].sx != softwareRenderer->cache[softwareRenderer->nextY].scale[1][0]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG3Y_LO: GBAVideoSoftwareRendererWriteBGY_LO(&softwareRenderer->bg[3], value); + if (softwareRenderer->bg[3].sy != softwareRenderer->cache[softwareRenderer->nextY].scale[1][1]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BG3Y_HI: GBAVideoSoftwareRendererWriteBGY_HI(&softwareRenderer->bg[3], value); + if (softwareRenderer->bg[3].sy != softwareRenderer->cache[softwareRenderer->nextY].scale[1][1]) { + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } break; case REG_BLDCNT: GBAVideoSoftwareRendererWriteBLDCNT(softwareRenderer, value);

@@ -342,39 +375,32 @@ break;

default: mLOG(GBA_VIDEO, GAME_ERROR, "Invalid video register: 0x%03X", address); } + softwareRenderer->nextIo[address >> 1] = value; + if (softwareRenderer->cache[softwareRenderer->nextY].io[address >> 1] != value) { + softwareRenderer->cache[softwareRenderer->nextY].io[address >> 1] = value; + DIRTY_SCANLINE(softwareRenderer, softwareRenderer->nextY); + } return value; } static void GBAVideoSoftwareRendererWriteVRAM(struct GBAVideoRenderer* renderer, uint32_t address) { + struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } + memset(softwareRenderer->scanlineDirty, 0xFFFFFFFF, sizeof(softwareRenderer->scanlineDirty)); } static void GBAVideoSoftwareRendererWriteOAM(struct GBAVideoRenderer* renderer, uint32_t oam) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; + UNUSED(oam); softwareRenderer->oamDirty = 1; - UNUSED(oam); + memset(softwareRenderer->scanlineDirty, 0xFFFFFFFF, sizeof(softwareRenderer->scanlineDirty)); } static void GBAVideoSoftwareRendererWritePalette(struct GBAVideoRenderer* renderer, uint32_t address, uint16_t value) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; -#ifdef COLOR_16_BIT -#ifdef COLOR_5_6_5 - unsigned color = 0; - color |= (value & 0x001F) << 11; - color |= (value & 0x03E0) << 1; - color |= (value & 0x7C00) >> 10; -#else - unsigned color = value; -#endif -#else - unsigned color = 0; - color |= (value << 3) & 0xF8; - color |= (value << 6) & 0xF800; - color |= (value << 9) & 0xF80000; - color |= (color >> 5) & 0x070707; -#endif + color_t color = mColorFrom555(value); softwareRenderer->normalPalette[address >> 1] = color; if (softwareRenderer->blendEffect == BLEND_BRIGHTEN) { softwareRenderer->variantPalette[address >> 1] = _brighten(color, softwareRenderer->bldy);

@@ -382,8 +408,9 @@ } else if (softwareRenderer->blendEffect == BLEND_DARKEN) {

softwareRenderer->variantPalette[address >> 1] = _darken(color, softwareRenderer->bldy); } if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, address); + mCacheSetWritePalette(renderer->cache, address >> 1, color); } + memset(softwareRenderer->scanlineDirty, 0xFFFFFFFF, sizeof(softwareRenderer->scanlineDirty)); } static void _breakWindow(struct GBAVideoSoftwareRenderer* softwareRenderer, struct WindowN* win, int y) {

@@ -487,6 +514,33 @@

static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; + if (y == VIDEO_VERTICAL_PIXELS - 1) { + softwareRenderer->nextY = 0; + } else { + softwareRenderer->nextY = y + 1; + } + + bool dirty = softwareRenderer->scanlineDirty[y >> 5] & (1 << (y & 0x1F)); + if (memcmp(softwareRenderer->nextIo, softwareRenderer->cache[y].io, sizeof(softwareRenderer->nextIo))) { + memcpy(softwareRenderer->cache[y].io, softwareRenderer->nextIo, sizeof(softwareRenderer->nextIo)); + dirty = true; + } + + softwareRenderer->cache[y].scale[0][0] = softwareRenderer->bg[2].sx; + softwareRenderer->cache[y].scale[0][1] = softwareRenderer->bg[2].sy; + softwareRenderer->cache[y].scale[1][0] = softwareRenderer->bg[3].sx; + softwareRenderer->cache[y].scale[1][1] = softwareRenderer->bg[3].sy; + + if (!dirty) { + if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { + softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; + softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; + softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; + softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; + } + return; + } + color_t* row = &softwareRenderer->outputBuffer[softwareRenderer->outputBufferStride * y]; if (GBARegisterDISPCNTIsForcedBlank(softwareRenderer->dispcnt)) { int x;

@@ -592,21 +646,22 @@ }

} #ifdef COLOR_16_BIT -#if defined(__ARM_NEON) && !defined(__APPLE__) - _to16Bit(row, softwareRenderer->row, VIDEO_HORIZONTAL_PIXELS); -#else - for (x = 0; x < VIDEO_HORIZONTAL_PIXELS; ++x) { + for (x = 0; x < VIDEO_HORIZONTAL_PIXELS; x += 4) { row[x] = softwareRenderer->row[x]; + row[x + 1] = softwareRenderer->row[x + 1]; + row[x + 2] = softwareRenderer->row[x + 2]; + row[x + 3] = softwareRenderer->row[x + 3]; } -#endif #else memcpy(row, softwareRenderer->row, VIDEO_HORIZONTAL_PIXELS * sizeof(*row)); #endif + CLEAN_SCANLINE(softwareRenderer, y); } static void GBAVideoSoftwareRendererFinishFrame(struct GBAVideoRenderer* renderer) { struct GBAVideoSoftwareRenderer* softwareRenderer = (struct GBAVideoSoftwareRenderer*) renderer; + softwareRenderer->nextY = 0; if (softwareRenderer->temporaryBuffer) { mappedMemoryFree(softwareRenderer->temporaryBuffer, VIDEO_HORIZONTAL_PIXELS * VIDEO_VERTICAL_PIXELS * 4); softwareRenderer->temporaryBuffer = 0;

@@ -649,22 +704,6 @@ bg->multipalette = GBARegisterBGCNTGet256Color(value);

bg->screenBase = GBARegisterBGCNTGetScreenBase(value) << 11; bg->overflow = GBARegisterBGCNTGetOverflow(value); bg->size = GBARegisterBGCNTGetSize(value); -} - -static void GBAVideoSoftwareRendererWriteBGPA(struct GBAVideoSoftwareBackground* bg, uint16_t value) { - bg->dx = value; -} - -static void GBAVideoSoftwareRendererWriteBGPB(struct GBAVideoSoftwareBackground* bg, uint16_t value) { - bg->dmx = value; -} - -static void GBAVideoSoftwareRendererWriteBGPC(struct GBAVideoSoftwareBackground* bg, uint16_t value) { - bg->dy = value; -} - -static void GBAVideoSoftwareRendererWriteBGPD(struct GBAVideoSoftwareBackground* bg, uint16_t value) { - bg->dmy = value; } static void GBAVideoSoftwareRendererWriteBGX_LO(struct GBAVideoSoftwareBackground* bg, uint16_t value) {
M src/gba/savedata.csrc/gba/savedata.c

@@ -147,7 +147,7 @@ return SIZE_CART_FLASH512;

case SAVEDATA_FLASH1M: return SIZE_CART_FLASH1M; case SAVEDATA_EEPROM: - return SIZE_CART_EEPROM; + return (savedata->vf && savedata->vf->size(savedata->vf) == SIZE_CART_EEPROM512) ? SIZE_CART_EEPROM512 : SIZE_CART_EEPROM; case SAVEDATA_FORCE_NONE: return 0; case SAVEDATA_AUTODETECT:

@@ -257,20 +257,23 @@ } else {

mLOG(GBA_SAVE, WARN, "Can't re-initialize savedata"); return; } + int32_t eepromSize = SIZE_CART_EEPROM512; off_t end; if (!savedata->vf) { end = 0; savedata->data = anonymousMemoryMap(SIZE_CART_EEPROM); } else { end = savedata->vf->size(savedata->vf); - if (end < SIZE_CART_EEPROM) { - savedata->vf->truncate(savedata->vf, SIZE_CART_EEPROM); + if (end < SIZE_CART_EEPROM512) { + savedata->vf->truncate(savedata->vf, SIZE_CART_EEPROM512); + } else if (end > SIZE_CART_EEPROM512) { + eepromSize = SIZE_CART_EEPROM; } - savedata->data = savedata->vf->map(savedata->vf, SIZE_CART_EEPROM, savedata->mapMode); + savedata->data = savedata->vf->map(savedata->vf, eepromSize, savedata->mapMode); } savedata->realisticTiming = realisticTiming; - if (end < SIZE_CART_EEPROM) { - memset(&savedata->data[end], 0xFF, SIZE_CART_EEPROM - end); + if (end < SIZE_CART_EEPROM512) { + memset(&savedata->data[end], 0xFF, SIZE_CART_EEPROM512 - end); } }

@@ -405,6 +408,19 @@ break;

} } +static void _ensureEeprom(struct GBASavedata* savedata, uint32_t size) { + if (size < SIZE_CART_EEPROM512) { + return; + } + if (!savedata->vf || savedata->vf->size(savedata->vf) > SIZE_CART_EEPROM512) { + return; + } + savedata->vf->unmap(savedata->vf, savedata->data, SIZE_CART_EEPROM512); + savedata->vf->truncate(savedata->vf, SIZE_CART_EEPROM); + savedata->data = savedata->vf->map(savedata->vf, SIZE_CART_EEPROM, savedata->mapMode); + memset(&savedata->data[SIZE_CART_EEPROM512], 0xFF, SIZE_CART_EEPROM - SIZE_CART_EEPROM512); +} + void GBASavedataWriteEEPROM(struct GBASavedata* savedata, uint16_t value, uint32_t writeSize) { switch (savedata->command) { // Read header

@@ -430,6 +446,7 @@ savedata->writeAddress |= (value & 0x1) << 6;

} else if (writeSize == 1) { savedata->command = EEPROM_COMMAND_NULL; } else if ((savedata->writeAddress >> 3) < SIZE_CART_EEPROM) { + _ensureEeprom(savedata, savedata->writeAddress >> 3); uint8_t current = savedata->data[savedata->writeAddress >> 3]; current &= ~(1 << (0x7 - (savedata->writeAddress & 0x7))); current |= (value & 0x1) << (0x7 - (savedata->writeAddress & 0x7));

@@ -471,6 +488,7 @@ --savedata->readBitsRemaining;

if (savedata->readBitsRemaining < 64) { int step = 63 - savedata->readBitsRemaining; uint32_t address = (savedata->readAddress + step) >> 3; + _ensureEeprom(savedata, address); if (address >= SIZE_CART_EEPROM) { mLOG(GBA_SAVE, GAME_ERROR, "Reading beyond end of EEPROM: %08X", address); return 0xFF;
M src/gba/serialize.csrc/gba/serialize.c

@@ -128,6 +128,8 @@ if (error) {

return false; } gba->timing.root = NULL; + LOAD_32(gba->timing.masterCycles, 0, &state->masterCycles); + size_t i; for (i = 0; i < 16; ++i) { LOAD_32(gba->cpu->gprs[i], i * sizeof(gba->cpu->gprs[0]), state->cpu.gprs);

@@ -185,5 +187,9 @@

if (gba->rr) { gba->rr->stateLoaded(gba->rr, state); } + + gba->timing.reroot = gba->timing.root; + gba->timing.root = NULL; + return true; }
A src/gba/test/cheats.c

@@ -0,0 +1,943 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "util/test/suite.h" + +#include <mgba/core/cheats.h> +#include <mgba/core/core.h> +#include <mgba/gba/core.h> +#include <mgba/internal/gba/cheats.h> + +#include "gba/cheats/parv3.h" +#include "gba/cheats/gameshark.h" + +M_TEST_SUITE_SETUP(GBACheats) { + struct mCore* core = GBACoreCreate(); + core->init(core); + core->cheatDevice(core); + *state = core; + return 0; +} + +M_TEST_SUITE_TEARDOWN(GBACheats) { + if (!*state) { + return 0; + } + struct mCore* core = *state; + core->deinit(core); + return 0; +} + +M_TEST_DEFINE(createSet) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + set->deinit(set); +} + +M_TEST_DEFINE(addRawPARv3) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "80000000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_false(set->addLine(set, "43000000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3Assign) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300000 00000078", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "02300002 00005678", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "04300004 12345678", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead32(core, 0x03000004, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x78); + assert_int_equal(core->rawRead16(core, 0x03000002, -1), 0x5678); + assert_int_equal(core->rawRead32(core, 0x03000004, -1), 0x12345678); + + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3If1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11); + + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3If1x1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3If2) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3If2x2) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "48300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3If2Contain1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "48300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + set->deinit(set); +} + +M_TEST_DEFINE(doPARv3IfX) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11); +} + +M_TEST_DEFINE(doPARv3IfXxX) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); +} + +M_TEST_DEFINE(doPARv3IfXElse) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300001 00000011", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300001 00000012", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x12); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x11); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); +} + +M_TEST_DEFINE(doPARv3IfXElsexX) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); +} + +M_TEST_DEFINE(doPARv3IfXElsexXElse) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); +} + +M_TEST_DEFINE(doPARv3IfXContain1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); +} + +M_TEST_DEFINE(doPARv3IfXContain1Else) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); +} + +M_TEST_DEFINE(doPARv3IfXElseContain1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300002 00000021", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300002 00000022", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x22); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x21); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); +} + +M_TEST_DEFINE(doPARv3IfXContain1ElseContain1) { + struct mCore* core = *state; + struct mCheatDevice* device = core->cheatDevice(core); + assert_non_null(device); + struct mCheatSet* set = device->createSet(device, NULL); + assert_non_null(set); + GBACheatSetGameSharkVersion((struct GBACheatSet*) set, GBA_GS_PARV3_RAW); + assert_true(set->addLine(set, "00300003 00000031", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000041", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000051", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300006 00000061", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300007 00000071", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300008 00000081", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "88300000 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300003 00000032", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300001 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300004 00000042", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300005 00000052", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 60000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300006 00000062", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "08300002 00000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300007 00000072", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300008 00000082", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00000000 40000000", GBA_CHEAT_PRO_ACTION_REPLAY)); + assert_true(set->addLine(set, "00300000 00000001", GBA_CHEAT_PRO_ACTION_REPLAY)); + + core->reset(core); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0); + + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81); + + core->reset(core); + core->rawWrite8(core, 0x03000002, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x42); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x72); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000002, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82); + + core->reset(core); + core->rawWrite8(core, 0x03000001, -1, 0x1); + core->rawWrite8(core, 0x03000002, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x32); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x52); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x61); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x81); + + core->reset(core); + core->rawWrite8(core, 0x03000000, -1, 0x1); + core->rawWrite8(core, 0x03000001, -1, 0x1); + core->rawWrite8(core, 0x03000002, -1, 0x1); + mCheatRefresh(device, set); + assert_int_equal(core->rawRead8(core, 0x03000000, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000001, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000002, -1), 0x1); + assert_int_equal(core->rawRead8(core, 0x03000003, -1), 0x31); + assert_int_equal(core->rawRead8(core, 0x03000004, -1), 0x41); + assert_int_equal(core->rawRead8(core, 0x03000005, -1), 0x51); + assert_int_equal(core->rawRead8(core, 0x03000006, -1), 0x62); + assert_int_equal(core->rawRead8(core, 0x03000007, -1), 0x71); + assert_int_equal(core->rawRead8(core, 0x03000008, -1), 0x82); +} + +M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(GBACheats, + cmocka_unit_test(createSet), + cmocka_unit_test(addRawPARv3), + cmocka_unit_test(doPARv3Assign), + cmocka_unit_test(doPARv3If1), + cmocka_unit_test(doPARv3If1x1), + cmocka_unit_test(doPARv3If2), + cmocka_unit_test(doPARv3If2x2), + cmocka_unit_test(doPARv3If2Contain1), + cmocka_unit_test(doPARv3IfX), + cmocka_unit_test(doPARv3IfXxX), + cmocka_unit_test(doPARv3IfXElse), + cmocka_unit_test(doPARv3IfXElsexX), + cmocka_unit_test(doPARv3IfXElsexXElse), + cmocka_unit_test(doPARv3IfXContain1), + cmocka_unit_test(doPARv3IfXContain1Else), + cmocka_unit_test(doPARv3IfXElseContain1), + cmocka_unit_test(doPARv3IfXContain1ElseContain1))
D src/gba/test/gba.c

@@ -1,14 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "util/test/suite.h" - -M_TEST_SUITE_DECLARE(GBACore); - -int TestRunGBA(void) { - int failures = 0; - failures += M_TEST_SUITE_RUN(GBACore); - return failures; -}
D src/gba/test/gba.h

@@ -1,12 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef TEST_GBA_H -#define TEST_GBA_H -#include <mgba-util/common.h> - -int TestRunGBA(void); - -#endif
M src/gba/video.csrc/gba/video.c

@@ -6,11 +6,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include <mgba/internal/gba/video.h> #include <mgba/core/sync.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <mgba/internal/arm/macros.h> #include <mgba/internal/gba/dma.h> #include <mgba/internal/gba/gba.h> #include <mgba/internal/gba/io.h> +#include <mgba/internal/gba/renderers/cache-set.h> #include <mgba/internal/gba/serialize.h> #include <mgba-util/memory.h>

@@ -157,9 +158,9 @@ if (GBARegisterDISPSTATIsVblankIRQ(dispstat)) {

GBARaiseIRQ(video->p, IRQ_VBLANK); } GBAFrameEnded(video->p); + mCoreSyncPostFrame(video->p->sync); --video->frameskipCounter; if (video->frameskipCounter < 0) { - mCoreSyncPostFrame(video->p->sync); video->frameskipCounter = video->frameskip; } ++video->frameCounter;

@@ -214,7 +215,9 @@ // Nothing to do

} static uint16_t GBAVideoDummyRendererWriteVideoRegister(struct GBAVideoRenderer* renderer, uint32_t address, uint16_t value) { - UNUSED(renderer); + if (renderer->cache) { + GBAVideoCacheWriteVideoRegister(renderer->cache, address, value); + } switch (address) { case REG_BG0CNT: case REG_BG1CNT:

@@ -252,14 +255,13 @@ }

static void GBAVideoDummyRendererWriteVRAM(struct GBAVideoRenderer* renderer, uint32_t address) { if (renderer->cache) { - mTileCacheWriteVRAM(renderer->cache, address); + mCacheSetWriteVRAM(renderer->cache, address); } } static void GBAVideoDummyRendererWritePalette(struct GBAVideoRenderer* renderer, uint32_t address, uint16_t value) { - UNUSED(value); if (renderer->cache) { - mTileCacheWritePalette(renderer->cache, address); + mCacheSetWritePalette(renderer->cache, address >> 1, mColorFrom555(value)); } }
M src/lr35902/lr35902.csrc/lr35902/lr35902.c

@@ -70,9 +70,8 @@ cpu->irqPending = false;

cpu->irqh.reset(cpu); } -void LR35902RaiseIRQ(struct LR35902Core* cpu, uint8_t vector) { +void LR35902RaiseIRQ(struct LR35902Core* cpu) { cpu->irqPending = true; - cpu->irqVector = vector; } static void _LR35902InstructionIRQStall(struct LR35902Core* cpu) {

@@ -85,18 +84,19 @@ cpu->instruction = _LR35902InstructionIRQStall;

} static void _LR35902InstructionIRQDelay(struct LR35902Core* cpu) { - cpu->index = cpu->sp + 1; - cpu->bus = cpu->pc >> 8; + --cpu->sp; + cpu->index = cpu->sp; + cpu->bus = cpu->pc; cpu->executionState = LR35902_CORE_MEMORY_STORE; cpu->instruction = _LR35902InstructionIRQFinish; - cpu->pc = cpu->irqVector; + cpu->pc = cpu->irqh.irqVector(cpu); cpu->memory.setActiveRegion(cpu, cpu->pc); } static void _LR35902InstructionIRQ(struct LR35902Core* cpu) { - cpu->sp -= 2; /* TODO: Atomic incrementing? */ + --cpu->sp; cpu->index = cpu->sp; - cpu->bus = cpu->pc; + cpu->bus = cpu->pc >> 8; cpu->executionState = LR35902_CORE_MEMORY_STORE; cpu->instruction = _LR35902InstructionIRQDelay; }
M src/platform/3ds/CMakeLists.txtsrc/platform/3ds/CMakeLists.txt

@@ -13,7 +13,11 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format" PARENT_SCOPE)

set(OS_DEFINES COLOR_16_BIT COLOR_5_6_5 IOAPI_NO_64) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -list(APPEND OS_LIB citro3d ctru) +if(${CMAKE_BUILD_TYPE} STREQUAL Debug OR ${CMAKE_BUILD_TYPE} STREQUAL RelWithDebInfo) + list(APPEND OS_LIB citro3dd ctrud) +else() + list(APPEND OS_LIB citro3d ctru) +endif() file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/3ds-*.c ${CMAKE_CURRENT_SOURCE_DIR}/ctru-heap.c ${CMAKE_CURRENT_SOURCE_DIR}/socket.c) set(OS_SRC ${OS_SRC} PARENT_SCOPE) set(OS_LIB ${OS_LIB} PARENT_SCOPE)
M src/platform/3ds/ctr-gpu.csrc/platform/3ds/ctr-gpu.c

@@ -26,21 +26,21 @@ u32 abgr;

float rotate[2]; }; -#define MAX_NUM_QUADS 256 +#define MAX_NUM_QUADS 4096 #define VERTEX_BUFFER_SIZE MAX_NUM_QUADS * sizeof(struct ctrUIVertex) static struct ctrUIVertex* ctrVertexBuffer = NULL; static int ctrNumVerts = 0; static int ctrVertStart = 0; -static C3D_Tex* activeTexture = NULL; +static const C3D_Tex* activeTexture = NULL; static shaderProgram_s uiProgram; static DVLB_s* uiShader = NULL; static int GSH_FVEC_projectionMtx; static int GSH_FVEC_textureMtx; -bool ctrInitGpu() { +bool ctrInitGpu(void) { // Load vertex shader binary uiShader = DVLB_ParseFile((u32*) uishader, uishader_size); if (uiShader == NULL) {

@@ -83,7 +83,7 @@

return true; } -void ctrDeinitGpu() { +void ctrDeinitGpu(void) { if (ctrVertexBuffer) { linearFree(ctrVertexBuffer); ctrVertexBuffer = NULL;

@@ -108,10 +108,23 @@ }

C3D_FVUnifMtx4x4(GPU_GEOMETRY_SHADER, GSH_FVEC_projectionMtx, &projectionMtx); } -void ctrActivateTexture(C3D_Tex* texture) { +void ctrFlushBatch(void) { + int thisBatch = ctrNumVerts - ctrVertStart; + if (!thisBatch) { + return; + } + if (thisBatch < 0) { + svcBreak(USERBREAK_PANIC); + } + C3D_DrawArrays(GPU_GEOMETRY_PRIM, ctrVertStart, thisBatch); + ctrVertStart = ctrNumVerts; +} + +void ctrActivateTexture(const C3D_Tex* texture) { if (texture == activeTexture) { return; } + if (activeTexture) { ctrFlushBatch(); }

@@ -172,14 +185,11 @@ if (y >= 240 && h >= 0) {

return; } - if (ctrNumVerts + ctrVertStart == MAX_NUM_QUADS) { - ctrFlushBatch(); - C3D_Flush(); - ctrNumVerts = 0; - ctrVertStart = 0; + if (ctrNumVerts == MAX_NUM_QUADS) { + abort(); } - struct ctrUIVertex* vtx = &ctrVertexBuffer[ctrVertStart + ctrNumVerts]; + struct ctrUIVertex* vtx = &ctrVertexBuffer[ctrNumVerts]; vtx->x = x; vtx->y = y; vtx->w = w;

@@ -199,25 +209,17 @@ void ctrAddRect(u32 color, s16 x, s16 y, s16 u, s16 v, s16 w, s16 h) {

ctrAddRectEx(color, x, y, w, h, u, v, w, h, 0); } -void ctrFlushBatch(void) { - if (ctrNumVerts == 0) { - return; - } +void ctrStartFrame(void) { + ctrNumVerts = 0; + ctrVertStart = 0; + activeTexture = NULL; C3D_BufInfo* bufInfo = C3D_GetBufInfo(); BufInfo_Init(bufInfo); - BufInfo_Add(bufInfo, &ctrVertexBuffer[ctrVertStart], sizeof(struct ctrUIVertex), 4, 0x3210); - - GSPGPU_FlushDataCache(&ctrVertexBuffer[ctrVertStart], sizeof(struct ctrUIVertex) * ctrNumVerts); - C3D_DrawArrays(GPU_GEOMETRY_PRIM, 0, ctrNumVerts); - - ctrVertStart += ctrNumVerts; - ctrNumVerts = 0; + BufInfo_Add(bufInfo, ctrVertexBuffer, sizeof(struct ctrUIVertex), 4, 0x3210); } -void ctrFinalize(void) { +void ctrEndFrame(void) { ctrFlushBatch(); - C3D_Flush(); - ctrNumVerts = 0; - ctrVertStart = 0; + GSPGPU_FlushDataCache(ctrVertexBuffer, sizeof(struct ctrUIVertex) * ctrNumVerts); }
M src/platform/3ds/ctr-gpu.hsrc/platform/3ds/ctr-gpu.h

@@ -16,12 +16,13 @@ void ctrDeinitGpu(void);

void ctrSetViewportSize(s16 w, s16 h, bool tilt); -void ctrActivateTexture(C3D_Tex* texture); +void ctrActivateTexture(const C3D_Tex* texture); void ctrTextureMultiply(void); void ctrTextureBias(u32 color); void ctrAddRectEx(u32 color, s16 x, s16 y, s16 w, s16 h, s16 u, s16 v, s16 uw, s16 vh, float rotate); void ctrAddRect(u32 color, s16 x, s16 y, s16 u, s16 v, s16 w, s16 h); void ctrFlushBatch(void); -void ctrFinalize(void); +void ctrStartFrame(void); +void ctrEndFrame(void); #endif
M src/platform/3ds/main.csrc/platform/3ds/main.c

@@ -92,10 +92,15 @@ static C3D_Tex outputTexture;

static ndspWaveBuf dspBuffer[DSP_BUFFERS]; static int bufferId = 0; static bool frameLimiter = true; +static u64 tickCounter; -static C3D_RenderBuf bottomScreen; -static C3D_RenderBuf topScreen; -static C3D_RenderBuf upscaleBuffer; +static C3D_RenderTarget* topScreen[2]; +static C3D_RenderTarget* bottomScreen[2]; +static int doubleBuffer = 0; +static bool frameStarted = false; + +static C3D_RenderTarget* upscaleBuffer; +static C3D_Tex upscaleBufferTex; static aptHookCookie cookie;

@@ -106,9 +111,23 @@ if (!C3D_Init(C3D_DEFAULT_CMDBUF_SIZE)) {

return false; } - if (!C3D_RenderBufInit(&topScreen, 240, 400, GPU_RB_RGB8, 0) || !C3D_RenderBufInit(&bottomScreen, 240, 320, GPU_RB_RGB8, 0) || !C3D_RenderBufInit(&upscaleBuffer, 512, 512, GPU_RB_RGB8, 0)) { + topScreen[0] = C3D_RenderTargetCreate(240, 400, GPU_RB_RGB8, 0); + topScreen[1] = C3D_RenderTargetCreate(240, 400, GPU_RB_RGB8, 0); + bottomScreen[0] = C3D_RenderTargetCreate(240, 320, GPU_RB_RGB8, 0); + bottomScreen[1] = C3D_RenderTargetCreate(240, 320, GPU_RB_RGB8, 0); + if (!topScreen[0] || !topScreen[1] || !bottomScreen[0] || !bottomScreen[1]) { + return false; + } + + if (!C3D_TexInitVRAM(&upscaleBufferTex, 512, 512, GPU_RB_RGB8)) { return false; } + upscaleBuffer = C3D_RenderTargetCreateFromTex(&upscaleBufferTex, GPU_TEXFACE_2D, 0, 0); + if (!upscaleBuffer) { + return false; + } + + C3D_RenderTargetSetClear(upscaleBuffer, C3D_CLEAR_COLOR, 0, 0); return ctrInitGpu(); }

@@ -120,9 +139,13 @@ if (outputBuffer) {

linearFree(outputBuffer); } - C3D_RenderBufDelete(&topScreen); - C3D_RenderBufDelete(&bottomScreen); - C3D_RenderBufDelete(&upscaleBuffer); + C3D_RenderTargetDelete(topScreen[0]); + C3D_RenderTargetDelete(topScreen[1]); + C3D_RenderTargetDelete(bottomScreen[0]); + C3D_RenderTargetDelete(bottomScreen[1]); + C3D_RenderTargetDelete(upscaleBuffer); + C3D_TexDelete(&upscaleBufferTex); + C3D_TexDelete(&outputTexture); C3D_Fini(); gfxExit();

@@ -204,18 +227,41 @@

static void _postAudioBuffer(struct mAVStream* stream, blip_t* left, blip_t* right); static void _drawStart(void) { - C3D_RenderBufClear(&bottomScreen); - C3D_RenderBufClear(&topScreen); +} + +static void _frameStart(void) { + if (frameStarted) { + return; + } + frameStarted = true; + u8 flags = 0; + if (!frameLimiter) { + if (tickCounter + 4481000 > svcGetSystemTick()) { + flags = C3D_FRAME_NONBLOCK; + } else { + tickCounter = svcGetSystemTick(); + } + } + C3D_FrameBegin(flags); + // Mark both buffers used to make sure they get cleared + C3D_FrameDrawOn(topScreen[doubleBuffer]); + C3D_FrameDrawOn(bottomScreen[doubleBuffer]); + ctrStartFrame(); } static void _drawEnd(void) { - ctrFinalize(); - C3D_RenderBufTransfer(&topScreen, (u32*) gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL), GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8)); - C3D_RenderBufTransfer(&bottomScreen, (u32*) gfxGetFramebuffer(GFX_BOTTOM, GFX_LEFT, NULL, NULL), GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8)); - gfxSwapBuffersGpu(); - if (frameLimiter) { - gspWaitForEvent(GSPGPU_EVENT_VBlank0, false); + if (!frameStarted) { + return; } + ctrEndFrame(); + C3D_RenderTargetSetOutput(topScreen[doubleBuffer], GFX_TOP, GFX_LEFT, GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8)); + C3D_RenderTargetSetOutput(bottomScreen[doubleBuffer], GFX_BOTTOM, GFX_LEFT, GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGB8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8)); + C3D_FrameEnd(GX_CMDLIST_FLUSH); + frameStarted = false; + + doubleBuffer ^= 1; + C3D_FrameBufClear(&bottomScreen[doubleBuffer]->frameBuf, C3D_CLEAR_COLOR, 0, 0); + C3D_FrameBufClear(&topScreen[doubleBuffer]->frameBuf, C3D_CLEAR_COLOR, 0, 0); } static int _batteryState(void) {

@@ -234,12 +280,8 @@ return state | charge;

} static void _guiPrepare(void) { - int screen = screenMode < SM_PA_TOP ? GFX_BOTTOM : GFX_TOP; - if (screen == GFX_BOTTOM) { - return; - } - - C3D_RenderBufBind(&bottomScreen); + _frameStart(); + C3D_FrameDrawOn(bottomScreen[doubleBuffer]); ctrSetViewportSize(320, 240, true); }

@@ -254,6 +296,7 @@ }

CAMU_SetSize(imageSource->cam, SIZE_QCIF, CONTEXT_A); CAMU_SetOutputFormat(imageSource->cam, OUTPUT_RGB_565, CONTEXT_A); CAMU_SetFrameRate(imageSource->cam, FRAME_RATE_30); + CAMU_FlipImage(imageSource->cam, FLIP_NONE, CONTEXT_A); CAMU_SetNoiseFilter(imageSource->cam, true); CAMU_SetAutoExposure(imageSource->cam, false);

@@ -261,9 +304,8 @@ CAMU_SetAutoWhiteBalance(imageSource->cam, false);

} static void _setup(struct mGUIRunner* runner) { - bool isNew3DS = false; - APT_CheckNew3DS(&isNew3DS); - if (isNew3DS && !envIsHomebrew()) { + uint8_t mask; + if (R_SUCCEEDED(svcGetProcessAffinityMask(&mask, CUR_PROCESS_HANDLE, 4)) && mask >= 4) { mCoreConfigSetDefaultIntValue(&runner->config, "threadedVideo", 1); mCoreLoadForeignConfig(runner->core, &runner->config); }

@@ -285,7 +327,7 @@ _map3DSKey(&runner->core->inputMap, KEY_RIGHT, GBA_KEY_RIGHT);

_map3DSKey(&runner->core->inputMap, KEY_L, GBA_KEY_L); _map3DSKey(&runner->core->inputMap, KEY_R, GBA_KEY_R); - outputBuffer = linearMemAlign(256 * VIDEO_VERTICAL_PIXELS * 2, 0x80); + outputBuffer = linearMemAlign(256 * 224 * 2, 0x80); runner->core->setVideoBuffer(runner->core, outputBuffer, 256); unsigned mode;

@@ -295,9 +337,9 @@ }

if (mCoreConfigGetUIntValue(&runner->config, "filterMode", &mode) && mode < FM_MAX) { filterMode = mode; if (filterMode == FM_NEAREST) { - C3D_TexSetFilter(&upscaleBuffer.colorBuf, GPU_NEAREST, GPU_NEAREST); + C3D_TexSetFilter(&upscaleBufferTex, GPU_NEAREST, GPU_NEAREST); } else { - C3D_TexSetFilter(&upscaleBuffer.colorBuf, GPU_LINEAR, GPU_LINEAR); + C3D_TexSetFilter(&upscaleBufferTex, GPU_LINEAR, GPU_LINEAR); } } if (mCoreConfigGetUIntValue(&runner->config, "darkenMode", &mode) && mode < DM_MAX) {

@@ -354,9 +396,9 @@ }

if (mCoreConfigGetUIntValue(&runner->config, "filterMode", &mode) && mode < FM_MAX) { filterMode = mode; if (filterMode == FM_NEAREST) { - C3D_TexSetFilter(&upscaleBuffer.colorBuf, GPU_NEAREST, GPU_NEAREST); + C3D_TexSetFilter(&upscaleBufferTex, GPU_NEAREST, GPU_NEAREST); } else { - C3D_TexSetFilter(&upscaleBuffer.colorBuf, GPU_LINEAR, GPU_LINEAR); + C3D_TexSetFilter(&upscaleBufferTex, GPU_LINEAR, GPU_LINEAR); } } if (mCoreConfigGetUIntValue(&runner->config, "darkenMode", &mode) && mode < DM_MAX) {

@@ -419,22 +461,23 @@ }

} static void _drawTex(struct mCore* core, bool faded) { + _frameStart(); unsigned screen_w, screen_h; switch (screenMode) { case SM_PA_BOTTOM: - C3D_RenderBufBind(&bottomScreen); + C3D_FrameDrawOn(bottomScreen[doubleBuffer]); screen_w = 320; screen_h = 240; break; case SM_PA_TOP: - C3D_RenderBufBind(&topScreen); + C3D_FrameDrawOn(topScreen[doubleBuffer]); screen_w = 400; screen_h = 240; break; default: - C3D_RenderBufBind(&upscaleBuffer); - screen_w = upscaleBuffer.colorBuf.width; - screen_h = upscaleBuffer.colorBuf.height; + C3D_FrameDrawOn(upscaleBuffer); + screen_w = 512; + screen_h = 512; break; }

@@ -523,10 +566,10 @@ corew = w;

coreh = h; screen_h = 240; if (screenMode < SM_PA_TOP) { - C3D_RenderBufBind(&bottomScreen); + C3D_FrameDrawOn(bottomScreen[doubleBuffer]); screen_w = 320; } else { - C3D_RenderBufBind(&topScreen); + C3D_FrameDrawOn(topScreen[doubleBuffer]); screen_w = 400; } ctrSetViewportSize(screen_w, screen_h, true);

@@ -555,7 +598,7 @@ }

x = (screen_w - w) / 2; y = (screen_h - h) / 2; - ctrActivateTexture(&upscaleBuffer.colorBuf); + ctrActivateTexture(&upscaleBufferTex); ctrAddRectEx(0xFFFFFFFF, x, y, w, h, 0, 0, corew, coreh, 0); ctrFlushBatch(); }

@@ -622,13 +665,17 @@ UNUSED(runner);

screenMode = (screenMode + 1) % SM_MAX; mCoreConfigSetUIntValue(&runner->config, "screenMode", screenMode); - C3D_RenderBufClear(&bottomScreen); - C3D_RenderBufClear(&topScreen); + C3D_FrameBufClear(&bottomScreen[doubleBuffer]->frameBuf, C3D_CLEAR_COLOR, 0, 0); + C3D_FrameBufClear(&topScreen[doubleBuffer]->frameBuf, C3D_CLEAR_COLOR, 0, 0); } static void _setFrameLimiter(struct mGUIRunner* runner, bool limit) { UNUSED(runner); + if (frameLimiter == limit) { + return; + } frameLimiter = limit; + tickCounter = svcGetSystemTick(); } static uint32_t _pollInput(const struct mInputMap* map) {

@@ -694,7 +741,6 @@ CAMU_SetTransferBytes(PORT_CAM1, imageSource->transferSize, w, h);

CAMU_Activate(imageSource->cam); CAMU_ClearBuffer(PORT_CAM1); CAMU_StartCapture(PORT_CAM1); - CAMU_PlayShutterSound(SHUTTER_SOUND_TYPE_MOVIE); if (imageSource->cam) { CAMU_SetReceiving(&imageSource->handles[0], imageSource->buffer, PORT_CAM1, imageSource->bufferSize, imageSource->transferSize);

@@ -845,7 +891,7 @@ return 1;

} C3D_TexSetWrap(&outputTexture, GPU_CLAMP_TO_EDGE, GPU_CLAMP_TO_EDGE); C3D_TexSetFilter(&outputTexture, GPU_NEAREST, GPU_NEAREST); - C3D_TexSetFilter(&upscaleBuffer.colorBuf, GPU_LINEAR, GPU_LINEAR); + C3D_TexSetFilter(&upscaleBufferTex, GPU_LINEAR, GPU_LINEAR); void* outputTextureEnd = (u8*)outputTexture.data + 256 * 256 * 2; // Zero texture data to make sure no garbage around the border interferes with filtering
M src/platform/libretro/libretro.csrc/platform/libretro/libretro.c

@@ -10,6 +10,7 @@

#include <mgba/core/blip_buf.h> #include <mgba/core/cheats.h> #include <mgba/core/core.h> +#include <mgba/core/log.h> #include <mgba/core/version.h> #ifdef M_CORE_GB #include <mgba/gb/core.h>

@@ -101,8 +102,8 @@

struct retro_variable vars[] = { { "mgba_solar_sensor_level", "Solar sensor level; 0|1|2|3|4|5|6|7|8|9|10" }, { "mgba_allow_opposing_directions", "Allow opposing directional input; OFF|ON" }, - { "mgba_use_bios", "Use BIOS file if found; ON|OFF" }, - { "mgba_skip_bios", "Skip BIOS intro; OFF|ON" }, + { "mgba_use_bios", "Use BIOS file if found (requires restart); ON|OFF" }, + { "mgba_skip_bios", "Skip BIOS intro (requires restart); OFF|ON" }, { "mgba_idle_optimization", "Idle loop removal; Remove Known|Detect and Remove|Don't Remove" }, { 0, 0 } };

@@ -390,7 +391,7 @@ mCoreInitConfig(core, NULL);

core->init(core); core->setAVStream(core, &stream); - outputBuffer = malloc(256 * VIDEO_VERTICAL_PIXELS * BYTES_PER_PIXEL); + outputBuffer = malloc(256 * 224 * BYTES_PER_PIXEL); core->setVideoBuffer(core, outputBuffer, 256); core->setAudioBufferSize(core, SAMPLES);

@@ -527,16 +528,9 @@ #ifdef M_CORE_GBA

if (core->platform(core) == PLATFORM_GBA) { switch (((struct GBA*) core->board)->memory.savedata.type) { case SAVEDATA_AUTODETECT: - case SAVEDATA_FLASH1M: return SIZE_CART_FLASH1M; - case SAVEDATA_FLASH512: - return SIZE_CART_FLASH512; - case SAVEDATA_EEPROM: - return SIZE_CART_EEPROM; - case SAVEDATA_SRAM: - return SIZE_CART_SRAM; - case SAVEDATA_FORCE_NONE: - return 0; + default: + return GBASavedataSize(&((struct GBA*) core->board)->memory.savedata); } } #endif

@@ -582,7 +576,12 @@ retroLevel = RETRO_LOG_DEBUG;

break; } #ifdef NDEBUG - if (category == _mLOG_CAT_GBA_BIOS()) { + static int biosCat = -1; + if (biosCat < 0) { + biosCat = mLogCategoryById("gba.bios"); + } + + if (category == biosCat) { return; } #endif
M src/platform/openemu/mGBAGameCore.msrc/platform/openemu/mGBAGameCore.m

@@ -65,13 +65,9 @@ .useBios = true,

}; mCoreConfigLoadDefaults(&core->config, &opts); core->init(core); + outputBuffer = nil; - unsigned width, height; - core->desiredVideoDimensions(core, &width, &height); - outputBuffer = malloc(width * height * BYTES_PER_PIXEL); - core->setVideoBuffer(core, outputBuffer, width); core->setAudioBufferSize(core, SAMPLES); - cheatSets = [[NSMutableDictionary alloc] init]; }

@@ -108,6 +104,15 @@ }

mCoreAutoloadSave(core); core->reset(core); + + unsigned width, height; + core->desiredVideoDimensions(core, &width, &height); + if (outputBuffer) { + free(outputBuffer); + } + outputBuffer = malloc(width * height * BYTES_PER_PIXEL); + core->setVideoBuffer(core, outputBuffer, width); + return YES; }
M src/platform/opengl/gles2.csrc/platform/opengl/gles2.c

@@ -8,6 +8,7 @@

#include <mgba/core/log.h> #include <mgba-util/configuration.h> #include <mgba-util/formatting.h> +#include <mgba-util/math.h> #include <mgba-util/vector.h> #include <mgba-util/vfs.h>

@@ -190,13 +191,6 @@

void _drawShader(struct mGLES2Context* context, struct mGLES2Shader* shader) { GLint viewport[4]; glBindFramebuffer(GL_FRAMEBUFFER, shader->fbo); - if (shader->blend) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } else { - glDisable(GL_BLEND); - glClear(GL_COLOR_BUFFER_BIT); - } glGetIntegerv(GL_VIEWPORT, viewport); int drawW = shader->width;

@@ -222,6 +216,14 @@ drawW -= drawW % context->d.width;

drawH -= drawH % context->d.height; } glViewport(padW, padH, drawW, drawH); + if (shader->blend) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } else { + glDisable(GL_BLEND); + glClear(GL_COLOR_BUFFER_BIT); + } + if (shader->tex && (shader->width <= 0 || shader->height <= 0)) { GLint oldTex; glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTex);
M src/platform/psp2/sce-vfs.csrc/platform/psp2/sce-vfs.c

@@ -120,7 +120,20 @@ }

static void _vfsceTruncate(struct VFile* vf, size_t size) { struct VFileSce* vfsce = (struct VFileSce*) vf; - // TODO + SceOff cur = sceIoLseek(vfsce->fd, 0, SEEK_CUR); + SceOff end = sceIoLseek(vfsce->fd, 0, SEEK_END); + if (end < size) { + uint8_t buffer[2048] = {}; + size_t write = size - end; + while (write >= sizeof(buffer)) { + sceIoWrite(vfsce->fd, buffer, sizeof(buffer)); + write -= sizeof(buffer); + } + if (write) { + sceIoWrite(vfsce->fd, buffer, write); + } + } // TODO: Else + sceIoLseek(vfsce->fd, cur, SEEK_SET); } ssize_t _vfsceSize(struct VFile* vf) {
A src/platform/python/.gitignore

@@ -0,0 +1,5 @@

+/build +/dist +.eggs +.cache +*.egg-info*
M src/platform/python/CMakeLists.txtsrc/platform/python/CMakeLists.txt

@@ -1,4 +1,7 @@

-find_program(PYTHON python) +find_package(PythonLibs ${USE_PYTHON_VERSION}) +find_package(PythonInterp ${USE_PYTHON_VERSION}) +list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES}) +include_directories(AFTER ${PYTHON_INCLUDE_DIRS}) get_property(INCLUDE_DIRECTORIES DIRECTORY PROPERTY INCLUDE_DIRECTORIES) set(INCLUDE_FLAGS)

@@ -6,24 +9,22 @@ foreach(DIR IN LISTS INCLUDE_DIRECTORIES)

list(APPEND INCLUDE_FLAGS "-I${DIR}") endforeach() -include(FindPythonLibs) -list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES}) -include_directories(AFTER ${PYTHON_INCLUDE_DIRS}) - file(GLOB PYTHON_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h) +if(NOT GIT_TAG) + if(GIT_BRANCH STREQUAL "master" OR NOT GIT_BRANCH) + set(PYLIB_VERSION -b -${GIT_REV}-${GIT_COMMIT_SHORT}) + else() + set(PYLIB_VERSION -b -${GIT_BRANCH}-${GIT_REV}-${GIT_COMMIT_SHORT}) + endif() +endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py) -add_custom_command(OUTPUT build/lib/${BINARY_NAME}/__init__.py - COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON} ${CMAKE_CURRENT_BINARY_DIR}/setup.py build --build-base ${CMAKE_CURRENT_BINARY_DIR} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${BINARY_NAME} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/setup.py - DEPENDS ${PYTHON_HEADERS} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py) -add_custom_command(OUTPUT lib.c - COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lib.c + COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/lib.c DEPENDS ${PYTHON_HEADERS} + DEPENDS ${BINARY_NAME} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib.c PROPERTIES GENERATED ON)

@@ -32,6 +33,29 @@ file(GLOB PYTHON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.c)

add_library(${BINARY_NAME}-pylib STATIC ${CMAKE_CURRENT_BINARY_DIR}/lib.c ${PYTHON_SRC}) set_target_properties(${BINARY_NAME}-pylib PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${INCLUDE_DIRECTORIES}") set_target_properties(${BINARY_NAME}-pylib PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") -set(PYTHON_LIBRARY ${BINARY_NAME}-pylib PARENT_SCOPE) -add_custom_target(${BINARY_NAME}-py ALL DEPENDS ${BINARY_NAME}-pylib ${CMAKE_CURRENT_BINARY_DIR}/build/lib/${BINARY_NAME}/__init__.py) +add_custom_target(${BINARY_NAME}-py ALL + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py egg_info -e ${CMAKE_CURRENT_BINARY_DIR} ${PYLIB_VERSION} + COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py build -b ${CMAKE_CURRENT_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${BINARY_NAME} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/setup.py + DEPENDS ${PYTHON_HEADERS} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py + DEPENDS ${BINARY_NAME}-pylib) + +file(GLOB BASE_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/test_*.py) +file(GLOB SUBTESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/*/test_*.py) +foreach(TEST IN LISTS BASE_TESTS SUBTESTS) + if(APPLE) + set(PATH DYLD_LIBRARY_PATH) + elseif(WIN32) + set(PATH PATH) + else() + set(PATH LD_LIBRARY_PATH) + endif() + string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/(tests/.*/)?test_" "" TEST_NAME "${TEST}") + string(REPLACE ".py" "" TEST_NAME "${TEST_NAME}") + add_test(python-${TEST_NAME} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py build -b ${CMAKE_CURRENT_BINARY_DIR} pytest --extras --addopts ${TEST}) + set_tests_properties(python-${TEST_NAME} PROPERTIES ENVIRONMENT "${PATH}=${CMAKE_CURRENT_BINARY_DIR}/..") +endforeach()
M src/platform/python/_builder.hsrc/platform/python/_builder.h

@@ -8,12 +8,20 @@ #define _TIME_H_

#define ATTRIBUTE_FORMAT(X, Y, Z) #define DECL_BITFIELD(newtype, oldtype) typedef oldtype newtype -#define DECL_BIT(type, name, bit) -#define DECL_BITS(type, name, bit, nbits) +#define DECL_BIT(type, field, bit) DECL_BITS(type, field, bit, 1) +#define DECL_BITS(TYPE, FIELD, START, SIZE) \ + TYPE TYPE ## Is ## FIELD (TYPE); \ + TYPE TYPE ## Get ## FIELD (TYPE); \ + TYPE TYPE ## Clear ## FIELD (TYPE); \ + TYPE TYPE ## Fill ## FIELD (TYPE); \ + TYPE TYPE ## Set ## FIELD (TYPE, TYPE); \ + TYPE TYPE ## TestFill ## FIELD (TYPE, bool); #define CXX_GUARD_START #define CXX_GUARD_END +#define PYCPARSE + typedef int... time_t; typedef int... off_t; typedef ... va_list;

@@ -24,13 +32,13 @@

void free(void*); #include <limits.h> -#undef const #include "flags.h" +#include <mgba/core/cache-set.h> #include <mgba/core/core.h> +#include <mgba/core/map-cache.h> #include <mgba/core/mem-search.h> -#include <mgba/core/tile-cache.h> #include <mgba/core/thread.h> #include <mgba/core/version.h>

@@ -48,13 +56,13 @@ #ifdef M_CORE_GBA

#include <mgba/internal/arm/arm.h> #include <mgba/internal/gba/gba.h> #include <mgba/internal/gba/input.h> -#include <mgba/internal/gba/renderers/tile-cache.h> +#include <mgba/internal/gba/renderers/cache-set.h> #endif #ifdef M_CORE_GB #include <mgba/internal/lr35902/lr35902.h> #include <mgba/internal/gb/gb.h> #include <mgba/internal/gba/input.h> -#include <mgba/internal/gb/renderers/tile-cache.h> +#include <mgba/internal/gb/renderers/cache-set.h> #endif #ifdef USE_DEBUGGERS #include <mgba/debugger/debugger.h>
M src/platform/python/_builder.pysrc/platform/python/_builder.py

@@ -17,24 +17,27 @@ cppflags.extend(sys.argv[1:])

cppflags.extend(["-I" + incdir, "-I" + srcdir, "-I" + bindir]) ffi.set_source("mgba._pylib", """ +#define static +#define inline #include "flags.h" #define OPAQUE_THREADING +#include <mgba/core/cache-set.h> #include <mgba-util/common.h> #include <mgba/core/core.h> +#include <mgba/core/map-cache.h> #include <mgba/core/log.h> #include <mgba/core/mem-search.h> #include <mgba/core/thread.h> -#include <mgba/core/tile-cache.h> #include <mgba/core/version.h> #include <mgba/debugger/debugger.h> #include <mgba/internal/arm/arm.h> #include <mgba/internal/debugger/cli-debugger.h> #include <mgba/internal/gba/gba.h> #include <mgba/internal/gba/input.h> -#include <mgba/internal/gba/renderers/tile-cache.h> +#include <mgba/internal/gba/renderers/cache-set.h> #include <mgba/internal/lr35902/lr35902.h> #include <mgba/internal/gb/gb.h> -#include <mgba/internal/gb/renderers/tile-cache.h> +#include <mgba/internal/gb/renderers/cache-set.h> #include <mgba-util/png-io.h> #include <mgba-util/vfs.h>

@@ -71,6 +74,11 @@ lines.append(line)

ffi.embedding_api('\n'.join(lines)) ffi.embedding_init_code(""" + import os, os.path + venv = os.getenv('VIRTUAL_ENV') + if venv: + activate = os.path.join(venv, 'bin', 'activate_this.py') + exec(compile(open(activate, "rb").read(), activate, 'exec'), dict(__file__=activate)) from mgba._pylib import ffi, lib symbols = {} globalSyms = {
A src/platform/python/cinema/__init__.py

@@ -0,0 +1,23 @@

+from PIL.ImageChops import difference +from PIL.ImageOps import autocontrast +from PIL.Image import open as PIOpen + +class VideoFrame(object): + def __init__(self, pilImage): + self.image = pilImage.convert('RGB') + + @staticmethod + def diff(a, b): + diff = difference(a.image, b.image) + diffNormalized = autocontrast(diff) + return (VideoFrame(diff), VideoFrame(diffNormalized)) + + @staticmethod + def load(path): + with open(path, 'rb') as f: + image = PIOpen(f) + image.load() + return VideoFrame(image) + + def save(self, path): + return self.image.save(path)
A src/platform/python/cinema/movie.py

@@ -0,0 +1,47 @@

+from mgba.image import Image +from collections import namedtuple +from . import VideoFrame + +Output = namedtuple('Output', ['video']) + +class Tracer(object): + def __init__(self, core): + self.core = core + self.fb = Image(*core.desiredVideoDimensions()) + self.core.setVideoBuffer(self.fb) + self._videoFifo = [] + + def yieldFrames(self, skip=0, limit=None): + self.core.reset() + skip = (skip or 0) + 1 + while skip > 0: + frame = self.core.frameCounter + self.core.runFrame() + skip -= 1 + while frame <= self.core.frameCounter and limit != 0: + self._videoFifo.append(VideoFrame(self.fb.toPIL())) + yield frame + frame = self.core.frameCounter + self.core.runFrame() + if limit is not None: + assert limit >= 0 + limit -= 1 + + def video(self, generator=None, **kwargs): + if not generator: + generator = self.yieldFrames(**kwargs) + try: + while True: + if self._videoFifo: + result = self._videoFifo[0] + self._videoFifo = self._videoFifo[1:] + yield result + else: + next(generator) + except StopIteration: + return + + def output(self, **kwargs): + generator = self.yieldFrames(**kwargs) + + return mCoreOutput(video=self.video(generator=generator, **kwargs))
A src/platform/python/cinema/test.py

@@ -0,0 +1,96 @@

+import os, os.path +import mgba.core, mgba.image +import cinema.movie +import itertools +import glob +import re +import yaml +from copy import deepcopy +from cinema import VideoFrame +from cinema.util import dictMerge + +class CinemaTest(object): + TEST = 'test.(mvl|gb|gba|nds)' + + def __init__(self, path, root, settings={}): + self.fullPath = path or [] + self.path = os.path.abspath(os.path.join(root, *self.fullPath)) + self.root = root + self.name = '.'.join(path) + self.settings = settings + try: + with open(os.path.join(self.path, 'manifest.yml'), 'r') as f: + dictMerge(self.settings, yaml.safe_load(f)) + except IOError: + pass + self.tests = {} + + def __repr__(self): + return '<%s %s>' % (self.__class__.__name__, self.name) + + def setUp(self): + results = [f for f in glob.glob(os.path.join(self.path, 'test.*')) if re.search(self.TEST, f)] + self.core = mgba.core.loadPath(results[0]) + if 'config' in self.settings: + self.config = mgba.core.Config(defaults=self.settings['config']) + self.core.loadConfig(self.config) + self.core.reset() + + def addTest(self, name, cls=None, settings={}): + cls = cls or self.__class__ + newSettings = deepcopy(self.settings) + dictMerge(newSettings, settings) + self.tests[name] = cls(self.fullPath + [name], self.root, newSettings) + return self.tests[name] + + def outputSettings(self): + outputSettings = {} + if 'frames' in self.settings: + outputSettings['limit'] = self.settings['frames'] + if 'skip' in self.settings: + outputSettings['skip'] = self.settings['skip'] + return outputSettings + + def __lt__(self, other): + return self.path < other.path + +class VideoTest(CinemaTest): + BASELINE = 'baseline_%04u.png' + + def setUp(self): + super(VideoTest, self).setUp(); + self.tracer = cinema.movie.Tracer(self.core) + + def generateFrames(self): + for i, frame in zip(itertools.count(), self.tracer.video(**self.outputSettings())): + try: + baseline = VideoFrame.load(os.path.join(self.path, self.BASELINE % i)) + yield baseline, frame, VideoFrame.diff(baseline, frame) + except IOError: + yield None, frame, (None, None) + + def test(self): + self.baseline, self.frames, self.diffs = zip(*self.generateFrames()) + assert not any(any(diffs[0].image.convert("L").point(bool).getdata()) for diffs in self.diffs) + + def generateBaseline(self): + for i, frame in zip(itertools.count(), self.tracer.video(**self.outputSettings())): + frame.save(os.path.join(self.path, self.BASELINE % i)) + +def gatherTests(root=os.getcwd()): + tests = CinemaTest([], root) + for path, _, files in os.walk(root): + test = [f for f in files if re.match(CinemaTest.TEST, f)] + if not test: + continue + prefix = os.path.commonprefix([path, root]) + suffix = path[len(prefix)+1:] + testPath = suffix.split(os.sep) + testRoot = tests + for component in testPath[:-1]: + newTest = testRoot.tests.get(component) + if not newTest: + newTest = testRoot.addTest(component) + testRoot = newTest + testRoot.addTest(testPath[-1], VideoTest) + return tests
A src/platform/python/cinema/util.py

@@ -0,0 +1,9 @@

+def dictMerge(a, b): + for key, value in b.items(): + if isinstance(value, dict): + if key in a: + dictMerge(a[key], value) + else: + a[key] = dict(value) + else: + a[key] = value
A src/platform/python/conftest.py

@@ -0,0 +1,49 @@

+import errno +import itertools +import os +import os.path +import pytest +import yaml + +def pytest_addoption(parser): + parser.addoption("--rebaseline", action="store_true", help="output a new baseline instead of testing") + parser.addoption("--mark-failing", action="store_true", help="mark all failing tests as failing") + parser.addoption("--mark-succeeding", action="store_true", help="unmark all succeeding tests marked as failing") + parser.addoption("--output-diff", help="output diffs for failed tests to directory") + +EXPECTED = 'expected_%04u.png' +RESULT = 'result_%04u.png' +DIFF = 'diff_%04u.png' +DIFF_NORM = 'diff_norm_%04u.png' + +def pytest_exception_interact(node, call, report): + outroot = node.config.getoption("--output-diff") + if report.failed and hasattr(node, 'funcargs'): + vtest = node.funcargs.get('vtest') + if outroot: + if not vtest: + return + outdir = os.path.join(outroot, *vtest.fullPath) + try: + os.makedirs(outdir) + except OSError as e: + if e.errno == errno.EEXIST and os.path.isdir(outdir): + pass + else: + raise + for i, expected, result, diff, diffNorm in zip(itertools.count(), vtest.baseline, vtest.frames, *zip(*vtest.diffs)): + result.save(os.path.join(outdir, RESULT % i)) + if expected: + expected.save(os.path.join(outdir, EXPECTED % i)) + diff.save(os.path.join(outdir, DIFF % i)) + diffNorm.save(os.path.join(outdir, DIFF_NORM % i)) + + if node.config.getoption("--mark-failing"): + try: + with open(os.path.join(vtest.path, 'manifest.yml'), 'r') as f: + settings = yaml.safe_load(f) + except IOError: + settings = {} + settings['fail'] = True + with open(os.path.join(vtest.path, 'manifest.yml'), 'w') as f: + yaml.dump(settings, f, default_flow_style=False)
M src/platform/python/mgba/core.pysrc/platform/python/mgba/core.py

@@ -103,10 +103,32 @@ self._wasReset = False

self._protected = False self._callbacks = CoreCallbacks() self._core.addCoreCallbacks(self._core, self._callbacks.context) + self.config = Config(ffi.addressof(native.config)) + + def __del__(self): + self._wasReset = False + + @cached_property + def graphicsCache(self): + if not self._wasReset: + raise RuntimeError("Core must be reset first") + return tile.CacheSet(self) @cached_property def tiles(self): - return tile.TileView(self) + t = [] + ts = ffi.addressof(self.graphicsCache.cache.tiles) + for i in range(lib.mTileCacheSetSize(ts)): + t.append(tile.TileView(lib.mTileCacheSetGetPointer(ts, i))) + return t + + @cached_property + def maps(self): + m = [] + ms = ffi.addressof(self.graphicsCache.cache.maps) + for i in range(lib.mMapCacheSetSize(ms)): + m.append(tile.MapView(lib.mMapCacheSetGetPointer(ms, i))) + return m @classmethod def _init(cls, native):

@@ -147,6 +169,9 @@ return bool(self._core.loadTemporarySave(self._core, vf.handle))

def loadPatch(self, vf): return bool(self._core.loadPatch(self._core, vf.handle)) + + def loadConfig(self, config): + lib.mCoreLoadForeignConfig(self._core, config._native) def autoloadSave(self): return bool(lib.mCoreAutoloadSave(self._core))

@@ -261,3 +286,28 @@ raise NotImplementedError

def isPaused(self): raise NotImplementedError + +class Config(object): + def __init__(self, native=None, port=None, defaults={}): + if not native: + self._port = ffi.NULL + if port: + self._port = ffi.new("char[]", port.encode("UTF-8")) + native = ffi.gc(ffi.new("struct mCoreConfig*"), lib.mCoreConfigDeinit) + lib.mCoreConfigInit(native, self._port) + self._native = native + for key, value in defaults.items(): + if isinstance(value, bool): + value = int(value) + lib.mCoreConfigSetDefaultValue(self._native, ffi.new("char[]", key.encode("UTF-8")), ffi.new("char[]", str(value).encode("UTF-8"))) + + def __getitem__(self, key): + string = lib.mCoreConfigGetValue(self._native, ffi.new("char[]", key.encode("UTF-8"))) + if not string: + return None + return ffi.string(string) + + def __setitem__(self, key, value): + if isinstance(value, bool): + value = int(value) + lib.mCoreConfigSetValue(self._native, ffi.new("char[]", key.encode("UTF-8")), ffi.new("char[]", str(value).encode("UTF-8")))
M src/platform/python/mgba/gb.pysrc/platform/python/mgba/gb.py

@@ -27,13 +27,14 @@ self.sprites = GBObjs(self)

self.cpu = LR35902Core(self._core.cpu) @needsReset - def _initTileCache(self, cache): - lib.GBVideoTileCacheInit(cache) - lib.GBVideoTileCacheAssociate(cache, ffi.addressof(self._native.video)) + def _initCache(self, cache): + lib.GBVideoCacheInit(cache) + lib.GBVideoCacheAssociate(cache, ffi.addressof(self._native.video)) - def _deinitTileCache(self, cache): - self._native.video.renderer.cache = ffi.NULL - lib.mTileCacheDeinit(cache) + def _deinitCache(self, cache): + lib.mCacheSetDeinit(cache) + if self._wasReset: + self._native.video.renderer.cache = ffi.NULL def reset(self): super(GB, self).reset()

@@ -135,6 +136,7 @@ self.tile += 512

self.paletteId = self._attr & 7 else: self.paletteId = (self._attr >> 4) & 1 + self.paletteId += 8 class GBObjs:

@@ -149,5 +151,5 @@ def __getitem__(self, index):

if index >= len(self): raise IndexError() sprite = GBSprite(self._obj[index], self._core) - sprite.constitute(self._core.tiles, 0, 0) + sprite.constitute(self._core.tiles[0], 0) return sprite
M src/platform/python/mgba/gba.pysrc/platform/python/mgba/gba.py

@@ -35,13 +35,14 @@ self.sprites = GBAObjs(self)

self.cpu = ARMCore(self._core.cpu) @needsReset - def _initTileCache(self, cache): - lib.GBAVideoTileCacheInit(cache) - lib.GBAVideoTileCacheAssociate(cache, ffi.addressof(self._native.video)) + def _initCache(self, cache): + lib.GBAVideoCacheInit(cache) + lib.GBAVideoCacheAssociate(cache, ffi.addressof(self._native.video)) - def _deinitTileCache(self, cache): - self._native.video.renderer.cache = ffi.NULL - lib.mTileCacheDeinit(cache) + def _deinitCache(self, cache): + lib.mCacheSetDeinit(cache) + if self._wasReset: + self._native.video.renderer.cache = ffi.NULL def reset(self): super(GBA, self).reset()

@@ -127,6 +128,7 @@ def __getitem__(self, index):

if index >= len(self): raise IndexError() sprite = GBASprite(self._obj[index]) + tiles = self._core.tiles[3 if sprite._256Color else 2] map1D = bool(self._core._native.memory.io[0] & 0x40) - sprite.constitute(self._core.tiles, 0 if map1D else 0x20, int(sprite._256Color)) + sprite.constitute(tiles, 0 if map1D else 0x20) return sprite
M src/platform/python/mgba/image.pysrc/platform/python/mgba/image.py

@@ -12,10 +12,11 @@ except ImportError:

pass class Image: - def __init__(self, width, height, stride=0): + def __init__(self, width, height, stride=0, alpha=False): self.width = width self.height = height self.stride = stride + self.alpha = alpha self.constitute() def constitute(self):

@@ -24,7 +25,7 @@ self.stride = self.width

self.buffer = ffi.new("color_t[{}]".format(self.stride * self.height)) def savePNG(self, f): - p = png.PNG(f) + p = png.PNG(f, mode=png.MODE_RGBA if self.alpha else png.MODE_RGB) success = p.writeHeader(self) success = success and p.writePixels(self) p.writeClose()

@@ -32,8 +33,9 @@ return success

if 'PImage' in globals(): def toPIL(self): - return PImage.frombytes("RGBX", (self.width, self.height), ffi.buffer(self.buffer), "raw", - "RGBX", self.stride * 4) + type = "RGBA" if self.alpha else "RGBX" + return PImage.frombytes(type, (self.width, self.height), ffi.buffer(self.buffer), "raw", + type, self.stride * 4) def u16ToU32(c): r = c & 0x1F
M src/platform/python/mgba/png.pysrc/platform/python/mgba/png.py

@@ -6,17 +6,32 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/.

from ._pylib import ffi, lib from . import vfs +MODE_RGB = 0 +MODE_RGBA = 1 +MODE_INDEX = 2 + class PNG: - def __init__(self, f): + def __init__(self, f, mode=MODE_RGB): self.vf = vfs.open(f) + self.mode = mode def writeHeader(self, image): self._png = lib.PNGWriteOpen(self.vf.handle) - self._info = lib.PNGWriteHeader(self._png, image.width, image.height) + if self.mode == MODE_RGB: + self._info = lib.PNGWriteHeader(self._png, image.width, image.height) + if self.mode == MODE_RGBA: + self._info = lib.PNGWriteHeaderA(self._png, image.width, image.height) + if self.mode == MODE_INDEX: + self._info = lib.PNGWriteHeader8(self._png, image.width, image.height) return self._info != ffi.NULL def writePixels(self, image): - return lib.PNGWritePixels(self._png, image.width, image.height, image.stride, image.buffer) + if self.mode == MODE_RGB: + return lib.PNGWritePixels(self._png, image.width, image.height, image.stride, image.buffer) + if self.mode == MODE_RGBA: + return lib.PNGWritePixelsA(self._png, image.width, image.height, image.stride, image.buffer) + if self.mode == MODE_INDEX: + return lib.PNGWritePixels8(self._png, image.width, image.height, image.stride, image.buffer) def writeClose(self): lib.PNGWriteClose(self._png, self._info)
M src/platform/python/mgba/tile.pysrc/platform/python/mgba/tile.py

@@ -17,41 +17,52 @@ return i

def composite(self, i, x, y): for iy in range(8): - for ix in range(8): - i.buffer[ix + x + (iy + y) * i.stride] = image.u16ToColor(self.buffer[ix + iy * 8]) + ffi.memmove(ffi.addressof(i.buffer, x + (iy + y) * i.stride), ffi.addressof(self.buffer, iy * 8), 8 * ffi.sizeof("color_t")) -class TileView: +class CacheSet: def __init__(self, core): self.core = core - self.cache = ffi.gc(ffi.new("struct mTileCache*"), core._deinitTileCache) - core._initTileCache(self.cache) - lib.mTileCacheSetPalette(self.cache, 0) - self.paletteSet = 0 + self.cache = ffi.gc(ffi.new("struct mCacheSet*"), core._deinitCache) + core._initCache(self.cache) + +class TileView: + def __init__(self, cache): + self.cache = cache def getTile(self, tile, palette): return Tile(lib.mTileCacheGetTile(self.cache, tile, palette)) - def setPalette(self, paletteSet): - if paletteSet > 1 or paletteSet < 0: - raise IndexError("Palette Set ID out of bounds") - lib.mTileCacheSetPalette(self.cache, paletteSet) - self.paletteSet = paletteSet +class MapView: + def __init__(self, cache): + self.cache = cache + + @property + def width(self): + return 1 << lib.mMapCacheSystemInfoGetTilesWide(self.cache.sysConfig) + + @property + def height(self): + return 1 << lib.mMapCacheSystemInfoGetTilesHigh(self.cache.sysConfig) + + @property + def image(self): + i = image.Image(self.width * 8, self.height * 8, alpha=True) + for y in range(self.height * 8): + if not y & 7: + lib.mMapCacheCleanRow(self.cache, y >> 3) + row = lib.mMapCacheGetRow(self.cache, y) + ffi.memmove(ffi.addressof(i.buffer, i.stride * y), row, self.width * 8 * ffi.sizeof("color_t")) + return i class Sprite(object): - TILE_BASE = 0, 0 - PALETTE_BASE = 0, 0 - - def constitute(self, tileView, tilePitch, paletteSet): - oldPaletteSet = tileView.paletteSet - tileView.setPalette(paletteSet) - i = image.Image(self.width, self.height) - tileId = self.tile + self.TILE_BASE[paletteSet] + def constitute(self, tileView, tilePitch): + i = image.Image(self.width, self.height, alpha=True) + tileId = self.tile for y in range(self.height // 8): for x in range(self.width // 8): - tile = tileView.getTile(tileId, self.paletteId + self.PALETTE_BASE[paletteSet]) + tile = tileView.getTile(tileId, self.paletteId) tile.composite(i, x * 8, y * 8) tileId += 1 if tilePitch: tileId += tilePitch - self.width // 8 self.image = i - tileView.setPalette(oldPaletteSet)
M src/platform/python/mgba/vfs.pysrc/platform/python/mgba/vfs.py

@@ -11,6 +11,7 @@ @ffi.def_extern()

def _vfpClose(vf): vfp = ffi.cast("struct VFilePy*", vf) ffi.from_handle(vfp.fileobj).close() + return True @ffi.def_extern() def _vfpSeek(vf, offset, whence):

@@ -93,14 +94,17 @@ flags |= os.O_RDWR

if "x" in mode[1:]: flags |= os.O_EXCL - return VFile(lib.VFileOpen(path.encode("UTF-8"), flags)) + vf = lib.VFileOpen(path.encode("UTF-8"), flags); + if vf == ffi.NULL: + return None + return VFile(vf) class VFile: def __init__(self, vf): self.handle = vf def close(self): - return self.handle.close(self.handle) + return bool(self.handle.close(self.handle)) def seek(self, offset, whence): return self.handle.seek(self.handle, offset, whence)
A src/platform/python/setup.cfg

@@ -0,0 +1,2 @@

+[aliases] +test=pytest
M src/platform/python/setup.py.insrc/platform/python/setup.py.in

@@ -1,6 +1,7 @@

from setuptools import setup import re import os +import sys os.environ["BINDIR"] = "${CMAKE_BINARY_DIR}" os.environ["CPPFLAGS"] = " ".join([d for d in "${INCLUDE_FLAGS}".split(";") if d])

@@ -16,14 +17,15 @@ "Topic :: System :: Emulators"

] setup(name="${BINARY_NAME}", - version=re.sub("/", "-", "${VERSION_STRING}"), + version="${LIB_VERSION_STRING}", author="Jeffrey Pfau", author_email="jeffrey@endrift.com", url="http://github.com/mgba-emu/mgba/", packages=["mgba"], - setup_requires=['cffi>=1.6'], + setup_requires=['cffi>=1.6', 'pytest-runner'], install_requires=['cffi>=1.6', 'cached-property'], - extras_require={'pil': ['Pillow>=2.3']}, + extras_require={'pil': ['Pillow>=2.3'], 'cinema': ['pyyaml', 'pytest']}, + tests_require=['pytest'], cffi_modules=["_builder.py:ffi"], license="MPL 2.0", classifiers=classifiers
A src/platform/python/test_cinema.py

@@ -0,0 +1,61 @@

+import pytest +import cinema.test +import mgba.log +import os.path +import yaml + +mgba.log.installDefault(mgba.log.NullLogger()) + +def flatten(d): + l = [] + for k, v in d.tests.items(): + if v.tests: + l.extend(flatten(v)) + else: + l.append(v) + l.sort() + return l + +def pytest_generate_tests(metafunc): + if 'vtest' in metafunc.fixturenames: + tests = cinema.test.gatherTests(os.path.join(os.path.dirname(__file__), 'tests/cinema')) + testList = flatten(tests) + params = [] + for test in testList: + marks = [] + xfail = test.settings.get('fail') + if xfail: + marks = pytest.mark.xfail(reason=xfail if isinstance(xfail, str) else None) + params.append(pytest.param(test, id=test.name, marks=marks)) + metafunc.parametrize('vtest', params, indirect=True) + +@pytest.fixture +def vtest(request): + return request.param + +def test_video(vtest, pytestconfig): + vtest.setUp() + if pytestconfig.getoption('--rebaseline'): + vtest.generateBaseline() + else: + try: + vtest.test() + except IOError: + raise + if pytestconfig.getoption('--mark-succeeding') and 'fail' in vtest.settings: + # TODO: This can fail if an entire directory is marked as failing + settings = {} + try: + with open(os.path.join(vtest.path, 'manifest.yml'), 'r') as f: + settings = yaml.safe_load(f) + except IOError: + pass + if 'fail' in settings: + del settings['fail'] + else: + settings['fail'] = False + if settings: + with open(os.path.join(vtest.path, 'manifest.yml'), 'w') as f: + yaml.dump(settings, f, default_flow_style=False) + else: + os.remove(os.path.join(vtest.path, 'manifest.yml'))
A src/platform/python/tests/cinema/gb/mooneye-gb/LICENSE

@@ -0,0 +1,19 @@

+Copyright (c) 2014-2017 Joonas Javanainen <joonas.javanainen@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/add_sp_e_timing/test.sym

@@ -0,0 +1,206 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/add_sp_e_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 _wait_ly_4 +00:0156 _wait_ly_5 +00:0180 test_finish +00:01c4 wram_test +00:01d3 hiram_test +00:01d3 test_round1 +00:01d5 _wait_ly_6 +00:01db _wait_ly_7 +00:01f0 finish_round1 +00:01ff test_round2 +00:0201 _wait_ly_8 +00:0207 _wait_ly_9 +00:021d finish_round2 +00:c014 result_tmp +00:c016 result_round1
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/bits/mem_oam/test.sym

@@ -0,0 +1,212 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/bits/mem_oam.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:016f test_finish +00:0183 _wait_ly_4 +00:0189 _wait_ly_5 +00:019f _print_results_halt_1 +00:01a2 _test_ok_cb_0 +00:01aa _print_sl_data55 +00:01b2 _print_sl_out55 +00:01b5 fail_1 +00:01c9 _wait_ly_6 +00:01cf _wait_ly_7 +00:01e5 _print_results_halt_2 +00:01e8 _test_failure_cb_0 +00:01f0 _print_sl_data56 +00:01fd _print_sl_out56 +00:0200 fail_0 +00:0214 _wait_ly_8 +00:021a _wait_ly_9 +00:0230 _print_results_halt_3 +00:0233 _test_failure_cb_1 +00:023b _print_sl_data57 +00:0248 _print_sl_out57
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/bits/reg_f/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/bits/reg_f.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0160 test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/bits/unused_hwio-GS/test.sym

@@ -0,0 +1,535 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/bits/unused_hwio-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c017 regs_save +00:c017 regs_save.f +00:c018 regs_save.a +00:c019 regs_save.c +00:c01a regs_save.b +00:c01b regs_save.e +00:c01c regs_save.d +00:c01d regs_save.l +00:c01e regs_save.h +00:c01f regs_flags +00:c020 regs_assert +00:c020 regs_assert.f +00:c021 regs_assert.a +00:c022 regs_assert.c +00:c023 regs_assert.b +00:c024 regs_assert.e +00:c025 regs_assert.d +00:c026 regs_assert.l +00:c027 regs_assert.h +00:c028 memdump_len +00:c029 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0161 _test_data_0 +00:0177 _finish_0 +00:0187 _test_data_1 +00:019d _finish_1 +00:01ad _test_data_2 +00:01c3 _finish_2 +00:01d3 _test_data_3 +00:01e9 _finish_3 +00:01f9 _test_data_4 +00:020f _finish_4 +00:021f _test_data_5 +00:0235 _finish_5 +00:0245 _test_data_6 +00:025b _finish_6 +00:026b _test_data_7 +00:0281 _finish_7 +00:0291 _test_data_8 +00:02a7 _finish_8 +00:02b7 _test_data_9 +00:02cd _finish_9 +00:02dd _test_data_10 +00:02f3 _finish_10 +00:0303 _test_data_11 +00:0319 _finish_11 +00:0329 _test_data_12 +00:033f _finish_12 +00:034f _test_data_13 +00:0365 _finish_13 +00:0375 _test_data_14 +00:038b _finish_14 +00:039b _test_data_15 +00:03b1 _finish_15 +00:03c1 _test_data_16 +00:03d7 _finish_16 +00:03e7 _test_data_17 +00:03fd _finish_17 +00:040d _test_data_18 +00:0423 _finish_18 +00:0433 _test_data_19 +00:0449 _finish_19 +00:0459 _test_data_20 +00:046f _finish_20 +00:047f _test_data_21 +00:0495 _finish_21 +00:04a5 _test_data_22 +00:04bb _finish_22 +00:04cb _test_data_23 +00:04e1 _finish_23 +00:04f1 _test_data_24 +00:0507 _finish_24 +00:0517 _test_data_25 +00:052d _finish_25 +00:053d _test_data_26 +00:0553 _finish_26 +00:0563 _test_data_27 +00:0579 _finish_27 +00:0589 _test_data_28 +00:059f _finish_28 +00:05af _test_data_29 +00:05c5 _finish_29 +00:05d5 _test_data_30 +00:05eb _finish_30 +00:05fb _test_data_31 +00:0611 _finish_31 +00:0621 _test_data_32 +00:0637 _finish_32 +00:0647 _test_data_33 +00:065d _finish_33 +00:066d _test_data_34 +00:0683 _finish_34 +00:0693 _test_data_35 +00:06a9 _finish_35 +00:06b9 _test_data_36 +00:06cf _finish_36 +00:06df _test_data_37 +00:06f5 _finish_37 +00:0705 _test_data_38 +00:071b _finish_38 +00:072b _test_data_39 +00:0741 _finish_39 +00:0751 _test_data_40 +00:0767 _finish_40 +00:0777 _test_data_41 +00:078d _finish_41 +00:079d _test_data_42 +00:07b3 _finish_42 +00:07c3 _test_data_43 +00:07d9 _finish_43 +00:07e9 _test_data_44 +00:07ff _finish_44 +00:080f _test_data_45 +00:0825 _finish_45 +00:0835 _test_data_46 +00:084b _finish_46 +00:085b _test_data_47 +00:0871 _finish_47 +00:0881 _test_data_48 +00:0897 _finish_48 +00:08a7 _test_data_49 +00:08bd _finish_49 +00:08cd _test_data_50 +00:08e3 _finish_50 +00:08f3 _test_data_51 +00:0909 _finish_51 +00:0919 _test_data_52 +00:092f _finish_52 +00:093f _test_data_53 +00:0955 _finish_53 +00:0965 _test_data_54 +00:097b _finish_54 +00:098b _test_data_55 +00:09a1 _finish_55 +00:09b1 _test_data_56 +00:09c7 _finish_56 +00:09d7 _test_data_57 +00:09ed _finish_57 +00:09fd _test_data_58 +00:0a13 _finish_58 +00:0a23 _test_data_59 +00:0a39 _finish_59 +00:0a49 _test_data_60 +00:0a5f _finish_60 +00:0a6f _test_data_61 +00:0a85 _finish_61 +00:0a95 _test_data_62 +00:0aab _finish_62 +00:0abb _test_data_63 +00:0ad1 _finish_63 +00:0ae1 _test_data_64 +00:0af7 _finish_64 +00:0b07 _test_data_65 +00:0b1d _finish_65 +00:0b2d _test_data_66 +00:0b43 _finish_66 +00:0b53 _test_data_67 +00:0b69 _finish_67 +00:0b79 _test_data_68 +00:0b8f _finish_68 +00:0b9f _test_data_69 +00:0bb5 _finish_69 +00:0bc5 _test_data_70 +00:0bdb _finish_70 +00:0beb _test_data_71 +00:0c01 _finish_71 +00:0c11 _test_data_72 +00:0c27 _finish_72 +00:0c37 _test_data_73 +00:0c4d _finish_73 +00:0c5d _test_data_74 +00:0c73 _finish_74 +00:0c83 _test_data_75 +00:0c99 _finish_75 +00:0ca9 _test_data_76 +00:0cbf _finish_76 +00:0ccf _test_data_77 +00:0ce5 _finish_77 +00:0cf5 _test_data_78 +00:0d0b _finish_78 +00:0d1b _test_data_79 +00:0d31 _finish_79 +00:0d41 _test_data_80 +00:0d57 _finish_80 +00:0d67 _test_data_81 +00:0d7d _finish_81 +00:0d8d _test_data_82 +00:0da3 _finish_82 +00:0db3 _test_data_83 +00:0dc9 _finish_83 +00:0dd9 _test_data_84 +00:0def _finish_84 +00:0dff _test_data_85 +00:0e15 _finish_85 +00:0e25 _test_data_86 +00:0e3b _finish_86 +00:0e4b _test_data_87 +00:0e61 _finish_87 +00:0e71 _test_data_88 +00:0e87 _finish_88 +00:0e97 _test_data_89 +00:0ead _finish_89 +00:0ebd _test_data_90 +00:0ed3 _finish_90 +00:0ee3 _test_data_91 +00:0ef9 _finish_91 +00:0f09 _test_data_92 +00:0f1f _finish_92 +00:0f2f _test_data_93 +00:0f45 _finish_93 +00:0f55 _test_data_94 +00:0f6b _finish_94 +00:0f7b _test_data_95 +00:0f91 _finish_95 +00:0fa1 _test_data_96 +00:0fb7 _finish_96 +00:0fc7 _test_data_97 +00:0fdd _finish_97 +00:0fed _test_data_98 +00:1003 _finish_98 +00:1013 _test_data_99 +00:1029 _finish_99 +00:1039 _test_data_100 +00:104f _finish_100 +00:105f _test_data_101 +00:1075 _finish_101 +00:1085 _test_data_102 +00:109b _finish_102 +00:10ab _test_data_103 +00:10c1 _finish_103 +00:10d1 _test_data_104 +00:10e7 _finish_104 +00:10f7 _test_data_105 +00:110d _finish_105 +00:111d _test_data_106 +00:1133 _finish_106 +00:1143 _test_data_107 +00:1159 _finish_107 +00:1169 _test_data_108 +00:117f _finish_108 +00:118f _test_data_109 +00:11a5 _finish_109 +00:11b5 _test_data_110 +00:11cb _finish_110 +00:11db _test_data_111 +00:11f1 _finish_111 +00:1201 _test_data_112 +00:1217 _finish_112 +00:1227 _test_data_113 +00:123d _finish_113 +00:124d _test_data_114 +00:1263 _finish_114 +00:1273 _test_data_115 +00:1289 _finish_115 +00:1299 _test_data_116 +00:12af _finish_116 +00:12bf _test_data_117 +00:12d5 _finish_117 +00:12e5 _test_data_118 +00:12fb _finish_118 +00:130b _test_data_119 +00:1321 _finish_119 +00:1331 _test_data_120 +00:1347 _finish_120 +00:1357 _test_data_121 +00:136d _finish_121 +00:137d _test_data_122 +00:1393 _finish_122 +00:13a3 _test_data_123 +00:13b9 _finish_123 +00:13c9 _test_data_124 +00:13df _finish_124 +00:13ef _test_data_125 +00:1405 _finish_125 +00:1415 _test_data_126 +00:142b _finish_126 +00:143b _test_data_127 +00:1451 _finish_127 +00:1461 _test_data_128 +00:1477 _finish_128 +00:1487 _test_data_129 +00:149d _finish_129 +00:14ad _test_data_130 +00:14c3 _finish_130 +00:14d3 _test_data_131 +00:14e9 _finish_131 +00:14f9 _test_data_132 +00:150f _finish_132 +00:151f _test_data_133 +00:1535 _finish_133 +00:1545 _test_data_134 +00:155b _finish_134 +00:156b _test_data_135 +00:1581 _finish_135 +00:1591 _test_data_136 +00:15a7 _finish_136 +00:15b7 _test_data_137 +00:15cd _finish_137 +00:15dd _test_data_138 +00:15f3 _finish_138 +00:1603 _test_data_139 +00:1619 _finish_139 +00:1629 _test_data_140 +00:163f _finish_140 +00:164f _test_data_141 +00:1665 _finish_141 +00:1675 _test_data_142 +00:168b _finish_142 +00:169b _test_data_143 +00:16b1 _finish_143 +00:16c1 _test_data_144 +00:16d7 _finish_144 +00:16e7 _test_data_145 +00:16fd _finish_145 +00:170d _test_data_146 +00:1723 _finish_146 +00:1733 _test_data_147 +00:1749 _finish_147 +00:1759 _test_data_148 +00:176f _finish_148 +00:177f _test_data_149 +00:1795 _finish_149 +00:17a5 _test_data_150 +00:17bb _finish_150 +00:17cb _test_data_151 +00:17e1 _finish_151 +00:17f1 _test_data_152 +00:1807 _finish_152 +00:1817 _test_data_153 +00:182d _finish_153 +00:1841 _wait_ly_4 +00:1847 _wait_ly_5 +00:185d _print_results_halt_1 +00:1860 _test_ok_cb_0 +00:1868 _print_sl_data55 +00:1870 _print_sl_out55 +00:1873 run_testcase +00:189e _wait_ly_6 +00:18a4 _wait_ly_7 +00:18ba _print_results_halt_2 +00:18bd test_failure_cb +00:18c5 _print_sl_data56 +00:18d1 _print_sl_out56 +00:18df _print_sl_data57 +00:18e3 _print_sl_out57 +00:18f1 _print_sl_data58 +00:1901 _print_sl_out58 +00:190f _print_sl_data59 +00:191c _print_sl_out59 +00:192d _print_sl_data60 +00:193a _print_sl_out60 +00:194b _print_sl_data61 +00:1958 _print_sl_out61 +00:195e fetch_test_data +00:1978 print_got +00:198a _print_zero +00:198e _print_one +00:1990 _print_bit +00:1999 _skip +00:199a _next +00:c000 test_addr +00:c002 test_got +00:c003 test_reg +00:c004 test_mask +00:c005 test_str_write +00:c00e test_str_expect
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_hwio-S/test.sym

@@ -0,0 +1,212 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_hwio-S.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_ok_cb_0 +00:020d _print_sl_data55 +00:0215 _print_sl_out55 +00:0218 mismatch +00:023b _wait_ly_6 +00:0241 _wait_ly_7 +00:0257 _print_results_halt_2 +00:025a mismatch_cb +00:0262 _print_sl_data56 +00:0270 _print_sl_out56 +00:028a _print_sl_data57 +00:0294 _print_sl_out57 +00:02a5 _print_sl_data58 +00:02af _print_sl_out58 +00:02b8 hwio_data +00:c014 mismatch_addr +00:c016 mismatch_data +00:c017 mismatch_mem
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_hwio-dmg0/test.sym

@@ -0,0 +1,212 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_hwio-dmg0.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_ok_cb_0 +00:020d _print_sl_data55 +00:0215 _print_sl_out55 +00:0218 mismatch +00:023b _wait_ly_6 +00:0241 _wait_ly_7 +00:0257 _print_results_halt_2 +00:025a mismatch_cb +00:0262 _print_sl_data56 +00:0270 _print_sl_out56 +00:028a _print_sl_data57 +00:0294 _print_sl_out57 +00:02a5 _print_sl_data58 +00:02af _print_sl_out58 +00:02b8 hwio_data +00:c014 mismatch_addr +00:c016 mismatch_data +00:c017 mismatch_mem
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_hwio-dmgABCXmgb/test.sym

@@ -0,0 +1,212 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_hwio-dmgABCXmgb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_ok_cb_0 +00:020d _print_sl_data55 +00:0215 _print_sl_out55 +00:0218 mismatch +00:023b _wait_ly_6 +00:0241 _wait_ly_7 +00:0257 _print_results_halt_2 +00:025a mismatch_cb +00:0262 _print_sl_data56 +00:0270 _print_sl_out56 +00:028a _print_sl_data57 +00:0294 _print_sl_out57 +00:02a5 _print_sl_data58 +00:02af _print_sl_out58 +00:02b8 hwio_data +00:c014 mismatch_addr +00:c016 mismatch_data +00:c017 mismatch_mem
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-dmg/test.sym

@@ -0,0 +1,198 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/jeffrey/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-dmg.gb". + +[labels] +0001:4bf2 print_load_font +0001:4bff print_string +0001:4c09 print_a +0001:4c13 print_newline +0001:4c1e print_digit +0001:4c2b print_regs +0001:4c34 _print_sl_data0 +0001:4c3a _print_sl_out0 +0001:4c47 _print_sl_data1 +0001:4c4d _print_sl_out1 +0001:4c5f _print_sl_data2 +0001:4c65 _print_sl_out2 +0001:4c72 _print_sl_data3 +0001:4c78 _print_sl_out3 +0001:4c8a _print_sl_data4 +0001:4c90 _print_sl_out4 +0001:4c9d _print_sl_data5 +0001:4ca3 _print_sl_out5 +0001:4cb5 _print_sl_data6 +0001:4cbb _print_sl_out6 +0001:4cc8 _print_sl_data7 +0001:4cce _print_sl_out7 +0001:4000 font +0000:c000 regs_save +0000:c000 regs_save.f +0000:c001 regs_save.a +0000:c002 regs_save.c +0000:c003 regs_save.b +0000:c004 regs_save.e +0000:c005 regs_save.d +0000:c006 regs_save.l +0000:c007 regs_save.h +0000:c008 regs_flags +0000:c009 regs_assert +0000:c009 regs_assert.f +0000:c00a regs_assert.a +0000:c00b regs_assert.c +0000:c00c regs_assert.b +0000:c00d regs_assert.e +0000:c00e regs_assert.d +0000:c00f regs_assert.l +0000:c010 regs_assert.h +0000:c011 memdump_len +0000:c012 memdump_addr +0001:47f0 memcpy +0001:47f9 memset +0001:4802 clear_vram +0001:480d reset_screen +0001:481a process_results +0001:481f _wait_ly_0 +0001:4825 _wait_ly_1 +0001:4841 _wait_ly_2 +0001:4847 _wait_ly_3 +0001:4860 _process_results_cb +0001:486b _print_sl_data8 +0001:4875 _print_sl_out8 +0001:488f _print_sl_data9 +0001:489a _print_sl_out9 +0001:48b2 _print_sl_data10 +0001:48be _print_sl_out10 +0001:48bf dump_mem +0001:48cf _wait_ly_4 +0001:48d5 _wait_ly_5 +0001:48f1 _dump_mem_line +0001:491b _check_asserts +0001:4929 _print_sl_data11 +0001:492c _print_sl_out11 +0001:4938 _print_sl_data12 +0001:493a _print_sl_out12 +0001:4942 _print_sl_data13 +0001:4945 _print_sl_out13 +0001:494f __check_assert_fail0 +0001:495a _print_sl_data14 +0001:495d _print_sl_out14 +0001:4960 __check_assert_ok0 +0001:4968 _print_sl_data15 +0001:496d _print_sl_out15 +0001:496f __check_assert_skip0 +0001:4977 _print_sl_data16 +0001:497f _print_sl_out16 +0001:497f __check_assert_out0 +0001:498b _print_sl_data17 +0001:498d _print_sl_out17 +0001:4995 _print_sl_data18 +0001:4998 _print_sl_out18 +0001:49a2 __check_assert_fail1 +0001:49ad _print_sl_data19 +0001:49b0 _print_sl_out19 +0001:49b3 __check_assert_ok1 +0001:49bb _print_sl_data20 +0001:49c0 _print_sl_out20 +0001:49c2 __check_assert_skip1 +0001:49ca _print_sl_data21 +0001:49d2 _print_sl_out21 +0001:49d2 __check_assert_out1 +0001:49dd _print_sl_data22 +0001:49e0 _print_sl_out22 +0001:49ec _print_sl_data23 +0001:49ee _print_sl_out23 +0001:49f6 _print_sl_data24 +0001:49f9 _print_sl_out24 +0001:4a03 __check_assert_fail2 +0001:4a0e _print_sl_data25 +0001:4a11 _print_sl_out25 +0001:4a14 __check_assert_ok2 +0001:4a1c _print_sl_data26 +0001:4a21 _print_sl_out26 +0001:4a23 __check_assert_skip2 +0001:4a2b _print_sl_data27 +0001:4a33 _print_sl_out27 +0001:4a33 __check_assert_out2 +0001:4a3f _print_sl_data28 +0001:4a41 _print_sl_out28 +0001:4a49 _print_sl_data29 +0001:4a4c _print_sl_out29 +0001:4a56 __check_assert_fail3 +0001:4a61 _print_sl_data30 +0001:4a64 _print_sl_out30 +0001:4a67 __check_assert_ok3 +0001:4a6f _print_sl_data31 +0001:4a74 _print_sl_out31 +0001:4a76 __check_assert_skip3 +0001:4a7e _print_sl_data32 +0001:4a86 _print_sl_out32 +0001:4a86 __check_assert_out3 +0001:4a91 _print_sl_data33 +0001:4a94 _print_sl_out33 +0001:4aa0 _print_sl_data34 +0001:4aa2 _print_sl_out34 +0001:4aaa _print_sl_data35 +0001:4aad _print_sl_out35 +0001:4ab7 __check_assert_fail4 +0001:4ac2 _print_sl_data36 +0001:4ac5 _print_sl_out36 +0001:4ac8 __check_assert_ok4 +0001:4ad0 _print_sl_data37 +0001:4ad5 _print_sl_out37 +0001:4ad7 __check_assert_skip4 +0001:4adf _print_sl_data38 +0001:4ae7 _print_sl_out38 +0001:4ae7 __check_assert_out4 +0001:4af3 _print_sl_data39 +0001:4af5 _print_sl_out39 +0001:4afd _print_sl_data40 +0001:4b00 _print_sl_out40 +0001:4b0a __check_assert_fail5 +0001:4b15 _print_sl_data41 +0001:4b18 _print_sl_out41 +0001:4b1b __check_assert_ok5 +0001:4b23 _print_sl_data42 +0001:4b28 _print_sl_out42 +0001:4b2a __check_assert_skip5 +0001:4b32 _print_sl_data43 +0001:4b3a _print_sl_out43 +0001:4b3a __check_assert_out5 +0001:4b45 _print_sl_data44 +0001:4b48 _print_sl_out44 +0001:4b54 _print_sl_data45 +0001:4b56 _print_sl_out45 +0001:4b5e _print_sl_data46 +0001:4b61 _print_sl_out46 +0001:4b6b __check_assert_fail6 +0001:4b76 _print_sl_data47 +0001:4b79 _print_sl_out47 +0001:4b7c __check_assert_ok6 +0001:4b84 _print_sl_data48 +0001:4b89 _print_sl_out48 +0001:4b8b __check_assert_skip6 +0001:4b93 _print_sl_data49 +0001:4b9b _print_sl_out49 +0001:4b9b __check_assert_out6 +0001:4ba7 _print_sl_data50 +0001:4ba9 _print_sl_out50 +0001:4bb1 _print_sl_data51 +0001:4bb4 _print_sl_out51 +0001:4bbe __check_assert_fail7 +0001:4bc9 _print_sl_data52 +0001:4bcc _print_sl_out52 +0001:4bcf __check_assert_ok7 +0001:4bd7 _print_sl_data53 +0001:4bdc _print_sl_out53 +0001:4bde __check_assert_skip7 +0001:4be6 _print_sl_data54 +0001:4bee _print_sl_out54 +0001:4bee __check_assert_out7 +0000:01d2 invalid_sp +0000:01d7 _wait_ly_6 +0000:01dd _wait_ly_7 +0000:01f9 _wait_ly_8 +0000:01ff _wait_ly_9 +0000:0218 _test_failure_cb_0 +0000:0220 _print_sl_data55 +0000:0231 _print_sl_out55 +0000:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-dmg0/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-dmg0.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-dmgABCX/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-dmgABCX.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-mgb/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-mgb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-sgb/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-sgb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/boot_regs-sgb2/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/boot_regs-sgb2.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/call_cc_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/call_cc_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0184 test_finish +00:0198 _wait_ly_6 +00:019e _wait_ly_7 +00:01b4 _print_results_halt_1 +00:01b7 _test_ok_cb_0 +00:01bf _print_sl_data55 +00:01c7 _print_sl_out55 +00:01ca wram_test +00:01cd fail_round1 +00:01e1 _wait_ly_8 +00:01e7 _wait_ly_9 +00:01fd _print_results_halt_2 +00:0200 _test_failure_cb_0 +00:0208 _print_sl_data56 +00:0216 _print_sl_out56 +00:0219 fail_round2 +00:022d _wait_ly_10 +00:0233 _wait_ly_11 +00:0249 _print_results_halt_3 +00:024c _test_failure_cb_1 +00:0254 _print_sl_data57 +00:0262 _print_sl_out57 +00:1f80 hiram_test +00:1f87 _wait_ly_12 +00:1f8d _wait_ly_13 +00:1fa1 test_round2 +00:1fa8 _wait_ly_14 +00:1fae _wait_ly_15 +00:1fca finish_round1 +00:1ada finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/call_cc_timing2/test.sym

@@ -0,0 +1,204 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/call_cc_timing2.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0177 test_finish +00:01cf hiram_test +00:01d2 _wait_ly_6 +00:01d8 _wait_ly_7 +00:01ec finish_round1 +00:01ed _wait_ly_8 +00:01f3 _wait_ly_9 +00:0208 finish_round2 +00:0209 _wait_ly_10 +00:020f _wait_ly_11 +00:0225 finish_round3
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/call_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/call_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0184 test_finish +00:0198 _wait_ly_6 +00:019e _wait_ly_7 +00:01b4 _print_results_halt_1 +00:01b7 _test_ok_cb_0 +00:01bf _print_sl_data55 +00:01c7 _print_sl_out55 +00:01ca wram_test +00:01cd fail_round1 +00:01e1 _wait_ly_8 +00:01e7 _wait_ly_9 +00:01fd _print_results_halt_2 +00:0200 _test_failure_cb_0 +00:0208 _print_sl_data56 +00:0216 _print_sl_out56 +00:0219 fail_round2 +00:022d _wait_ly_10 +00:0233 _wait_ly_11 +00:0249 _print_results_halt_3 +00:024c _test_failure_cb_1 +00:0254 _print_sl_data57 +00:0262 _print_sl_out57 +00:1f80 hiram_test +00:1f87 _wait_ly_12 +00:1f8d _wait_ly_13 +00:1fa1 test_round2 +00:1fa8 _wait_ly_14 +00:1fae _wait_ly_15 +00:1fca finish_round1 +00:1ada finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/call_timing2/test.sym

@@ -0,0 +1,204 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/call_timing2.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0177 test_finish +00:01cf hiram_test +00:01d2 _wait_ly_6 +00:01d8 _wait_ly_7 +00:01ec finish_round1 +00:01ed _wait_ly_8 +00:01f3 _wait_ly_9 +00:0208 finish_round2 +00:0209 _wait_ly_10 +00:020f _wait_ly_11 +00:0225 finish_round3
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/di_timing-GS/test.sym

@@ -0,0 +1,228 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/di_timing-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0158 _wait_ly_4 +00:015e _wait_ly_5 +00:016d test_round1 +00:0177 _delay_long_time_0 +00:0186 finish_round1 +00:0189 _wait_ly_6 +00:018f _wait_ly_7 +00:019e test_round2 +00:01a8 _delay_long_time_1 +00:01b4 test_finish +00:01c8 _wait_ly_8 +00:01ce _wait_ly_9 +00:01e4 _print_results_halt_1 +00:01e7 _test_ok_cb_0 +00:01ef _print_sl_data55 +00:01f7 _print_sl_out55 +00:01fa fail_halt +00:020e _wait_ly_10 +00:0214 _wait_ly_11 +00:022a _print_results_halt_2 +00:022d _test_failure_cb_0 +00:0235 _print_sl_data56 +00:0240 _print_sl_out56 +00:0243 fail_round1 +00:0257 _wait_ly_12 +00:025d _wait_ly_13 +00:0273 _print_results_halt_3 +00:0276 _test_failure_cb_1 +00:027e _print_sl_data57 +00:028c _print_sl_out57 +00:028f fail_round2 +00:02a3 _wait_ly_14 +00:02a9 _wait_ly_15 +00:02bf _print_results_halt_4 +00:02c2 _test_failure_cb_2 +00:02ca _print_sl_data58 +00:02d8 _print_sl_out58
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/div_timing/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/div_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0232 test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/ei_timing/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/ei_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0160 test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/hblank_ly_scx_timing-GS/test.sym

@@ -0,0 +1,219 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/hblank_ly_scx_timing-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:03a2 _wait_ly_6 +00:03a8 _wait_ly_7 +00:03be _print_results_halt_1 +00:03c1 _test_ok_cb_0 +00:03c9 _print_sl_data55 +00:03d1 _print_sl_out55 +00:03d4 test_fail +00:0404 _wait_ly_8 +00:040a _wait_ly_9 +00:0420 _print_results_halt_2 +00:0423 _test_failure_dump_cb_0 +00:042e _print_sl_data56 +00:0438 _print_sl_out56 +00:044c _print_sl_data57 +00:0458 _print_sl_out57 +00:045b standard_delay +00:0473 setup_and_wait +00:0473 _wait_ly_10 +00:0479 _wait_ly_11 +00:048d fail_halt +00:04a1 _wait_ly_12 +00:04a7 _wait_ly_13 +00:04bd _print_results_halt_3 +00:04c0 _test_failure_cb_0 +00:04c8 _print_sl_data58 +00:04d3 _print_sl_out58
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_1_2_timing-GS/test.sym

@@ -0,0 +1,203 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_1_2_timing-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:01ab setup_and_wait_mode1 +00:01ab _wait_ly_6 +00:01be setup_and_wait_mode2 +00:01cb fail_halt +00:01df _wait_ly_7 +00:01e5 _wait_ly_8 +00:01fb _print_results_halt_1 +00:01fe _test_failure_cb_0 +00:0206 _print_sl_data55 +00:0211 _print_sl_out55
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_2_0_timing/test.sym

@@ -0,0 +1,203 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_2_0_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:01a9 setup_and_wait_mode2 +00:01a9 _wait_ly_6 +00:01cc setup_and_wait_mode0 +00:01d9 fail_halt +00:01ed _wait_ly_7 +00:01f3 _wait_ly_8 +00:0209 _print_results_halt_1 +00:020c _test_failure_cb_0 +00:0214 _print_sl_data55 +00:021f _print_sl_out55
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_2_mode0_timing/test.sym

@@ -0,0 +1,202 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_2_mode0_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0207 setup_and_wait_mode2 +00:0207 _wait_ly_6 +00:022a fail_halt +00:023e _wait_ly_7 +00:0244 _wait_ly_8 +00:025a _print_results_halt_1 +00:025d _test_failure_cb_0 +00:0265 _print_sl_data55 +00:0270 _print_sl_out55
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_2_mode0_timing_sprites/test.sym

@@ -0,0 +1,437 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_2_mode0_timing_sprites.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c0c2 regs_save +00:c0c2 regs_save.f +00:c0c3 regs_save.a +00:c0c4 regs_save.c +00:c0c5 regs_save.b +00:c0c6 regs_save.e +00:c0c7 regs_save.d +00:c0c8 regs_save.l +00:c0c9 regs_save.h +00:c0ca regs_flags +00:c0cb regs_assert +00:c0cb regs_assert.f +00:c0cc regs_assert.a +00:c0cd regs_assert.c +00:c0ce regs_assert.b +00:c0cf regs_assert.e +00:c0d0 regs_assert.d +00:c0d1 regs_assert.l +00:c0d2 regs_assert.h +00:c0d3 memdump_len +00:c0d4 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0174 _testcase_data_0 +00:0176 _testcase_end_0 +00:0187 _testcase_data_1 +00:018a _testcase_end_1 +00:019b _testcase_data_2 +00:019f _testcase_end_2 +00:01b0 _testcase_data_3 +00:01b5 _testcase_end_3 +00:01c6 _testcase_data_4 +00:01cc _testcase_end_4 +00:01dd _testcase_data_5 +00:01e4 _testcase_end_5 +00:01f5 _testcase_data_6 +00:01fd _testcase_end_6 +00:020e _testcase_data_7 +00:0217 _testcase_end_7 +00:0228 _testcase_data_8 +00:0232 _testcase_end_8 +00:0243 _testcase_data_9 +00:024e _testcase_end_9 +00:025f _testcase_data_10 +00:026a _testcase_end_10 +00:027b _testcase_data_11 +00:0286 _testcase_end_11 +00:0297 _testcase_data_12 +00:02a2 _testcase_end_12 +00:02b3 _testcase_data_13 +00:02be _testcase_end_13 +00:02cf _testcase_data_14 +00:02da _testcase_end_14 +00:02eb _testcase_data_15 +00:02f6 _testcase_end_15 +00:0307 _testcase_data_16 +00:0312 _testcase_end_16 +00:0323 _testcase_data_17 +00:032e _testcase_end_17 +00:033f _testcase_data_18 +00:034a _testcase_end_18 +00:035b _testcase_data_19 +00:0366 _testcase_end_19 +00:0377 _testcase_data_20 +00:0382 _testcase_end_20 +00:0393 _testcase_data_21 +00:039e _testcase_end_21 +00:03af _testcase_data_22 +00:03ba _testcase_end_22 +00:03cb _testcase_data_23 +00:03d6 _testcase_end_23 +00:03e7 _testcase_data_24 +00:03f2 _testcase_end_24 +00:0403 _testcase_data_25 +00:040e _testcase_end_25 +00:041f _testcase_data_26 +00:042a _testcase_end_26 +00:043b _testcase_data_27 +00:0446 _testcase_end_27 +00:0457 _testcase_data_28 +00:0462 _testcase_end_28 +00:0473 _testcase_data_29 +00:047e _testcase_end_29 +00:048f _testcase_data_30 +00:049a _testcase_end_30 +00:04ab _testcase_data_31 +00:04b6 _testcase_end_31 +00:04c7 _testcase_data_32 +00:04d2 _testcase_end_32 +00:04e3 _testcase_data_33 +00:04ee _testcase_end_33 +00:04ff _testcase_data_34 +00:050a _testcase_end_34 +00:051b _testcase_data_35 +00:0526 _testcase_end_35 +00:0537 _testcase_data_36 +00:0542 _testcase_end_36 +00:0553 _testcase_data_37 +00:055e _testcase_end_37 +00:056f _testcase_data_38 +00:057a _testcase_end_38 +00:058b _testcase_data_39 +00:0596 _testcase_end_39 +00:05a7 _testcase_data_40 +00:05b2 _testcase_end_40 +00:05c3 _testcase_data_41 +00:05ce _testcase_end_41 +00:05df _testcase_data_42 +00:05ea _testcase_end_42 +00:05fb _testcase_data_43 +00:0606 _testcase_end_43 +00:0617 _testcase_data_44 +00:0622 _testcase_end_44 +00:0633 _testcase_data_45 +00:063e _testcase_end_45 +00:064f _testcase_data_46 +00:065a _testcase_end_46 +00:066b _testcase_data_47 +00:0676 _testcase_end_47 +00:0687 _testcase_data_48 +00:0692 _testcase_end_48 +00:06a3 _testcase_data_49 +00:06ae _testcase_end_49 +00:06bf _testcase_data_50 +00:06ca _testcase_end_50 +00:06db _testcase_data_51 +00:06e6 _testcase_end_51 +00:06f7 _testcase_data_52 +00:06f9 _testcase_end_52 +00:070a _testcase_data_53 +00:070c _testcase_end_53 +00:071d _testcase_data_54 +00:071f _testcase_end_54 +00:0730 _testcase_data_55 +00:0732 _testcase_end_55 +00:0743 _testcase_data_56 +00:0745 _testcase_end_56 +00:0756 _testcase_data_57 +00:0758 _testcase_end_57 +00:0769 _testcase_data_58 +00:076b _testcase_end_58 +00:077c _testcase_data_59 +00:077e _testcase_end_59 +00:078f _testcase_data_60 +00:0791 _testcase_end_60 +00:07a2 _testcase_data_61 +00:07a4 _testcase_end_61 +00:07b5 _testcase_data_62 +00:07b7 _testcase_end_62 +00:07c8 _testcase_data_63 +00:07ca _testcase_end_63 +00:07db _testcase_data_64 +00:07dd _testcase_end_64 +00:07ee _testcase_data_65 +00:07f0 _testcase_end_65 +00:0801 _testcase_data_66 +00:0803 _testcase_end_66 +00:0814 _testcase_data_67 +00:0816 _testcase_end_67 +00:0827 _testcase_data_68 +00:0829 _testcase_end_68 +00:083a _testcase_data_69 +00:083c _testcase_end_69 +00:084d _testcase_data_70 +00:084f _testcase_end_70 +00:0860 _testcase_data_71 +00:0862 _testcase_end_71 +00:0873 _testcase_data_72 +00:0875 _testcase_end_72 +00:0886 _testcase_data_73 +00:0888 _testcase_end_73 +00:0899 _testcase_data_74 +00:089b _testcase_end_74 +00:08ac _testcase_data_75 +00:08ae _testcase_end_75 +00:08bf _testcase_data_76 +00:08c1 _testcase_end_76 +00:08d2 _testcase_data_77 +00:08d4 _testcase_end_77 +00:08e5 _testcase_data_78 +00:08e8 _testcase_end_78 +00:08f9 _testcase_data_79 +00:08fc _testcase_end_79 +00:090d _testcase_data_80 +00:0910 _testcase_end_80 +00:0921 _testcase_data_81 +00:0924 _testcase_end_81 +00:0935 _testcase_data_82 +00:0938 _testcase_end_82 +00:0949 _testcase_data_83 +00:094c _testcase_end_83 +00:095d _testcase_data_84 +00:0960 _testcase_end_84 +00:0971 _testcase_data_85 +00:0974 _testcase_end_85 +00:0985 _testcase_data_86 +00:0988 _testcase_end_86 +00:0999 _testcase_data_87 +00:099c _testcase_end_87 +00:09ad _testcase_data_88 +00:09b0 _testcase_end_88 +00:09c1 _testcase_data_89 +00:09c4 _testcase_end_89 +00:09d5 _testcase_data_90 +00:09d8 _testcase_end_90 +00:09e9 _testcase_data_91 +00:09ec _testcase_end_91 +00:09fd _testcase_data_92 +00:0a00 _testcase_end_92 +00:0a11 _testcase_data_93 +00:0a14 _testcase_end_93 +00:0a25 _testcase_data_94 +00:0a28 _testcase_end_94 +00:0a39 _testcase_data_95 +00:0a44 _testcase_end_95 +00:0a55 _testcase_data_96 +00:0a60 _testcase_end_96 +00:0a71 _testcase_data_97 +00:0a7c _testcase_end_97 +00:0a8d _testcase_data_98 +00:0a98 _testcase_end_98 +00:0aa9 _testcase_data_99 +00:0ab4 _testcase_end_99 +00:0ac5 _testcase_data_100 +00:0ad0 _testcase_end_100 +00:0ae1 _testcase_data_101 +00:0aec _testcase_end_101 +00:0afd _testcase_data_102 +00:0b08 _testcase_end_102 +00:0b19 _testcase_data_103 +00:0b24 _testcase_end_103 +00:0b35 _testcase_data_104 +00:0b40 _testcase_end_104 +00:0b54 _wait_ly_4 +00:0b5a _wait_ly_5 +00:0b70 _print_results_halt_1 +00:0b73 _test_ok_cb_0 +00:0b7b _print_sl_data55 +00:0b83 _print_sl_out55 +00:0b86 run_testcase +00:0b88 _wait_ly_6 +00:0b8e _wait_ly_7 +00:0bb9 testcase_round_a +00:0bc4 testcase_round_a_ret +00:0bd4 testcase_round_b +00:0bdf testcase_round_b_ret +00:0bf0 prepare_sprites +00:0c06 prepare_nop_area +00:0c0f setup_and_wait_mode2 +00:0c0f _wait_ly_8 +00:0c32 test_fail +00:0c46 _wait_ly_9 +00:0c4c _wait_ly_10 +00:0c62 _print_results_halt_2 +00:0c65 _test_fail_cb +00:0c6d _print_sl_data56 +00:0c74 _print_sl_out56 +00:0c82 _print_sl_data57 +00:0c8a _print_sl_out57 +00:0c8d fail_halt +00:0ca1 _wait_ly_11 +00:0ca7 _wait_ly_12 +00:0cbd _print_results_halt_3 +00:0cc0 _test_failure_cb_0 +00:0cc8 _print_sl_data58 +00:0cd3 _print_sl_out58 +00:c000 testcase_id +00:c002 nop_area_a +00:c062 nop_area_b
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_2_mode3_timing/test.sym

@@ -0,0 +1,202 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_2_mode3_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:01b5 setup_and_wait_mode2 +00:01b5 _wait_ly_6 +00:01d8 fail_halt +00:01ec _wait_ly_7 +00:01f2 _wait_ly_8 +00:0208 _print_results_halt_1 +00:020b _test_failure_cb_0 +00:0213 _print_sl_data55 +00:021e _print_sl_out55
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/intr_2_oam_ok_timing/test.sym

@@ -0,0 +1,202 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/intr_2_oam_ok_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:020a setup_and_wait_mode2 +00:020a _wait_ly_6 +00:022d fail_halt +00:0241 _wait_ly_7 +00:0247 _wait_ly_8 +00:025d _print_results_halt_1 +00:0260 _test_failure_cb_0 +00:0268 _print_sl_data55 +00:0273 _print_sl_out55
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/lcdon_timing-dmgABCXmgbS/test.sym

@@ -0,0 +1,236 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/lcdon_timing-dmgABCXmgbS.gb". + +[labels] +01:5087 print_load_font +01:5094 print_string +01:509e print_a +01:50a8 print_newline +01:50b3 print_digit +01:50c0 print_regs +01:50c9 _print_sl_data0 +01:50cf _print_sl_out0 +01:50dc _print_sl_data1 +01:50e2 _print_sl_out1 +01:50f4 _print_sl_data2 +01:50fa _print_sl_out2 +01:5107 _print_sl_data3 +01:510d _print_sl_out3 +01:511f _print_sl_data4 +01:5125 _print_sl_out4 +01:5132 _print_sl_data5 +01:5138 _print_sl_out5 +01:514a _print_sl_data6 +01:5150 _print_sl_out6 +01:515d _print_sl_data7 +01:5163 _print_sl_out7 +01:4000 font +00:c01d regs_save +00:c01d regs_save.f +00:c01e regs_save.a +00:c01f regs_save.c +00:c020 regs_save.b +00:c021 regs_save.e +00:c022 regs_save.d +00:c023 regs_save.l +00:c024 regs_save.h +00:c025 regs_flags +00:c026 regs_assert +00:c026 regs_assert.f +00:c027 regs_assert.a +00:c028 regs_assert.c +00:c029 regs_assert.b +00:c02a regs_assert.e +00:c02b regs_assert.d +00:c02c regs_assert.l +00:c02d regs_assert.h +00:c02e memdump_len +00:c02f memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015a test_ly +00:0166 test_stat_lyc0 +00:0175 test_stat_lyc1 +00:0185 test_oam_access +00:0191 test_vram_access +00:019d test_finish +00:01b1 _wait_ly_4 +00:01b7 _wait_ly_5 +00:01cd _print_results_halt_1 +00:01d0 _test_ok_cb_0 +00:01d8 _print_sl_data55 +00:01e0 _print_sl_out55 +01:4ed8 cycle_counts +01:4ef0 expect_ly +01:4f0b expect_stat_lyc0 +01:4f2e expect_stat_lyc1 +01:4f51 expect_oam_access +01:4f74 expect_vram_access +01:4f98 verify_results +01:4faf verify_fail +01:4fdd _wait_ly_6 +01:4fe3 _wait_ly_7 +01:4ff9 _print_results_halt_2 +01:4ffc _verify_fail_cb +01:5004 _print_sl_data56 +01:5012 _print_sl_out56 +01:502e _print_sl_data57 +01:503a _print_sl_out57 +01:5055 _print_sl_data58 +01:5061 _print_sl_out58 +01:5072 _print_sl_data59 +01:507e _print_sl_out59 +00:c000 v_pass1_results +00:c008 v_pass2_results +00:c010 v_pass3_results +00:c018 v_fail_round +00:c019 v_fail_expect +00:c01a v_fail_actual +00:c01b v_fail_str +00:c01b v_fail_str_l +00:c01c v_fail_str_h +01:4bff test_passes +01:4bff test_pass1 +01:4cf1 test_pass2 +01:4de4 test_pass3
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/lcdon_write_timing-GS/test.sym

@@ -0,0 +1,230 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/lcdon_write_timing-GS.gb". + +[labels] +01:4d3c print_load_font +01:4d49 print_string +01:4d53 print_a +01:4d5d print_newline +01:4d68 print_digit +01:4d75 print_regs +01:4d7e _print_sl_data0 +01:4d84 _print_sl_out0 +01:4d91 _print_sl_data1 +01:4d97 _print_sl_out1 +01:4da9 _print_sl_data2 +01:4daf _print_sl_out2 +01:4dbc _print_sl_data3 +01:4dc2 _print_sl_out3 +01:4dd4 _print_sl_data4 +01:4dda _print_sl_out4 +01:4de7 _print_sl_data5 +01:4ded _print_sl_out5 +01:4dff _print_sl_data6 +01:4e05 _print_sl_out6 +01:4e12 _print_sl_data7 +01:4e18 _print_sl_out7 +01:4000 font +00:c144 regs_save +00:c144 regs_save.f +00:c145 regs_save.a +00:c146 regs_save.c +00:c147 regs_save.b +00:c148 regs_save.e +00:c149 regs_save.d +00:c14a regs_save.l +00:c14b regs_save.h +00:c14c regs_flags +00:c14d regs_assert +00:c14d regs_assert.f +00:c14e regs_assert.a +00:c14f regs_assert.c +00:c150 regs_assert.b +00:c151 regs_assert.e +00:c152 regs_assert.d +00:c153 regs_assert.l +00:c154 regs_assert.h +00:c155 memdump_len +00:c156 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015a test_oam_access +00:0166 test_vram_access +00:0172 test_finish +00:0186 _wait_ly_4 +00:018c _wait_ly_5 +00:01a2 _print_results_halt_1 +00:01a5 _test_ok_cb_0 +00:01ad _print_sl_data55 +00:01b5 _print_sl_out55 +01:4bff nop_counts +01:4c12 expect_oam_access +01:4c2f expect_vram_access +01:4c4d verify_results +01:4c64 verify_fail +01:4c92 _wait_ly_6 +01:4c98 _wait_ly_7 +01:4cae _print_results_halt_2 +01:4cb1 _verify_fail_cb +01:4cb9 _print_sl_data56 +01:4cc7 _print_sl_out56 +01:4ce3 _print_sl_data57 +01:4cef _print_sl_out57 +01:4d0a _print_sl_data58 +01:4d16 _print_sl_out58 +01:4d27 _print_sl_data59 +01:4d33 _print_sl_out59 +00:c000 v_test_code +00:c12c v_test_results +00:c13f v_fail_round +00:c140 v_fail_expect +00:c141 v_fail_actual +00:c142 v_fail_str +00:c142 v_fail_str_l +00:c143 v_fail_str_h +01:4e22 run_tests +01:4e3b test_case +01:4e6f test_case_prologue +01:4e73 test_case_epilogue +01:4e75 test_case_end
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/stat_irq_blocking/test.sym

@@ -0,0 +1,219 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/stat_irq_blocking.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 test_round1 +00:0156 _wait_ly_4 +00:015c _wait_ly_5 +00:016b fail_round1 +00:0180 _wait_ly_6 +00:0186 _wait_ly_7 +00:019c _print_results_halt_1 +00:019f _test_failure_cb_0 +00:01a7 _print_sl_data55 +00:01b9 _print_sl_out55 +00:01bc test_round2 +00:01c6 ly_iteration +00:01dc finish_round2 +00:01f1 _wait_ly_8 +00:01f7 _wait_ly_9 +00:020d _print_results_halt_2 +00:0210 _test_ok_cb_0 +00:0218 _print_sl_data56 +00:0220 _print_sl_out56 +00:0223 fail_round2 +00:0250 _wait_ly_10 +00:0256 _wait_ly_11 +00:026c _print_results_halt_3 +00:026f _test_failure_dump_cb_0 +00:027a _print_sl_data57 +00:0284 _print_sl_out57 +00:0298 _print_sl_data58 +00:02a4 _print_sl_out58
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/gpu/vblank_stat_intr-GS/test.sym

@@ -0,0 +1,216 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/gpu/vblank_stat_intr-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0169 fail_halt +00:017d _wait_ly_4 +00:0183 _wait_ly_5 +00:0199 _print_results_halt_1 +00:019c _test_failure_cb_0 +00:01a4 _print_sl_data55 +00:01a9 _print_sl_out55 +00:01ac test_round1 +00:01b8 _wait_ly_6 +00:0203 finish_round1 +00:0221 test_round2 +00:022d _wait_ly_7 +00:0279 finish_round2 +00:029b test_round3 +00:02a7 _wait_ly_8 +00:02f2 finish_round3 +00:0310 test_round4 +00:031c _wait_ly_9 +00:0368 finish_round4 +00:036a test_finish +00:c014 intr_vec_vblank +00:c017 intr_vec_stat +00:c01a round1 +00:c01b round2 +00:c01c round3
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/halt_ime0_ei/test.sym

@@ -0,0 +1,206 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/halt_ime0_ei.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0161 result_ime0 +00:0175 _wait_ly_5 +00:017b _wait_ly_6 +00:0191 _print_results_halt_1 +00:0194 _test_failure_cb_0 +00:019c _print_sl_data55 +00:01a2 _print_sl_out55 +00:01a5 result_ime1 +00:01b9 _wait_ly_7 +00:01bf _wait_ly_8 +00:01d5 _print_results_halt_2 +00:01d8 _test_ok_cb_0 +00:01e0 _print_sl_data56 +00:01e8 _print_sl_out56
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/halt_ime0_nointr_timing/test.sym

@@ -0,0 +1,210 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/halt_ime0_nointr_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0167 test_round1 +00:0184 finish_round1 +00:0193 test_round2 +00:01af finish_round2 +00:01e2 fail_halt +00:01f6 _wait_ly_5 +00:01fc _wait_ly_6 +00:0212 _print_results_halt_1 +00:0215 _test_failure_cb_0 +00:021d _print_sl_data55 +00:0228 _print_sl_out55 +00:022b fail_intr +00:023f _wait_ly_7 +00:0245 _wait_ly_8 +00:025b _print_results_halt_2 +00:025e _test_failure_cb_1 +00:0266 _print_sl_data56 +00:0276 _print_sl_out56
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/halt_ime1_timing/test.sym

@@ -0,0 +1,198 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/halt_ime1_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0175 _wait_ly_4 +00:017b _wait_ly_5 +00:0191 _print_results_halt_1 +00:0194 _test_failure_cb_0 +00:019c _print_sl_data55 +00:01a8 _print_sl_out55 +00:01ab test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/halt_ime1_timing2-GS/test.sym

@@ -0,0 +1,237 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/halt_ime1_timing2-GS.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0167 test_round1 +00:0183 _delay_long_time_0 +00:0193 finish_round1 +00:01a2 test_round2 +00:01bd _delay_long_time_1 +00:01ce finish_round2 +00:01dd test_round3 +00:01f8 finish_round3 +00:0207 test_round4 +00:0221 finish_round4 +00:0268 fail_halt +00:027c _wait_ly_5 +00:0282 _wait_ly_6 +00:0298 _print_results_halt_1 +00:029b _test_failure_cb_0 +00:02a3 _print_sl_data55 +00:02ae _print_sl_out55 +00:02b1 fail_round1 +00:02c5 _wait_ly_7 +00:02cb _wait_ly_8 +00:02e1 _print_results_halt_2 +00:02e4 _test_failure_cb_1 +00:02ec _print_sl_data56 +00:02fa _print_sl_out56 +00:02fd fail_round2 +00:0311 _wait_ly_9 +00:0317 _wait_ly_10 +00:032d _print_results_halt_3 +00:0330 _test_failure_cb_2 +00:0338 _print_sl_data57 +00:0346 _print_sl_out57 +00:0349 fail_round3 +00:035d _wait_ly_11 +00:0363 _wait_ly_12 +00:0379 _print_results_halt_4 +00:037c _test_failure_cb_3 +00:0384 _print_sl_data58 +00:0392 _print_sl_out58 +00:0395 fail_round4 +00:03a9 _wait_ly_13 +00:03af _wait_ly_14 +00:03c5 _print_results_halt_5 +00:03c8 _test_failure_cb_4 +00:03d0 _print_sl_data59 +00:03de _print_sl_out59
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/hdma_lcdc/test.sym

@@ -0,0 +1,195 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/hdma_lcdc.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0154 test +00:0161 test_finish +00:017f _wait_ly_4 +00:0185 _wait_ly_5
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/if_ie_registers/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/if_ie_registers.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01ef test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/interrupts/ie_push/test.sym

@@ -0,0 +1,282 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/interrupts/ie_push.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0200 round1 +00:0214 finish_round1 +00:021d round2 +00:0224 round3 +00:0235 target +00:0238 finish_round3 +00:023f round4 +00:0253 finish_round4 +00:0270 _wait_ly_4 +00:0276 _wait_ly_5 +00:028c _print_results_halt_1 +00:028f _test_ok_cb_0 +00:0297 _print_sl_data55 +00:029f _print_sl_out55 +00:1000 fail_round1_nointr +00:1017 _wait_ly_6 +00:101d _wait_ly_7 +00:1033 _print_results_halt_2 +00:1036 _test_failure_cb_0 +00:103e _print_sl_data56 +00:104f _print_sl_out56 +00:1052 fail_round1_nocancel +00:1069 _wait_ly_8 +00:106f _wait_ly_9 +00:1085 _print_results_halt_3 +00:1088 _test_failure_cb_1 +00:1090 _print_sl_data57 +00:10a2 _print_sl_out57 +00:10a5 fail_round1_if +00:10bc _wait_ly_10 +00:10c2 _wait_ly_11 +00:10d8 _print_results_halt_4 +00:10db _test_failure_cb_2 +00:10e3 _print_sl_data58 +00:10f3 _print_sl_out58 +00:10f6 fail_round2_intr +00:110d _wait_ly_12 +00:1113 _wait_ly_13 +00:1129 _print_results_halt_5 +00:112c _test_failure_cb_3 +00:1134 _print_sl_data59 +00:1146 _print_sl_out59 +00:1149 fail_round3_nointr +00:1160 _wait_ly_14 +00:1166 _wait_ly_15 +00:117c _print_results_halt_6 +00:117f _test_failure_cb_4 +00:1187 _print_sl_data60 +00:1198 _print_sl_out60 +00:119b fail_round3_cancel +00:11b2 _wait_ly_16 +00:11b8 _wait_ly_17 +00:11ce _print_results_halt_7 +00:11d1 _test_failure_cb_5 +00:11d9 _print_sl_data61 +00:11ed _print_sl_out61 +00:11f0 fail_round3_if +00:1207 _wait_ly_18 +00:120d _wait_ly_19 +00:1223 _print_results_halt_8 +00:1226 _test_failure_cb_6 +00:122e _print_sl_data62 +00:123e _print_sl_out62 +00:1241 fail_round4_nointr +00:1258 _wait_ly_20 +00:125e _wait_ly_21 +00:1274 _print_results_halt_9 +00:1277 _test_failure_cb_7 +00:127f _print_sl_data63 +00:1290 _print_sl_out63 +00:1293 fail_round4_cancel +00:12aa _wait_ly_22 +00:12b0 _wait_ly_23 +00:12c6 _print_results_halt_10 +00:12c9 _test_failure_cb_8 +00:12d1 _print_sl_data64 +00:12e5 _print_sl_out64 +00:12e8 fail_round4_if +00:12ff _wait_ly_24 +00:1305 _wait_ly_25 +00:131b _print_results_halt_11 +00:131e _test_failure_cb_9 +00:1326 _print_sl_data65 +00:1333 _print_sl_out65 +00:1336 fail_round4_vblank +00:134d _wait_ly_26 +00:1353 _wait_ly_27 +00:1369 _print_results_halt_12 +00:136c _test_failure_cb_10 +00:1374 _print_sl_data66 +00:1383 _print_sl_out66
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/intr_timing/test.sym

@@ -0,0 +1,208 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/intr_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0157 test_round1 +00:01a7 _wait_ly_4 +00:01ad _wait_ly_5 +00:01c3 _print_results_halt_1 +00:01c6 _test_failure_cb_0 +00:01ce _print_sl_data55 +00:01dc _print_sl_out55 +00:01df finish_round1 +00:01e1 test_round2 +00:0232 _wait_ly_6 +00:0238 _wait_ly_7 +00:024e _print_results_halt_2 +00:0251 _test_failure_cb_1 +00:0259 _print_sl_data56 +00:0267 _print_sl_out56 +00:026a finish_round2 +00:026f test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/jp_cc_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/jp_cc_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0184 test_finish +00:0198 _wait_ly_6 +00:019e _wait_ly_7 +00:01b4 _print_results_halt_1 +00:01b7 _test_ok_cb_0 +00:01bf _print_sl_data55 +00:01c7 _print_sl_out55 +00:01ca wram_test +00:01cd fail_round1 +00:01e1 _wait_ly_8 +00:01e7 _wait_ly_9 +00:01fd _print_results_halt_2 +00:0200 _test_failure_cb_0 +00:0208 _print_sl_data56 +00:0216 _print_sl_out56 +00:0219 fail_round2 +00:022d _wait_ly_10 +00:0233 _wait_ly_11 +00:0249 _print_results_halt_3 +00:024c _test_failure_cb_1 +00:0254 _print_sl_data57 +00:0262 _print_sl_out57 +00:1f80 hiram_test +00:1f87 _wait_ly_12 +00:1f8d _wait_ly_13 +00:1fa1 test_round2 +00:1fa8 _wait_ly_14 +00:1fae _wait_ly_15 +00:1fca finish_round1 +00:1ada finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/jp_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/jp_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0184 test_finish +00:0198 _wait_ly_6 +00:019e _wait_ly_7 +00:01b4 _print_results_halt_1 +00:01b7 _test_ok_cb_0 +00:01bf _print_sl_data55 +00:01c7 _print_sl_out55 +00:01ca wram_test +00:01cd fail_round1 +00:01e1 _wait_ly_8 +00:01e7 _wait_ly_9 +00:01fd _print_results_halt_2 +00:0200 _test_failure_cb_0 +00:0208 _print_sl_data56 +00:0216 _print_sl_out56 +00:0219 fail_round2 +00:022d _wait_ly_10 +00:0233 _wait_ly_11 +00:0249 _print_results_halt_3 +00:024c _test_failure_cb_1 +00:0254 _print_sl_data57 +00:0262 _print_sl_out57 +00:1f80 hiram_test +00:1f87 _wait_ly_12 +00:1f8d _wait_ly_13 +00:1fa1 test_round2 +00:1fa8 _wait_ly_14 +00:1fae _wait_ly_15 +00:1fca finish_round1 +00:1ada finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/ld_hl_sp_e_timing/test.sym

@@ -0,0 +1,202 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/ld_hl_sp_e_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0187 test_finish +00:01cb wram_test +00:01d1 hiram_test +00:01d3 _wait_ly_6 +00:01d9 _wait_ly_7 +00:01ee finish_round1 +00:01f0 _wait_ly_8 +00:01f6 _wait_ly_9 +00:020c finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/oam_dma_restart/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/oam_dma_restart.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0171 test_finish +00:01a1 hiram_test +00:01a6 _wait_ly_6 +00:01ac _wait_ly_7 +00:01c6 _wait_ly_8 +00:01cc _wait_ly_9
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/oam_dma_start/test.sym

@@ -0,0 +1,218 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/oam_dma_start.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015f test_round1 +00:0186 _wait_ly_4 +00:018c _wait_ly_5 +00:019c fail_round1 +00:01b0 _wait_ly_6 +00:01b6 _wait_ly_7 +00:01cc _print_results_halt_1 +00:01cf _test_failure_cb_0 +00:01d7 _print_sl_data55 +00:01ed _print_sl_out55 +00:01f0 finish_round1 +00:01fd test_round2 +00:022a _wait_ly_8 +00:0230 _wait_ly_9 +00:0240 fail_round2 +00:0254 _wait_ly_10 +00:025a _wait_ly_11 +00:0270 _print_results_halt_2 +00:0273 _test_failure_cb_1 +00:027b _print_sl_data56 +00:0291 _print_sl_out56 +00:0294 finish_round2 +00:0299 test_finish +00:c014 vector_10 +00:c016 vector_38 +00:c018 round1_oam +00:c019 round1_b
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/oam_dma_timing/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/oam_dma_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0171 test_finish +00:01a1 hiram_test +00:01a6 _wait_ly_6 +00:01ac _wait_ly_7 +00:01bd _wait_ly_8 +00:01c3 _wait_ly_9
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/pop_timing/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/pop_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:02ad test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/push_timing/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/push_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0177 test_finish +00:01bb hiram_test +00:01c2 _wait_ly_6 +00:01c8 _wait_ly_7 +00:01e2 _wait_ly_8 +00:01e8 _wait_ly_9
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/rapid_di_ei/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/rapid_di_ei.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:018b test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/ret_cc_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/ret_cc_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015c test_round1 +00:015c _wait_ly_4 +00:0162 _wait_ly_5 +00:017c _wait_ly_6 +00:0182 _wait_ly_7 +00:0192 finish_round1 +00:01a9 _wait_ly_8 +00:01af _wait_ly_9 +00:01c5 _print_results_halt_1 +00:01c8 _test_failure_cb_0 +00:01d0 _print_sl_data55 +00:01de _print_sl_out55 +00:01e1 test_round2 +00:01e1 _wait_ly_10 +00:01e7 _wait_ly_11 +00:01fb _wait_ly_12 +00:0201 _wait_ly_13 +00:0212 finish_round2 +00:0229 _wait_ly_14 +00:022f _wait_ly_15 +00:0245 _print_results_halt_2 +00:0248 _test_failure_cb_1 +00:0250 _print_sl_data56 +00:025e _print_sl_out56 +00:0261 test_success +00:0275 _wait_ly_16 +00:027b _wait_ly_17 +00:0291 _print_results_halt_3 +00:0294 _test_ok_cb_0 +00:029c _print_sl_data57 +00:02a4 _print_sl_out57 +00:02a7 hiram_cb
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/ret_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/ret_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015c test_round1 +00:015c _wait_ly_4 +00:0162 _wait_ly_5 +00:017c _wait_ly_6 +00:0182 _wait_ly_7 +00:0193 finish_round1 +00:01aa _wait_ly_8 +00:01b0 _wait_ly_9 +00:01c6 _print_results_halt_1 +00:01c9 _test_failure_cb_0 +00:01d1 _print_sl_data55 +00:01df _print_sl_out55 +00:01e2 test_round2 +00:01e2 _wait_ly_10 +00:01e8 _wait_ly_11 +00:01fc _wait_ly_12 +00:0202 _wait_ly_13 +00:0214 finish_round2 +00:022b _wait_ly_14 +00:0231 _wait_ly_15 +00:0247 _print_results_halt_2 +00:024a _test_failure_cb_1 +00:0252 _print_sl_data56 +00:0260 _print_sl_out56 +00:0263 test_success +00:0277 _wait_ly_16 +00:027d _wait_ly_17 +00:0293 _print_results_halt_3 +00:0296 _test_ok_cb_0 +00:029e _print_sl_data57 +00:02a6 _print_sl_out57 +00:02a9 hiram_cb
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/reti_intr_timing/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/reti_intr_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0160 test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/reti_timing/test.sym

@@ -0,0 +1,223 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/reti_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:015c test_round1 +00:015c _wait_ly_4 +00:0162 _wait_ly_5 +00:017c _wait_ly_6 +00:0182 _wait_ly_7 +00:0193 finish_round1 +00:01aa _wait_ly_8 +00:01b0 _wait_ly_9 +00:01c6 _print_results_halt_1 +00:01c9 _test_failure_cb_0 +00:01d1 _print_sl_data55 +00:01df _print_sl_out55 +00:01e2 test_round2 +00:01e2 _wait_ly_10 +00:01e8 _wait_ly_11 +00:01fc _wait_ly_12 +00:0202 _wait_ly_13 +00:0214 finish_round2 +00:022b _wait_ly_14 +00:0231 _wait_ly_15 +00:0247 _print_results_halt_2 +00:024a _test_failure_cb_1 +00:0252 _print_sl_data56 +00:0260 _print_sl_out56 +00:0263 test_success +00:0277 _wait_ly_16 +00:027d _wait_ly_17 +00:0293 _print_results_halt_3 +00:0296 _test_ok_cb_0 +00:029e _print_sl_data57 +00:02a6 _print_sl_out57 +00:02a9 hiram_cb
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/rst_timing/test.sym

@@ -0,0 +1,201 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/rst_timing.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0151 _wait_ly_4 +00:0157 _wait_ly_5 +00:0177 test_finish +00:01bb hiram_test +00:01be _wait_ly_6 +00:01c4 _wait_ly_7 +00:01d9 finish_round1 +00:01dc _wait_ly_8 +00:01e2 _wait_ly_9 +00:01f8 finish_round2
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/serial/boot_sclk_align-dmgABCXmgb/test.sym

@@ -0,0 +1,198 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/serial/boot_sclk_align-dmgABCXmgb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:3828 _wait_ly_4 +00:382e _wait_ly_5 +00:3844 _print_results_halt_1 +00:3847 _test_failure_cb_0 +00:384f _print_sl_data55 +00:385e _print_sl_out55 +00:3861 test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/div_write/test.sym

@@ -0,0 +1,205 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/div_write.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test +00:0182 _wait_ly_4 +00:0188 _wait_ly_5 +00:019e _print_results_halt_1 +00:01a1 _test_ok_cb_0 +00:01a9 _print_sl_data55 +00:01b1 _print_sl_out55 +00:01b4 test_failure +00:01c8 _wait_ly_6 +00:01ce _wait_ly_7 +00:01e4 _print_results_halt_2 +00:01e7 _test_failure_cb_0 +00:01ef _print_sl_data56 +00:01fa _print_sl_out56
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/rapid_toggle/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/rapid_toggle.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test +00:0186 _wait_ly_4 +00:018c _wait_ly_5 +00:01a2 _print_results_halt_1 +00:01a5 _test_failure_cb_0 +00:01ad _print_sl_data55 +00:01bb _print_sl_out55 +00:01be test_finish
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim00/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim00.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim00_div_trigger/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim00_div_trigger.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim01/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim01.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim01_div_trigger/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim01_div_trigger.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim10/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim10.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim10_div_trigger/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim10_div_trigger.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim11/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim11.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tim11_div_trigger/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tim11_div_trigger.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tima_reload/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tima_reload.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tima_write_reloading/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tima_write_reloading.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/acceptance/timer/tma_write_reloading/test.sym

@@ -0,0 +1,192 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/acceptance/timer/tma_write_reloading.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/multicart_rom_8Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/multicart_rom_8Mb.gb". + +[labels] +01:4001 print_load_font +01:400e print_string +01:4018 print_a +01:4022 print_newline +01:402d print_digit +01:403a print_regs +01:4043 _print_sl_data0 +01:4049 _print_sl_out0 +01:4056 _print_sl_data1 +01:405c _print_sl_out1 +01:406e _print_sl_data2 +01:4074 _print_sl_out2 +01:4081 _print_sl_data3 +01:4087 _print_sl_out3 +01:4099 _print_sl_data4 +01:409f _print_sl_out4 +01:40ac _print_sl_data5 +01:40b2 _print_sl_out5 +01:40c4 _print_sl_data6 +01:40ca _print_sl_out6 +01:40d7 _print_sl_data7 +01:40dd _print_sl_out7 +01:4134 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:4924 memcpy +01:492d memset +01:4936 memcmp +01:4944 clear_vram +01:494e clear_oam +01:4958 disable_lcd_safe +01:495e _wait_ly_0 +01:4964 _wait_ly_1 +01:496d reset_screen +01:4981 process_results +01:4995 _wait_ly_2 +01:499b _wait_ly_3 +01:49b1 _print_results_halt_0 +01:49b4 _process_results_cb +01:49bf _print_sl_data8 +01:49c9 _print_sl_out8 +01:49e3 _print_sl_data9 +01:49ee _print_sl_out9 +01:4a06 _print_sl_data10 +01:4a12 _print_sl_out10 +01:4a13 dump_mem +01:4a32 _dump_mem_line +01:4a5c _check_asserts +01:4a6a _print_sl_data11 +01:4a6d _print_sl_out11 +01:4a79 _print_sl_data12 +01:4a7b _print_sl_out12 +01:4a83 _print_sl_data13 +01:4a86 _print_sl_out13 +01:4a90 __check_assert_fail0 +01:4a9b _print_sl_data14 +01:4a9e _print_sl_out14 +01:4aa1 __check_assert_ok0 +01:4aa9 _print_sl_data15 +01:4aae _print_sl_out15 +01:4ab0 __check_assert_skip0 +01:4ab8 _print_sl_data16 +01:4ac0 _print_sl_out16 +01:4ac0 __check_assert_out0 +01:4acc _print_sl_data17 +01:4ace _print_sl_out17 +01:4ad6 _print_sl_data18 +01:4ad9 _print_sl_out18 +01:4ae3 __check_assert_fail1 +01:4aee _print_sl_data19 +01:4af1 _print_sl_out19 +01:4af4 __check_assert_ok1 +01:4afc _print_sl_data20 +01:4b01 _print_sl_out20 +01:4b03 __check_assert_skip1 +01:4b0b _print_sl_data21 +01:4b13 _print_sl_out21 +01:4b13 __check_assert_out1 +01:4b1e _print_sl_data22 +01:4b21 _print_sl_out22 +01:4b2d _print_sl_data23 +01:4b2f _print_sl_out23 +01:4b37 _print_sl_data24 +01:4b3a _print_sl_out24 +01:4b44 __check_assert_fail2 +01:4b4f _print_sl_data25 +01:4b52 _print_sl_out25 +01:4b55 __check_assert_ok2 +01:4b5d _print_sl_data26 +01:4b62 _print_sl_out26 +01:4b64 __check_assert_skip2 +01:4b6c _print_sl_data27 +01:4b74 _print_sl_out27 +01:4b74 __check_assert_out2 +01:4b80 _print_sl_data28 +01:4b82 _print_sl_out28 +01:4b8a _print_sl_data29 +01:4b8d _print_sl_out29 +01:4b97 __check_assert_fail3 +01:4ba2 _print_sl_data30 +01:4ba5 _print_sl_out30 +01:4ba8 __check_assert_ok3 +01:4bb0 _print_sl_data31 +01:4bb5 _print_sl_out31 +01:4bb7 __check_assert_skip3 +01:4bbf _print_sl_data32 +01:4bc7 _print_sl_out32 +01:4bc7 __check_assert_out3 +01:4bd2 _print_sl_data33 +01:4bd5 _print_sl_out33 +01:4be1 _print_sl_data34 +01:4be3 _print_sl_out34 +01:4beb _print_sl_data35 +01:4bee _print_sl_out35 +01:4bf8 __check_assert_fail4 +01:4c03 _print_sl_data36 +01:4c06 _print_sl_out36 +01:4c09 __check_assert_ok4 +01:4c11 _print_sl_data37 +01:4c16 _print_sl_out37 +01:4c18 __check_assert_skip4 +01:4c20 _print_sl_data38 +01:4c28 _print_sl_out38 +01:4c28 __check_assert_out4 +01:4c34 _print_sl_data39 +01:4c36 _print_sl_out39 +01:4c3e _print_sl_data40 +01:4c41 _print_sl_out40 +01:4c4b __check_assert_fail5 +01:4c56 _print_sl_data41 +01:4c59 _print_sl_out41 +01:4c5c __check_assert_ok5 +01:4c64 _print_sl_data42 +01:4c69 _print_sl_out42 +01:4c6b __check_assert_skip5 +01:4c73 _print_sl_data43 +01:4c7b _print_sl_out43 +01:4c7b __check_assert_out5 +01:4c86 _print_sl_data44 +01:4c89 _print_sl_out44 +01:4c95 _print_sl_data45 +01:4c97 _print_sl_out45 +01:4c9f _print_sl_data46 +01:4ca2 _print_sl_out46 +01:4cac __check_assert_fail6 +01:4cb7 _print_sl_data47 +01:4cba _print_sl_out47 +01:4cbd __check_assert_ok6 +01:4cc5 _print_sl_data48 +01:4cca _print_sl_out48 +01:4ccc __check_assert_skip6 +01:4cd4 _print_sl_data49 +01:4cdc _print_sl_out49 +01:4cdc __check_assert_out6 +01:4ce8 _print_sl_data50 +01:4cea _print_sl_out50 +01:4cf2 _print_sl_data51 +01:4cf5 _print_sl_out51 +01:4cff __check_assert_fail7 +01:4d0a _print_sl_data52 +01:4d0d _print_sl_out52 +01:4d10 __check_assert_ok7 +01:4d18 _print_sl_data53 +01:4d1d _print_sl_out53 +01:4d1f __check_assert_skip7 +01:4d27 _print_sl_data54 +01:4d2f _print_sl_out54 +01:4d2f __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_256Kb/test.sym

@@ -0,0 +1,252 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_256Kb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test_round1 +00:016e test_round2 +00:01d2 test_round3 +00:0232 test_round4 +00:02a0 test_round5 +00:02fc test_round6 +00:0330 test_finish +00:0347 _wait_ly_4 +00:034d _wait_ly_5 +00:0363 _print_results_halt_1 +00:0366 _test_ok_cb_0 +00:036e _print_sl_data55 +00:0376 _print_sl_out55 +00:0379 copy_bank_data +00:0398 check_bank_data +00:03b8 all_ff +00:03c8 all_00 +00:1000 bank_data +00:1040 clear_ram +00:1062 fail_round1 +00:1079 _wait_ly_6 +00:107f _wait_ly_7 +00:1095 _print_results_halt_2 +00:1098 _test_failure_cb_0 +00:10a0 _print_sl_data56 +00:10ae _print_sl_out56 +00:10b1 fail_round2 +00:10c8 _wait_ly_8 +00:10ce _wait_ly_9 +00:10e4 _print_results_halt_3 +00:10e7 _test_failure_cb_1 +00:10ef _print_sl_data57 +00:10fd _print_sl_out57 +00:1100 fail_round3 +00:1117 _wait_ly_10 +00:111d _wait_ly_11 +00:1133 _print_results_halt_4 +00:1136 _test_failure_cb_2 +00:113e _print_sl_data58 +00:114c _print_sl_out58 +00:114f fail_round4 +00:1166 _wait_ly_12 +00:116c _wait_ly_13 +00:1182 _print_results_halt_5 +00:1185 _test_failure_cb_3 +00:118d _print_sl_data59 +00:119b _print_sl_out59 +00:119e fail_round5 +00:11b5 _wait_ly_14 +00:11bb _wait_ly_15 +00:11d1 _print_results_halt_6 +00:11d4 _test_failure_cb_4 +00:11dc _print_sl_data60 +00:11ea _print_sl_out60 +00:11ed fail_round6 +00:1204 _wait_ly_16 +00:120a _wait_ly_17 +00:1220 _print_results_halt_7 +00:1223 _test_failure_cb_5 +00:122b _print_sl_data61 +00:1239 _print_sl_out61
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/ram_64Kb/test.sym

@@ -0,0 +1,244 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/ram_64Kb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0150 test_round1 +00:016e test_round2 +00:01c2 test_round3 +00:01cb test_round4 +00:01fb test_round5 +00:022c test_finish +00:0243 _wait_ly_4 +00:0249 _wait_ly_5 +00:025f _print_results_halt_1 +00:0262 _test_ok_cb_0 +00:026a _print_sl_data55 +00:0272 _print_sl_out55 +00:0275 copy_bank_data +00:028d check_bank_data +00:02a6 all_ff +00:02b6 all_00 +00:1000 bank_data +00:1010 clear_ram +00:1032 fail_round1 +00:1049 _wait_ly_6 +00:104f _wait_ly_7 +00:1065 _print_results_halt_2 +00:1068 _test_failure_cb_0 +00:1070 _print_sl_data56 +00:107e _print_sl_out56 +00:1081 fail_round2 +00:1098 _wait_ly_8 +00:109e _wait_ly_9 +00:10b4 _print_results_halt_3 +00:10b7 _test_failure_cb_1 +00:10bf _print_sl_data57 +00:10cd _print_sl_out57 +00:10d0 fail_round3 +00:10e7 _wait_ly_10 +00:10ed _wait_ly_11 +00:1103 _print_results_halt_4 +00:1106 _test_failure_cb_2 +00:110e _print_sl_data58 +00:111c _print_sl_out58 +00:111f fail_round4 +00:1136 _wait_ly_12 +00:113c _wait_ly_13 +00:1152 _print_results_halt_5 +00:1155 _test_failure_cb_3 +00:115d _print_sl_data59 +00:116b _print_sl_out59 +00:116e fail_round5 +00:1185 _wait_ly_14 +00:118b _wait_ly_15 +00:11a1 _print_results_halt_6 +00:11a4 _test_failure_cb_4 +00:11ac _print_sl_data60 +00:11ba _print_sl_out60
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_16Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_16Mb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_1Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_1Mb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_2Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_2Mb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_4Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_4Mb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_512Kb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_512Kb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1/rom_8Mb/test.sym

@@ -0,0 +1,226 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/emulator-only/mbc1/rom_8Mb.gb". + +[labels] +01:4c00 print_load_font +01:4c0d print_string +01:4c17 print_a +01:4c21 print_newline +01:4c2c print_digit +01:4c39 print_regs +01:4c42 _print_sl_data0 +01:4c48 _print_sl_out0 +01:4c55 _print_sl_data1 +01:4c5b _print_sl_out1 +01:4c6d _print_sl_data2 +01:4c73 _print_sl_out2 +01:4c80 _print_sl_data3 +01:4c86 _print_sl_out3 +01:4c98 _print_sl_data4 +01:4c9e _print_sl_out4 +01:4cab _print_sl_data5 +01:4cb1 _print_sl_out5 +01:4cc3 _print_sl_data6 +01:4cc9 _print_sl_out6 +01:4cd6 _print_sl_data7 +01:4cdc _print_sl_out7 +01:4001 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f1 memcpy +01:47fa memset +01:4803 memcmp +01:4811 clear_vram +01:481b clear_oam +01:4825 disable_lcd_safe +01:482b _wait_ly_0 +01:4831 _wait_ly_1 +01:483a reset_screen +01:484e process_results +01:4862 _wait_ly_2 +01:4868 _wait_ly_3 +01:487e _print_results_halt_0 +01:4881 _process_results_cb +01:488c _print_sl_data8 +01:4896 _print_sl_out8 +01:48b0 _print_sl_data9 +01:48bb _print_sl_out9 +01:48d3 _print_sl_data10 +01:48df _print_sl_out10 +01:48e0 dump_mem +01:48ff _dump_mem_line +01:4929 _check_asserts +01:4937 _print_sl_data11 +01:493a _print_sl_out11 +01:4946 _print_sl_data12 +01:4948 _print_sl_out12 +01:4950 _print_sl_data13 +01:4953 _print_sl_out13 +01:495d __check_assert_fail0 +01:4968 _print_sl_data14 +01:496b _print_sl_out14 +01:496e __check_assert_ok0 +01:4976 _print_sl_data15 +01:497b _print_sl_out15 +01:497d __check_assert_skip0 +01:4985 _print_sl_data16 +01:498d _print_sl_out16 +01:498d __check_assert_out0 +01:4999 _print_sl_data17 +01:499b _print_sl_out17 +01:49a3 _print_sl_data18 +01:49a6 _print_sl_out18 +01:49b0 __check_assert_fail1 +01:49bb _print_sl_data19 +01:49be _print_sl_out19 +01:49c1 __check_assert_ok1 +01:49c9 _print_sl_data20 +01:49ce _print_sl_out20 +01:49d0 __check_assert_skip1 +01:49d8 _print_sl_data21 +01:49e0 _print_sl_out21 +01:49e0 __check_assert_out1 +01:49eb _print_sl_data22 +01:49ee _print_sl_out22 +01:49fa _print_sl_data23 +01:49fc _print_sl_out23 +01:4a04 _print_sl_data24 +01:4a07 _print_sl_out24 +01:4a11 __check_assert_fail2 +01:4a1c _print_sl_data25 +01:4a1f _print_sl_out25 +01:4a22 __check_assert_ok2 +01:4a2a _print_sl_data26 +01:4a2f _print_sl_out26 +01:4a31 __check_assert_skip2 +01:4a39 _print_sl_data27 +01:4a41 _print_sl_out27 +01:4a41 __check_assert_out2 +01:4a4d _print_sl_data28 +01:4a4f _print_sl_out28 +01:4a57 _print_sl_data29 +01:4a5a _print_sl_out29 +01:4a64 __check_assert_fail3 +01:4a6f _print_sl_data30 +01:4a72 _print_sl_out30 +01:4a75 __check_assert_ok3 +01:4a7d _print_sl_data31 +01:4a82 _print_sl_out31 +01:4a84 __check_assert_skip3 +01:4a8c _print_sl_data32 +01:4a94 _print_sl_out32 +01:4a94 __check_assert_out3 +01:4a9f _print_sl_data33 +01:4aa2 _print_sl_out33 +01:4aae _print_sl_data34 +01:4ab0 _print_sl_out34 +01:4ab8 _print_sl_data35 +01:4abb _print_sl_out35 +01:4ac5 __check_assert_fail4 +01:4ad0 _print_sl_data36 +01:4ad3 _print_sl_out36 +01:4ad6 __check_assert_ok4 +01:4ade _print_sl_data37 +01:4ae3 _print_sl_out37 +01:4ae5 __check_assert_skip4 +01:4aed _print_sl_data38 +01:4af5 _print_sl_out38 +01:4af5 __check_assert_out4 +01:4b01 _print_sl_data39 +01:4b03 _print_sl_out39 +01:4b0b _print_sl_data40 +01:4b0e _print_sl_out40 +01:4b18 __check_assert_fail5 +01:4b23 _print_sl_data41 +01:4b26 _print_sl_out41 +01:4b29 __check_assert_ok5 +01:4b31 _print_sl_data42 +01:4b36 _print_sl_out42 +01:4b38 __check_assert_skip5 +01:4b40 _print_sl_data43 +01:4b48 _print_sl_out43 +01:4b48 __check_assert_out5 +01:4b53 _print_sl_data44 +01:4b56 _print_sl_out44 +01:4b62 _print_sl_data45 +01:4b64 _print_sl_out45 +01:4b6c _print_sl_data46 +01:4b6f _print_sl_out46 +01:4b79 __check_assert_fail6 +01:4b84 _print_sl_data47 +01:4b87 _print_sl_out47 +01:4b8a __check_assert_ok6 +01:4b92 _print_sl_data48 +01:4b97 _print_sl_out48 +01:4b99 __check_assert_skip6 +01:4ba1 _print_sl_data49 +01:4ba9 _print_sl_out49 +01:4ba9 __check_assert_out6 +01:4bb5 _print_sl_data50 +01:4bb7 _print_sl_out50 +01:4bbf _print_sl_data51 +01:4bc2 _print_sl_out51 +01:4bcc __check_assert_fail7 +01:4bd7 _print_sl_data52 +01:4bda _print_sl_out52 +01:4bdd __check_assert_ok7 +01:4be5 _print_sl_data53 +01:4bea _print_sl_out53 +01:4bec __check_assert_skip7 +01:4bf4 _print_sl_data54 +01:4bfc _print_sl_out54 +01:4bfc __check_assert_out7 +00:016b fail +00:017f _wait_ly_4 +00:0185 _wait_ly_5 +00:019b _print_results_halt_1 +00:019e _fail_cb +00:01a6 _print_sl_data55 +00:01b2 _print_sl_out55 +00:01c2 _print_sl_data56 +00:01ce _print_sl_out56 +00:01d8 _print_sl_data57 +00:01e4 _print_sl_out57 +00:01ef _print_sl_data58 +00:01f5 _print_sl_out58 +00:0208 _print_sl_data59 +00:0215 _print_sl_out59 +00:0225 _print_sl_data60 +00:0232 _print_sl_out60 +00:0242 _print_sl_data61 +00:024f _print_sl_out61 +00:025a c000_functions_start +00:025a run_test_suite +00:0284 _wait_ly_6 +00:028a _wait_ly_7 +00:02a0 _print_results_halt_2 +00:02a3 _test_ok_cb_0 +00:02ab _print_sl_data62 +00:02b3 _print_sl_out62 +00:02b6 run_tests +00:02c4 run_test_cases +00:02d2 test_case +00:02ef restore_mbc1 +00:02f8 switch_bank +00:0309 fetch_expected_value +00:0328 c000_functions_end +00:0328 expected_banks
A src/platform/python/tests/cinema/gb/mooneye-gb/emulator-only/mbc1_rom_4banks/test.sym

@@ -0,0 +1,205 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/jeffrey/Scratch/mooneye-gb/tests/build/emulator-only/mbc1_rom_4banks.gb". + +[labels] +0001:4bf3 print_load_font +0001:4c00 print_string +0001:4c0a print_a +0001:4c14 print_newline +0001:4c1f print_digit +0001:4c2c print_regs +0001:4c35 _print_sl_data0 +0001:4c3b _print_sl_out0 +0001:4c48 _print_sl_data1 +0001:4c4e _print_sl_out1 +0001:4c60 _print_sl_data2 +0001:4c66 _print_sl_out2 +0001:4c73 _print_sl_data3 +0001:4c79 _print_sl_out3 +0001:4c8b _print_sl_data4 +0001:4c91 _print_sl_out4 +0001:4c9e _print_sl_data5 +0001:4ca4 _print_sl_out5 +0001:4cb6 _print_sl_data6 +0001:4cbc _print_sl_out6 +0001:4cc9 _print_sl_data7 +0001:4ccf _print_sl_out7 +0001:4001 font +0000:c000 regs_save +0000:c000 regs_save.f +0000:c001 regs_save.a +0000:c002 regs_save.c +0000:c003 regs_save.b +0000:c004 regs_save.e +0000:c005 regs_save.d +0000:c006 regs_save.l +0000:c007 regs_save.h +0000:c008 regs_flags +0000:c009 regs_assert +0000:c009 regs_assert.f +0000:c00a regs_assert.a +0000:c00b regs_assert.c +0000:c00c regs_assert.b +0000:c00d regs_assert.e +0000:c00e regs_assert.d +0000:c00f regs_assert.l +0000:c010 regs_assert.h +0000:c011 memdump_len +0000:c012 memdump_addr +0001:47f1 memcpy +0001:47fa memset +0001:4803 clear_vram +0001:480e reset_screen +0001:481b process_results +0001:4820 _wait_ly_0 +0001:4826 _wait_ly_1 +0001:4842 _wait_ly_2 +0001:4848 _wait_ly_3 +0001:4861 _process_results_cb +0001:486c _print_sl_data8 +0001:4876 _print_sl_out8 +0001:4890 _print_sl_data9 +0001:489b _print_sl_out9 +0001:48b3 _print_sl_data10 +0001:48bf _print_sl_out10 +0001:48c0 dump_mem +0001:48d0 _wait_ly_4 +0001:48d6 _wait_ly_5 +0001:48f2 _dump_mem_line +0001:491c _check_asserts +0001:492a _print_sl_data11 +0001:492d _print_sl_out11 +0001:4939 _print_sl_data12 +0001:493b _print_sl_out12 +0001:4943 _print_sl_data13 +0001:4946 _print_sl_out13 +0001:4950 __check_assert_fail0 +0001:495b _print_sl_data14 +0001:495e _print_sl_out14 +0001:4961 __check_assert_ok0 +0001:4969 _print_sl_data15 +0001:496e _print_sl_out15 +0001:4970 __check_assert_skip0 +0001:4978 _print_sl_data16 +0001:4980 _print_sl_out16 +0001:4980 __check_assert_out0 +0001:498c _print_sl_data17 +0001:498e _print_sl_out17 +0001:4996 _print_sl_data18 +0001:4999 _print_sl_out18 +0001:49a3 __check_assert_fail1 +0001:49ae _print_sl_data19 +0001:49b1 _print_sl_out19 +0001:49b4 __check_assert_ok1 +0001:49bc _print_sl_data20 +0001:49c1 _print_sl_out20 +0001:49c3 __check_assert_skip1 +0001:49cb _print_sl_data21 +0001:49d3 _print_sl_out21 +0001:49d3 __check_assert_out1 +0001:49de _print_sl_data22 +0001:49e1 _print_sl_out22 +0001:49ed _print_sl_data23 +0001:49ef _print_sl_out23 +0001:49f7 _print_sl_data24 +0001:49fa _print_sl_out24 +0001:4a04 __check_assert_fail2 +0001:4a0f _print_sl_data25 +0001:4a12 _print_sl_out25 +0001:4a15 __check_assert_ok2 +0001:4a1d _print_sl_data26 +0001:4a22 _print_sl_out26 +0001:4a24 __check_assert_skip2 +0001:4a2c _print_sl_data27 +0001:4a34 _print_sl_out27 +0001:4a34 __check_assert_out2 +0001:4a40 _print_sl_data28 +0001:4a42 _print_sl_out28 +0001:4a4a _print_sl_data29 +0001:4a4d _print_sl_out29 +0001:4a57 __check_assert_fail3 +0001:4a62 _print_sl_data30 +0001:4a65 _print_sl_out30 +0001:4a68 __check_assert_ok3 +0001:4a70 _print_sl_data31 +0001:4a75 _print_sl_out31 +0001:4a77 __check_assert_skip3 +0001:4a7f _print_sl_data32 +0001:4a87 _print_sl_out32 +0001:4a87 __check_assert_out3 +0001:4a92 _print_sl_data33 +0001:4a95 _print_sl_out33 +0001:4aa1 _print_sl_data34 +0001:4aa3 _print_sl_out34 +0001:4aab _print_sl_data35 +0001:4aae _print_sl_out35 +0001:4ab8 __check_assert_fail4 +0001:4ac3 _print_sl_data36 +0001:4ac6 _print_sl_out36 +0001:4ac9 __check_assert_ok4 +0001:4ad1 _print_sl_data37 +0001:4ad6 _print_sl_out37 +0001:4ad8 __check_assert_skip4 +0001:4ae0 _print_sl_data38 +0001:4ae8 _print_sl_out38 +0001:4ae8 __check_assert_out4 +0001:4af4 _print_sl_data39 +0001:4af6 _print_sl_out39 +0001:4afe _print_sl_data40 +0001:4b01 _print_sl_out40 +0001:4b0b __check_assert_fail5 +0001:4b16 _print_sl_data41 +0001:4b19 _print_sl_out41 +0001:4b1c __check_assert_ok5 +0001:4b24 _print_sl_data42 +0001:4b29 _print_sl_out42 +0001:4b2b __check_assert_skip5 +0001:4b33 _print_sl_data43 +0001:4b3b _print_sl_out43 +0001:4b3b __check_assert_out5 +0001:4b46 _print_sl_data44 +0001:4b49 _print_sl_out44 +0001:4b55 _print_sl_data45 +0001:4b57 _print_sl_out45 +0001:4b5f _print_sl_data46 +0001:4b62 _print_sl_out46 +0001:4b6c __check_assert_fail6 +0001:4b77 _print_sl_data47 +0001:4b7a _print_sl_out47 +0001:4b7d __check_assert_ok6 +0001:4b85 _print_sl_data48 +0001:4b8a _print_sl_out48 +0001:4b8c __check_assert_skip6 +0001:4b94 _print_sl_data49 +0001:4b9c _print_sl_out49 +0001:4b9c __check_assert_out6 +0001:4ba8 _print_sl_data50 +0001:4baa _print_sl_out50 +0001:4bb2 _print_sl_data51 +0001:4bb5 _print_sl_out51 +0001:4bbf __check_assert_fail7 +0001:4bca _print_sl_data52 +0001:4bcd _print_sl_out52 +0001:4bd0 __check_assert_ok7 +0001:4bd8 _print_sl_data53 +0001:4bdd _print_sl_out53 +0001:4bdf __check_assert_skip7 +0001:4be7 _print_sl_data54 +0001:4bef _print_sl_out54 +0001:4bef __check_assert_out7 +0000:01c8 _wait_ly_6 +0000:01ce _wait_ly_7 +0000:01ea _wait_ly_8 +0000:01f0 _wait_ly_9 +0000:0209 _test_ok_cb_0 +0000:0211 _print_sl_data55 +0000:0219 _print_sl_out55 +0000:021c switch_bank +0000:0225 test_mbc +0000:0236 _wait_ly_10 +0000:023c _wait_ly_11 +0000:0258 _wait_ly_12 +0000:025e _wait_ly_13 +0000:0277 _test_failure_cb_0 +0000:027f _print_sl_data56 +0000:028b _print_sl_out56
A src/platform/python/tests/cinema/gb/mooneye-gb/madness/mgb_oam_dma_halt_sprites/test.sym

@@ -0,0 +1,200 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/madness/mgb_oam_dma_halt_sprites.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0199 _wait_ly_4 +00:019f _wait_ly_5 +00:01b4 hiram_test +00:01b9 _wait_ly_6 +00:01bf _wait_ly_7 +00:01cc vram_checkerboard +00:05cc vram_checkerboard_end +00:05cc initial_data +00:05d4 initial_data_end
A src/platform/python/tests/cinema/gb/mooneye-gb/manifest.yml

@@ -0,0 +1,4 @@

+skip: 60 +frames: 1 +config: + sgb.borders: false
A src/platform/python/tests/cinema/gb/mooneye-gb/manual-only/sprite_priority/test.sym

@@ -0,0 +1,193 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/manual-only/sprite_priority.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0180 data +00:0214 data_end
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/bits/unused_hwio-C/manifest.yml

@@ -0,0 +1,3 @@

+config: + gb.model: CGB +fail: true
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/bits/unused_hwio-C/test.sym

@@ -0,0 +1,535 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/misc/bits/unused_hwio-C.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c017 regs_save +00:c017 regs_save.f +00:c018 regs_save.a +00:c019 regs_save.c +00:c01a regs_save.b +00:c01b regs_save.e +00:c01c regs_save.d +00:c01d regs_save.l +00:c01e regs_save.h +00:c01f regs_flags +00:c020 regs_assert +00:c020 regs_assert.f +00:c021 regs_assert.a +00:c022 regs_assert.c +00:c023 regs_assert.b +00:c024 regs_assert.e +00:c025 regs_assert.d +00:c026 regs_assert.l +00:c027 regs_assert.h +00:c028 memdump_len +00:c029 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0161 _test_data_0 +00:0177 _finish_0 +00:0187 _test_data_1 +00:019d _finish_1 +00:01ad _test_data_2 +00:01c3 _finish_2 +00:01d3 _test_data_3 +00:01e9 _finish_3 +00:01f9 _test_data_4 +00:020f _finish_4 +00:021f _test_data_5 +00:0235 _finish_5 +00:0245 _test_data_6 +00:025b _finish_6 +00:026b _test_data_7 +00:0281 _finish_7 +00:0291 _test_data_8 +00:02a7 _finish_8 +00:02b7 _test_data_9 +00:02cd _finish_9 +00:02dd _test_data_10 +00:02f3 _finish_10 +00:0303 _test_data_11 +00:0319 _finish_11 +00:0329 _test_data_12 +00:033f _finish_12 +00:034f _test_data_13 +00:0365 _finish_13 +00:0375 _test_data_14 +00:038b _finish_14 +00:039b _test_data_15 +00:03b1 _finish_15 +00:03c1 _test_data_16 +00:03d7 _finish_16 +00:03e7 _test_data_17 +00:03fd _finish_17 +00:040d _test_data_18 +00:0423 _finish_18 +00:0433 _test_data_19 +00:0449 _finish_19 +00:0459 _test_data_20 +00:046f _finish_20 +00:047f _test_data_21 +00:0495 _finish_21 +00:04a5 _test_data_22 +00:04bb _finish_22 +00:04cb _test_data_23 +00:04e1 _finish_23 +00:04f1 _test_data_24 +00:0507 _finish_24 +00:0517 _test_data_25 +00:052d _finish_25 +00:053d _test_data_26 +00:0553 _finish_26 +00:0563 _test_data_27 +00:0579 _finish_27 +00:0589 _test_data_28 +00:059f _finish_28 +00:05af _test_data_29 +00:05c5 _finish_29 +00:05d5 _test_data_30 +00:05eb _finish_30 +00:05fb _test_data_31 +00:0611 _finish_31 +00:0621 _test_data_32 +00:0637 _finish_32 +00:0647 _test_data_33 +00:065d _finish_33 +00:066d _test_data_34 +00:0683 _finish_34 +00:0693 _test_data_35 +00:06a9 _finish_35 +00:06b9 _test_data_36 +00:06cf _finish_36 +00:06df _test_data_37 +00:06f5 _finish_37 +00:0705 _test_data_38 +00:071b _finish_38 +00:072b _test_data_39 +00:0741 _finish_39 +00:0751 _test_data_40 +00:0767 _finish_40 +00:0777 _test_data_41 +00:078d _finish_41 +00:079d _test_data_42 +00:07b3 _finish_42 +00:07c3 _test_data_43 +00:07d9 _finish_43 +00:07e9 _test_data_44 +00:07ff _finish_44 +00:080f _test_data_45 +00:0825 _finish_45 +00:0835 _test_data_46 +00:084b _finish_46 +00:085b _test_data_47 +00:0871 _finish_47 +00:0881 _test_data_48 +00:0897 _finish_48 +00:08a7 _test_data_49 +00:08bd _finish_49 +00:08cd _test_data_50 +00:08e3 _finish_50 +00:08f3 _test_data_51 +00:0909 _finish_51 +00:0919 _test_data_52 +00:092f _finish_52 +00:093f _test_data_53 +00:0955 _finish_53 +00:0965 _test_data_54 +00:097b _finish_54 +00:098b _test_data_55 +00:09a1 _finish_55 +00:09b1 _test_data_56 +00:09c7 _finish_56 +00:09d7 _test_data_57 +00:09ed _finish_57 +00:09fd _test_data_58 +00:0a13 _finish_58 +00:0a23 _test_data_59 +00:0a39 _finish_59 +00:0a49 _test_data_60 +00:0a5f _finish_60 +00:0a6f _test_data_61 +00:0a85 _finish_61 +00:0a95 _test_data_62 +00:0aab _finish_62 +00:0abb _test_data_63 +00:0ad1 _finish_63 +00:0ae1 _test_data_64 +00:0af7 _finish_64 +00:0b07 _test_data_65 +00:0b1d _finish_65 +00:0b2d _test_data_66 +00:0b43 _finish_66 +00:0b53 _test_data_67 +00:0b69 _finish_67 +00:0b79 _test_data_68 +00:0b8f _finish_68 +00:0b9f _test_data_69 +00:0bb5 _finish_69 +00:0bc5 _test_data_70 +00:0bdb _finish_70 +00:0beb _test_data_71 +00:0c01 _finish_71 +00:0c11 _test_data_72 +00:0c27 _finish_72 +00:0c37 _test_data_73 +00:0c4d _finish_73 +00:0c5d _test_data_74 +00:0c73 _finish_74 +00:0c83 _test_data_75 +00:0c99 _finish_75 +00:0ca9 _test_data_76 +00:0cbf _finish_76 +00:0ccf _test_data_77 +00:0ce5 _finish_77 +00:0cf5 _test_data_78 +00:0d0b _finish_78 +00:0d1b _test_data_79 +00:0d31 _finish_79 +00:0d41 _test_data_80 +00:0d57 _finish_80 +00:0d67 _test_data_81 +00:0d7d _finish_81 +00:0d8d _test_data_82 +00:0da3 _finish_82 +00:0db3 _test_data_83 +00:0dc9 _finish_83 +00:0dd9 _test_data_84 +00:0def _finish_84 +00:0dff _test_data_85 +00:0e15 _finish_85 +00:0e25 _test_data_86 +00:0e3b _finish_86 +00:0e4b _test_data_87 +00:0e61 _finish_87 +00:0e71 _test_data_88 +00:0e87 _finish_88 +00:0e97 _test_data_89 +00:0ead _finish_89 +00:0ebd _test_data_90 +00:0ed3 _finish_90 +00:0ee3 _test_data_91 +00:0ef9 _finish_91 +00:0f09 _test_data_92 +00:0f1f _finish_92 +00:0f2f _test_data_93 +00:0f45 _finish_93 +00:0f55 _test_data_94 +00:0f6b _finish_94 +00:0f7b _test_data_95 +00:0f91 _finish_95 +00:0fa1 _test_data_96 +00:0fb7 _finish_96 +00:0fc7 _test_data_97 +00:0fdd _finish_97 +00:0fed _test_data_98 +00:1003 _finish_98 +00:1013 _test_data_99 +00:1029 _finish_99 +00:1039 _test_data_100 +00:104f _finish_100 +00:105f _test_data_101 +00:1075 _finish_101 +00:1085 _test_data_102 +00:109b _finish_102 +00:10ab _test_data_103 +00:10c1 _finish_103 +00:10d1 _test_data_104 +00:10e7 _finish_104 +00:10f7 _test_data_105 +00:110d _finish_105 +00:111d _test_data_106 +00:1133 _finish_106 +00:1143 _test_data_107 +00:1159 _finish_107 +00:1169 _test_data_108 +00:117f _finish_108 +00:118f _test_data_109 +00:11a5 _finish_109 +00:11b5 _test_data_110 +00:11cb _finish_110 +00:11db _test_data_111 +00:11f1 _finish_111 +00:1201 _test_data_112 +00:1217 _finish_112 +00:1227 _test_data_113 +00:123d _finish_113 +00:124d _test_data_114 +00:1263 _finish_114 +00:1273 _test_data_115 +00:1289 _finish_115 +00:1299 _test_data_116 +00:12af _finish_116 +00:12bf _test_data_117 +00:12d5 _finish_117 +00:12e5 _test_data_118 +00:12fb _finish_118 +00:130b _test_data_119 +00:1321 _finish_119 +00:1331 _test_data_120 +00:1347 _finish_120 +00:1357 _test_data_121 +00:136d _finish_121 +00:137d _test_data_122 +00:1393 _finish_122 +00:13a3 _test_data_123 +00:13b9 _finish_123 +00:13c9 _test_data_124 +00:13df _finish_124 +00:13ef _test_data_125 +00:1405 _finish_125 +00:1415 _test_data_126 +00:142b _finish_126 +00:143b _test_data_127 +00:1451 _finish_127 +00:1461 _test_data_128 +00:1477 _finish_128 +00:1487 _test_data_129 +00:149d _finish_129 +00:14ad _test_data_130 +00:14c3 _finish_130 +00:14d3 _test_data_131 +00:14e9 _finish_131 +00:14f9 _test_data_132 +00:150f _finish_132 +00:151f _test_data_133 +00:1535 _finish_133 +00:1545 _test_data_134 +00:155b _finish_134 +00:156b _test_data_135 +00:1581 _finish_135 +00:1591 _test_data_136 +00:15a7 _finish_136 +00:15b7 _test_data_137 +00:15cd _finish_137 +00:15dd _test_data_138 +00:15f3 _finish_138 +00:1603 _test_data_139 +00:1619 _finish_139 +00:1629 _test_data_140 +00:163f _finish_140 +00:164f _test_data_141 +00:1665 _finish_141 +00:1675 _test_data_142 +00:168b _finish_142 +00:169b _test_data_143 +00:16b1 _finish_143 +00:16c1 _test_data_144 +00:16d7 _finish_144 +00:16e7 _test_data_145 +00:16fd _finish_145 +00:170d _test_data_146 +00:1723 _finish_146 +00:1733 _test_data_147 +00:1749 _finish_147 +00:1759 _test_data_148 +00:176f _finish_148 +00:177f _test_data_149 +00:1795 _finish_149 +00:17a5 _test_data_150 +00:17bb _finish_150 +00:17cb _test_data_151 +00:17e1 _finish_151 +00:17f1 _test_data_152 +00:1807 _finish_152 +00:1817 _test_data_153 +00:182d _finish_153 +00:1841 _wait_ly_4 +00:1847 _wait_ly_5 +00:185d _print_results_halt_1 +00:1860 _test_ok_cb_0 +00:1868 _print_sl_data55 +00:1870 _print_sl_out55 +00:1873 run_testcase +00:189e _wait_ly_6 +00:18a4 _wait_ly_7 +00:18ba _print_results_halt_2 +00:18bd test_failure_cb +00:18c5 _print_sl_data56 +00:18d1 _print_sl_out56 +00:18df _print_sl_data57 +00:18e3 _print_sl_out57 +00:18f1 _print_sl_data58 +00:1901 _print_sl_out58 +00:190f _print_sl_data59 +00:191c _print_sl_out59 +00:192d _print_sl_data60 +00:193a _print_sl_out60 +00:194b _print_sl_data61 +00:1958 _print_sl_out61 +00:195e fetch_test_data +00:1978 print_got +00:198a _print_zero +00:198e _print_one +00:1990 _print_bit +00:1999 _skip +00:199a _next +00:c000 test_addr +00:c002 test_got +00:c003 test_reg +00:c004 test_mask +00:c005 test_str_write +00:c00e test_str_expect
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/boot_hwio-C/manifest.yml

@@ -0,0 +1,3 @@

+config: + gb.model: CGB +fail: true
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/boot_hwio-C/test.sym

@@ -0,0 +1,212 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/misc/boot_hwio-C.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01db _wait_ly_4 +00:01e1 _wait_ly_5 +00:01f7 _print_results_halt_1 +00:01fa _test_ok_cb_0 +00:0202 _print_sl_data55 +00:020a _print_sl_out55 +00:020d mismatch +00:0230 _wait_ly_6 +00:0236 _wait_ly_7 +00:024c _print_results_halt_2 +00:024f mismatch_cb +00:0257 _print_sl_data56 +00:0265 _print_sl_out56 +00:027f _print_sl_data57 +00:0289 _print_sl_out57 +00:029a _print_sl_data58 +00:02a4 _print_sl_out58 +00:02ad hwio_data +00:c014 mismatch_addr +00:c016 mismatch_data +00:c017 mismatch_mem
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/boot_regs-A/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/misc/boot_regs-A.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/boot_regs-cgb/test.sym

@@ -0,0 +1,199 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/misc/boot_regs-cgb.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:01d2 invalid_sp +00:01e6 _wait_ly_4 +00:01ec _wait_ly_5 +00:0202 _print_results_halt_1 +00:0205 _test_failure_cb_0 +00:020d _print_sl_data55 +00:021e _print_sl_out55 +00:c014 sp_save
A src/platform/python/tests/cinema/gb/mooneye-gb/misc/gpu/vblank_stat_intr-C/test.sym

@@ -0,0 +1,216 @@

+; this file was created with wlalink by ville helin <vhelin@iki.fi>. +; wla symbolic information for "/Users/vicki/Scratch/mooneye-gb/tests/build/misc/gpu/vblank_stat_intr-C.gb". + +[labels] +01:4bff print_load_font +01:4c0c print_string +01:4c16 print_a +01:4c20 print_newline +01:4c2b print_digit +01:4c38 print_regs +01:4c41 _print_sl_data0 +01:4c47 _print_sl_out0 +01:4c54 _print_sl_data1 +01:4c5a _print_sl_out1 +01:4c6c _print_sl_data2 +01:4c72 _print_sl_out2 +01:4c7f _print_sl_data3 +01:4c85 _print_sl_out3 +01:4c97 _print_sl_data4 +01:4c9d _print_sl_out4 +01:4caa _print_sl_data5 +01:4cb0 _print_sl_out5 +01:4cc2 _print_sl_data6 +01:4cc8 _print_sl_out6 +01:4cd5 _print_sl_data7 +01:4cdb _print_sl_out7 +01:4000 font +00:c000 regs_save +00:c000 regs_save.f +00:c001 regs_save.a +00:c002 regs_save.c +00:c003 regs_save.b +00:c004 regs_save.e +00:c005 regs_save.d +00:c006 regs_save.l +00:c007 regs_save.h +00:c008 regs_flags +00:c009 regs_assert +00:c009 regs_assert.f +00:c00a regs_assert.a +00:c00b regs_assert.c +00:c00c regs_assert.b +00:c00d regs_assert.e +00:c00e regs_assert.d +00:c00f regs_assert.l +00:c010 regs_assert.h +00:c011 memdump_len +00:c012 memdump_addr +01:47f0 memcpy +01:47f9 memset +01:4802 memcmp +01:4810 clear_vram +01:481a clear_oam +01:4824 disable_lcd_safe +01:482a _wait_ly_0 +01:4830 _wait_ly_1 +01:4839 reset_screen +01:484d process_results +01:4861 _wait_ly_2 +01:4867 _wait_ly_3 +01:487d _print_results_halt_0 +01:4880 _process_results_cb +01:488b _print_sl_data8 +01:4895 _print_sl_out8 +01:48af _print_sl_data9 +01:48ba _print_sl_out9 +01:48d2 _print_sl_data10 +01:48de _print_sl_out10 +01:48df dump_mem +01:48fe _dump_mem_line +01:4928 _check_asserts +01:4936 _print_sl_data11 +01:4939 _print_sl_out11 +01:4945 _print_sl_data12 +01:4947 _print_sl_out12 +01:494f _print_sl_data13 +01:4952 _print_sl_out13 +01:495c __check_assert_fail0 +01:4967 _print_sl_data14 +01:496a _print_sl_out14 +01:496d __check_assert_ok0 +01:4975 _print_sl_data15 +01:497a _print_sl_out15 +01:497c __check_assert_skip0 +01:4984 _print_sl_data16 +01:498c _print_sl_out16 +01:498c __check_assert_out0 +01:4998 _print_sl_data17 +01:499a _print_sl_out17 +01:49a2 _print_sl_data18 +01:49a5 _print_sl_out18 +01:49af __check_assert_fail1 +01:49ba _print_sl_data19 +01:49bd _print_sl_out19 +01:49c0 __check_assert_ok1 +01:49c8 _print_sl_data20 +01:49cd _print_sl_out20 +01:49cf __check_assert_skip1 +01:49d7 _print_sl_data21 +01:49df _print_sl_out21 +01:49df __check_assert_out1 +01:49ea _print_sl_data22 +01:49ed _print_sl_out22 +01:49f9 _print_sl_data23 +01:49fb _print_sl_out23 +01:4a03 _print_sl_data24 +01:4a06 _print_sl_out24 +01:4a10 __check_assert_fail2 +01:4a1b _print_sl_data25 +01:4a1e _print_sl_out25 +01:4a21 __check_assert_ok2 +01:4a29 _print_sl_data26 +01:4a2e _print_sl_out26 +01:4a30 __check_assert_skip2 +01:4a38 _print_sl_data27 +01:4a40 _print_sl_out27 +01:4a40 __check_assert_out2 +01:4a4c _print_sl_data28 +01:4a4e _print_sl_out28 +01:4a56 _print_sl_data29 +01:4a59 _print_sl_out29 +01:4a63 __check_assert_fail3 +01:4a6e _print_sl_data30 +01:4a71 _print_sl_out30 +01:4a74 __check_assert_ok3 +01:4a7c _print_sl_data31 +01:4a81 _print_sl_out31 +01:4a83 __check_assert_skip3 +01:4a8b _print_sl_data32 +01:4a93 _print_sl_out32 +01:4a93 __check_assert_out3 +01:4a9e _print_sl_data33 +01:4aa1 _print_sl_out33 +01:4aad _print_sl_data34 +01:4aaf _print_sl_out34 +01:4ab7 _print_sl_data35 +01:4aba _print_sl_out35 +01:4ac4 __check_assert_fail4 +01:4acf _print_sl_data36 +01:4ad2 _print_sl_out36 +01:4ad5 __check_assert_ok4 +01:4add _print_sl_data37 +01:4ae2 _print_sl_out37 +01:4ae4 __check_assert_skip4 +01:4aec _print_sl_data38 +01:4af4 _print_sl_out38 +01:4af4 __check_assert_out4 +01:4b00 _print_sl_data39 +01:4b02 _print_sl_out39 +01:4b0a _print_sl_data40 +01:4b0d _print_sl_out40 +01:4b17 __check_assert_fail5 +01:4b22 _print_sl_data41 +01:4b25 _print_sl_out41 +01:4b28 __check_assert_ok5 +01:4b30 _print_sl_data42 +01:4b35 _print_sl_out42 +01:4b37 __check_assert_skip5 +01:4b3f _print_sl_data43 +01:4b47 _print_sl_out43 +01:4b47 __check_assert_out5 +01:4b52 _print_sl_data44 +01:4b55 _print_sl_out44 +01:4b61 _print_sl_data45 +01:4b63 _print_sl_out45 +01:4b6b _print_sl_data46 +01:4b6e _print_sl_out46 +01:4b78 __check_assert_fail6 +01:4b83 _print_sl_data47 +01:4b86 _print_sl_out47 +01:4b89 __check_assert_ok6 +01:4b91 _print_sl_data48 +01:4b96 _print_sl_out48 +01:4b98 __check_assert_skip6 +01:4ba0 _print_sl_data49 +01:4ba8 _print_sl_out49 +01:4ba8 __check_assert_out6 +01:4bb4 _print_sl_data50 +01:4bb6 _print_sl_out50 +01:4bbe _print_sl_data51 +01:4bc1 _print_sl_out51 +01:4bcb __check_assert_fail7 +01:4bd6 _print_sl_data52 +01:4bd9 _print_sl_out52 +01:4bdc __check_assert_ok7 +01:4be4 _print_sl_data53 +01:4be9 _print_sl_out53 +01:4beb __check_assert_skip7 +01:4bf3 _print_sl_data54 +01:4bfb _print_sl_out54 +01:4bfb __check_assert_out7 +00:0169 fail_halt +00:017d _wait_ly_4 +00:0183 _wait_ly_5 +00:0199 _print_results_halt_1 +00:019c _test_failure_cb_0 +00:01a4 _print_sl_data55 +00:01a9 _print_sl_out55 +00:01ac test_round1 +00:01b8 _wait_ly_6 +00:0203 finish_round1 +00:0221 test_round2 +00:022d _wait_ly_7 +00:0279 finish_round2 +00:029b test_round3 +00:02a7 _wait_ly_8 +00:02f1 finish_round3 +00:030f test_round4 +00:031b _wait_ly_9 +00:0366 finish_round4 +00:0368 test_finish +00:c014 intr_vec_vblank +00:c017 intr_vec_stat +00:c01a round1 +00:c01b round2 +00:c01c round3
A src/platform/python/tests/cinema/gb/mooneye-gb/update.py

@@ -0,0 +1,61 @@

+#!/usr/bin/env python +import os +import os.path +import shutil +import yaml +from cinema.util import dictMerge + +suffixes = { + 'C': 'CGB', + 'S': 'SGB', + 'A': 'AGB', + 'mgb': 'MGB', + 'sgb': 'SGB', + 'sgb2': 'SGB2', + 'cgb': 'CGB', + 'agb': 'AGB', + 'ags': 'AGB', +} + +def ingestDirectory(path, dest): + for root, _, files in os.walk(path, topdown=False): + root = root[len(os.path.commonprefix([root, path])):] + if root.startswith('utils'): + continue + for file in files: + fname, ext = os.path.splitext(file) + if ext not in ('.gb', '.sym'): + continue + + try: + os.makedirs(os.path.join(dest, root, fname)) + except OSError: + pass + + if ext in ('.gb', '.sym'): + shutil.copy(os.path.join(path, root, file), os.path.join(dest, root, fname, 'test' + ext)) + + for suffix, model in suffixes.items(): + if fname.endswith('-' + suffix): + manifest = {} + try: + with open(os.path.join(dest, root, fname, 'manifest.yml'), 'r') as f: + manifest = yaml.safe_load(f) or {} + except IOError: + pass + dictMerge(manifest, { + 'config': { + 'gb.model': model + } + }) + with open(os.path.join(dest, root, fname, 'manifest.yml'), 'w') as f: + yaml.dump(manifest, f) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(description='Update mooneye-gb test suite') + parser.add_argument('source', type=str, help='directory containing built tests') + parser.add_argument('dest', type=str, nargs='?', default=os.path.dirname(__file__), help='directory to contain ingested tests') + args = parser.parse_args() + + ingestDirectory(args.source, args.dest)
A src/platform/python/tests/mgba/test_core.py

@@ -0,0 +1,7 @@

+import pytest + +def test_core_import(): + try: + import mgba.core + except: + raise AssertionError
A src/platform/python/tests/mgba/test_vfs.py

@@ -0,0 +1,57 @@

+import pytest +import os + +import mgba.vfs as vfs +from mgba._pylib import ffi + +def test_vfs_open(): + with open(__file__) as f: + vf = vfs.open(f) + assert vf + assert vf.close() + +def test_vfs_openPath(): + vf = vfs.openPath(__file__) + assert vf + assert vf.close() + +def test_vfs_read(): + vf = vfs.openPath(__file__) + buffer = ffi.new('char[13]') + assert vf.read(buffer, 13) == 13 + assert ffi.string(buffer) == 'import pytest' + vf.close() + +def test_vfs_readline(): + vf = vfs.openPath(__file__) + buffer = ffi.new('char[16]') + linelen = vf.readline(buffer, 16) + assert linelen in (14, 15) + if linelen == 14: + assert ffi.string(buffer) == 'import pytest\n' + elif linelen == 15: + assert ffi.string(buffer) == 'import pytest\r\n' + vf.close() + +def test_vfs_readAllSize(): + vf = vfs.openPath(__file__) + buffer = vf.readAll() + assert buffer + assert len(buffer) + assert len(buffer) == vf.size() + vf.close() + +def test_vfs_seek(): + vf = vfs.openPath(__file__) + assert vf.seek(0, os.SEEK_SET) == 0 + assert vf.seek(1, os.SEEK_SET) == 1 + assert vf.seek(1, os.SEEK_CUR) == 2 + assert vf.seek(-1, os.SEEK_CUR) == 1 + assert vf.seek(0, os.SEEK_CUR) == 1 + assert vf.seek(0, os.SEEK_END) == vf.size() + assert vf.seek(-1, os.SEEK_END) == vf.size() -1 + vf.close() + +def test_vfs_openPath_invalid(): + vf = vfs.openPath('.invalid') + assert not vf
M src/platform/qt/AboutScreen.hsrc/platform/qt/AboutScreen.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_ABOUT_SCREEN -#define QGBA_ABOUT_SCREEN +#pragma once #include <QDialog>

@@ -23,5 +22,3 @@ Ui::AboutScreen m_ui;

}; } - -#endif
M src/platform/qt/ArchiveInspector.hsrc/platform/qt/ArchiveInspector.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_ARCHIVE_INSPECTOR -#define QGBA_ARCHIVE_INSPECTOR +#pragma once #include "ui_ArchiveInspector.h"

@@ -26,5 +25,3 @@ Ui::ArchiveInspector m_ui;

}; } - -#endif
M src/platform/qt/AssetTile.cppsrc/platform/qt/AssetTile.cpp

@@ -9,6 +9,7 @@ #include "CoreController.h"

#include "GBAApp.h" #include <QFontDatabase> +#include <QHBoxLayout> #include <mgba/core/interface.h> #ifdef M_CORE_GBA

@@ -34,14 +35,27 @@

const QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont); m_ui.tileId->setFont(font); + m_ui.paletteId->setFont(font); m_ui.address->setFont(font); m_ui.r->setFont(font); m_ui.g->setFont(font); m_ui.b->setFont(font); } +void AssetTile::addCustomProperty(const QString& id, const QString& visibleName) { + QHBoxLayout* newLayout = new QHBoxLayout; + newLayout->addWidget(new QLabel(visibleName)); + QLabel* value = new QLabel; + value->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); + value->setAlignment(Qt::AlignRight); + newLayout->addWidget(value); + m_customProperties[id] = value; + int index = layout()->indexOf(m_ui.line); + static_cast<QBoxLayout*>(layout())->insertLayout(index, newLayout); +} + void AssetTile::setController(std::shared_ptr<CoreController> controller) { - m_tileCache = controller->tileCache(); + m_cacheSet = controller->graphicCaches(); switch (controller->platform()) { #ifdef M_CORE_GBA case PLATFORM_GBA:

@@ -70,68 +84,76 @@ m_paletteId = palette;

selectIndex(m_index); } -void AssetTile::setPaletteSet(int palette, int boundary, int max) { - m_index = m_index * (1 + m_paletteSet) / (1 + palette); - if (m_index >= max) { - m_index = max - 1; - } +void AssetTile::setBoundary(int boundary, int set0, int set1) { m_boundary = boundary; - m_paletteSet = palette; - selectIndex(m_index); + m_tileCaches[0] = mTileCacheSetGetPointer(&m_cacheSet->tiles, set0); + m_tileCaches[1] = mTileCacheSetGetPointer(&m_cacheSet->tiles, set1); } void AssetTile::selectIndex(int index) { m_index = index; - const uint16_t* data; + const color_t* data; + mTileCache* tileCache = m_tileCaches[index >= m_boundary]; - mTileCacheSetPalette(m_tileCache, m_paletteSet); - unsigned bpp = 8 << m_tileCache->bpp; - int dispIndex = index; + unsigned bpp = 8 << tileCache->bpp; int paletteId = m_paletteId; int base = m_addressBase; if (index >= m_boundary) { base = m_boundaryBase; - // XXX: Do this better -#ifdef M_CORE_GBA - if (m_boundaryBase == (BASE_VRAM | 0x10000)) { - paletteId += m_tileCache->count / 2; - } -#endif - dispIndex -= m_boundary; + index -= m_boundary; } - data = mTileCacheGetTile(m_tileCache, index, paletteId); - m_ui.tileId->setText(QString::number(dispIndex * (1 + m_paletteSet))); + int dispIndex = index; + if (m_addressWidth == 4 && index >= m_boundary / 2) { + dispIndex -= m_boundary / 2; + } + data = mTileCacheGetTile(tileCache, index, paletteId); + m_ui.tileId->setText(QString::number(dispIndex)); + m_ui.paletteId->setText(QString::number(paletteId)); m_ui.address->setText(tr("%0%1%2") - .arg(m_addressWidth == 4 ? index >= m_boundary : 0) + .arg(m_addressWidth == 4 ? index >= m_boundary / 2 : 0) .arg(m_addressWidth == 4 ? ":" : "x") .arg(dispIndex * bpp | base, m_addressWidth, 16, QChar('0'))); + int flip = 0; + if (m_flipH) { + flip |= 007; + } + if (m_flipV) { + flip |= 070; + } for (int i = 0; i < 64; ++i) { - m_ui.preview->setColor(i, data[i]); + m_ui.preview->setColor(i ^ flip, data[i]); } m_ui.preview->update(); } +void AssetTile::setFlip(bool h, bool v) { + m_flipH = h; + m_flipV = v; + selectIndex(m_index); +} + void AssetTile::selectColor(int index) { - const uint16_t* data; - mTileCacheSetPalette(m_tileCache, m_paletteSet); - unsigned bpp = 8 << m_tileCache->bpp; + const color_t* data; + mTileCache* tileCache = m_tileCaches[m_index >= m_boundary]; + unsigned bpp = 8 << tileCache->bpp; int paletteId = m_paletteId; - // XXX: Do this better -#ifdef M_CORE_GBA - if (m_index >= m_boundary && m_boundaryBase == (BASE_VRAM | 0x10000)) { - paletteId += m_tileCache->count / 2; - } -#endif - data = mTileCacheGetTile(m_tileCache, m_index, m_paletteId); - uint16_t color = data[index]; + data = mTileCacheGetTile(tileCache, m_index, m_paletteId); + color_t color = data[index]; m_ui.color->setColor(0, color); m_ui.color->update(); - uint32_t r = M_R5(color); - uint32_t g = M_G5(color); - uint32_t b = M_B5(color); + uint32_t r = color & 0xF8; + uint32_t g = (color >> 8) & 0xF8; + uint32_t b = (color >> 16) & 0xF8; m_ui.r->setText(tr("0x%0 (%1)").arg(r, 2, 16, QChar('0')).arg(r, 2, 10, QChar('0'))); m_ui.g->setText(tr("0x%0 (%1)").arg(g, 2, 16, QChar('0')).arg(g, 2, 10, QChar('0'))); m_ui.b->setText(tr("0x%0 (%1)").arg(b, 2, 16, QChar('0')).arg(b, 2, 10, QChar('0'))); } +void AssetTile::setCustomProperty(const QString& id, const QVariant& value) { + QLabel* label = m_customProperties[id]; + if (!label) { + return; + } + label->setText(value.toString()); +}
M src/platform/qt/AssetTile.hsrc/platform/qt/AssetTile.h

@@ -3,14 +3,13 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_ASSET_TILE -#define QGBA_ASSET_TILE +#pragma once #include "ui_AssetTile.h" #include <memory> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> namespace QGBA {

@@ -22,27 +21,32 @@

public: AssetTile(QWidget* parent = nullptr); void setController(std::shared_ptr<CoreController>); + void addCustomProperty(const QString& id, const QString& visibleName); public slots: void setPalette(int); - void setPaletteSet(int, int boundary, int max); + void setBoundary(int boundary, int set0, int set1); void selectIndex(int); + void setFlip(bool h, bool v); void selectColor(int); + void setCustomProperty(const QString& id, const QVariant& value); private: Ui::AssetTile m_ui; - mTileCache* m_tileCache; + mCacheSet* m_cacheSet; + mTileCache* m_tileCaches[2]; int m_paletteId = 0; - int m_paletteSet = 0; int m_index = 0; int m_addressWidth; int m_addressBase; int m_boundary; int m_boundaryBase; + bool m_flipH = false; + bool m_flipV = false; + + QMap<QString, QLabel*> m_customProperties; }; } - -#endif
M src/platform/qt/AssetTile.uisrc/platform/qt/AssetTile.ui

@@ -2,6 +2,14 @@ <?xml version="1.0" encoding="UTF-8"?>

<ui version="4.0"> <class>AssetTile</class> <widget class="QGroupBox" name="AssetTile"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>171</width> + <height>355</height> + </rect> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> <horstretch>0</horstretch>

@@ -36,6 +44,27 @@ </widget>

</item> <item> <widget class="QLabel" name="tileId"> + <property name="text"> + <string>0</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Palette #</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="paletteId"> <property name="text"> <string>0</string> </property>
M src/platform/qt/AssetView.cppsrc/platform/qt/AssetView.cpp

@@ -13,7 +13,7 @@ using namespace QGBA;

AssetView::AssetView(std::shared_ptr<CoreController> controller, QWidget* parent) : QWidget(parent) - , m_tileCache(controller->tileCache()) + , m_cacheSet(controller->graphicCaches()) , m_controller(controller) { m_updateTimer.setSingleShot(true);

@@ -55,8 +55,8 @@ void AssetView::showEvent(QShowEvent*) {

updateTiles(true); } -void AssetView::compositeTile(unsigned tileId, void* buffer, size_t stride, size_t x, size_t y, int depth) { - const uint8_t* tile = mTileCacheGetRawTile(m_tileCache, tileId); +void AssetView::compositeTile(const void* tBuffer, void* buffer, size_t stride, size_t x, size_t y, int depth) { + const uint8_t* tile = static_cast<const uint8_t*>(tBuffer); uint8_t* pixels = static_cast<uint8_t*>(buffer); size_t base = stride * y + x; switch (depth) {
M src/platform/qt/AssetView.hsrc/platform/qt/AssetView.h

@@ -3,13 +3,12 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_ASSET_VIEW -#define QGBA_ASSET_VIEW +#pragma once #include <QTimer> #include <QWidget> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #include <memory>

@@ -23,7 +22,7 @@

public: AssetView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr); - void compositeTile(unsigned tileId, void* image, size_t stride, size_t x, size_t y, int depth = 8); + static void compositeTile(const void* tile, void* image, size_t stride, size_t x, size_t y, int depth = 8); protected slots: void updateTiles();

@@ -40,7 +39,7 @@

void resizeEvent(QResizeEvent*) override; void showEvent(QShowEvent*) override; - mTileCache* const m_tileCache; + mCacheSet* const m_cacheSet; private: std::shared_ptr<CoreController> m_controller;

@@ -48,5 +47,3 @@ QTimer m_updateTimer;

}; } - -#endif
M src/platform/qt/AudioDevice.hsrc/platform/qt/AudioDevice.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_AUDIO_DEVICE -#define QGBA_AUDIO_DEVICE +#pragma once #include <QAudioFormat> #include <QIODevice>

@@ -31,5 +30,3 @@ mCoreThread* m_context;

}; } - -#endif
M src/platform/qt/AudioProcessor.hsrc/platform/qt/AudioProcessor.h

@@ -3,8 +3,8 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_AUDIO_PROCESSOR -#define QGBA_AUDIO_PROCESSOR +#pragma once + #include <QObject> #include <memory>

@@ -59,5 +59,3 @@ static Driver s_driver;

}; } - -#endif
M src/platform/qt/AudioProcessorQt.hsrc/platform/qt/AudioProcessorQt.h

@@ -3,8 +3,8 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_AUDIO_PROCESSOR_QT -#define QGBA_AUDIO_PROCESSOR_QT +#pragma once + #include "AudioProcessor.h" class QAudioOutput;

@@ -39,5 +39,3 @@ unsigned m_sampleRate = 44100;

}; } - -#endif
M src/platform/qt/AudioProcessorSDL.hsrc/platform/qt/AudioProcessorSDL.h

@@ -3,8 +3,8 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_AUDIO_PROCESSOR_SDL -#define QGBA_AUDIO_PROCESSOR_SDL +#pragma once + #include "AudioProcessor.h" #ifdef BUILD_SDL

@@ -39,5 +39,3 @@

} #endif - -#endif
M src/platform/qt/CMakeLists.txtsrc/platform/qt/CMakeLists.txt

@@ -83,6 +83,7 @@ KeyEditor.cpp

LoadSaveState.cpp LogController.cpp LogView.cpp + MapView.cpp MemoryModel.cpp MemorySearch.cpp MemoryView.cpp

@@ -121,6 +122,7 @@ GIFView.ui

IOViewer.ui LoadSaveState.ui LogView.ui + MapView.ui MemorySearch.ui MemoryView.ui ObjView.ui
M src/platform/qt/CheatsModel.hsrc/platform/qt/CheatsModel.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_CHEATS_MODEL -#define QGBA_CHEATS_MODEL +#pragma once #include <QAbstractItemModel> #include <QFont>

@@ -51,5 +50,3 @@ QFont m_font;

}; } - -#endif
M src/platform/qt/CheatsView.hsrc/platform/qt/CheatsView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_CHEATS_VIEW -#define QGBA_CHEATS_VIEW +#pragma once #include <QWidget>

@@ -44,5 +43,3 @@ CheatsModel m_model;

}; } - -#endif
M src/platform/qt/ColorPicker.cppsrc/platform/qt/ColorPicker.cpp

@@ -15,6 +15,7 @@ }

ColorPicker::ColorPicker(QWidget* parent, const QColor& defaultColor) : m_parent(parent) + , m_defaultColor(defaultColor) { QPalette palette = parent->palette(); palette.setColor(parent->backgroundRole(), defaultColor);

@@ -27,6 +28,7 @@ if (m_parent) {

m_parent->removeEventFilter(this); } m_parent = other.m_parent; + m_defaultColor = other.m_defaultColor; m_parent->installEventFilter(this); return *this;

@@ -45,8 +47,10 @@ QWidget* swatch = static_cast<QWidget*>(obj);

QColorDialog* colorPicker = new QColorDialog; colorPicker->setAttribute(Qt::WA_DeleteOnClose); + colorPicker->setCurrentColor(m_defaultColor); colorPicker->open(); connect(colorPicker, &QColorDialog::colorSelected, [this, swatch](const QColor& color) { + m_defaultColor = color; QPalette palette = swatch->palette(); palette.setColor(swatch->backgroundRole(), color); swatch->setPalette(palette);
M src/platform/qt/ColorPicker.hsrc/platform/qt/ColorPicker.h

@@ -3,12 +3,11 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_COLOR_PICKER -#define QGBA_COLOR_PICKER +#pragma once +#include <QColor> #include <QObject> -class QColor; class QWidget; namespace QGBA {

@@ -30,8 +29,7 @@ bool eventFilter(QObject* obj, QEvent* event) override;

private: QWidget* m_parent = nullptr; + QColor m_defaultColor; }; } - -#endif
M src/platform/qt/ConfigController.cppsrc/platform/qt/ConfigController.cpp

@@ -158,12 +158,16 @@ }

m_optionSet[optionName]->setValue(mCoreConfigGetValue(&m_config, key)); } -QString ConfigController::getOption(const char* key) const { - return QString(mCoreConfigGetValue(&m_config, key)); +QString ConfigController::getOption(const char* key, const QVariant& defaultVal) const { + const char* val = mCoreConfigGetValue(&m_config, key); + if (val) { + return QString(val); + } + return defaultVal.toString(); } -QString ConfigController::getOption(const QString& key) const { - return getOption(key.toUtf8().constData()); +QString ConfigController::getOption(const QString& key, const QVariant& defaultVal) const { + return getOption(key.toUtf8().constData(), defaultVal); } QVariant ConfigController::getQtOption(const QString& key, const QString& group) const {
M src/platform/qt/ConfigController.hsrc/platform/qt/ConfigController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_CONFIG_CONTROLLER -#define QGBA_CONFIG_CONTROLLER +#pragma once #include "Override.h"

@@ -70,8 +69,8 @@

ConfigOption* addOption(const char* key); void updateOption(const char* key); - QString getOption(const char* key) const; - QString getOption(const QString& key) const; + QString getOption(const char* key, const QVariant& defaultVal = QVariant()) const; + QString getOption(const QString& key, const QVariant& defaultVal = QVariant()) const; QVariant getQtOption(const QString& key, const QString& group = QString()) const;

@@ -110,5 +109,3 @@ static QString s_configDir;

}; } - -#endif
M src/platform/qt/CoreController.cppsrc/platform/qt/CoreController.cpp

@@ -18,13 +18,14 @@ #include <mgba/core/serialize.h>

#include <mgba/feature/video-logger.h> #ifdef M_CORE_GBA #include <mgba/internal/gba/gba.h> -#include <mgba/internal/gba/renderers/tile-cache.h> +#include <mgba/internal/gba/renderers/cache-set.h> #include <mgba/internal/gba/sharkport.h> #endif #ifdef M_CORE_GB #include <mgba/internal/gb/gb.h> -#include <mgba/internal/gb/renderers/tile-cache.h> +#include <mgba/internal/gb/renderers/cache-set.h> #endif +#include <mgba-util/math.h> #include <mgba-util/vfs.h> using namespace QGBA;

@@ -38,9 +39,11 @@ {

m_threadContext.core = core; m_threadContext.userData = this; - QSize size = screenDimensions(); + QSize size(256, 512); m_buffers[0].resize(size.width() * size.height() * sizeof(color_t)); m_buffers[1].resize(size.width() * size.height() * sizeof(color_t)); + m_buffers[0].fill(0xFF); + m_buffers[1].fill(0xFF); m_activeBuffer = &m_buffers[0]; m_threadContext.core->setVideoBuffer(m_threadContext.core, reinterpret_cast<color_t*>(m_activeBuffer->data()), size.width());

@@ -58,15 +61,6 @@ default:

break; } - if (controller->m_override) { - controller->m_override->identify(context->core); - controller->m_override->apply(context->core); - } - - if (mCoreLoadState(context->core, 0, controller->m_loadStateFlags)) { - mCoreDeleteState(context->core, 0); - } - if (controller->m_multiplayer) { controller->m_multiplayer->attachGame(controller); }

@@ -79,9 +73,27 @@ CoreController* controller = static_cast<CoreController*>(context->userData);

for (auto action : controller->m_resetActions) { action(); } + + if (controller->m_override) { + controller->m_override->identify(context->core); + controller->m_override->apply(context->core); + } + + if (mCoreLoadState(context->core, 0, controller->m_loadStateFlags)) { + mCoreDeleteState(context->core, 0); + } + controller->m_resetActions.clear(); - controller->m_activeBuffer->fill(0xFF); + QSize size = controller->screenDimensions(); + controller->m_buffers[0].resize(size.width() * size.height() * sizeof(color_t)); + controller->m_buffers[1].resize(size.width() * size.height() * sizeof(color_t)); + controller->m_buffers[0].fill(0xFF); + controller->m_buffers[1].fill(0xFF); + controller->m_activeBuffer = &controller->m_buffers[0]; + + context->core->setVideoBuffer(context->core, reinterpret_cast<color_t*>(controller->m_activeBuffer->data()), size.width()); + controller->finishFrame(); };

@@ -98,6 +110,18 @@ controller->clearMultiplayerController();

QMetaObject::invokeMethod(controller, "stopping"); }; + m_threadContext.pauseCallback = [](mCoreThread* context) { + CoreController* controller = static_cast<CoreController*>(context->userData); + + QMetaObject::invokeMethod(controller, "paused"); + }; + + m_threadContext.unpauseCallback = [](mCoreThread* context) { + CoreController* controller = static_cast<CoreController*>(context->userData); + + QMetaObject::invokeMethod(controller, "unpaused"); + }; + m_threadContext.logger.d.log = [](mLogger* logger, int category, enum mLogLevel level, const char* format, va_list args) { mThreadLogger* logContext = reinterpret_cast<mThreadLogger*>(logger); mCoreThread* context = logContext->p;

@@ -162,9 +186,9 @@ endVideoLog();

stop(); disconnect(); - if (m_tileCache) { - mTileCacheDeinit(m_tileCache.get()); - m_tileCache.reset(); + if (m_cacheSet) { + mCacheSetDeinit(m_cacheSet.get()); + m_cacheSet.reset(); } mCoreThreadJoin(&m_threadContext);

@@ -198,12 +222,13 @@ }

void CoreController::loadConfig(ConfigController* config) { Interrupter interrupter(this); - m_loadStateFlags = config->getOption("loadStateExtdata").toInt(); - m_saveStateFlags = config->getOption("saveStateExtdata").toInt(); - m_fastForwardRatio = config->getOption("fastForwardRatio").toFloat(); - m_videoSync = config->getOption("videoSync").toInt(); - m_audioSync = config->getOption("audioSync").toInt(); + m_loadStateFlags = config->getOption("loadStateExtdata", m_loadStateFlags).toInt(); + m_saveStateFlags = config->getOption("saveStateExtdata", m_saveStateFlags).toInt(); + m_fastForwardRatio = config->getOption("fastForwardRatio", m_fastForwardRatio).toFloat(); + m_videoSync = config->getOption("videoSync", m_videoSync).toInt(); + m_audioSync = config->getOption("audioSync", m_audioSync).toInt(); m_fpsTarget = config->getOption("fpsTarget").toFloat(); + m_autofireThreshold = config->getOption("autofireThreshold", m_autofireThreshold).toInt(); updateFastForward(); mCoreLoadForeignConfig(m_threadContext.core, config->config()); mCoreThreadRewindParamsChanged(&m_threadContext);

@@ -243,36 +268,34 @@ m_multiplayer->detachGame(this);

m_multiplayer = nullptr; } -mTileCache* CoreController::tileCache() { - if (m_tileCache) { - return m_tileCache.get(); +mCacheSet* CoreController::graphicCaches() { + if (m_cacheSet) { + return m_cacheSet.get(); } Interrupter interrupter(this); switch (platform()) { #ifdef M_CORE_GBA case PLATFORM_GBA: { GBA* gba = static_cast<GBA*>(m_threadContext.core->board); - m_tileCache = std::make_unique<mTileCache>(); - GBAVideoTileCacheInit(m_tileCache.get()); - GBAVideoTileCacheAssociate(m_tileCache.get(), &gba->video); - mTileCacheSetPalette(m_tileCache.get(), 0); + m_cacheSet = std::make_unique<mCacheSet>(); + GBAVideoCacheInit(m_cacheSet.get()); + GBAVideoCacheAssociate(m_cacheSet.get(), &gba->video); break; } #endif #ifdef M_CORE_GB case PLATFORM_GB: { GB* gb = static_cast<GB*>(m_threadContext.core->board); - m_tileCache = std::make_unique<mTileCache>(); - GBVideoTileCacheInit(m_tileCache.get()); - GBVideoTileCacheAssociate(m_tileCache.get(), &gb->video); - mTileCacheSetPalette(m_tileCache.get(), 0); + m_cacheSet = std::make_unique<mCacheSet>(); + GBVideoCacheInit(m_cacheSet.get()); + GBVideoCacheAssociate(m_cacheSet.get(), &gb->video); break; } #endif default: return nullptr; } - return m_tileCache.get(); + return m_cacheSet.get(); } void CoreController::setOverride(std::unique_ptr<Override> override) {

@@ -333,11 +356,9 @@ if (paused) {

QMutexLocker locker(&m_mutex); m_frameActions.append([this]() { mCoreThreadPauseFromThread(&m_threadContext); - QMetaObject::invokeMethod(this, "paused"); }); } else { mCoreThreadUnpause(&m_threadContext); - emit unpaused(); } }

@@ -681,6 +702,8 @@ m_activeBuffer = &m_buffers[0];

if (m_activeBuffer == m_completeBuffer) { m_activeBuffer = &m_buffers[1]; } + // Copy contents to avoid issues when doing frameskip + *m_activeBuffer = *m_completeBuffer; m_threadContext.core->setVideoBuffer(m_threadContext.core, reinterpret_cast<color_t*>(m_activeBuffer->data()), screenDimensions().width()); for (auto& action : m_frameActions) {
M src/platform/qt/CoreController.hsrc/platform/qt/CoreController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_CORE_CONTROLLER -#define QGBA_CORE_CONTROLLER +#pragma once #include <QByteArray> #include <QList>

@@ -20,7 +19,7 @@

#include <mgba/core/core.h> #include <mgba/core/interface.h> #include <mgba/core/thread.h> -#include <mgba/core/tile-cache.h> +#include <mgba/core/cache-set.h> #ifdef M_CORE_GB #include <mgba/internal/gb/sio/printer.h>

@@ -79,7 +78,7 @@ void setMultiplayerController(MultiplayerController*);

void clearMultiplayerController(); MultiplayerController* multiplayerController() { return m_multiplayer; } - mTileCache* tileCache(); + mCacheSet* graphicCaches(); int stateSlot() const { return m_stateSlot; } void setOverride(std::unique_ptr<Override> override);

@@ -169,12 +168,17 @@ QByteArray m_buffers[2];

QByteArray* m_activeBuffer; QByteArray* m_completeBuffer = nullptr; - std::unique_ptr<mTileCache> m_tileCache; + std::unique_ptr<mCacheSet> m_cacheSet; std::unique_ptr<Override> m_override; QList<std::function<void()>> m_resetActions; QList<std::function<void()>> m_frameActions; QMutex m_mutex; + + int m_activeKeys = 0; + bool m_autofire[32] = {}; + int m_autofireStatus[32] = {}; + int m_autofireThreshold = 1; VFileDevice m_backupLoadState; QByteArray m_backupSaveState{nullptr};

@@ -206,5 +210,3 @@ #endif

}; } - -#endif
M src/platform/qt/CoreManager.cppsrc/platform/qt/CoreManager.cpp

@@ -99,10 +99,13 @@ } else {

core->loadROM(core, vf); } - QFileInfo info(base + "/" + path); - QByteArray bytes(info.baseName().toUtf8()); - strncpy(core->dirs.baseName, bytes.constData(), sizeof(core->dirs.baseName)); + QByteArray bytes(path.toUtf8()); + separatePath(bytes.constData(), nullptr, core->dirs.baseName, nullptr); + QFileInfo info(base); + if (info.isDir()) { + info = QFileInfo(base + "/" + path); + } bytes = info.dir().canonicalPath().toUtf8(); mDirectorySetAttachBase(&core->dirs, VDirOpen(bytes.constData())); mCoreAutoloadSave(core);
M src/platform/qt/CoreManager.hsrc/platform/qt/CoreManager.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_CORE_MANAGER -#define QGBA_CORE_MANAGER +#pragma once #include <QFileInfo> #include <QObject>

@@ -41,5 +40,3 @@ bool m_preload = false;

}; } - -#endif
M src/platform/qt/DebuggerConsole.hsrc/platform/qt/DebuggerConsole.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DEBUGGER_CONSOLE -#define QGBA_DEBUGGER_CONSOLE +#pragma once #include "ui_DebuggerConsole.h"

@@ -29,5 +28,3 @@ DebuggerConsoleController* m_consoleController;

}; } - -#endif
M src/platform/qt/DebuggerConsoleController.hsrc/platform/qt/DebuggerConsoleController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DEBUGGER_CONSOLE_CONTROLLER -#define QGBA_DEBUGGER_CONSOLE_CONTROLLER +#pragma once #include "DebuggerController.h"

@@ -59,5 +58,3 @@ } m_backend;

}; } - -#endif
M src/platform/qt/DebuggerController.hsrc/platform/qt/DebuggerController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DEBUGGER_CONTROLLER -#define QGBA_DEBUGGER_CONTROLLER +#pragma once #include <QObject>

@@ -44,5 +43,3 @@ QMetaObject::Connection m_autoattach;

}; } - -#endif
M src/platform/qt/Display.hsrc/platform/qt/Display.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DISPLAY -#define QGBA_DISPLAY +#pragma once #include <mgba-util/common.h>

@@ -85,5 +84,3 @@ QTimer m_mouseTimer;

}; } - -#endif
M src/platform/qt/DisplayGL.cppsrc/platform/qt/DisplayGL.cpp

@@ -14,6 +14,7 @@ #include <QResizeEvent>

#include <QTimer> #include <mgba/core/core.h> +#include <mgba-util/math.h> #ifdef BUILD_GL #include "platform/opengl/gl.h" #endif
M src/platform/qt/DisplayGL.hsrc/platform/qt/DisplayGL.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DISPLAY_GL -#define QGBA_DISPLAY_GL +#pragma once #if defined(BUILD_GL) || defined(BUILD_GLES)

@@ -130,5 +129,3 @@

} #endif - -#endif
M src/platform/qt/DisplayQt.cppsrc/platform/qt/DisplayQt.cpp

@@ -11,6 +11,7 @@ #include <QPainter>

#include <mgba/core/core.h> #include <mgba/core/thread.h> +#include <mgba-util/math.h> using namespace QGBA;
M src/platform/qt/DisplayQt.hsrc/platform/qt/DisplayQt.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_DISPLAY_QT -#define QGBA_DISPLAY_QT +#pragma once #include "Display.h"

@@ -48,5 +47,3 @@ std::shared_ptr<CoreController> m_context = nullptr;

}; } - -#endif
M src/platform/qt/GBAApp.hsrc/platform/qt/GBAApp.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_APP_H -#define QGBA_APP_H +#pragma once #include <QApplication> #include <QFileDialog>

@@ -83,5 +82,3 @@ #endif

}; } - -#endif
M src/platform/qt/GBAKeyEditor.hsrc/platform/qt/GBAKeyEditor.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GBA_KEY_EDITOR -#define QGBA_GBA_KEY_EDITOR +#pragma once #include <QList> #include <QPicture>

@@ -92,5 +91,3 @@ QPicture m_background;

}; } - -#endif
M src/platform/qt/GBAOverride.hsrc/platform/qt/GBAOverride.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GBA_OVERRIDE -#define QGBA_GBA_OVERRIDE +#pragma once #include "Override.h"

@@ -22,5 +21,3 @@ struct GBACartridgeOverride override;

}; } - -#endif
M src/platform/qt/GBOverride.hsrc/platform/qt/GBOverride.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GB_OVERRIDE -#define QGBA_GB_OVERRIDE +#pragma once #include "Override.h"

@@ -22,5 +21,3 @@ struct GBCartridgeOverride override;

}; } - -#endif
M src/platform/qt/GDBController.hsrc/platform/qt/GDBController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GDB_CONTROLLER -#define QGBA_GDB_CONTROLLER +#pragma once #include "DebuggerController.h"

@@ -47,5 +46,3 @@

} #endif - -#endif
M src/platform/qt/GDBWindow.hsrc/platform/qt/GDBWindow.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GDB_WINDOW -#define QGBA_GDB_WINDOW +#pragma once #include <QDialog>

@@ -40,5 +39,3 @@ QPushButton* m_breakButton;

}; } - -#endif
M src/platform/qt/GIFView.hsrc/platform/qt/GIFView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GIF_VIEW -#define QGBA_GIF_VIEW +#pragma once #ifdef USE_MAGICK

@@ -55,5 +54,3 @@

} #endif - -#endif
M src/platform/qt/GamepadAxisEvent.hsrc/platform/qt/GamepadAxisEvent.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GAMEPAD_AXIS_EVENT -#define QGBA_GAMEPAD_AXIS_EVENT +#pragma once #include <QEvent>

@@ -42,5 +41,3 @@ GBAKey m_key;

}; } - -#endif
M src/platform/qt/GamepadButtonEvent.hsrc/platform/qt/GamepadButtonEvent.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GAMEPAD_BUTTON_EVENT -#define QGBA_GAMEPAD_BUTTON_EVENT +#pragma once #include <QEvent>

@@ -34,5 +33,3 @@ GBAKey m_key;

}; } - -#endif
M src/platform/qt/GamepadHatEvent.hsrc/platform/qt/GamepadHatEvent.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_GAMEPAD_HAT_EVENT -#define QGBA_GAMEPAD_HAT_EVENT +#pragma once #include <QEvent>

@@ -44,5 +43,3 @@ GBAKey m_key;

}; } - -#endif
M src/platform/qt/IOViewer.hsrc/platform/qt/IOViewer.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_IOVIEWER -#define QGBA_IOVIEWER +#pragma once #include <QDialog> #include <QList>

@@ -71,5 +70,3 @@ std::shared_ptr<CoreController> m_controller;

}; } - -#endif
A src/platform/qt/InputProfile.h

@@ -0,0 +1,95 @@

+/* Copyright (c) 2013-2015 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#pragma once + +#include "GamepadAxisEvent.h" + +#include <mgba/gba/interface.h> + +namespace QGBA { + +class InputController; + +class InputProfile { +public: + static const InputProfile* findProfile(const QString& name); + + void apply(InputController*) const; + bool lookupShortcutButton(const QString& shortcut, int* button) const; + bool lookupShortcutAxis(const QString& shortcut, int* axis, GamepadAxisEvent::Direction* direction) const; + +private: + struct Coord { + int x; + int y; + }; + + struct AxisValue { + GamepadAxisEvent::Direction direction; + int axis; + }; + + template <typename T> struct Shortcuts { + T loadState; + T saveState; + T holdFastForward; + T holdRewind; + }; + + struct Axis { + GamepadAxisEvent::Direction direction; + int axis; + }; + + template <typename T> struct KeyList { + T keyA; + T keyB; + T keySelect; + T keyStart; + T keyRight; + T keyLeft; + T keyUp; + T keyDown; + T keyR; + T keyL; + }; + + constexpr InputProfile(const char* name, + const KeyList<int> keys, + const Shortcuts<int> shortcutButtons = { -1, -1, -1, -1}, + const Shortcuts<Axis> shortcutAxes = { + {GamepadAxisEvent::Direction::NEUTRAL, -1}, + {GamepadAxisEvent::Direction::NEUTRAL, -1}, + {GamepadAxisEvent::Direction::NEUTRAL, -1}, + {GamepadAxisEvent::Direction::NEUTRAL, -1}}, + const KeyList<AxisValue> axes = { + { GamepadAxisEvent::Direction::NEUTRAL, -1 }, + { GamepadAxisEvent::Direction::NEUTRAL, -1 }, + { GamepadAxisEvent::Direction::NEUTRAL, -1 }, + { GamepadAxisEvent::Direction::NEUTRAL, -1 }, + { GamepadAxisEvent::Direction::POSITIVE, 0 }, + { GamepadAxisEvent::Direction::NEGATIVE, 0 }, + { GamepadAxisEvent::Direction::NEGATIVE, 1 }, + { GamepadAxisEvent::Direction::POSITIVE, 1 }, + { GamepadAxisEvent::Direction::NEUTRAL, -1 }, + { GamepadAxisEvent::Direction::NEUTRAL, -1 }}, + const struct Coord& tiltAxis = { 2, 3 }, + const struct Coord& gyroAxis = { 0, 1 }, + float gyroSensitivity = 2e+09f); + + static const InputProfile s_defaultMaps[]; + + const char* m_profileName; + const int m_keys[GBA_KEY_MAX]; + const AxisValue m_axes[GBA_KEY_MAX]; + const Shortcuts<int> m_shortcutButtons; + const Shortcuts<Axis> m_shortcutAxes; + Coord m_tiltAxis; + Coord m_gyroAxis; + float m_gyroSensitivity; +}; + +}
M src/platform/qt/KeyEditor.hsrc/platform/qt/KeyEditor.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_KEY_EDITOR -#define QGBA_KEY_EDITOR +#pragma once #include "GamepadAxisEvent.h" #include "GamepadHatEvent.h"

@@ -64,5 +63,3 @@ QTimer m_lastKey;

}; } - -#endif
M src/platform/qt/LoadSaveState.hsrc/platform/qt/LoadSaveState.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LOAD_SAVE_STATE -#define QGBA_LOAD_SAVE_STATE +#pragma once #include <QWidget>

@@ -57,5 +56,3 @@ QPixmap m_currentImage;

}; } - -#endif
M src/platform/qt/LogController.hsrc/platform/qt/LogController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LOG_CONTROLLER -#define QGBA_LOG_CONTROLLER +#pragma once #include "GBAApp.h"

@@ -66,5 +65,3 @@

#define LOG(C, L) (*LogController::global())(mLOG_ ## L, _mLOG_CAT_ ## C ()) } - -#endif
M src/platform/qt/LogView.hsrc/platform/qt/LogView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LOG_VIEW -#define QGBA_LOG_VIEW +#pragma once #include <QQueue> #include <QWidget>

@@ -50,5 +49,3 @@ void clearLine();

}; } - -#endif
A src/platform/qt/MapView.cpp

@@ -0,0 +1,188 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "MapView.h" + +#include "CoreController.h" +#include "GBAApp.h" +#include "LogController.h" + +#include <mgba-util/png-io.h> +#ifdef M_CORE_GBA +#include <mgba/internal/gba/memory.h> +#endif +#ifdef M_CORE_GB +#include <mgba/internal/gb/memory.h> +#endif + +#include <QButtonGroup> +#include <QFontDatabase> +#include <QMouseEvent> +#include <QRadioButton> +#include <QTimer> + +using namespace QGBA; + +MapView::MapView(std::shared_ptr<CoreController> controller, QWidget* parent) + : AssetView(controller, parent) + , m_controller(controller) +{ + m_ui.setupUi(this); + m_ui.tile->setController(controller); + + switch (m_controller->platform()) { +#ifdef M_CORE_GBA + case PLATFORM_GBA: + m_boundary = 2048; + m_addressBase = BASE_VRAM; + m_addressWidth = 8; + break; +#endif +#ifdef M_CORE_GB + case PLATFORM_GB: + m_boundary = 1024; + m_addressBase = GB_BASE_VRAM; + m_addressWidth = 4; + break; +#endif + default: + return; + } + m_ui.tile->setBoundary(m_boundary, 0, 0); + + connect(m_ui.magnification, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [this]() { + updateTiles(true); + }); + + CoreController::Interrupter interrupter(m_controller); + const mCoreChannelInfo* videoLayers; + size_t nVideo = m_controller->thread()->core->listVideoLayers(m_controller->thread()->core, &videoLayers); + QButtonGroup* group = new QButtonGroup(this); + for (size_t i = 0; i < nVideo; ++i) { + if (strncmp(videoLayers[i].internalName, "bg", 2) != 0) { + continue; + } + QRadioButton* button = new QRadioButton(tr(videoLayers[i].visibleName)); + if (!i) { + button->setChecked(true); + } + m_ui.bgLayout->addWidget(button); + connect(button, &QAbstractButton::pressed, button, [this, i]() { + selectMap(i); + }); + group->addButton(button); + } +#ifdef USE_PNG + connect(m_ui.exportButton, &QAbstractButton::clicked, this, &MapView::exportMap); +#else + m_ui.exportButton->setVisible(false); +#endif + m_ui.map->installEventFilter(this); + m_ui.tile->addCustomProperty("mapAddr", tr("Map Addr.")); + m_ui.tile->addCustomProperty("flip", tr("Mirror")); + selectTile(0, 0); +} + +void MapView::selectMap(int map) { + if (map >= mMapCacheSetSize(&m_cacheSet->maps)) { + return; + } + if (map == m_map) { + return; + } + m_map = map; + updateTiles(true); +} + +void MapView::selectTile(int x, int y) { + CoreController::Interrupter interrupter(m_controller); + mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map); + size_t tileCache = mTileCacheSetIndex(&m_cacheSet->tiles, mapCache->tileCache); + m_ui.tile->setBoundary(m_boundary, tileCache, tileCache); + uint32_t location = mMapCacheTileId(mapCache, x, y); + mMapCacheEntry* entry = &m_mapStatus[location]; + m_ui.tile->selectIndex(entry->tileId + mapCache->tileStart); + m_ui.tile->setPalette(mMapCacheEntryFlagsGetPaletteId(entry->flags)); + m_ui.tile->setFlip(mMapCacheEntryFlagsGetHMirror(entry->flags), mMapCacheEntryFlagsGetVMirror(entry->flags)); + location <<= (mMapCacheSystemInfoGetMapAlign(mapCache->sysConfig)); + location += m_addressBase + mapCache->mapStart; + + QString flip(tr("None")); + if (mMapCacheEntryFlagsGetHMirror(entry->flags) && mMapCacheEntryFlagsGetVMirror(entry->flags)) { + flip = tr("Both"); + } else if (mMapCacheEntryFlagsGetHMirror(entry->flags)) { + flip = tr("Horizontal"); + } else if (mMapCacheEntryFlagsGetVMirror(entry->flags)) { + flip = tr("Vertical"); + } + m_ui.tile->setCustomProperty("flip", flip); + m_ui.tile->setCustomProperty("mapAddr", QString("%0%1") + .arg(m_addressWidth == 8 ? "0x" : "") + .arg(location, m_addressWidth, 16, QChar('0'))); +} + +bool MapView::eventFilter(QObject* obj, QEvent* event) { + if (event->type() != QEvent::MouseButtonPress) { + return false; + } + int x = static_cast<QMouseEvent*>(event)->x(); + int y = static_cast<QMouseEvent*>(event)->y(); + x /= 8 * m_ui.magnification->value(); + y /= 8 * m_ui.magnification->value(); + selectTile(x, y); + return true; +} + +void MapView::updateTilesGBA(bool force) { + { + CoreController::Interrupter interrupter(m_controller); + mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map); + int tilesW = 1 << mMapCacheSystemInfoGetTilesWide(mapCache->sysConfig); + int tilesH = 1 << mMapCacheSystemInfoGetTilesHigh(mapCache->sysConfig); + m_rawMap = QImage(QSize(tilesW * 8, tilesH * 8), QImage::Format_ARGB32); + uchar* bgBits = m_rawMap.bits(); + for (int j = 0; j < tilesH; ++j) { + for (int i = 0; i < tilesW; ++i) { + mMapCacheCleanTile(mapCache, m_mapStatus, i, j); + } + for (int i = 0; i < 8; ++i) { + memcpy(static_cast<void*>(&bgBits[tilesW * 32 * (i + j * 8)]), mMapCacheGetRow(mapCache, i + j * 8), tilesW * 32); + } + } + } + m_rawMap = m_rawMap.rgbSwapped(); + QPixmap map = QPixmap::fromImage(m_rawMap.convertToFormat(QImage::Format_RGB32)); + if (m_ui.magnification->value() > 1) { + map = map.scaled(map.size() * m_ui.magnification->value()); + } + m_ui.map->setPixmap(map); +} + +#ifdef M_CORE_GB +void MapView::updateTilesGB(bool force) { + updateTilesGBA(force); +} +#endif + +#ifdef USE_PNG +void MapView::exportMap() { + QString filename = GBAApp::app()->getSaveFileName(this, tr("Export map"), + tr("Portable Network Graphics (*.png)")); + VFile* vf = VFileDevice::open(filename, O_WRONLY | O_CREAT | O_TRUNC); + if (!vf) { + LOG(QT, ERROR) << tr("Failed to open output PNG file: %1").arg(filename); + return; + } + + CoreController::Interrupter interrupter(m_controller); + png_structp png = PNGWriteOpen(vf); + png_infop info = PNGWriteHeaderA(png, m_rawMap.width(), m_rawMap.height()); + + mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map); + QImage map = m_rawMap.rgbSwapped(); + PNGWritePixelsA(png, map.width(), map.height(), map.bytesPerLine() / 4, static_cast<const void*>(map.constBits())); + PNGWriteClose(png, info); +} +#endif
A src/platform/qt/MapView.h

@@ -0,0 +1,55 @@

+/* Copyright (c) 2013-2017 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#pragma once + +#include "AssetView.h" + +#include "ui_MapView.h" + +#include <mgba/core/map-cache.h> + +namespace QGBA { + +class CoreController; + +class MapView : public AssetView { +Q_OBJECT + +public: + MapView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr); + +#ifdef USE_PNG +public slots: + void exportMap(); +#endif + +private slots: + void selectMap(int); + void selectTile(int x, int y); + +protected: + bool eventFilter(QObject*, QEvent*) override; + +private: +#ifdef M_CORE_GBA + void updateTilesGBA(bool force) override; +#endif +#ifdef M_CORE_GB + void updateTilesGB(bool force) override; +#endif + + Ui::MapView m_ui; + + std::shared_ptr<CoreController> m_controller; + mMapCacheEntry m_mapStatus[128 * 128] = {}; // TODO: Correct size + int m_map = 0; + QImage m_rawMap; + int m_boundary; + int m_addressBase; + int m_addressWidth; +}; + +}
A src/platform/qt/MapView.ui

@@ -0,0 +1,139 @@

+<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MapView</class> + <widget class="QWidget" name="MapView"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>641</width> + <height>489</height> + </rect> + </property> + <property name="windowTitle"> + <string>Maps</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <layout class="QVBoxLayout" name="bgLayout"/> + </item> + <item row="0" column="1" rowspan="5"> + <widget class="QScrollArea" name="scrollArea"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>457</width> + <height>463</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="map"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + <item row="2" column="0"> + <widget class="QGBA::AssetTile" name="tile"/> + </item> + <item row="4" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QSpinBox" name="magnification"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix"> + <string>×</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>4</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Magnification</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="0"> + <widget class="QPushButton" name="exportButton"> + <property name="text"> + <string>Export</string> + </property> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>QGBA::AssetTile</class> + <extends>QGroupBox</extends> + <header>AssetTile.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui>
M src/platform/qt/MemoryModel.hsrc/platform/qt/MemoryModel.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_MEMORY_MODEL -#define QGBA_MEMORY_MODEL +#pragma once #include <QAbstractScrollArea> #include <QFont>

@@ -99,5 +98,3 @@ int m_currentBank;

}; } - -#endif
M src/platform/qt/MemorySearch.hsrc/platform/qt/MemorySearch.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_MEMORY_SEARCH -#define QGBA_MEMORY_SEARCH +#pragma once #include <memory>

@@ -45,5 +44,3 @@ QByteArray m_string;

}; } - -#endif
M src/platform/qt/MemoryView.hsrc/platform/qt/MemoryView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_MEMORY_VIEW -#define QGBA_MEMORY_VIEW +#pragma once #include "MemoryModel.h"

@@ -38,5 +37,3 @@ QPair<uint32_t, uint32_t> m_selection;

}; } - -#endif
M src/platform/qt/MessagePainter.hsrc/platform/qt/MessagePainter.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_MESSAGE_PAINTER -#define QGBA_MESSAGE_PAINTER +#pragma once #include <QMutex> #include <QObject>

@@ -43,5 +42,3 @@ qreal m_scaleFactor = 1;

}; } - -#endif
M src/platform/qt/MultiplayerController.hsrc/platform/qt/MultiplayerController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_MULTIPLAYER_CONTROLLER -#define QGBA_MULTIPLAYER_CONTROLLER +#pragma once #include <QMutex> #include <QList>

@@ -64,4 +63,3 @@ QMutex m_lock;

}; } -#endif
M src/platform/qt/ObjView.cppsrc/platform/qt/ObjView.cpp

@@ -64,7 +64,7 @@

void ObjView::translateIndex(int index) { unsigned x = index % m_objInfo.width; unsigned y = index / m_objInfo.width; - m_ui.tile->selectIndex(x + y * m_objInfo.stride + m_tileOffset); + m_ui.tile->selectIndex(x + y * m_objInfo.stride + m_tileOffset + m_boundary); } #ifdef M_CORE_GBA

@@ -87,19 +87,19 @@ unsigned paletteSet;

unsigned bits; if (GBAObjAttributesAIs256Color(obj->a)) { m_ui.palette->setText("256-color"); - paletteSet = 1; + paletteSet = 3; + m_ui.tile->setBoundary(1024, 1, 3); m_ui.tile->setPalette(0); - m_ui.tile->setPaletteSet(1, 1024, 1536); - palette = 1; - tile = tile / 2 + 1024; + m_boundary = 1024; + palette = 0; + tile /= 2; bits = 8; } else { m_ui.palette->setText(QString::number(palette)); - paletteSet = 0; + paletteSet = 2; + m_ui.tile->setBoundary(2048, 0, 2); m_ui.tile->setPalette(palette); - m_ui.tile->setPaletteSet(0, 2048, 3072); - palette += 16; - tile += 2048; + m_boundary = 2048; bits = 4; } ObjInfo newInfo{

@@ -120,16 +120,16 @@ newInfo.stride = 0x20 >> (GBAObjAttributesAGet256Color(obj->a));

}; m_objInfo = newInfo; m_tileOffset = tile; - mTileCacheSetPalette(m_tileCache, paletteSet); + mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, paletteSet); int i = 0; for (int y = 0; y < height / 8; ++y) { for (int x = 0; x < width / 8; ++x, ++i, ++tile, ++tileBase) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[32 * tileBase], tile, palette); + const color_t* data = mTileCacheGetTileIfDirty(tileCache, &m_tileStatus[16 * tileBase], tile, palette); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, tile, palette)); + m_ui.tiles->setTile(i, mTileCacheGetTile(tileCache, tile, palette)); } } tile += newInfo.stride - width / 8;

@@ -178,6 +178,7 @@ m_ui.objId->setMaximum(39);

const GB* gb = static_cast<const GB*>(m_controller->thread()->core->board); const GBObj* obj = &gb->video.oam.obj[m_objId]; + mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 0); unsigned width = 8; unsigned height = 8; GBRegisterLCDC lcdc = gb->memory.io[REG_LCDC];

@@ -186,6 +187,7 @@ height = 16;

} unsigned tile = obj->tile; m_ui.tiles->setTileCount(width * height / 64); + m_ui.tile->setBoundary(1024, 0, 0); m_ui.tiles->setMinimumSize(QSize(width, height) * m_ui.magnification->value()); m_ui.tiles->resize(QSize(width, height) * m_ui.magnification->value()); unsigned palette = 0;

@@ -214,18 +216,17 @@ force = true;

} m_objInfo = newInfo; m_tileOffset = tile; + m_boundary = 1024; int i = 0; - mTileCacheSetPalette(m_tileCache, 0); m_ui.tile->setPalette(palette); - m_ui.tile->setPaletteSet(0, 512, 1024); for (int y = 0; y < height / 8; ++y, ++i) { unsigned t = tile + i; - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[16 * t], t, palette); + const color_t* data = mTileCacheGetTileIfDirty(tileCache, &m_tileStatus[8 * t], t, palette); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, t, palette)); + m_ui.tiles->setTile(i, mTileCacheGetTile(tileCache, t, palette)); } }

@@ -248,7 +249,6 @@ #endif

#ifdef USE_PNG void ObjView::exportObj() { - CoreController::Interrupter interrupter(m_controller); QString filename = GBAApp::app()->getSaveFileName(this, tr("Export sprite"), tr("Portable Network Graphics (*.png)")); VFile* vf = VFileDevice::open(filename, O_WRONLY | O_CREAT | O_TRUNC);

@@ -257,21 +257,18 @@ LOG(QT, ERROR) << tr("Failed to open output PNG file: %1").arg(filename);

return; } - mTileCacheSetPalette(m_tileCache, m_objInfo.paletteSet); + CoreController::Interrupter interrupter(m_controller); png_structp png = PNGWriteOpen(vf); png_infop info = PNGWriteHeader8(png, m_objInfo.width * 8, m_objInfo.height * 8); - const uint16_t* rawPalette = mTileCacheGetPalette(m_tileCache, m_objInfo.paletteId); + mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, m_objInfo.paletteSet); + const color_t* rawPalette = mTileCacheGetPalette(tileCache, m_objInfo.paletteId); unsigned colors = 1 << m_objInfo.bits; uint32_t palette[256]; - for (unsigned c = 0; c < colors && c < 256; ++c) { - uint16_t color = rawPalette[c]; - palette[c] = M_R8(rawPalette[c]); - palette[c] |= M_G8(rawPalette[c]) << 8; - palette[c] |= M_B8(rawPalette[c]) << 16; - if (c) { - palette[c] |= 0xFF000000; - } + + palette[0] = rawPalette[0]; + for (unsigned c = 1; c < colors && c < 256; ++c) { + palette[c] = rawPalette[c] | 0xFF000000; } PNGWritePalette(png, info, palette, colors);

@@ -279,7 +276,7 @@ uint8_t* buffer = new uint8_t[m_objInfo.width * m_objInfo.height * 8 * 8];

unsigned t = m_objInfo.tile; for (int y = 0; y < m_objInfo.height; ++y) { for (int x = 0; x < m_objInfo.width; ++x, ++t) { - compositeTile(t, static_cast<void*>(buffer), m_objInfo.width * 8, x * 8, y * 8, m_objInfo.bits); + compositeTile(static_cast<const void*>(mTileCacheGetVRAM(tileCache, t)), reinterpret_cast<color_t*>(buffer), m_objInfo.width * 8, x * 8, y * 8, m_objInfo.bits); } t += m_objInfo.stride - m_objInfo.width; }
M src/platform/qt/ObjView.hsrc/platform/qt/ObjView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_OBJ_VIEW -#define QGBA_OBJ_VIEW +#pragma once #include "AssetView.h"

@@ -57,8 +56,7 @@ bool operator!=(const ObjInfo&);

} m_objInfo = {}; int m_tileOffset; + int m_boundary; }; } - -#endif
M src/platform/qt/Override.hsrc/platform/qt/Override.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_OVERRIDE -#define QGBA_OVERRIDE +#pragma once struct Configuration; struct mCore;

@@ -21,5 +20,3 @@ virtual void save(struct Configuration*) const = 0;

}; } - -#endif
M src/platform/qt/OverrideView.cppsrc/platform/qt/OverrideView.cpp

@@ -51,6 +51,7 @@ if (s_gbModelList.isEmpty()) {

// NB: Keep in sync with OverrideView.ui s_gbModelList.append(GB_MODEL_AUTODETECT); s_gbModelList.append(GB_MODEL_DMG); + s_gbModelList.append(GB_MODEL_SGB); s_gbModelList.append(GB_MODEL_CGB); s_gbModelList.append(GB_MODEL_AGB); }

@@ -65,30 +66,24 @@ m_ui.hwTilt->setEnabled(!enabled);

m_ui.hwRumble->setEnabled(!enabled); }); - connect(m_ui.savetype, &QComboBox::currentTextChanged, this, &OverrideView::updateOverrides); - connect(m_ui.hwAutodetect, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwRTC, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwGyro, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwLight, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwTilt, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwRumble, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - connect(m_ui.hwGBPlayer, &QAbstractButton::clicked, this, &OverrideView::updateOverrides); - - connect(m_ui.gbModel, &QComboBox::currentTextChanged, this, &OverrideView::updateOverrides); - connect(m_ui.mbc, &QComboBox::currentTextChanged, this, &OverrideView::updateOverrides); - m_colorPickers[0] = ColorPicker(m_ui.color0, QColor(0xF8, 0xF8, 0xF8)); m_colorPickers[1] = ColorPicker(m_ui.color1, QColor(0xA8, 0xA8, 0xA8)); m_colorPickers[2] = ColorPicker(m_ui.color2, QColor(0x50, 0x50, 0x50)); m_colorPickers[3] = ColorPicker(m_ui.color3, QColor(0x00, 0x00, 0x00)); - for (int colorId = 0; colorId < 4; ++colorId) { + m_colorPickers[4] = ColorPicker(m_ui.color4, QColor(0xF8, 0xF8, 0xF8)); + m_colorPickers[5] = ColorPicker(m_ui.color5, QColor(0xA8, 0xA8, 0xA8)); + m_colorPickers[6] = ColorPicker(m_ui.color6, QColor(0x50, 0x50, 0x50)); + m_colorPickers[7] = ColorPicker(m_ui.color7, QColor(0x00, 0x00, 0x00)); + m_colorPickers[8] = ColorPicker(m_ui.color8, QColor(0xF8, 0xF8, 0xF8)); + m_colorPickers[9] = ColorPicker(m_ui.color9, QColor(0xA8, 0xA8, 0xA8)); + m_colorPickers[10] = ColorPicker(m_ui.color10, QColor(0x50, 0x50, 0x50)); + m_colorPickers[11] = ColorPicker(m_ui.color11, QColor(0x00, 0x00, 0x00)); + for (int colorId = 0; colorId < 12; ++colorId) { connect(&m_colorPickers[colorId], &ColorPicker::colorChanged, this, [this, colorId](const QColor& color) { - m_gbColors[colorId] = color.rgb(); - updateOverrides(); + m_gbColors[colorId] = color.rgb() | 0xFF000000; }); } - connect(m_ui.tabWidget, &QTabWidget::currentChanged, this, &OverrideView::updateOverrides); #ifndef M_CORE_GBA m_ui.tabWidget->removeTab(m_ui.tabWidget->indexOf(m_ui.tabGBA)); #endif

@@ -98,28 +93,32 @@ #endif

connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &OverrideView::saveOverride); connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &QWidget::close); - m_ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(false); } void OverrideView::setController(std::shared_ptr<CoreController> controller) { m_controller = controller; - gameStarted(); + connect(controller.get(), &CoreController::started, this, &OverrideView::gameStarted); connect(controller.get(), &CoreController::stopping, this, &OverrideView::gameStopped); - if (m_override) { - m_controller->setOverride(std::move(m_override)); - } else { - m_controller->clearOverride(); - } + updateOverrides(); } void OverrideView::saveOverride() { - if (!m_config || !m_controller) { + if (!m_controller) { + m_savePending = true; return; } - m_config->saveOverride(*m_controller->override()); + + Override* override = m_controller->override(); + if (!override) { + return; + } + m_config->saveOverride(*override); } void OverrideView::updateOverrides() { + if (!m_controller) { + return; + } #ifdef M_CORE_GBA if (m_ui.tabWidget->currentWidget() == m_ui.tabGBA) { std::unique_ptr<GBAOverride> gba(new GBAOverride);

@@ -157,12 +156,11 @@ if (ok) {

gba->override.idleLoop = parsedIdleLoop; } - if (gba->override.savetype != SAVEDATA_AUTODETECT || gba->override.hardware != HW_NO_OVERRIDE || gba->override.idleLoop != IDLE_LOOP_NONE) { - m_override = std::move(gba); + m_controller->setOverride(std::move(gba)); } else { - m_override.reset(); + m_controller->clearOverride(); } } #endif

@@ -171,16 +169,17 @@ if (m_ui.tabWidget->currentWidget() == m_ui.tabGB) {

std::unique_ptr<GBOverride> gb(new GBOverride); gb->override.mbc = s_mbcList[m_ui.mbc->currentIndex()]; gb->override.model = s_gbModelList[m_ui.gbModel->currentIndex()]; - gb->override.gbColors[0] = m_gbColors[0]; - gb->override.gbColors[1] = m_gbColors[1]; - gb->override.gbColors[2] = m_gbColors[2]; - gb->override.gbColors[3] = m_gbColors[3]; + bool hasColor = false; + for (int i = 0; i < 12; ++i) { + gb->override.gbColors[i] = m_gbColors[i]; + hasColor = hasColor || (m_gbColors[i] & 0xFF000000); + } bool hasOverride = gb->override.mbc != GB_MBC_AUTODETECT || gb->override.model != GB_MODEL_AUTODETECT; - hasOverride = hasOverride || (m_gbColors[0] | m_gbColors[1] | m_gbColors[2] | m_gbColors[3]); + hasOverride = hasOverride || hasColor; if (hasOverride) { - m_override = std::move(gb); + m_controller->setOverride(std::move(gb)); } else { - m_override.reset(); + m_controller->clearOverride(); } } #endif

@@ -191,7 +190,6 @@ CoreController::Interrupter interrupter(m_controller);

mCoreThread* thread = m_controller->thread(); m_ui.tabWidget->setEnabled(false); - m_ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(true); switch (thread->core->platform(thread->core)) { #ifdef M_CORE_GBA

@@ -236,6 +234,11 @@ #endif

case PLATFORM_NONE: break; } + + if (m_savePending) { + m_savePending = false; + saveOverride(); + } } void OverrideView::gameStopped() {

@@ -243,10 +246,7 @@ m_controller.reset();

m_ui.tabWidget->setEnabled(true); m_ui.savetype->setCurrentIndex(0); m_ui.idleLoop->clear(); - m_ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(false); m_ui.mbc->setCurrentIndex(0); m_ui.gbModel->setCurrentIndex(0); - - updateOverrides(); }
M src/platform/qt/OverrideView.hsrc/platform/qt/OverrideView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_OVERRIDE_VIEW -#define QGBA_OVERRIDE_VIEW +#pragma once #include <QDialog>

@@ -47,12 +46,12 @@ private:

Ui::OverrideView m_ui; std::shared_ptr<CoreController> m_controller; - std::unique_ptr<Override> m_override; ConfigController* m_config; + bool m_savePending = false; #ifdef M_CORE_GB - uint32_t m_gbColors[4]{}; - ColorPicker m_colorPickers[4]; + uint32_t m_gbColors[12]{}; + ColorPicker m_colorPickers[12]; static QList<enum GBModel> s_gbModelList; static QList<enum GBMemoryBankControllerType> s_mbcList;

@@ -60,5 +59,3 @@ #endif

}; } - -#endif
M src/platform/qt/OverrideView.uisrc/platform/qt/OverrideView.ui

@@ -255,6 +255,11 @@ </property>

</item> <item> <property name="text"> + <string>Super Game Boy (SGB)</string> + </property> + </item> + <item> + <property name="text"> <string>Game Boy Color (CGB)</string> </property> </item>

@@ -339,7 +344,7 @@ </item>

<item row="2" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> - <string>Colors</string> + <string>Background Colors</string> </property> </widget> </item>

@@ -404,6 +409,180 @@ </widget>

</item> <item> <widget class="QFrame" name="color3"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Sprite Colors 1</string> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Sprite Colors 2</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QFrame" name="color4"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color5"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color6"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color7"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + </layout> + </item> + <item row="4" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QFrame" name="color8"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color9"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color10"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color11"> <property name="minimumSize"> <size> <width>30</width>
M src/platform/qt/PaletteView.hsrc/platform/qt/PaletteView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_PALETTE_VIEW -#define QGBA_PALETTE_VIEW +#pragma once #include <QWidget>

@@ -40,5 +39,3 @@ std::shared_ptr<CoreController> m_controller;

}; } - -#endif
M src/platform/qt/PrinterView.hsrc/platform/qt/PrinterView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_PRINTER_VIEW -#define QGBA_PRINTER_VIEW +#pragma once #include <QDialog> #include <QPixmap>

@@ -46,5 +45,3 @@ std::shared_ptr<CoreController> m_controller;

}; } - -#endif
M src/platform/qt/ROMInfo.hsrc/platform/qt/ROMInfo.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_ROM_INFO -#define QGBA_ROM_INFO +#pragma once #include <QWidget>

@@ -27,5 +26,3 @@ Ui::ROMInfo m_ui;

}; } - -#endif
M src/platform/qt/SavestateButton.hsrc/platform/qt/SavestateButton.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SAVESTATE_BUTTON -#define QGBA_SAVESTATE_BUTTON +#pragma once #include <QAbstractButton>

@@ -19,5 +18,3 @@ virtual void paintEvent(QPaintEvent*) override;

}; } - -#endif
M src/platform/qt/SensorView.cppsrc/platform/qt/SensorView.cpp

@@ -63,10 +63,10 @@ void SensorView::setController(std::shared_ptr<CoreController> controller) {

m_controller = controller; connect(m_ui.timeNoOverride, &QAbstractButton::clicked, controller.get(), &CoreController::setRealTime); connect(m_ui.timeFixed, &QRadioButton::clicked, [controller, this] () { - controller->setFixedTime(m_ui.time->dateTime()); + controller->setFixedTime(m_ui.time->dateTime().toUTC()); }); connect(m_ui.timeFakeEpoch, &QRadioButton::clicked, [controller, this] () { - controller->setFakeEpoch(m_ui.time->dateTime()); + controller->setFakeEpoch(m_ui.time->dateTime().toUTC()); }); m_ui.timeButtons->checkedButton()->clicked();
M src/platform/qt/SensorView.hsrc/platform/qt/SensorView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SENSOR_VIEW -#define QGBA_SENSOR_VIEW +#pragma once #include <QTimer> #include <QDialog>

@@ -53,5 +52,3 @@ void jiggerer(QAbstractButton*, void (InputController::*)(int));

}; } - -#endif
M src/platform/qt/SensorView.uisrc/platform/qt/SensorView.ui

@@ -96,9 +96,6 @@ </property>

<property name="displayFormat"> <string>MM/dd/yy hh:mm:ss AP</string> </property> - <property name="timeSpec"> - <enum>Qt::UTC</enum> - </property> </widget> </item> </layout>
M src/platform/qt/SettingsView.cppsrc/platform/qt/SettingsView.cpp

@@ -19,12 +19,27 @@ #include <mgba/internal/gba/gba.h>

using namespace QGBA; +#ifdef M_CORE_GB +QList<enum GBModel> SettingsView::s_gbModelList; +#endif + SettingsView::SettingsView(ConfigController* controller, InputController* inputController, QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) , m_controller(controller) , m_input(inputController) { m_ui.setupUi(this); + +#ifdef M_CORE_GB + if (s_gbModelList.isEmpty()) { + // NB: Keep in sync with SettingsView.ui + s_gbModelList.append(GB_MODEL_AUTODETECT); + s_gbModelList.append(GB_MODEL_DMG); + s_gbModelList.append(GB_MODEL_SGB); + s_gbModelList.append(GB_MODEL_CGB); + s_gbModelList.append(GB_MODEL_AGB); + } +#endif reloadConfig();

@@ -159,30 +174,47 @@ });

connect(m_ui.gbcBiosBrowse, &QPushButton::clicked, [this]() { selectBios(m_ui.gbcBios); }); + connect(m_ui.sgbBiosBrowse, &QPushButton::clicked, [this]() { + selectBios(m_ui.sgbBios); + }); QList<QColor> defaultColors; defaultColors.append(QColor(0xF8, 0xF8, 0xF8)); defaultColors.append(QColor(0xA8, 0xA8, 0xA8)); defaultColors.append(QColor(0x50, 0x50, 0x50)); defaultColors.append(QColor(0x00, 0x00, 0x00)); - bool ok; - if (m_controller->getOption("gb.pal[0]").toUInt(&ok) || ok) { - defaultColors[0] = QColor::fromRgb(m_controller->getOption("gb.pal[0]").toUInt()); - } - if (m_controller->getOption("gb.pal[1]").toUInt(&ok) || ok) { - defaultColors[1] = QColor::fromRgb(m_controller->getOption("gb.pal[1]").toUInt()); - } - if (m_controller->getOption("gb.pal[2]").toUInt(&ok) || ok) { - defaultColors[2] = QColor::fromRgb(m_controller->getOption("gb.pal[2]").toUInt()); - } - if (m_controller->getOption("gb.pal[3]").toUInt(&ok) || ok) { - defaultColors[3] = QColor::fromRgb(m_controller->getOption("gb.pal[3]").toUInt()); - } - m_colorPickers[0] = ColorPicker(m_ui.color0, defaultColors[0]); - m_colorPickers[1] = ColorPicker(m_ui.color1, defaultColors[1]); - m_colorPickers[2] = ColorPicker(m_ui.color2, defaultColors[2]); - m_colorPickers[3] = ColorPicker(m_ui.color3, defaultColors[3]); - for (int colorId = 0; colorId < 4; ++colorId) { + defaultColors.append(QColor(0xF8, 0xF8, 0xF8)); + defaultColors.append(QColor(0xA8, 0xA8, 0xA8)); + defaultColors.append(QColor(0x50, 0x50, 0x50)); + defaultColors.append(QColor(0x00, 0x00, 0x00)); + defaultColors.append(QColor(0xF8, 0xF8, 0xF8)); + defaultColors.append(QColor(0xA8, 0xA8, 0xA8)); + defaultColors.append(QColor(0x50, 0x50, 0x50)); + defaultColors.append(QColor(0x00, 0x00, 0x00)); + QList<QWidget*> colors{ + m_ui.color0, + m_ui.color1, + m_ui.color2, + m_ui.color3, + m_ui.color4, + m_ui.color5, + m_ui.color6, + m_ui.color7, + m_ui.color8, + m_ui.color9, + m_ui.color10, + m_ui.color11 + }; + for (int colorId = 0; colorId < 12; ++colorId) { + bool ok; + uint color = m_controller->getOption(QString("gb.pal[%0]").arg(colorId)).toUInt(&ok); + if (ok) { + defaultColors[colorId] = QColor::fromRgb(color); + m_gbColors[colorId] = color | 0xFF000000; + } else { + m_gbColors[colorId] = defaultColors[colorId].rgb() & ~0xFF000000; + } + m_colorPickers[colorId] = ColorPicker(colors[colorId], defaultColors[colorId]); connect(&m_colorPickers[colorId], &ColorPicker::colorChanged, this, [this, colorId](const QColor& color) { m_gbColors[colorId] = color.rgb(); });

@@ -190,6 +222,7 @@ }

#else m_ui.gbBiosBrowse->hide(); m_ui.gbcBiosBrowse->hide(); + m_ui.sgbBiosBrowse->hide(); m_ui.gb->hide(); #endif

@@ -261,6 +294,8 @@ void SettingsView::updateConfig() {

saveSetting("gba.bios", m_ui.gbaBios); saveSetting("gb.bios", m_ui.gbBios); saveSetting("gbc.bios", m_ui.gbcBios); + saveSetting("sgb.bios", m_ui.sgbBios); + saveSetting("sgb.borders", m_ui.sgbBorders); saveSetting("useBios", m_ui.useBios); saveSetting("skipBios", m_ui.skipBios); saveSetting("audioBuffers", m_ui.audioBufferSize);

@@ -269,6 +304,7 @@ saveSetting("videoSync", m_ui.videoSync);

saveSetting("audioSync", m_ui.audioSync); saveSetting("frameskip", m_ui.frameskip); saveSetting("fpsTarget", m_ui.fpsTarget); + saveSetting("autofireThreshold", m_ui.autofireThreshold); saveSetting("lockAspectRatio", m_ui.lockAspectRatio); saveSetting("lockIntegerScaling", m_ui.lockIntegerScaling); saveSetting("volume", m_ui.volume);

@@ -345,12 +381,25 @@ m_controller->setQtOption("language", language.bcp47Name());

emit languageChanged(); } - if (m_gbColors[0] | m_gbColors[1] | m_gbColors[2] | m_gbColors[3]) { - m_controller->setOption("gb.pal[0]", m_gbColors[0]); - m_controller->setOption("gb.pal[1]", m_gbColors[1]); - m_controller->setOption("gb.pal[2]", m_gbColors[2]); - m_controller->setOption("gb.pal[3]", m_gbColors[3]); +#ifdef M_CORE_GB + GBModel modelGB = s_gbModelList[m_ui.gbModel->currentIndex()]; + m_controller->setOption("gb.model", GBModelToName(modelGB)); + + GBModel modelSGB = s_gbModelList[m_ui.sgbModel->currentIndex()]; + m_controller->setOption("sgb.model", GBModelToName(modelSGB)); + + GBModel modelCGB = s_gbModelList[m_ui.cgbModel->currentIndex()]; + m_controller->setOption("cgb.model", GBModelToName(modelCGB)); + + for (int colorId = 0; colorId < 12; ++colorId) { + if (!(m_gbColors[colorId] & 0xFF000000)) { + continue; + } + QString color = QString("gb.pal[%0]").arg(colorId); + m_controller->setOption(color.toUtf8().constData(), m_gbColors[colorId] & ~0xFF000000); + } +#endif m_controller->write();

@@ -367,6 +416,8 @@ loadSetting("bios", m_ui.gbaBios);

loadSetting("gba.bios", m_ui.gbaBios); loadSetting("gb.bios", m_ui.gbBios); loadSetting("gbc.bios", m_ui.gbcBios); + loadSetting("sgb.bios", m_ui.sgbBios); + loadSetting("sgb.borders", m_ui.sgbBorders, true); loadSetting("useBios", m_ui.useBios); loadSetting("skipBios", m_ui.skipBios); loadSetting("audioBuffers", m_ui.audioBufferSize);

@@ -375,6 +426,7 @@ loadSetting("videoSync", m_ui.videoSync);

loadSetting("audioSync", m_ui.audioSync); loadSetting("frameskip", m_ui.frameskip); loadSetting("fpsTarget", m_ui.fpsTarget); + loadSetting("autofireThreshold", m_ui.autofireThreshold); loadSetting("lockAspectRatio", m_ui.lockAspectRatio); loadSetting("lockIntegerScaling", m_ui.lockIntegerScaling); loadSetting("volume", m_ui.volume);

@@ -430,6 +482,29 @@ }

m_ui.saveStateScreenshot->setChecked(saveState & SAVESTATE_SCREENSHOT); m_ui.saveStateSave->setChecked(saveState & SAVESTATE_SAVEDATA); m_ui.saveStateCheats->setChecked(saveState & SAVESTATE_CHEATS); + +#ifdef M_CORE_GB + QString modelGB = m_controller->getOption("gb.model"); + if (!modelGB.isNull()) { + GBModel model = GBNameToModel(modelGB.toUtf8().constData()); + int index = s_gbModelList.indexOf(model); + m_ui.gbModel->setCurrentIndex(index >= 0 ? index : 0); + } + + QString modelSGB = m_controller->getOption("sgb.model"); + if (!modelSGB.isNull()) { + GBModel model = GBNameToModel(modelSGB.toUtf8().constData()); + int index = s_gbModelList.indexOf(model); + m_ui.sgbModel->setCurrentIndex(index >= 0 ? index : 0); + } + + QString modelCGB = m_controller->getOption("cgb.model"); + if (!modelCGB.isNull()) { + GBModel model = GBNameToModel(modelCGB.toUtf8().constData()); + int index = s_gbModelList.indexOf(model); + m_ui.cgbModel->setCurrentIndex(index >= 0 ? index : 0); + } +#endif } void SettingsView::saveSetting(const char* key, const QAbstractButton* field) {

@@ -462,9 +537,9 @@ m_controller->setOption(key, field);

m_controller->updateOption(key); } -void SettingsView::loadSetting(const char* key, QAbstractButton* field) { +void SettingsView::loadSetting(const char* key, QAbstractButton* field, bool defaultVal) { QString option = loadSetting(key); - field->setChecked(!option.isNull() && option != "0"); + field->setChecked(option.isNull() ? defaultVal : option != "0"); } void SettingsView::loadSetting(const char* key, QComboBox* field) {
M src/platform/qt/SettingsView.hsrc/platform/qt/SettingsView.h

@@ -3,14 +3,17 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SETTINGS_VIEW -#define QGBA_SETTINGS_VIEW +#pragma once #include <QDialog> #include "ColorPicker.h" #include <mgba/core/core.h> + +#ifdef M_CORE_GB +#include <mgba/gb/interface.h> +#endif #include "ui_SettingsView.h"

@@ -53,8 +56,12 @@ InputController* m_input;

ShortcutView* m_shortcutView; ShortcutView* m_keyView; ShaderSelector* m_shader = nullptr; - uint32_t m_gbColors[4]{}; - ColorPicker m_colorPickers[4]; + +#ifdef M_CORE_GB + uint32_t m_gbColors[12]{}; + ColorPicker m_colorPickers[12]; + static QList<enum GBModel> s_gbModelList; +#endif void saveSetting(const char* key, const QAbstractButton*); void saveSetting(const char* key, const QComboBox*);

@@ -64,7 +71,7 @@ void saveSetting(const char* key, const QSlider*);

void saveSetting(const char* key, const QSpinBox*); void saveSetting(const char* key, const QVariant&); - void loadSetting(const char* key, QAbstractButton*); + void loadSetting(const char* key, QAbstractButton*, bool defaultVal = false); void loadSetting(const char* key, QComboBox*); void loadSetting(const char* key, QDoubleSpinBox*); void loadSetting(const char* key, QLineEdit*);

@@ -74,5 +81,3 @@ QString loadSetting(const char* key);

}; } - -#endif
M src/platform/qt/SettingsView.uisrc/platform/qt/SettingsView.ui

@@ -6,8 +6,8 @@ <property name="geometry">

<rect> <x>0</x> <y>0</y> - <width>650</width> - <height>454</height> + <width>588</width> + <height>488</height> </rect> </property> <property name="sizePolicy">

@@ -545,28 +545,28 @@ </widget>

</item> </layout> </item> - <item row="1" column="0" colspan="2"> + <item row="2" column="0" colspan="2"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="2" column="1"> + <item row="3" column="1"> <widget class="QCheckBox" name="rewind"> <property name="text"> <string>Enable rewind</string> </property> </widget> </item> - <item row="3" column="0"> + <item row="4" column="0"> <widget class="QLabel" name="label_8"> <property name="text"> <string>Rewind history:</string> </property> </widget> </item> - <item row="3" column="1"> + <item row="4" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_13"> <item> <widget class="QSpinBox" name="rewindCapacity">

@@ -584,21 +584,21 @@ </widget>

</item> </layout> </item> - <item row="5" column="0" colspan="2"> + <item row="6" column="0" colspan="2"> <widget class="Line" name="line_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="6" column="0"> + <item row="7" column="0"> <widget class="QLabel" name="label_15"> <property name="text"> <string>Idle loops:</string> </property> </widget> </item> - <item row="6" column="1"> + <item row="7" column="1"> <widget class="QComboBox" name="idleOptimization"> <item> <property name="text">

@@ -617,21 +617,21 @@ </property>

</item> </widget> </item> - <item row="8" column="0" colspan="2"> + <item row="9" column="0" colspan="2"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="9" column="0"> + <item row="10" column="0"> <widget class="QLabel" name="label_24"> <property name="text"> <string>Savestate extra data:</string> </property> </widget> </item> - <item row="9" column="1"> + <item row="10" column="1"> <widget class="QCheckBox" name="saveStateScreenshot"> <property name="text"> <string>Screenshot</string>

@@ -641,7 +641,7 @@ <bool>true</bool>

</property> </widget> </item> - <item row="10" column="1"> + <item row="11" column="1"> <widget class="QCheckBox" name="saveStateSave"> <property name="text"> <string>Save data</string>

@@ -651,7 +651,7 @@ <bool>true</bool>

</property> </widget> </item> - <item row="11" column="1"> + <item row="12" column="1"> <widget class="QCheckBox" name="saveStateCheats"> <property name="text"> <string>Cheat codes</string>

@@ -661,14 +661,14 @@ <bool>true</bool>

</property> </widget> </item> - <item row="13" column="0"> + <item row="14" column="0"> <widget class="QLabel" name="label_25"> <property name="text"> <string>Load extra data:</string> </property> </widget> </item> - <item row="13" column="1"> + <item row="14" column="1"> <widget class="QCheckBox" name="loadStateScreenshot"> <property name="text"> <string>Screenshot</string>

@@ -678,28 +678,28 @@ <bool>true</bool>

</property> </widget> </item> - <item row="14" column="1"> + <item row="15" column="1"> <widget class="QCheckBox" name="loadStateSave"> <property name="text"> <string>Save data</string> </property> </widget> </item> - <item row="15" column="1"> + <item row="16" column="1"> <widget class="QCheckBox" name="loadStateCheats"> <property name="text"> <string>Cheat codes</string> </property> </widget> </item> - <item row="12" column="0" colspan="2"> + <item row="13" column="0" colspan="2"> <widget class="Line" name="line_9"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QCheckBox" name="rewindSave"> <property name="text"> <string>Rewind affects save data</string>

@@ -709,13 +709,30 @@ <bool>true</bool>

</property> </widget> </item> - <item row="7" column="1"> + <item row="8" column="1"> <widget class="QCheckBox" name="preload"> <property name="text"> <string>Preload entire ROM into memory</string> </property> </widget> </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_31"> + <property name="text"> + <string>Autofire interval:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="autofireThreshold"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>60</number> + </property> + </widget> + </item> </layout> </widget> <widget class="QWidget" name="bios">

@@ -748,7 +765,7 @@ </widget>

</item> </layout> </item> - <item row="3" column="1"> + <item row="4" column="1"> <widget class="QCheckBox" name="useBios"> <property name="text"> <string>Use BIOS file if found</string>

@@ -758,14 +775,14 @@ <bool>true</bool>

</property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QCheckBox" name="skipBios"> <property name="text"> <string>Skip BIOS intro</string> </property> </widget> </item> - <item row="2" column="1"> + <item row="3" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_8"> <item> <widget class="QLineEdit" name="gbaBios">

@@ -786,21 +803,21 @@ </widget>

</item> </layout> </item> - <item row="2" column="0"> + <item row="3" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>GBA BIOS file:</string> </property> </widget> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> <string>GBC BIOS file:</string> </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_30"> <item> <widget class="QLineEdit" name="gbcBios">

@@ -821,6 +838,34 @@ </widget>

</item> </layout> </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_30"> + <property name="text"> + <string>SGB BIOS file:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <item> + <widget class="QLineEdit" name="sgbBios"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="sgbBiosBrowse"> + <property name="text"> + <string>Browse</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> <widget class="QWidget" name="paths">

@@ -1016,22 +1061,16 @@ </item>

</layout> </widget> <widget class="QWidget" name="gb"> - <layout class="QFormLayout" name="formLayout"> + <layout class="QFormLayout" name="formLayout_1"> <item row="0" column="0"> <widget class="QLabel" name="label_29"> - <property name="enabled"> - <bool>false</bool> - </property> <property name="text"> - <string>Default model</string> + <string>Game Boy model</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QComboBox" name="gbModel"> - <property name="enabled"> - <bool>false</bool> - </property> <item> <property name="text"> <string>Autodetect</string>

@@ -1044,6 +1083,11 @@ </property>

</item> <item> <property name="text"> + <string>Super Game Boy (SGB)</string> + </property> + </item> + <item> + <property name="text"> <string>Game Boy Color (CGB)</string> </property> </item>

@@ -1055,13 +1099,92 @@ </item>

</widget> </item> <item row="1" column="0"> - <widget class="QLabel" name="label_28"> + <widget class="QLabel" name="label_32"> <property name="text"> - <string>Default colors</string> + <string>Super Game Boy model</string> </property> </widget> </item> <item row="1" column="1"> + <widget class="QComboBox" name="sgbModel"> + <item> + <property name="text"> + <string>Autodetect</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy (DMG)</string> + </property> + </item> + <item> + <property name="text"> + <string>Super Game Boy (SGB)</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy Color (CGB)</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy Advance (AGB)</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_33"> + <property name="text"> + <string>Game Boy Color model</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="cgbModel"> + <item> + <property name="text"> + <string>Autodetect</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy (DMG)</string> + </property> + </item> + <item> + <property name="text"> + <string>Super Game Boy (SGB)</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy Color (CGB)</string> + </property> + </item> + <item> + <property name="text"> + <string>Game Boy Advance (AGB)</string> + </property> + </item> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="Line" name="line_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_28"> + <property name="text"> + <string>Default BG colors:</string> + </property> + </widget> + </item> + <item row="4" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_9"> <item> <widget class="QFrame" name="color0">

@@ -1141,27 +1264,208 @@ </widget>

</item> </layout> </item> - <item row="2" column="0" colspan="2"> + <item row="5" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_15"> + <item> + <widget class="QFrame" name="color4"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color5"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color6"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color7"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + </layout> + </item> + <item row="7" column="1"> + <widget class="QCheckBox" name="sgbBorders"> + <property name="text"> + <string>Super Game Boy borders</string> + </property> + </widget> + </item> + <item row="8" column="0" colspan="2"> <widget class="Line" name="line_11"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="3" column="0"> + <item row="9" column="0"> <widget class="QLabel" name="label_27"> <property name="text"> - <string>Camera driver</string> + <string>Camera driver:</string> </property> </widget> </item> - <item row="3" column="1"> + <item row="9" column="1"> <widget class="QComboBox" name="cameraDriver"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> + </property> + </widget> + </item> + <item row="6" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_37"> + <item> + <widget class="QFrame" name="color8"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color9"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color10"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="color11"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + </widget> + </item> + </layout> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_69"> + <property name="text"> + <string>Default sprite colors 1:</string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_70"> + <property name="text"> + <string>Default sprite colors 2:</string> </property> </widget> </item>
M src/platform/qt/ShaderSelector.hsrc/platform/qt/ShaderSelector.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SHADER_SELECTOR_H -#define QGBA_SHADER_SELECTOR_H +#pragma once #if defined(BUILD_GL) || defined(BUILD_GLES)

@@ -58,5 +57,3 @@

} #endif - -#endif
M src/platform/qt/ShortcutController.hsrc/platform/qt/ShortcutController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SHORTCUT_MODEL -#define QGBA_SHORTCUT_MODEL +#pragma once #include "GamepadAxisEvent.h"

@@ -144,5 +143,3 @@ const InputProfile* m_profile = nullptr;

}; } - -#endif
M src/platform/qt/ShortcutView.hsrc/platform/qt/ShortcutView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SHORTCUT_VIEW -#define QGBA_SHORTCUT_VIEW +#pragma once #include "GamepadAxisEvent.h" #include "InputIndex.h"

@@ -49,5 +48,3 @@ InputController* m_input = nullptr;

}; } - -#endif
M src/platform/qt/Swatch.cppsrc/platform/qt/Swatch.cpp

@@ -42,6 +42,14 @@ M_B8(color));

updateFill(index); } +void Swatch::setColor(int index, uint32_t color) { + m_colors[index].setRgb( + (color >> 0) & 0xFF, + (color >> 8) & 0xFF, + (color >> 16) & 0xFF); + updateFill(index); +} + void Swatch::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.drawPixmap(QPoint(), m_backing);
M src/platform/qt/Swatch.hsrc/platform/qt/Swatch.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_SWATCH -#define QGBA_SWATCH +#pragma once #include <QColor> #include <QWidget>

@@ -23,6 +22,7 @@ void setSize(int size);

public slots: void setColor(int index, uint16_t); + void setColor(int index, uint32_t); signals: void indexPressed(int index);

@@ -41,5 +41,3 @@ void updateFill(int index);

}; } - -#endif
M src/platform/qt/TilePainter.cppsrc/platform/qt/TilePainter.cpp

@@ -40,14 +40,15 @@ int y = event->y() / m_size;

emit indexPressed(y * (width() / m_size) + x); } -void TilePainter::setTile(int index, const uint16_t* data) { +void TilePainter::setTile(int index, const color_t* data) { QPainter painter(&m_backing); int w = width() / m_size; int x = index % w; int y = index / w; QRect r(x * m_size, y * m_size, m_size, m_size); - QImage tile(reinterpret_cast<const uchar*>(data), 8, 8, QImage::Format_RGB555); - painter.drawImage(r, tile.rgbSwapped()); + QImage tile(reinterpret_cast<const uchar*>(data), 8, 8, QImage::Format_ARGB32); + tile = tile.convertToFormat(QImage::Format_RGB32).rgbSwapped(); + painter.drawImage(r, tile); update(r); }
M src/platform/qt/TilePainter.hsrc/platform/qt/TilePainter.h

@@ -3,12 +3,13 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_TILE_PAINTER -#define QGBA_TILE_PAINTER +#pragma once #include <QColor> #include <QWidget> #include <QVector> + +#include <mgba/core/interface.h> namespace QGBA {

@@ -19,7 +20,7 @@ public:

TilePainter(QWidget* parent = nullptr); public slots: - void setTile(int index, const uint16_t*); + void setTile(int index, const color_t*); void setTileCount(int tiles); void setTileMagnification(int mag);

@@ -38,5 +39,3 @@ int m_tileCount;

}; } - -#endif
M src/platform/qt/TileView.cppsrc/platform/qt/TileView.cpp

@@ -27,38 +27,30 @@

connect(m_ui.tiles, &TilePainter::indexPressed, m_ui.tile, &AssetTile::selectIndex); connect(m_ui.paletteId, &QAbstractSlider::valueChanged, this, &TileView::updatePalette); - int max = 1024; - int boundary = 1024; switch (m_controller->platform()) { #ifdef M_CORE_GBA case PLATFORM_GBA: - max = 3072; - boundary = 2048; + m_ui.tile->setBoundary(2048, 0, 2); break; #endif #ifdef M_CORE_GB case PLATFORM_GB: - max = 1024; - boundary = 512; m_ui.palette256->setEnabled(false); + m_ui.tile->setBoundary(1024, 0, 0); break; #endif default: return; } - m_ui.tile->setPaletteSet(0, boundary, max); connect(m_ui.palette256, &QAbstractButton::toggled, [this](bool selected) { if (selected) { m_ui.paletteId->setValue(0); } - int max = 1024; - int boundary = 1024; switch (m_controller->platform()) { #ifdef M_CORE_GBA case PLATFORM_GBA: - max = 3072 >> selected; - boundary = 2048 >> selected; + m_ui.tile->setBoundary(2048 >> selected, selected, selected + 2); break; #endif #ifdef M_CORE_GB

@@ -68,7 +60,6 @@ #endif

default: break; } - m_ui.tile->setPaletteSet(selected, boundary, max); updateTiles(true); }); connect(m_ui.magnification, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [this]() {

@@ -80,40 +71,42 @@ #ifdef M_CORE_GBA

void TileView::updateTilesGBA(bool force) { if (m_ui.palette256->isChecked()) { m_ui.tiles->setTileCount(1536); - mTileCacheSetPalette(m_tileCache, 1); + mTileCache* cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 1); for (int i = 0; i < 1024; ++i) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[32 * i], i, 0); + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, 0); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, i, 0)); + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, 0)); } } + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 3); for (int i = 1024; i < 1536; ++i) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[32 * i], i, 1); + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 1024, 0); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, i, 1)); + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i - 1024, 0)); } } } else { + mTileCache* cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 0); m_ui.tiles->setTileCount(3072); - mTileCacheSetPalette(m_tileCache, 0); for (int i = 0; i < 2048; ++i) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[32 * i], i, m_paletteId); + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, m_paletteId); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, i, m_paletteId)); + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, m_paletteId)); } } + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 2); for (int i = 2048; i < 3072; ++i) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[32 * i], i, m_paletteId + 16); + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 2048, m_paletteId); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, i, m_paletteId + 16)); + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i - 2048, m_paletteId)); } } }

@@ -125,13 +118,13 @@ void TileView::updateTilesGB(bool force) {

const GB* gb = static_cast<const GB*>(m_controller->thread()->core->board); int count = gb->model >= GB_MODEL_CGB ? 1024 : 512; m_ui.tiles->setTileCount(count); - mTileCacheSetPalette(m_tileCache, 0); + mTileCache* cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 0); for (int i = 0; i < count; ++i) { - const uint16_t* data = mTileCacheGetTileIfDirty(m_tileCache, &m_tileStatus[16 * i], i, m_paletteId); + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[8 * i], i, m_paletteId); if (data) { m_ui.tiles->setTile(i, data); } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(m_tileCache, i, m_paletteId)); + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, m_paletteId)); } } }
M src/platform/qt/TileView.hsrc/platform/qt/TileView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_TILE_VIEW -#define QGBA_TILE_VIEW +#pragma once #include "AssetView.h"

@@ -41,5 +40,3 @@ int m_paletteId = 0;

}; } - -#endif
M src/platform/qt/VFileDevice.hsrc/platform/qt/VFileDevice.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_VFILE_DEVICE -#define QGBA_VFILE_DEVICE +#pragma once #include <QFileDevice>

@@ -41,5 +40,3 @@ VFile* m_vf;

}; } - -#endif
M src/platform/qt/VideoDumper.cppsrc/platform/qt/VideoDumper.cpp

@@ -39,7 +39,7 @@ image = image.rgbSwapped();

} else { #ifdef Q_OS_WIN // Qt's DirectShow plug-in is pretty dang buggy - image = image.mirrored(true); + image = image.mirrored(); #else image = image.copy(); // Create a deep copy of the bits #endif
M src/platform/qt/VideoDumper.hsrc/platform/qt/VideoDumper.h

@@ -3,8 +3,8 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_VIDEO_DUMPER -#define QGBA_VIDEO_DUMPER +#pragma once + #include <QAbstractVideoSurface> namespace QGBA {

@@ -23,5 +23,3 @@ void imageAvailable(const QImage& image);

}; } - -#endif
M src/platform/qt/VideoView.hsrc/platform/qt/VideoView.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_VIDEO_VIEW -#define QGBA_VIDEO_VIEW +#pragma once #ifdef USE_FFMPEG

@@ -117,5 +116,3 @@

} #endif - -#endif
M src/platform/qt/Window.cppsrc/platform/qt/Window.cpp

@@ -36,9 +36,10 @@ #include "InputModel.h"

#include "IOViewer.h" #include "LoadSaveState.h" #include "LogView.h" -#include "MultiplayerController.h" +#include "MapView.h" #include "MemorySearch.h" #include "MemoryView.h" +#include "MultiplayerController.h" #include "OverrideView.h" #include "ObjView.h" #include "PaletteView.h"

@@ -533,6 +534,9 @@ }

if (m_fullscreenOnStart) { enterFullScreen(); m_fullscreenOnStart = false; + } + if (m_display) { + reloadDisplayDriver(); } }

@@ -648,6 +652,9 @@

m_hitUnimplementedBiosCall = false; m_fpsTimer.start(); m_focusCheck.start(); + if (m_display->underMouse()) { + m_screenWidget->setCursor(Qt::BlankCursor); + } CoreController::Interrupter interrupter(m_controller, true); mCore* core = m_controller->thread()->core;

@@ -1134,9 +1141,13 @@

emulationMenu->addSeparator(); m_inputController.inputIndex()->addItem(qMakePair([this]() { - m_controller->setFastForward(true); + if (m_controller) { + m_controller->setFastForward(true); + } }, [this]() { - m_controller->setFastForward(false); + if (m_controller) { + m_controller->setFastForward(false); + } }), tr("Fast forward (held)"), "holdFastForward", emulationMenu)->setShortcut(QKeySequence(Qt::Key_Tab)[0]); QAction* turbo = new QAction(tr("&Fast forward"), emulationMenu);

@@ -1451,6 +1462,11 @@ QAction* tileView = new QAction(tr("View &tiles..."), toolsMenu);

connect(tileView, &QAction::triggered, openControllerTView<TileView>()); m_gameActions.append(tileView); addControlledAction(toolsMenu, tileView, "tileWindow"); + + QAction* mapView = new QAction(tr("View &map..."), toolsMenu); + connect(mapView, &QAction::triggered, openControllerTView<MapView>()); + m_gameActions.append(mapView); + addControlledAction(toolsMenu, mapView, "mapWindow"); QAction* memoryView = new QAction(tr("View memory..."), toolsMenu); connect(memoryView, &QAction::triggered, openControllerTView<MemoryView>());
M src/platform/qt/Window.hsrc/platform/qt/Window.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_WINDOW -#define QGBA_WINDOW +#pragma once #include <QDateTime> #include <QList>

@@ -188,7 +187,9 @@ QList<QString> m_mruFiles;

QMenu* m_mruMenu = nullptr; QMenu* m_videoLayers; QMenu* m_audioChannels; +#if defined(BUILD_GL) || defined(BUILD_GLES) std::unique_ptr<ShaderSelector> m_shaderView; +#endif bool m_fullscreenOnStart = false; QTimer m_focusCheck; bool m_autoresume = false;

@@ -241,5 +242,3 @@ bool m_lockIntegerScaling;

}; } - -#endif
M src/platform/qt/input/InputController.hsrc/platform/qt/input/InputController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_INPUT_CONTROLLER_H -#define QGBA_INPUT_CONTROLLER_H +#pragma once #include "GamepadAxisEvent.h" #include "GamepadHatEvent.h"

@@ -216,5 +215,3 @@ QSet<int> m_pendingEvents;

}; } - -#endif
M src/platform/qt/library/LibraryController.hsrc/platform/qt/library/LibraryController.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LIBRARY_CONTROLLER -#define QGBA_LIBRARY_CONTROLLER +#pragma once #include <memory>

@@ -125,5 +124,3 @@ LibraryTree* m_libraryTree = nullptr;

}; } - -#endif
M src/platform/qt/library/LibraryGrid.hsrc/platform/qt/library/LibraryGrid.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LIBRARY_GRID -#define QGBA_LIBRARY_GRID +#pragma once #include <QListWidget>

@@ -46,5 +45,3 @@ LibraryStyle m_currentStyle;

}; } - -#endif
M src/platform/qt/library/LibraryTree.hsrc/platform/qt/library/LibraryTree.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_LIBRARY_TREE -#define QGBA_LIBRARY_TREE +#pragma once #include <QTreeWidget>

@@ -53,5 +52,3 @@ void resizeAllCols();

}; } - -#endif
M src/platform/qt/ts/mgba-de.tssrc/platform/qt/ts/mgba-de.ts

@@ -72,49 +72,55 @@ </context>

<context> <name>AssetTile</name> <message> - <location filename="../AssetTile.ui" line="12"/> + <location filename="../AssetTile.ui" line="20"/> <source>AssetTile</source> <translation>AssetTile</translation> </message> <message> - <location filename="../AssetTile.ui" line="33"/> + <location filename="../AssetTile.ui" line="41"/> <source>Tile #</source> <translation>Tile #</translation> </message> <message> - <location filename="../AssetTile.ui" line="40"/> + <location filename="../AssetTile.ui" line="48"/> + <location filename="../AssetTile.ui" line="69"/> <source>0</source> <translation>0</translation> </message> <message> - <location filename="../AssetTile.ui" line="54"/> + <location filename="../AssetTile.ui" line="62"/> + <source>Palette #</source> + <translation>Palette #</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="83"/> <source>Address</source> <translation>Adresse</translation> </message> <message> - <location filename="../AssetTile.ui" line="61"/> + <location filename="../AssetTile.ui" line="90"/> <source>0x06000000</source> <translation>0x06000000</translation> </message> <message> - <location filename="../AssetTile.ui" line="100"/> + <location filename="../AssetTile.ui" line="129"/> <source>Red</source> <translation>Rot</translation> </message> <message> - <location filename="../AssetTile.ui" line="107"/> + <location filename="../AssetTile.ui" line="136"/> <source>Green</source> <translation>Grün</translation> </message> <message> - <location filename="../AssetTile.ui" line="114"/> + <location filename="../AssetTile.ui" line="143"/> <source>Blue</source> <translation>Blau</translation> </message> <message> - <location filename="../AssetTile.ui" line="128"/> - <location filename="../AssetTile.ui" line="135"/> - <location filename="../AssetTile.ui" line="142"/> + <location filename="../AssetTile.ui" line="157"/> + <location filename="../AssetTile.ui" line="164"/> + <location filename="../AssetTile.ui" line="171"/> <source>0x00 (00)</source> <translation>0x00 (00)</translation> </message>

@@ -455,6 +461,29 @@ <translation>Max. Zeilen</translation>

</message> </context> <context> + <name>MapView</name> + <message> + <location filename="../MapView.ui" line="14"/> + <source>Maps</source> + <translation>Maps</translation> + </message> + <message> + <location filename="../MapView.ui" line="101"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../MapView.ui" line="114"/> + <source>Magnification</source> + <translation>Vergrößerung</translation> + </message> + <message> + <location filename="../MapView.ui" line="123"/> + <source>Export</source> + <translation>Exportieren</translation> + </message> +</context> +<context> <name>MemorySearch</name> <message> <location filename="../MemorySearch.ui" line="20"/>

@@ -793,7 +822,7 @@ <message>

<location filename="../OverrideView.ui" line="42"/> <location filename="../OverrideView.ui" line="121"/> <location filename="../OverrideView.ui" line="248"/> - <location filename="../OverrideView.ui" line="279"/> + <location filename="../OverrideView.ui" line="284"/> <source>Autodetect</source> <translation>Automatisch erkennen</translation> </message>

@@ -829,7 +858,7 @@ <translation>Speichertyp</translation>

</message> <message> <location filename="../OverrideView.ui" line="126"/> - <location filename="../OverrideView.ui" line="284"/> + <location filename="../OverrideView.ui" line="289"/> <source>None</source> <translation>keiner</translation> </message>

@@ -880,63 +909,88 @@ <translation>Game Boy (DMG)</translation>

</message> <message> <location filename="../OverrideView.ui" line="258"/> + <source>Super Game Boy (SGB)</source> + <translation>Super Game Boy (SGB)</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="263"/> <source>Game Boy Color (CGB)</source> <translation>Game Boy Color (CGB)</translation> </message> <message> - <location filename="../OverrideView.ui" line="263"/> + <location filename="../OverrideView.ui" line="268"/> <source>Game Boy Advance (AGB)</source> <translation>Game Boy Advance (AGB)</translation> </message> <message> - <location filename="../OverrideView.ui" line="271"/> + <location filename="../OverrideView.ui" line="276"/> <source>Memory bank controller</source> <translation>Speicherbank-Controller</translation> </message> <message> - <location filename="../OverrideView.ui" line="289"/> + <location filename="../OverrideView.ui" line="294"/> <source>MBC1</source> <translation>MBC1</translation> </message> <message> - <location filename="../OverrideView.ui" line="294"/> + <location filename="../OverrideView.ui" line="299"/> <source>MBC2</source> <translation>MBC2</translation> </message> <message> - <location filename="../OverrideView.ui" line="299"/> + <location filename="../OverrideView.ui" line="304"/> <source>MBC3</source> <translation>MBC3</translation> </message> <message> - <location filename="../OverrideView.ui" line="304"/> + <location filename="../OverrideView.ui" line="309"/> <source>MBC3 + RTC</source> <translation>MBC3 + RTC</translation> </message> <message> - <location filename="../OverrideView.ui" line="309"/> + <location filename="../OverrideView.ui" line="314"/> <source>MBC5</source> <translation>MBC5</translation> </message> <message> - <location filename="../OverrideView.ui" line="314"/> + <location filename="../OverrideView.ui" line="319"/> <source>MBC5 + Rumble</source> <translation>MBC5 + Rumble</translation> </message> <message> - <location filename="../OverrideView.ui" line="319"/> + <location filename="../OverrideView.ui" line="324"/> <source>MBC7</source> <translation>MBC7</translation> </message> <message> - <location filename="../OverrideView.ui" line="324"/> + <location filename="../OverrideView.ui" line="329"/> + <source>Pocket Cam</source> + <translation>Pocket Cam</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="334"/> + <source>TAMA5</source> + <translation>TAMA5</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="339"/> <source>HuC-3</source> <translation>HuC-3</translation> </message> <message> - <location filename="../OverrideView.ui" line="332"/> - <source>Colors</source> - <translation>Farben</translation> + <location filename="../OverrideView.ui" line="347"/> + <source>Background Colors</source> + <translation>Hintergrund-Farbpalette</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="434"/> + <source>Sprite Colors 1</source> + <translation>Sprite-Farbpalette 1</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="441"/> + <source>Sprite Colors 2</source> + <translation>Sprite-Farbpalette 2</translation> </message> </context> <context>

@@ -1022,19 +1076,37 @@ <message>

<location filename="../PaletteView.ui" line="342"/> <source>Export OBJ</source> <translation>OBJ exportieren</translation> + </message> +</context> +<context> + <name>PrinterView</name> + <message> + <location filename="../PrinterView.ui" line="14"/> + <source>Game Boy Printer</source> + <translation>Game Boy Printer</translation> + </message> + <message> + <location filename="../PrinterView.ui" line="96"/> + <source>Hurry up!</source> + <translation>Los geht&apos;s!</translation> + </message> + <message> + <location filename="../PrinterView.ui" line="103"/> + <source>Tear off</source> + <translation>Abreißen</translation> </message> </context> <context> <name>QGBA::AssetTile</name> <message> - <location filename="../AssetTile.cpp" line="103"/> + <location filename="../AssetTile.cpp" line="112"/> <source>%0%1%2</source> <translation>%0%1%2</translation> </message> <message> - <location filename="../AssetTile.cpp" line="132"/> - <location filename="../AssetTile.cpp" line="133"/> - <location filename="../AssetTile.cpp" line="134"/> + <location filename="../AssetTile.cpp" line="148"/> + <location filename="../AssetTile.cpp" line="149"/> + <location filename="../AssetTile.cpp" line="150"/> <source>0x%0 (%1)</source> <translation>0x%0 (%1)</translation> </message>

@@ -1083,6 +1155,37 @@ <translation>Cheat-Datei auswählen</translation>

</message> </context> <context> + <name>QGBA::CoreController</name> + <message> + <location filename="../CoreController.cpp" line="495"/> + <source>Failed to open save file: %1</source> + <translation>Fehler beim Öffnen der Speicherdatei: %1</translation> + </message> + <message> + <location filename="../CoreController.cpp" line="524"/> + <source>Failed to open game file: %1</source> + <translation>Fehler beim Öffnen der Spieldatei: %1</translation> + </message> + <message> + <location filename="../CoreController.cpp" line="589"/> + <source>Failed to open snapshot file for reading: %1</source> + <translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation> + </message> + <message> + <location filename="../CoreController.cpp" line="605"/> + <source>Failed to open snapshot file for writing: %1</source> + <translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation> + </message> +</context> +<context> + <name>QGBA::CoreManager</name> + <message> + <location filename="../CoreManager.cpp" line="54"/> + <source>Failed to open game file: %1</source> + <translation>Fehler beim Öffnen der Spieldatei: %1</translation> + </message> +</context> +<context> <name>QGBA::GBAKeyEditor</name> <message> <location filename="../GBAKeyEditor.cpp" line="68"/>

@@ -1151,48 +1254,19 @@ </context>

<context> <name>QGBA::GIFView</name> <message> - <location filename="../GIFView.cpp" line="46"/> + <location filename="../GIFView.cpp" line="53"/> <source>Failed to open output GIF file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-GIF-Datei: %1</translation> </message> <message> - <location filename="../GIFView.cpp" line="64"/> + <location filename="../GIFView.cpp" line="71"/> <source>Select output file</source> <translation>Ausgabedatei auswählen</translation> </message> <message> - <location filename="../GIFView.cpp" line="64"/> + <location filename="../GIFView.cpp" line="71"/> <source>Graphics Interchange Format (*.gif)</source> <translation>Graphics Interchange Format (*.gif)</translation> - </message> -</context> -<context> - <name>QGBA::GameController</name> - <message> - <location filename="../GameController.cpp" line="352"/> - <location filename="../GameController.cpp" line="536"/> - <source>Failed to open game file: %1</source> - <translation>Fehler beim Öffnen der Spieldatei: %1</translation> - </message> - <message> - <location filename="../GameController.cpp" line="508"/> - <source>Failed to open save file: %1</source> - <translation>Fehler beim Öffnen der Speicherdatei: %1</translation> - </message> - <message> - <location filename="../GameController.cpp" line="565"/> - <source>Failed to open snapshot file for reading: %1</source> - <translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation> - </message> - <message> - <location filename="../GameController.cpp" line="585"/> - <source>Failed to open snapshot file for writing: %1</source> - <translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation> - </message> - <message> - <location filename="../GameController.cpp" line="851"/> - <source>Failed to start audio processor</source> - <translation>Fehler beim Starten des Audio-Prozessors</translation> </message> </context> <context>

@@ -2575,27 +2649,27 @@ </context>

<context> <name>QGBA::LoadSaveState</name> <message> - <location filename="../LoadSaveState.cpp" line="68"/> + <location filename="../LoadSaveState.cpp" line="70"/> <source>Load State</source> <translation>Savestate laden</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="68"/> + <location filename="../LoadSaveState.cpp" line="70"/> <source>Save State</source> <translation>Savestate speichern</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="177"/> + <location filename="../LoadSaveState.cpp" line="179"/> <source>Empty</source> <translation>Leer</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="186"/> + <location filename="../LoadSaveState.cpp" line="188"/> <source>Corrupted</source> <translation>Defekt</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="215"/> + <location filename="../LoadSaveState.cpp" line="217"/> <source>Slot %1</source> <translation>Speicherplatz %1</translation> </message>

@@ -2603,42 +2677,90 @@ </context>

<context> <name>QGBA::LogController</name> <message> - <location filename="../LogController.cpp" line="57"/> + <location filename="../LogController.cpp" line="61"/> <source>DEBUG</source> <translation>DEBUG</translation> </message> <message> - <location filename="../LogController.cpp" line="59"/> + <location filename="../LogController.cpp" line="63"/> <source>STUB</source> <translation>STUB</translation> </message> <message> - <location filename="../LogController.cpp" line="61"/> + <location filename="../LogController.cpp" line="65"/> <source>INFO</source> <translation>INFO</translation> </message> <message> - <location filename="../LogController.cpp" line="63"/> + <location filename="../LogController.cpp" line="67"/> <source>WARN</source> <translation>WARN</translation> </message> <message> - <location filename="../LogController.cpp" line="65"/> + <location filename="../LogController.cpp" line="69"/> <source>ERROR</source> <translation>ERROR</translation> </message> <message> - <location filename="../LogController.cpp" line="67"/> + <location filename="../LogController.cpp" line="71"/> <source>FATAL</source> <translation>FATAL</translation> </message> <message> - <location filename="../LogController.cpp" line="69"/> + <location filename="../LogController.cpp" line="73"/> <source>GAME ERROR</source> <translation>GAME ERROR</translation> </message> </context> <context> + <name>QGBA::MapView</name> + <message> + <location filename="../MapView.cpp" line="83"/> + <source>Map Addr.</source> + <translation>Map-Addr.</translation> + </message> + <message> + <location filename="../MapView.cpp" line="84"/> + <source>Mirror</source> + <translation>Spiegel</translation> + </message> + <message> + <location filename="../MapView.cpp" line="112"/> + <source>None</source> + <translation>Keiner</translation> + </message> + <message> + <location filename="../MapView.cpp" line="114"/> + <source>Both</source> + <translation>Beidseitig</translation> + </message> + <message> + <location filename="../MapView.cpp" line="116"/> + <source>Horizontal</source> + <translation>Horizontal</translation> + </message> + <message> + <location filename="../MapView.cpp" line="118"/> + <source>Vertical</source> + <translation>Vertikal</translation> + </message> + <message> + <location filename="../MapView.cpp" line="171"/> + <source>Export map</source> + <translation>Map exportieren</translation> + </message> + <message> + <location filename="../MapView.cpp" line="172"/> + <source>Portable Network Graphics (*.png)</source> + <translation>Portable Network Graphics (*.png)</translation> + </message> + <message> + <location filename="../MapView.cpp" line="175"/> + <source>Failed to open output PNG file: %1</source> + <translation>Fehler beim Öffnen der Ausgabe-PNG-Datei: %1</translation> + </message> +</context> +<context> <name>QGBA::MemoryModel</name> <message> <location filename="../MemoryModel.cpp" line="44"/>

@@ -2705,22 +2827,22 @@ </context>

<context> <name>QGBA::MemorySearch</name> <message> - <location filename="../MemorySearch.cpp" line="188"/> + <location filename="../MemorySearch.cpp" line="181"/> <source> (⅟%0×)</source> <translation> (⅟%0×)</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="192"/> + <location filename="../MemorySearch.cpp" line="185"/> <source>1 byte%0</source> <translation>1 Byte%0</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="195"/> + <location filename="../MemorySearch.cpp" line="188"/> <source>2 bytes%0</source> <translation>2 Bytes%0</translation> </message> <message> - <location filename="../MemorySearch.cpp" line="199"/> + <location filename="../MemorySearch.cpp" line="192"/> <source>4 bytes%0</source> <translation>4 Bytes%0</translation> </message>

@@ -2728,54 +2850,54 @@ </context>

<context> <name>QGBA::ObjView</name> <message> - <location filename="../ObjView.cpp" line="143"/> - <location filename="../ObjView.cpp" line="236"/> + <location filename="../ObjView.cpp" line="144"/> + <location filename="../ObjView.cpp" line="238"/> <source>0x%0</source> <translation>0x%0</translation> </message> <message> - <location filename="../ObjView.cpp" line="154"/> + <location filename="../ObjView.cpp" line="155"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../ObjView.cpp" line="159"/> + <location filename="../ObjView.cpp" line="160"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.cpp" line="162"/> + <location filename="../ObjView.cpp" line="163"/> <source>Trans</source> <translation>Trans</translation> </message> <message> - <location filename="../ObjView.cpp" line="165"/> + <location filename="../ObjView.cpp" line="166"/> <source>OBJWIN</source> <translation>OBJWIN</translation> </message> <message> - <location filename="../ObjView.cpp" line="168"/> + <location filename="../ObjView.cpp" line="169"/> <source>Invalid</source> <translation>Ungültig</translation> </message> <message> - <location filename="../ObjView.cpp" line="243"/> - <location filename="../ObjView.cpp" line="244"/> + <location filename="../ObjView.cpp" line="245"/> + <location filename="../ObjView.cpp" line="246"/> <source>N/A</source> <translation>N/A</translation> </message> <message> - <location filename="../ObjView.cpp" line="251"/> + <location filename="../ObjView.cpp" line="252"/> <source>Export sprite</source> <translation>Sprite exportieren</translation> </message> <message> - <location filename="../ObjView.cpp" line="252"/> + <location filename="../ObjView.cpp" line="253"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message> <message> - <location filename="../ObjView.cpp" line="255"/> + <location filename="../ObjView.cpp" line="256"/> <source>Failed to open output PNG file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-PNG-Datei: %1</translation> </message>

@@ -2783,62 +2905,75 @@ </context>

<context> <name>QGBA::PaletteView</name> <message> - <location filename="../PaletteView.cpp" line="120"/> + <location filename="../PaletteView.cpp" line="121"/> <source>#%0</source> <translation>#%0</translation> </message> <message> - <location filename="../PaletteView.cpp" line="121"/> + <location filename="../PaletteView.cpp" line="122"/> <source>0x%0</source> <translation>0x%0</translation> </message> <message> - <location filename="../PaletteView.cpp" line="122"/> + <location filename="../PaletteView.cpp" line="123"/> <source>%0</source> <translation>%0</translation> </message> <message> - <location filename="../PaletteView.cpp" line="123"/> <location filename="../PaletteView.cpp" line="124"/> <location filename="../PaletteView.cpp" line="125"/> + <location filename="../PaletteView.cpp" line="126"/> <source>0x%0 (%1)</source> <translation>0x%0 (%1)</translation> </message> <message> - <location filename="../PaletteView.cpp" line="137"/> + <location filename="../PaletteView.cpp" line="138"/> <source>Export palette</source> <translation>Palette exportieren</translation> </message> <message> - <location filename="../PaletteView.cpp" line="138"/> + <location filename="../PaletteView.cpp" line="139"/> <source>Windows PAL (*.pal);;Adobe Color Table (*.act)</source> <translation>Windows PAL (*.pal);;Adobe Color Table (*.act)</translation> </message> <message> - <location filename="../PaletteView.cpp" line="141"/> + <location filename="../PaletteView.cpp" line="142"/> <source>Failed to open output palette file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-Palettendatei: %1</translation> </message> </context> <context> + <name>QGBA::PrinterView</name> + <message> + <location filename="../PrinterView.cpp" line="35"/> + <source>Save Printout</source> + <translation>Ausdruck speichern</translation> + </message> + <message> + <location filename="../PrinterView.cpp" line="35"/> + <source>Portable Network Graphics (*.png)</source> + <translation>Portable Network Graphics (*.png)</translation> + </message> +</context> +<context> <name>QGBA::ROMInfo</name> <message> - <location filename="../ROMInfo.cpp" line="48"/> - <location filename="../ROMInfo.cpp" line="69"/> - <location filename="../ROMInfo.cpp" line="80"/> - <location filename="../ROMInfo.cpp" line="89"/> - <location filename="../ROMInfo.cpp" line="90"/> + <location filename="../ROMInfo.cpp" line="44"/> + <location filename="../ROMInfo.cpp" line="65"/> + <location filename="../ROMInfo.cpp" line="76"/> + <location filename="../ROMInfo.cpp" line="85"/> + <location filename="../ROMInfo.cpp" line="86"/> <source>(unknown)</source> <translation>(unbekannt)</translation> </message> <message> - <location filename="../ROMInfo.cpp" line="57"/> - <location filename="../ROMInfo.cpp" line="64"/> + <location filename="../ROMInfo.cpp" line="53"/> + <location filename="../ROMInfo.cpp" line="60"/> <source> bytes</source> <translation> Bytes</translation> </message> <message> - <location filename="../ROMInfo.cpp" line="83"/> + <location filename="../ROMInfo.cpp" line="79"/> <source>(no database present)</source> <translation>(keine Datenbank vorhanden)</translation> </message>

@@ -2846,47 +2981,59 @@ </context>

<context> <name>QGBA::SettingsView</name> <message> - <location filename="../SettingsView.cpp" line="98"/> + <location filename="../SettingsView.cpp" line="114"/> + <location filename="../SettingsView.cpp" line="156"/> <source>Qt Multimedia</source> <translation>Qt Multimedia</translation> </message> <message> - <location filename="../SettingsView.cpp" line="105"/> + <location filename="../SettingsView.cpp" line="121"/> <source>SDL</source> <translation>SDL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="113"/> + <location filename="../SettingsView.cpp" line="129"/> <source>Software (Qt)</source> <translation>Software (Qt)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="119"/> + <location filename="../SettingsView.cpp" line="135"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="126"/> + <location filename="../SettingsView.cpp" line="142"/> <source>OpenGL (force version 1.x)</source> <translation>OpenGL (erzwinge Version 1.x)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="144"/> + <location filename="../SettingsView.cpp" line="150"/> + <source>None (Still Image)</source> + <translation>Keiner (Standbild)</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="231"/> <source>Keyboard</source> <translation>Tastatur</translation> </message> <message> - <location filename="../SettingsView.cpp" line="153"/> + <location filename="../SettingsView.cpp" line="240"/> <source>Controllers</source> <translation>Gamepads</translation> </message> <message> - <location filename="../SettingsView.cpp" line="185"/> + <location filename="../SettingsView.cpp" line="272"/> <source>Shortcuts</source> <translation>Tastenkürzel</translation> </message> <message> - <location filename="../SettingsView.cpp" line="189"/> + <location filename="../SettingsView.cpp" line="284"/> + <location filename="../SettingsView.cpp" line="294"/> + <source>Shaders</source> + <translation>Shader</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="301"/> <source>Select BIOS</source> <translation>BIOS auswählen</translation> </message>

@@ -2894,37 +3041,32 @@ </context>

<context> <name>QGBA::ShaderSelector</name> <message> - <location filename="../ShaderSelector.cpp" line="49"/> + <location filename="../ShaderSelector.cpp" line="54"/> <source>No shader active</source> <translation>Kein Shader aktiv</translation> </message> <message> - <location filename="../ShaderSelector.cpp" line="62"/> + <location filename="../ShaderSelector.cpp" line="67"/> <source>Load shader</source> <translation>Shader laden</translation> </message> <message> - <location filename="../ShaderSelector.cpp" line="62"/> - <source>%1 Shader (%.shader)</source> - <translation>%1 Shader (%.shader)</translation> - </message> - <message> - <location filename="../ShaderSelector.cpp" line="101"/> + <location filename="../ShaderSelector.cpp" line="105"/> <source>No shader loaded</source> <translation>Kein Shader geladen</translation> </message> <message> - <location filename="../ShaderSelector.cpp" line="109"/> + <location filename="../ShaderSelector.cpp" line="113"/> <source>by %1</source> <translation>von %1</translation> </message> <message> - <location filename="../ShaderSelector.cpp" line="120"/> + <location filename="../ShaderSelector.cpp" line="128"/> <source>Preprocessing</source> <translation>Vorbehandlung</translation> </message> <message> - <location filename="../ShaderSelector.cpp" line="127"/> + <location filename="../ShaderSelector.cpp" line="135"/> <source>Pass %1</source> <translation>Durchlauf %1</translation> </message>

@@ -2950,17 +3092,17 @@ </context>

<context> <name>QGBA::VideoView</name> <message> - <location filename="../VideoView.cpp" line="203"/> + <location filename="../VideoView.cpp" line="211"/> <source>Failed to open output video file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-Videodatei: %1</translation> </message> <message> - <location filename="../VideoView.cpp" line="221"/> + <location filename="../VideoView.cpp" line="229"/> <source>Native (%0x%1)</source> <translation>Nativ (%0x%1)</translation> </message> <message> - <location filename="../VideoView.cpp" line="236"/> + <location filename="../VideoView.cpp" line="244"/> <source>Select output file</source> <translation>Ausgabedatei auswählen</translation> </message>

@@ -2968,82 +3110,92 @@ </context>

<context> <name>QGBA::Window</name> <message> - <location filename="../Window.cpp" line="329"/> + <location filename="../Window.cpp" line="254"/> <source>Game Boy Advance ROMs (%1)</source> <translation>Game Boy Advance-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="345"/> + <location filename="../Window.cpp" line="270"/> <source>Game Boy ROMs (%1)</source> <translation>Game Boy-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="349"/> + <location filename="../Window.cpp" line="274"/> <source>All ROMs (%1)</source> <translation>Alle ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="350"/> + <location filename="../Window.cpp" line="275"/> <source>%1 Video Logs (*.mvl)</source> <translation>%1 Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="365"/> + <location filename="../Window.cpp" line="290"/> <source>Archives (%1)</source> <translation>Archive (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="370"/> - <location filename="../Window.cpp" line="378"/> - <location filename="../Window.cpp" line="405"/> + <location filename="../Window.cpp" line="295"/> + <location filename="../Window.cpp" line="303"/> + <location filename="../Window.cpp" line="330"/> <source>Select ROM</source> <translation>ROM auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="413"/> + <location filename="../Window.cpp" line="338"/> <source>Game Boy Advance save files (%1)</source> <translation>Game Boy Advance-Speicherdateien (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="414"/> - <location filename="../Window.cpp" line="448"/> - <location filename="../Window.cpp" line="455"/> + <location filename="../Window.cpp" line="339"/> + <location filename="../Window.cpp" line="384"/> + <location filename="../Window.cpp" line="391"/> <source>Select save</source> <translation>Speicherdatei wählen</translation> </message> <message> - <location filename="../Window.cpp" line="434"/> + <location filename="../Window.cpp" line="360"/> <source>Select patch</source> <translation>Patch wählen</translation> </message> <message> - <location filename="../Window.cpp" line="434"/> + <location filename="../Window.cpp" line="360"/> <source>Patches (*.ips *.ups *.bps)</source> <translation>Patches (*.ips *.ups *.bps)</translation> </message> <message> - <location filename="../Window.cpp" line="448"/> - <location filename="../Window.cpp" line="455"/> + <location filename="../Window.cpp" line="377"/> + <source>Select image</source> + <translation>Bild auswählen</translation> + </message> + <message> + <location filename="../Window.cpp" line="377"/> + <source>Image file (*.png *.gif *.jpg *.jpeg);;All files (*)</source> + <translation>Bild-Datei (*.png *.gif *.jpg *.jpeg);;Alle Dateien (*)</translation> + </message> + <message> + <location filename="../Window.cpp" line="384"/> + <location filename="../Window.cpp" line="391"/> <source>GameShark saves (*.sps *.xps)</source> <translation>GameShark-Speicherdaten (*.sps *.xps)</translation> </message> <message> - <location filename="../Window.cpp" line="478"/> + <location filename="../Window.cpp" line="414"/> <source>Select video log</source> <translation>Video-Log auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="478"/> + <location filename="../Window.cpp" line="414"/> <source>Video logs (*.mvl)</source> <translation>Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="820"/> + <location filename="../Window.cpp" line="752"/> <source>Crash</source> <translation>Absturz</translation> </message> <message> - <location filename="../Window.cpp" line="821"/> + <location filename="../Window.cpp" line="753"/> <source>The game has crashed with the following error: %1</source>

@@ -3052,42 +3204,42 @@

%1</translation> </message> <message> - <location filename="../Window.cpp" line="828"/> + <location filename="../Window.cpp" line="761"/> <source>Couldn&apos;t Load</source> <translation>Konnte nicht geladen werden</translation> </message> <message> - <location filename="../Window.cpp" line="829"/> + <location filename="../Window.cpp" line="762"/> <source>Could not load game. Are you sure it&apos;s in the correct format?</source> <translation>Konnte das Spiel nicht laden. Sind Sie sicher, dass es im korrekten Format vorliegt?</translation> </message> <message> - <location filename="../Window.cpp" line="842"/> + <location filename="../Window.cpp" line="775"/> <source>Unimplemented BIOS call</source> <translation>Nicht implementierter BIOS-Aufruf</translation> </message> <message> - <location filename="../Window.cpp" line="843"/> + <location filename="../Window.cpp" line="776"/> <source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source> <translation>Dieses Spiel verwendet einen BIOS-Aufruf, der nicht implementiert ist. Bitte verwenden Sie für die beste Spielerfahrung das offizielle BIOS.</translation> </message> <message> - <location filename="../Window.cpp" line="850"/> + <location filename="../Window.cpp" line="851"/> <source>Really make portable?</source> <translation>Portablen Modus wirklich aktivieren?</translation> </message> <message> - <location filename="../Window.cpp" line="851"/> + <location filename="../Window.cpp" line="852"/> <source>This will make the emulator load its configuration from the same directory as the executable. Do you want to continue?</source> <translation>Diese Einstellung wird den Emulator so konfigurieren, dass er seine Konfiguration aus dem gleichen Verzeichnis wie die Programmdatei lädt. Möchten Sie fortfahren?</translation> </message> <message> - <location filename="../Window.cpp" line="859"/> + <location filename="../Window.cpp" line="860"/> <source>Restart needed</source> <translation>Neustart benötigt</translation> </message> <message> - <location filename="../Window.cpp" line="860"/> + <location filename="../Window.cpp" line="861"/> <source>Some changes will not take effect until the emulator is restarted.</source> <translation>Einige Änderungen werden erst übernommen, wenn der Emulator neu gestartet wurde.</translation> </message>

@@ -3112,568 +3264,578 @@ <source>%1 - %2 (%3 fps) - %4</source>

<translation>%1 - %2 (%3 Bilder/Sekunde) - %4</translation> </message> <message> - <location filename="../Window.cpp" line="954"/> + <location filename="../Window.cpp" line="957"/> <source>&amp;File</source> <translation>&amp;Datei</translation> </message> <message> - <location filename="../Window.cpp" line="957"/> + <location filename="../Window.cpp" line="960"/> <source>Load &amp;ROM...</source> <translation>&amp;ROM laden...</translation> </message> <message> - <location filename="../Window.cpp" line="960"/> + <location filename="../Window.cpp" line="963"/> <source>Load ROM in archive...</source> <translation>ROM aus Archiv laden...</translation> </message> <message> - <location filename="../Window.cpp" line="966"/> + <location filename="../Window.cpp" line="969"/> <source>Load temporary save...</source> <translation>Temporäre Speicherdatei laden...</translation> </message> <message> - <location filename="../Window.cpp" line="971"/> + <location filename="../Window.cpp" line="974"/> <source>Load &amp;patch...</source> <translation>&amp;Patch laden...</translation> </message> <message> - <location filename="../Window.cpp" line="973"/> + <location filename="../Window.cpp" line="977"/> <source>Boot BIOS</source> <translation>BIOS booten</translation> </message> <message> - <location filename="../Window.cpp" line="980"/> + <location filename="../Window.cpp" line="984"/> <source>Replace ROM...</source> <translation>ROM ersetzen...</translation> </message> <message> - <location filename="../Window.cpp" line="982"/> + <location filename="../Window.cpp" line="986"/> <source>ROM &amp;info...</source> <translation>ROM-&amp;Informationen...</translation> </message> <message> - <location filename="../Window.cpp" line="987"/> + <location filename="../Window.cpp" line="991"/> <source>Recent</source> <translation>Zuletzt verwendet</translation> </message> <message> - <location filename="../Window.cpp" line="991"/> + <location filename="../Window.cpp" line="995"/> <source>Make portable</source> <translation>Portablen Modus aktivieren</translation> </message> <message> - <location filename="../Window.cpp" line="995"/> + <location filename="../Window.cpp" line="999"/> <source>&amp;Load state</source> <translation>Savestate &amp;laden</translation> </message> <message> - <location filename="../Window.cpp" line="996"/> + <location filename="../Window.cpp" line="1000"/> <source>F10</source> <translation>F10</translation> </message> <message> - <location filename="../Window.cpp" line="1002"/> + <location filename="../Window.cpp" line="1006"/> <source>&amp;Save state</source> <translation>Savestate &amp;speichern</translation> </message> <message> - <location filename="../Window.cpp" line="1003"/> + <location filename="../Window.cpp" line="1007"/> <source>Shift+F10</source> <translation>Umschalt+F10</translation> </message> <message> - <location filename="../Window.cpp" line="1009"/> + <location filename="../Window.cpp" line="1013"/> <source>Quick load</source> <translation>Schnell laden</translation> </message> <message> - <location filename="../Window.cpp" line="1010"/> + <location filename="../Window.cpp" line="1014"/> <source>Quick save</source> <translation>Schnell speichern</translation> </message> <message> - <location filename="../Window.cpp" line="1014"/> + <location filename="../Window.cpp" line="1018"/> <source>Load recent</source> <translation>Lade zuletzt gespeicherten Savestate</translation> </message> <message> - <location filename="../Window.cpp" line="1020"/> + <location filename="../Window.cpp" line="1026"/> <source>Save recent</source> <translation>Speichere aktuellen Stand</translation> </message> <message> - <location filename="../Window.cpp" line="1029"/> + <location filename="../Window.cpp" line="1037"/> <source>Undo load state</source> <translation>Laden des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1030"/> + <location filename="../Window.cpp" line="1038"/> <source>F11</source> <translation>F11</translation> </message> <message> - <location filename="../Window.cpp" line="1036"/> + <location filename="../Window.cpp" line="1046"/> <source>Undo save state</source> <translation>Speichern des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1037"/> + <location filename="../Window.cpp" line="1047"/> <source>Shift+F11</source> <translation>Umschalt+F11</translation> </message> <message> - <location filename="../Window.cpp" line="1048"/> - <location filename="../Window.cpp" line="1055"/> + <location filename="../Window.cpp" line="1060"/> + <location filename="../Window.cpp" line="1069"/> <source>State &amp;%1</source> <translation>Savestate &amp;%1</translation> </message> <message> - <location filename="../Window.cpp" line="1049"/> + <location filename="../Window.cpp" line="1061"/> <source>F%1</source> <translation>F%1</translation> </message> <message> - <location filename="../Window.cpp" line="1056"/> + <location filename="../Window.cpp" line="1070"/> <source>Shift+F%1</source> <translation>Umschalt+F%1</translation> </message> <message> - <location filename="../Window.cpp" line="1065"/> + <location filename="../Window.cpp" line="1080"/> + <source>Load camera image...</source> + <translation>Lade Kamerabild...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1086"/> <source>Import GameShark Save</source> <translation>Importiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1071"/> + <location filename="../Window.cpp" line="1092"/> <source>Export GameShark Save</source> <translation>Exportiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1079"/> + <location filename="../Window.cpp" line="1100"/> <source>New multiplayer window</source> <translation>Neues Multiplayer-Fenster</translation> </message> <message> - <location filename="../Window.cpp" line="1089"/> + <location filename="../Window.cpp" line="1110"/> <source>About</source> <translation>Über</translation> </message> <message> - <location filename="../Window.cpp" line="1094"/> + <location filename="../Window.cpp" line="1115"/> <source>E&amp;xit</source> <translation>&amp;Beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1097"/> + <location filename="../Window.cpp" line="1118"/> <source>&amp;Emulation</source> <translation>&amp;Emulation</translation> </message> <message> - <location filename="../Window.cpp" line="1099"/> + <location filename="../Window.cpp" line="1120"/> <source>&amp;Reset</source> <translation>Zu&amp;rücksetzen</translation> </message> <message> - <location filename="../Window.cpp" line="1100"/> + <location filename="../Window.cpp" line="1121"/> <source>Ctrl+R</source> <translation>Strg+R</translation> </message> <message> - <location filename="../Window.cpp" line="1105"/> + <location filename="../Window.cpp" line="1128"/> <source>Sh&amp;utdown</source> <translation>Schli&amp;eßen</translation> </message> <message> - <location filename="../Window.cpp" line="1111"/> + <location filename="../Window.cpp" line="1136"/> <source>Yank game pak</source> <translation>Spielmodul herausziehen</translation> </message> <message> - <location filename="../Window.cpp" line="1119"/> + <location filename="../Window.cpp" line="1146"/> <source>&amp;Pause</source> <translation>&amp;Pause</translation> </message> <message> - <location filename="../Window.cpp" line="1122"/> + <location filename="../Window.cpp" line="1149"/> <source>Ctrl+P</source> <translation>Strg+P</translation> </message> <message> - <location filename="../Window.cpp" line="1131"/> + <location filename="../Window.cpp" line="1159"/> <source>&amp;Next frame</source> <translation>&amp;Nächstes Bild</translation> </message> <message> - <location filename="../Window.cpp" line="1132"/> + <location filename="../Window.cpp" line="1160"/> <source>Ctrl+N</source> <translation>Strg+N</translation> </message> <message> - <location filename="../Window.cpp" line="1143"/> + <location filename="../Window.cpp" line="1177"/> <source>Fast forward (held)</source> <translation>Schneller Vorlauf (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1145"/> + <location filename="../Window.cpp" line="1179"/> <source>&amp;Fast forward</source> <translation>Schneller &amp;Vorlauf</translation> </message> <message> - <location filename="../Window.cpp" line="1148"/> + <location filename="../Window.cpp" line="1182"/> <source>Shift+Tab</source> <translation>Umschalt+Tab</translation> </message> <message> - <location filename="../Window.cpp" line="1152"/> + <location filename="../Window.cpp" line="1189"/> <source>Fast forward speed</source> <translation>Vorlauf-Geschwindigkeit</translation> </message> <message> - <location filename="../Window.cpp" line="1157"/> + <location filename="../Window.cpp" line="1194"/> <source>Unbounded</source> <translation>Unbegrenzt</translation> </message> <message> - <location filename="../Window.cpp" line="1161"/> + <location filename="../Window.cpp" line="1198"/> <source>%0x</source> <translation>%0x</translation> </message> <message> - <location filename="../Window.cpp" line="1169"/> + <location filename="../Window.cpp" line="1210"/> <source>Rewind (held)</source> <translation>Zurückspulen (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1171"/> + <location filename="../Window.cpp" line="1212"/> <source>Re&amp;wind</source> <translation>Zur&amp;ückspulen</translation> </message> <message> - <location filename="../Window.cpp" line="1172"/> + <location filename="../Window.cpp" line="1213"/> <source>~</source> <translation>~</translation> </message> <message> - <location filename="../Window.cpp" line="1178"/> + <location filename="../Window.cpp" line="1221"/> <source>Step backwards</source> <translation>Schrittweiser Rücklauf</translation> </message> <message> - <location filename="../Window.cpp" line="1179"/> + <location filename="../Window.cpp" line="1222"/> <source>Ctrl+B</source> <translation>Strg+B</translation> </message> <message> - <location filename="../Window.cpp" line="1188"/> + <location filename="../Window.cpp" line="1231"/> <source>Sync to &amp;video</source> <translation>Mit &amp;Video synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1195"/> + <location filename="../Window.cpp" line="1238"/> <source>Sync to &amp;audio</source> <translation>Mit &amp;Audio synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1203"/> + <location filename="../Window.cpp" line="1246"/> <source>Solar sensor</source> <translation>Solar-Sensor</translation> </message> <message> - <location filename="../Window.cpp" line="1205"/> + <location filename="../Window.cpp" line="1248"/> <source>Increase solar level</source> <translation>Sonnen-Level erhöhen</translation> </message> <message> - <location filename="../Window.cpp" line="1209"/> + <location filename="../Window.cpp" line="1252"/> <source>Decrease solar level</source> <translation>Sonnen-Level verringern</translation> </message> <message> - <location filename="../Window.cpp" line="1213"/> + <location filename="../Window.cpp" line="1256"/> <source>Brightest solar level</source> <translation>Hellster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1217"/> + <location filename="../Window.cpp" line="1260"/> <source>Darkest solar level</source> <translation>Dunkelster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1223"/> + <location filename="../Window.cpp" line="1266"/> <source>Brightness %1</source> <translation>Helligkeit %1</translation> </message> <message> - <location filename="../Window.cpp" line="1230"/> + <location filename="../Window.cpp" line="1273"/> <source>Audio/&amp;Video</source> <translation>Audio/&amp;Video</translation> </message> <message> - <location filename="../Window.cpp" line="1232"/> + <location filename="../Window.cpp" line="1275"/> <source>Frame size</source> <translation>Bildgröße</translation> </message> <message> - <location filename="../Window.cpp" line="1235"/> + <location filename="../Window.cpp" line="1278"/> <source>%1x</source> <translation>%1x</translation> </message> <message> - <location filename="../Window.cpp" line="1263"/> + <location filename="../Window.cpp" line="1306"/> <source>Toggle fullscreen</source> <translation>Vollbildmodus umschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1266"/> + <location filename="../Window.cpp" line="1309"/> <source>Lock aspect ratio</source> <translation>Seitenverhältnis korrigieren</translation> </message> <message> - <location filename="../Window.cpp" line="1273"/> + <location filename="../Window.cpp" line="1319"/> <source>Force integer scaling</source> <translation>Pixelgenaue Skalierung (Integer scaling)</translation> </message> <message> - <location filename="../Window.cpp" line="1289"/> + <location filename="../Window.cpp" line="1335"/> <source>Frame&amp;skip</source> <translation>Frame&amp;skip</translation> </message> <message> - <location filename="../Window.cpp" line="1299"/> - <source>Shader options...</source> - <translation>Shader-Optionen...</translation> - </message> - <message> - <location filename="../Window.cpp" line="1309"/> + <location filename="../Window.cpp" line="1348"/> <source>Mute</source> <translation>Stummschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1316"/> + <location filename="../Window.cpp" line="1355"/> <source>FPS target</source> <translation>Bildwiederholrate</translation> </message> <message> - <location filename="../Window.cpp" line="1321"/> + <location filename="../Window.cpp" line="1360"/> <source>15</source> <translation>15</translation> </message> <message> - <location filename="../Window.cpp" line="1322"/> + <location filename="../Window.cpp" line="1361"/> <source>30</source> <translation>30</translation> </message> <message> - <location filename="../Window.cpp" line="1323"/> + <location filename="../Window.cpp" line="1362"/> <source>45</source> <translation>45</translation> </message> <message> - <location filename="../Window.cpp" line="1324"/> + <location filename="../Window.cpp" line="1363"/> <source>Native (59.7)</source> <translation>Nativ (59.7)</translation> </message> <message> - <location filename="../Window.cpp" line="1325"/> + <location filename="../Window.cpp" line="1364"/> <source>60</source> <translation>60</translation> </message> <message> - <location filename="../Window.cpp" line="1326"/> + <location filename="../Window.cpp" line="1365"/> <source>90</source> <translation>90</translation> </message> <message> - <location filename="../Window.cpp" line="1327"/> + <location filename="../Window.cpp" line="1366"/> <source>120</source> <translation>120</translation> </message> <message> - <location filename="../Window.cpp" line="1328"/> + <location filename="../Window.cpp" line="1367"/> <source>240</source> <translation>240</translation> </message> <message> - <location filename="../Window.cpp" line="1336"/> + <location filename="../Window.cpp" line="1373"/> <source>Take &amp;screenshot</source> <translation>&amp;Screenshot erstellen</translation> </message> <message> - <location filename="../Window.cpp" line="1337"/> + <location filename="../Window.cpp" line="1374"/> <source>F12</source> <translation>F12</translation> </message> <message> - <location filename="../Window.cpp" line="1344"/> + <location filename="../Window.cpp" line="1383"/> <source>Record output...</source> <translation>Ausgabe aufzeichen...</translation> </message> <message> - <location filename="../Window.cpp" line="1351"/> + <location filename="../Window.cpp" line="1390"/> <source>Record GIF...</source> <translation>GIF aufzeichen...</translation> </message> <message> - <location filename="../Window.cpp" line="1356"/> + <location filename="../Window.cpp" line="1395"/> <source>Record video log...</source> <translation>Video-Log aufzeichnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1361"/> + <location filename="../Window.cpp" line="1400"/> <source>Stop video log</source> <translation>Video-Log beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1367"/> + <location filename="../Window.cpp" line="1408"/> + <source>Game Boy Printer...</source> + <translation>Game Boy Printer...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1420"/> <source>Video layers</source> <translation>Video-Ebenen</translation> </message> <message> - <location filename="../Window.cpp" line="1370"/> + <location filename="../Window.cpp" line="1423"/> <source>Audio channels</source> <translation>Audio-Kanäle</translation> </message> <message> - <location filename="../Window.cpp" line="1373"/> + <location filename="../Window.cpp" line="1426"/> <source>&amp;Tools</source> <translation>&amp;Werkzeuge</translation> </message> <message> - <location filename="../Window.cpp" line="1375"/> + <location filename="../Window.cpp" line="1428"/> <source>View &amp;logs...</source> <translation>&amp;Logs ansehen...</translation> </message> <message> - <location filename="../Window.cpp" line="1379"/> + <location filename="../Window.cpp" line="1432"/> <source>Game &amp;overrides...</source> <translation>Spiel-&amp;Überschreibungen...</translation> </message> <message> - <location filename="../Window.cpp" line="1383"/> + <location filename="../Window.cpp" line="1445"/> <source>Game &amp;Pak sensors...</source> <translation>Game &amp;Pak-Sensoren...</translation> </message> <message> - <location filename="../Window.cpp" line="1387"/> + <location filename="../Window.cpp" line="1458"/> <source>&amp;Cheats...</source> <translation>&amp;Cheats...</translation> </message> <message> - <location filename="../Window.cpp" line="1399"/> + <location filename="../Window.cpp" line="1470"/> <source>Open debugger console...</source> <translation>Debugger-Konsole äffnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1405"/> + <location filename="../Window.cpp" line="1476"/> <source>Start &amp;GDB server...</source> <translation>&amp;GDB-Server starten...</translation> </message> <message> - <location filename="../Window.cpp" line="1393"/> + <location filename="../Window.cpp" line="1464"/> <source>Settings...</source> <translation>Einstellungen...</translation> </message> <message> - <location filename="../Window.cpp" line="396"/> + <location filename="../Window.cpp" line="321"/> <source>Select folder</source> <translation>Ordner auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="962"/> + <location filename="../Window.cpp" line="965"/> <source>Add folder to library...</source> <translation>Ordner zur Bibliothek hinzufügen...</translation> </message> <message> - <location filename="../Window.cpp" line="1283"/> + <location filename="../Window.cpp" line="1329"/> <source>Bilinear filtering</source> <translation>Bilineare Filterung</translation> </message> <message> - <location filename="../Window.cpp" line="1412"/> + <location filename="../Window.cpp" line="1484"/> <source>View &amp;palette...</source> <translation>&amp;Palette betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1417"/> + <location filename="../Window.cpp" line="1489"/> <source>View &amp;sprites...</source> <translation>&amp;Sprites betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1422"/> + <location filename="../Window.cpp" line="1494"/> <source>View &amp;tiles...</source> <translation>&amp;Tiles betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1427"/> + <location filename="../Window.cpp" line="1499"/> + <source>View &amp;map...</source> + <translation>&amp;Map betrachten...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1504"/> <source>View memory...</source> <translation>Speicher betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1432"/> + <location filename="../Window.cpp" line="1509"/> <source>Search memory...</source> <translation>Speicher durchsuchen...</translation> </message> <message> - <location filename="../Window.cpp" line="1438"/> + <location filename="../Window.cpp" line="1515"/> <source>View &amp;I/O registers...</source> <translation>&amp;I/O-Register betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1508"/> + <location filename="../Window.cpp" line="1583"/> <source>Exit fullscreen</source> <translation>Vollbildmodus beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1513"/> + <location filename="../Window.cpp" line="1588"/> <source>Autofire</source> <translation>Autofeuer</translation> </message> <message> - <location filename="../Window.cpp" line="1520"/> + <location filename="../Window.cpp" line="1595"/> <source>Autofire A</source> <translation>Autofeuer A</translation> </message> <message> - <location filename="../Window.cpp" line="1526"/> + <location filename="../Window.cpp" line="1601"/> <source>Autofire B</source> <translation>Autofeuer B</translation> </message> <message> - <location filename="../Window.cpp" line="1532"/> + <location filename="../Window.cpp" line="1607"/> <source>Autofire L</source> <translation>Autofeuer L</translation> </message> <message> - <location filename="../Window.cpp" line="1538"/> + <location filename="../Window.cpp" line="1613"/> <source>Autofire R</source> <translation>Autofeuer R</translation> </message> <message> - <location filename="../Window.cpp" line="1544"/> + <location filename="../Window.cpp" line="1619"/> <source>Autofire Start</source> <translation>Autofeuer Start</translation> </message> <message> - <location filename="../Window.cpp" line="1550"/> + <location filename="../Window.cpp" line="1625"/> <source>Autofire Select</source> <translation>Autofeuer Select</translation> </message> <message> - <location filename="../Window.cpp" line="1556"/> + <location filename="../Window.cpp" line="1631"/> <source>Autofire Up</source> <translation>Autofeuer nach oben</translation> </message> <message> - <location filename="../Window.cpp" line="1562"/> + <location filename="../Window.cpp" line="1637"/> <source>Autofire Right</source> <translation>Autofeuer rechts</translation> </message> <message> - <location filename="../Window.cpp" line="1568"/> + <location filename="../Window.cpp" line="1643"/> <source>Autofire Down</source> <translation>Autofeuer nach unten</translation> </message> <message> - <location filename="../Window.cpp" line="1574"/> + <location filename="../Window.cpp" line="1649"/> <source>Autofire Left</source> <translation>Autofeuer links</translation> </message>

@@ -3792,39 +3954,39 @@ <source>MM/dd/yy hh:mm:ss AP</source>

<translation>dd/mm/yy hh:mm:ss</translation> </message> <message> - <location filename="../SensorView.ui" line="110"/> + <location filename="../SensorView.ui" line="107"/> <source>Light sensor</source> <translation>Lichtsensor</translation> </message> <message> - <location filename="../SensorView.ui" line="116"/> + <location filename="../SensorView.ui" line="113"/> <source>Brightness</source> <translation>Helligkeit</translation> </message> <message> - <location filename="../SensorView.ui" line="153"/> + <location filename="../SensorView.ui" line="150"/> <source>Tilt sensor</source> <translation>Neigungssensor</translation> </message> <message> - <location filename="../SensorView.ui" line="161"/> - <location filename="../SensorView.ui" line="250"/> + <location filename="../SensorView.ui" line="158"/> + <location filename="../SensorView.ui" line="247"/> <source>Set Y</source> <translation>Setze Y</translation> </message> <message> - <location filename="../SensorView.ui" line="171"/> - <location filename="../SensorView.ui" line="260"/> + <location filename="../SensorView.ui" line="168"/> + <location filename="../SensorView.ui" line="257"/> <source>Set X</source> <translation>Setze X</translation> </message> <message> - <location filename="../SensorView.ui" line="242"/> + <location filename="../SensorView.ui" line="239"/> <source>Gyroscope</source> <translation>Gyroskop</translation> </message> <message> - <location filename="../SensorView.ui" line="270"/> + <location filename="../SensorView.ui" line="267"/> <source>Sensitivity</source> <translation>Empfindlichkeit</translation> </message>

@@ -3857,240 +4019,321 @@ <source>Paths</source>

<translation>Verzeichnisse</translation> </message> <message> - <location filename="../SettingsView.ui" line="90"/> + <location filename="../SettingsView.ui" line="70"/> + <source>Game Boy</source> + <translation>Game Boy</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="95"/> <source>Audio driver:</source> <translation>Audio-Treiber:</translation> </message> <message> - <location filename="../SettingsView.ui" line="107"/> + <location filename="../SettingsView.ui" line="112"/> <source>Audio buffer:</source> <translation>Audio-Puffer:</translation> </message> <message> - <location filename="../SettingsView.ui" line="119"/> - <location filename="../SettingsView.ui" line="141"/> + <location filename="../SettingsView.ui" line="124"/> + <location filename="../SettingsView.ui" line="146"/> <source>1536</source> <translation>1536</translation> </message> <message> - <location filename="../SettingsView.ui" line="126"/> + <location filename="../SettingsView.ui" line="131"/> <source>512</source> <translation>512</translation> </message> <message> - <location filename="../SettingsView.ui" line="131"/> + <location filename="../SettingsView.ui" line="136"/> <source>768</source> <translation>768</translation> </message> <message> - <location filename="../SettingsView.ui" line="136"/> + <location filename="../SettingsView.ui" line="141"/> <source>1024</source> <translation>1024</translation> </message> <message> - <location filename="../SettingsView.ui" line="146"/> + <location filename="../SettingsView.ui" line="151"/> <source>2048</source> <translation>2048</translation> </message> <message> - <location filename="../SettingsView.ui" line="151"/> + <location filename="../SettingsView.ui" line="156"/> <source>3072</source> <translation>3072</translation> </message> <message> - <location filename="../SettingsView.ui" line="156"/> + <location filename="../SettingsView.ui" line="161"/> <source>4096</source> <translation>4096</translation> </message> <message> - <location filename="../SettingsView.ui" line="164"/> + <location filename="../SettingsView.ui" line="169"/> <source>samples</source> <translation>Samples</translation> </message> <message> - <location filename="../SettingsView.ui" line="173"/> + <location filename="../SettingsView.ui" line="178"/> <source>Sample rate:</source> <translation>Abtastrate:</translation> </message> <message> - <location filename="../SettingsView.ui" line="185"/> - <location filename="../SettingsView.ui" line="202"/> + <location filename="../SettingsView.ui" line="190"/> + <location filename="../SettingsView.ui" line="207"/> <source>44100</source> <translation>44100</translation> </message> <message> - <location filename="../SettingsView.ui" line="192"/> + <location filename="../SettingsView.ui" line="197"/> <source>22050</source> <translation>22050</translation> </message> <message> - <location filename="../SettingsView.ui" line="197"/> + <location filename="../SettingsView.ui" line="202"/> <source>32000</source> <translation>32000</translation> </message> <message> - <location filename="../SettingsView.ui" line="207"/> + <location filename="../SettingsView.ui" line="212"/> <source>48000</source> <translation>48000</translation> </message> <message> - <location filename="../SettingsView.ui" line="215"/> + <location filename="../SettingsView.ui" line="220"/> <source>Hz</source> <translation>Hz</translation> </message> <message> - <location filename="../SettingsView.ui" line="224"/> + <location filename="../SettingsView.ui" line="229"/> <source>Volume:</source> <translation>Lautstärke:</translation> </message> <message> - <location filename="../SettingsView.ui" line="255"/> + <location filename="../SettingsView.ui" line="260"/> <source>Mute</source> <translation>Stummschalten</translation> </message> <message> - <location filename="../SettingsView.ui" line="271"/> + <location filename="../SettingsView.ui" line="276"/> <source>Display driver:</source> <translation>Anzeige-Treiber:</translation> </message> <message> - <location filename="../SettingsView.ui" line="288"/> + <location filename="../SettingsView.ui" line="293"/> <source>Frameskip:</source> <translation>Frameskip:</translation> </message> <message> - <location filename="../SettingsView.ui" line="297"/> + <location filename="../SettingsView.ui" line="302"/> <source>Skip every</source> <translation>Alle</translation> </message> <message> - <location filename="../SettingsView.ui" line="307"/> - <location filename="../SettingsView.ui" line="576"/> + <location filename="../SettingsView.ui" line="312"/> + <location filename="../SettingsView.ui" line="581"/> <source>frames</source> <translation>Bilder</translation> </message> <message> - <location filename="../SettingsView.ui" line="316"/> + <location filename="../SettingsView.ui" line="321"/> <source>FPS target:</source> <translation>Bildwiederholrate:</translation> </message> <message> - <location filename="../SettingsView.ui" line="338"/> + <location filename="../SettingsView.ui" line="343"/> <source>frames per second</source> <translation>Bilder pro Sekunde</translation> </message> <message> - <location filename="../SettingsView.ui" line="354"/> + <location filename="../SettingsView.ui" line="359"/> <source>Sync:</source> <translation>Synchronisierung:</translation> </message> <message> - <location filename="../SettingsView.ui" line="363"/> + <location filename="../SettingsView.ui" line="368"/> <source>Video</source> <translation>Video</translation> </message> <message> - <location filename="../SettingsView.ui" line="370"/> + <location filename="../SettingsView.ui" line="375"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../SettingsView.ui" line="379"/> + <location filename="../SettingsView.ui" line="384"/> <source>Lock aspect ratio</source> <translation>Seitenverhältnis korrigieren</translation> </message> <message> - <location filename="../SettingsView.ui" line="393"/> + <location filename="../SettingsView.ui" line="398"/> <source>Force integer scaling</source> <translation>Erzwinge pixelgenaue Skalierung (Integer scaling)</translation> </message> <message> - <location filename="../SettingsView.ui" line="404"/> + <location filename="../SettingsView.ui" line="409"/> <source>Language</source> <translation>Sprache</translation> </message> <message> - <location filename="../SettingsView.ui" line="412"/> + <location filename="../SettingsView.ui" line="417"/> <source>English</source> <translation>Englisch</translation> </message> <message> - <location filename="../SettingsView.ui" line="428"/> + <location filename="../SettingsView.ui" line="433"/> <source>List view</source> <translation>Listenansicht</translation> </message> <message> - <location filename="../SettingsView.ui" line="433"/> + <location filename="../SettingsView.ui" line="438"/> <source>Tree view</source> <translation>Baumansicht</translation> </message> <message> - <location filename="../SettingsView.ui" line="420"/> + <location filename="../SettingsView.ui" line="1068"/> + <source>Game Boy model</source> + <translation>Game Boy-Modell</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1076"/> + <location filename="../SettingsView.ui" line="1112"/> + <location filename="../SettingsView.ui" line="1148"/> + <source>Autodetect</source> + <translation>Automatisch erkennen</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1081"/> + <location filename="../SettingsView.ui" line="1117"/> + <location filename="../SettingsView.ui" line="1153"/> + <source>Game Boy (DMG)</source> + <translation>Game Boy (DMG)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1086"/> + <location filename="../SettingsView.ui" line="1122"/> + <location filename="../SettingsView.ui" line="1158"/> + <source>Super Game Boy (SGB)</source> + <translation>Super Game Boy (SGB)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1091"/> + <location filename="../SettingsView.ui" line="1127"/> + <location filename="../SettingsView.ui" line="1163"/> + <source>Game Boy Color (CGB)</source> + <translation>Game Boy Color (CGB)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1096"/> + <location filename="../SettingsView.ui" line="1132"/> + <location filename="../SettingsView.ui" line="1168"/> + <source>Game Boy Advance (AGB)</source> + <translation>Game Boy Advance (AGB)</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1104"/> + <source>Super Game Boy model</source> + <translation>Super Game Boy-Modell</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1140"/> + <source>Game Boy Color model</source> + <translation>Game Boy Color-Modell</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1183"/> + <source>Default BG colors:</source> + <translation>Standard-Hintergrundfarben:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1461"/> + <source>Default sprite colors 1:</source> + <translation>Standard-Sprite-Farben 1:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1468"/> + <source>Default sprite colors 2:</source> + <translation>Standard-Sprite-Farben 2:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1350"/> + <source>Super Game Boy borders</source> + <translation>Super Game Boy-Rahmen</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="1364"/> + <source>Camera driver:</source> + <translation>Kamera-Treiber:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="425"/> <source>Library:</source> <translation>Bibliothek:</translation> </message> <message> - <location filename="../SettingsView.ui" line="441"/> + <location filename="../SettingsView.ui" line="446"/> <source>Show when no game open</source> <translation>Anzeigen, wenn kein Spiel geöffnet ist</translation> </message> <message> - <location filename="../SettingsView.ui" line="451"/> + <location filename="../SettingsView.ui" line="456"/> <source>Clear cache</source> <translation>Cache leeren</translation> </message> <message> - <location filename="../SettingsView.ui" line="503"/> + <location filename="../SettingsView.ui" line="508"/> <source>Fast forward speed:</source> <translation>Vorlauf-Geschwindigkeit:</translation> </message> <message> - <location filename="../SettingsView.ui" line="700"/> + <location filename="../SettingsView.ui" line="705"/> <source>Rewind affects save data</source> <translation>Rücklauf beeinflusst Speicherdaten</translation> </message> <message> - <location filename="../SettingsView.ui" line="710"/> + <location filename="../SettingsView.ui" line="715"/> <source>Preload entire ROM into memory</source> <translation>ROM-Datei vollständig in Arbeitsspeicher vorladen</translation> </message> <message> - <location filename="../SettingsView.ui" line="740"/> - <location filename="../SettingsView.ui" line="778"/> - <location filename="../SettingsView.ui" line="813"/> - <location filename="../SettingsView.ui" line="854"/> - <location filename="../SettingsView.ui" line="902"/> - <location filename="../SettingsView.ui" line="950"/> - <location filename="../SettingsView.ui" line="998"/> + <location filename="../SettingsView.ui" line="762"/> + <location filename="../SettingsView.ui" line="800"/> + <location filename="../SettingsView.ui" line="835"/> + <location filename="../SettingsView.ui" line="863"/> + <location filename="../SettingsView.ui" line="904"/> + <location filename="../SettingsView.ui" line="952"/> + <location filename="../SettingsView.ui" line="1000"/> + <location filename="../SettingsView.ui" line="1048"/> <source>Browse</source> <translation>Durchsuchen</translation> </message> <message> - <location filename="../SettingsView.ui" line="749"/> + <location filename="../SettingsView.ui" line="771"/> <source>Use BIOS file if found</source> <translation>BIOS-Datei verwenden, wenn vorhanden</translation> </message> <message> - <location filename="../SettingsView.ui" line="759"/> + <location filename="../SettingsView.ui" line="781"/> <source>Skip BIOS intro</source> <translation>BIOS-Intro überspringen</translation> </message> <message> - <location filename="../SettingsView.ui" line="515"/> + <location filename="../SettingsView.ui" line="520"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../SettingsView.ui" line="534"/> + <location filename="../SettingsView.ui" line="539"/> <source>Unbounded</source> <translation>unbegrenzt</translation> </message> <message> - <location filename="../SettingsView.ui" line="472"/> + <location filename="../SettingsView.ui" line="477"/> <source>Suspend screensaver</source> <translation>Bildschirmschoner deaktivieren</translation> </message>

@@ -4100,118 +4343,128 @@ <source>BIOS</source>

<translation>BIOS</translation> </message> <message> - <location filename="../SettingsView.ui" line="482"/> + <location filename="../SettingsView.ui" line="487"/> <source>Pause when inactive</source> <translation>Pause, wenn inaktiv</translation> </message> <message> - <location filename="../SettingsView.ui" line="600"/> + <location filename="../SettingsView.ui" line="605"/> <source>Run all</source> <translation>Alle ausführen</translation> </message> <message> - <location filename="../SettingsView.ui" line="605"/> + <location filename="../SettingsView.ui" line="610"/> <source>Remove known</source> <translation>Bekannte entfernen</translation> </message> <message> - <location filename="../SettingsView.ui" line="610"/> + <location filename="../SettingsView.ui" line="615"/> <source>Detect and remove</source> <translation>Erkennen und entfernen</translation> </message> <message> - <location filename="../SettingsView.ui" line="465"/> + <location filename="../SettingsView.ui" line="470"/> <source>Allow opposing input directions</source> <translation>Gegensätzliche Eingaberichtungen erlauben</translation> </message> <message> - <location filename="../SettingsView.ui" line="632"/> - <location filename="../SettingsView.ui" line="669"/> + <location filename="../SettingsView.ui" line="637"/> + <location filename="../SettingsView.ui" line="674"/> <source>Screenshot</source> <translation>Screenshot</translation> </message> <message> - <location filename="../SettingsView.ui" line="642"/> - <location filename="../SettingsView.ui" line="679"/> + <location filename="../SettingsView.ui" line="647"/> + <location filename="../SettingsView.ui" line="684"/> <source>Save data</source> <translation>Speicherdaten</translation> </message> <message> - <location filename="../SettingsView.ui" line="652"/> - <location filename="../SettingsView.ui" line="686"/> + <location filename="../SettingsView.ui" line="657"/> + <location filename="../SettingsView.ui" line="691"/> <source>Cheat codes</source> <translation>Cheat-Codes</translation> </message> <message> - <location filename="../SettingsView.ui" line="553"/> + <location filename="../SettingsView.ui" line="558"/> <source>Enable rewind</source> <translation>Rücklauf aktivieren</translation> </message> <message> - <location filename="../SettingsView.ui" line="386"/> + <location filename="../SettingsView.ui" line="391"/> <source>Bilinear filtering</source> <translation>Bilineare Filterung</translation> </message> <message> - <location filename="../SettingsView.ui" line="560"/> + <location filename="../SettingsView.ui" line="565"/> <source>Rewind history:</source> <translation>Rücklauf-Verlauf:</translation> </message> <message> - <location filename="../SettingsView.ui" line="592"/> + <location filename="../SettingsView.ui" line="597"/> <source>Idle loops:</source> <translation>Leerlaufprozesse:</translation> </message> <message> - <location filename="../SettingsView.ui" line="625"/> + <location filename="../SettingsView.ui" line="630"/> <source>Savestate extra data:</source> <translation>Zusätzliche Savestate-Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="662"/> + <location filename="../SettingsView.ui" line="667"/> <source>Load extra data:</source> <translation>Lade zusätzliche Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="721"/> + <location filename="../SettingsView.ui" line="722"/> + <source>Autofire interval:</source> + <translation>Autofeuer-Intervall:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="743"/> <source>GB BIOS file:</source> <translation>Datei mit GB-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="787"/> + <location filename="../SettingsView.ui" line="809"/> <source>GBA BIOS file:</source> <translation>Datei mit GBA-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="794"/> + <location filename="../SettingsView.ui" line="816"/> <source>GBC BIOS file:</source> <translation>Datei mit GBC-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="829"/> + <location filename="../SettingsView.ui" line="844"/> + <source>SGB BIOS file:</source> + <translation>Datei mit SGB-BIOS:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="879"/> <source>Save games</source> <translation>Spielstände</translation> </message> <message> - <location filename="../SettingsView.ui" line="863"/> - <location filename="../SettingsView.ui" line="911"/> - <location filename="../SettingsView.ui" line="959"/> - <location filename="../SettingsView.ui" line="1007"/> + <location filename="../SettingsView.ui" line="913"/> + <location filename="../SettingsView.ui" line="961"/> + <location filename="../SettingsView.ui" line="1009"/> + <location filename="../SettingsView.ui" line="1057"/> <source>Same directory as the ROM</source> <translation>Verzeichnis der ROM-Datei</translation> </message> <message> - <location filename="../SettingsView.ui" line="877"/> + <location filename="../SettingsView.ui" line="927"/> <source>Save states</source> <translation>Savestates</translation> </message> <message> - <location filename="../SettingsView.ui" line="925"/> + <location filename="../SettingsView.ui" line="975"/> <source>Screenshots</source> <translation>Screenshots</translation> </message> <message> - <location filename="../SettingsView.ui" line="973"/> + <location filename="../SettingsView.ui" line="1023"/> <source>Patches</source> <translation>Patches</translation> </message>
M src/platform/qt/utils.hsrc/platform/qt/utils.h

@@ -3,8 +3,7 @@ *

* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef QGBA_UTILS_H -#define QGBA_UTILS_H +#pragma once #include <mgba/core/core.h>

@@ -16,5 +15,3 @@ QString niceSizeFormat(size_t filesize);

QString nicePlatformFormat(mPlatform platform); } - -#endif
M src/platform/sdl/CMakeLists.txtsrc/platform/sdl/CMakeLists.txt

@@ -88,7 +88,7 @@ endif()

if(ENABLE_SCRIPTING) if(BUILD_PYTHON) - list(APPEND PLATFORM_LIBRARY "${PYTHON_LIBRARY}") + list(APPEND PLATFORM_LIBRARY ${BINARY_NAME}-pylib) endif() endif()
M src/platform/sdl/gl-sdl.csrc/platform/sdl/gl-sdl.c

@@ -9,6 +9,8 @@ #include "gl-common.h"

#include <mgba/core/core.h> #include <mgba/core/thread.h> +#include <mgba-util/math.h> + #include "platform/opengl/gl.h" static void _doViewport(int w, int h, struct VideoBackend* v) {

@@ -31,8 +33,9 @@

bool mSDLGLInit(struct mSDLRenderer* renderer) { mSDLGLCommonInit(renderer); - renderer->outputBuffer = malloc(renderer->width * renderer->height * BYTES_PER_PIXEL); - memset(renderer->outputBuffer, 0, renderer->width * renderer->height * BYTES_PER_PIXEL); + size_t size = renderer->width * renderer->height * BYTES_PER_PIXEL; + renderer->outputBuffer = malloc(size); + memset(renderer->outputBuffer, 0, size); renderer->core->setVideoBuffer(renderer->core, renderer->outputBuffer, renderer->width); mGLContextCreate(&renderer->gl);

@@ -64,6 +67,10 @@ _doViewport(renderer->viewportWidth, renderer->viewportHeight, v);

renderer->player.windowUpdated = 0; } #endif + } + if (renderer->width != v->width || renderer->height != v->height) { + renderer->core->setVideoBuffer(renderer->core, renderer->outputBuffer, renderer->width); + v->setDimensions(v, renderer->width, renderer->height); } if (mCoreSyncWaitFrameStart(&context->impl->sync)) {
M src/platform/sdl/gles2-sdl.csrc/platform/sdl/gles2-sdl.c

@@ -98,12 +98,13 @@ #else

mSDLGLCommonInit(renderer); #endif + size_t size = renderer->width * renderer->height * BYTES_PER_PIXEL; #ifndef __APPLE__ - renderer->outputBuffer = memalign(16, renderer->width * renderer->height * BYTES_PER_PIXEL); + renderer->outputBuffer = memalign(16, size); #else - posix_memalign((void**) &renderer->outputBuffer, 16, renderer->width * renderer->height * BYTES_PER_PIXEL); + posix_memalign((void**) &renderer->outputBuffer, 16, size); #endif - memset(renderer->outputBuffer, 0, renderer->width * renderer->height * BYTES_PER_PIXEL); + memset(renderer->outputBuffer, 0, size); renderer->core->setVideoBuffer(renderer->core, renderer->outputBuffer, renderer->width); mGLES2ContextCreate(&renderer->gl2);
M src/platform/sdl/main.csrc/platform/sdl/main.c

@@ -220,6 +220,13 @@

bool didFail = !mCoreThreadStart(&thread); if (!didFail) { #if SDL_VERSION_ATLEAST(2, 0, 0) + renderer->core->desiredVideoDimensions(renderer->core, &renderer->width, &renderer->height); + unsigned width = renderer->width * renderer->ratio; + unsigned height = renderer->height * renderer->ratio; + if (width != (unsigned) renderer->viewportWidth && height != (unsigned) renderer->viewportHeight) { + SDL_SetWindowSize(renderer->window, width, height); + renderer->player.windowUpdated = 1; + } mSDLSetScreensaverSuspendable(&renderer->events, renderer->core->opts.suspendScreensaver); mSDLSuspendScreensaver(&renderer->events); #endif
M src/platform/sdl/sdl-events.csrc/platform/sdl/sdl-events.c

@@ -408,11 +408,13 @@ if (!event->keysym.mod) {

key = mInputMapKey(sdlContext->bindings, SDL_BINDING_KEY, event->keysym.sym); } if (key != -1) { + mCoreThreadInterrupt(context); if (event->type == SDL_KEYDOWN) { context->core->addKeys(context->core, 1 << key); } else { context->core->clearKeys(context->core, 1 << key); } + mCoreThreadContinue(context); return; } if (event->keysym.sym == SDLK_TAB) {

@@ -513,21 +515,23 @@ }

} } -static void _mSDLHandleJoyButton(struct mCore* core, struct mSDLPlayer* sdlContext, const struct SDL_JoyButtonEvent* event) { +static void _mSDLHandleJoyButton(struct mCoreThread* context, struct mSDLPlayer* sdlContext, const struct SDL_JoyButtonEvent* event) { int key = 0; key = mInputMapKey(sdlContext->bindings, SDL_BINDING_BUTTON, event->button); if (key == -1) { return; } + mCoreThreadInterrupt(context); if (event->type == SDL_JOYBUTTONDOWN) { - core->addKeys(core, 1 << key); + context->core->addKeys(context->core, 1 << key); } else { - core->clearKeys(core, 1 << key); + context->core->clearKeys(context->core, 1 << key); } + mCoreThreadContinue(context); } -static void _mSDLHandleJoyHat(struct mCore* core, struct mSDLPlayer* sdlContext, const struct SDL_JoyHatEvent* event) { +static void _mSDLHandleJoyHat(struct mCoreThread* context, struct mSDLPlayer* sdlContext, const struct SDL_JoyHatEvent* event) { int allKeys = mInputMapHat(sdlContext->bindings, SDL_BINDING_BUTTON, event->hat, -1); if (allKeys == 0) { return;

@@ -535,11 +539,13 @@ }

int keys = mInputMapHat(sdlContext->bindings, SDL_BINDING_BUTTON, event->hat, event->value); - core->clearKeys(core, allKeys ^ keys); - core->addKeys(core, keys); + mCoreThreadInterrupt(context); + context->core->clearKeys(context->core, allKeys ^ keys); + context->core->addKeys(context->core, keys); + mCoreThreadContinue(context); } -static void _mSDLHandleJoyAxis(struct mCore* core, struct mSDLPlayer* sdlContext, const struct SDL_JoyAxisEvent* event) { +static void _mSDLHandleJoyAxis(struct mCoreThread* context, struct mSDLPlayer* sdlContext, const struct SDL_JoyAxisEvent* event) { int clearKeys = ~mInputClearAxis(sdlContext->bindings, SDL_BINDING_BUTTON, event->axis, -1); int newKeys = 0; int key = mInputMapAxis(sdlContext->bindings, SDL_BINDING_BUTTON, event->axis, event->value);

@@ -547,8 +553,10 @@ if (key != -1) {

newKeys |= 1 << key; } clearKeys &= ~newKeys; - core->clearKeys(core, clearKeys); - core->addKeys(core, newKeys); + mCoreThreadInterrupt(context); + context->core->clearKeys(context->core, clearKeys); + context->core->addKeys(context->core, newKeys); + mCoreThreadContinue(context); }

@@ -578,13 +586,13 @@ _mSDLHandleKeypress(context, sdlContext, &event->key);

break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: - _mSDLHandleJoyButton(context->core, sdlContext, &event->jbutton); + _mSDLHandleJoyButton(context, sdlContext, &event->jbutton); break; case SDL_JOYHATMOTION: - _mSDLHandleJoyHat(context->core, sdlContext, &event->jhat); + _mSDLHandleJoyHat(context, sdlContext, &event->jhat); break; case SDL_JOYAXISMOTION: - _mSDLHandleJoyAxis(context->core, sdlContext, &event->jaxis); + _mSDLHandleJoyAxis(context, sdlContext, &event->jaxis); break; } }
M src/platform/sdl/sw-sdl.csrc/platform/sdl/sw-sdl.c

@@ -93,12 +93,12 @@ #if !SDL_VERSION_ATLEAST(2, 0, 0)

SDL_Surface* surface = SDL_GetVideoSurface(); #endif - while (context->state < THREAD_EXITING) { + while (mCoreThreadIsActive(context)) { while (SDL_PollEvent(&event)) { mSDLHandleEvent(context, &renderer->player, &event); } - if (mCoreSyncWaitFrameStart(&context->sync)) { + if (mCoreSyncWaitFrameStart(&context->impl->sync)) { #if SDL_VERSION_ATLEAST(2, 0, 0) SDL_UnlockTexture(renderer->sdlTex); SDL_RenderCopy(renderer->sdlRenderer, renderer->sdlTex, 0, 0);

@@ -134,7 +134,7 @@ SDL_Flip(surface);

SDL_LockSurface(surface); #endif } - mCoreSyncWaitFrameEnd(&context->sync); + mCoreSyncWaitFrameEnd(&context->impl->sync); } }
D src/platform/test/suite-main.c

@@ -1,27 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "util/test/suite.h" - -#include "util/test/util.h" -#include "core/test/core.h" -#ifdef M_CORE_GBA -#include "gba/test/gba.h" -#endif -#ifdef M_CORE_GB -#include "gb/test/gb.h" -#endif - -int main() { - int failures = TestRunUtil(); - failures += TestRunCore(); -#ifdef M_CORE_GBA - failures += TestRunGBA(); -#endif -#ifdef M_CORE_GB - failures += TestRunGB(); -#endif - return failures != 0; -}
M src/platform/wii/main.csrc/platform/wii/main.c

@@ -33,7 +33,7 @@ #define WIIMOTE_INPUT 0x5749494D

#define CLASSIC_INPUT 0x57494943 #define TEX_W 256 -#define TEX_H 160 +#define TEX_H 224 static void _mapKey(struct mInputMap* map, uint32_t binding, int nativeKey, enum GBAKey key) { mInputBindKey(map, binding, __builtin_ctz(nativeKey), key);
M src/util/arm-algo.Ssrc/util/arm-algo.S

@@ -6,32 +6,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/.

#if defined(__ARM_NEON) && !defined(PSP2) # r0: Destination # r1: Source -# r2: Number of words to copy as halfwords -.global _to16Bit -_to16Bit: -push {r4-r10} -mov r8, r0 -mov r9, r1 -mov r10, r2 -.L0: -tst r10, #15 -beq .L1 -ldr r0, [r9], #4 -strh r0, [r8], #2 -sub r10, #1 -b .L0 -.L1: -vld4.16 {d0, d1, d2, d3}, [r9]! -vld4.16 {d4, d5, d6, d7}, [r9]! -vst2.16 {d0, d2}, [r8]! -vst2.16 {d4, d6}, [r8]! -subs r10, #16 -bne .L1 -pop {r4-r10} -bx lr - -# r0: Destination -# r1: Source # r2: Width # r3: Height .global _neon2x
M src/util/crc32.csrc/util/crc32.c

@@ -48,6 +48,7 @@ enum {

BUFFER_SIZE = 1024 }; +#ifndef HAVE_CRC32 static uint32_t crc32Table[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,

@@ -93,12 +94,14 @@ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,

0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; +#endif uint32_t doCrc32(const void* buf, size_t size) { - return updateCrc32(0, buf, size); + return crc32(0, buf, size); } -uint32_t updateCrc32(uint32_t crc, const void* buf, size_t size) { +#ifndef HAVE_CRC32 +uint32_t crc32(uint32_t crc, const void* buf, size_t size) { const uint8_t* p = buf; crc = ~crc;

@@ -108,9 +111,10 @@ }

return ~crc; } +#endif uint32_t fileCrc32(struct VFile* vf, size_t endOffset) { - char buffer[BUFFER_SIZE]; + uint8_t buffer[BUFFER_SIZE]; size_t blocksize; size_t alreadyRead = 0; if (vf->seek(vf, 0, SEEK_SET) < 0) {

@@ -124,7 +128,7 @@ toRead = endOffset - alreadyRead;

} blocksize = vf->read(vf, buffer, toRead); alreadyRead += blocksize; - crc = updateCrc32(crc, buffer, blocksize); + crc = crc32(crc, buffer, blocksize); if (blocksize < toRead) { return 0; }
M src/util/patch-ups.csrc/util/patch-ups.c

@@ -154,7 +154,7 @@ switch (command & 0x3) {

case 0x0: // SourceRead memmove(&writeBuffer[writeLocation], &readBuffer[writeLocation], length); - outputChecksum = updateCrc32(outputChecksum, &writeBuffer[writeLocation], length); + outputChecksum = crc32(outputChecksum, &writeBuffer[writeLocation], length); writeLocation += length; break; case 0x1:

@@ -162,7 +162,7 @@ // TargetRead

if (patch->vf->read(patch->vf, &writeBuffer[writeLocation], length) != (ssize_t) length) { return false; } - outputChecksum = updateCrc32(outputChecksum, &writeBuffer[writeLocation], length); + outputChecksum = crc32(outputChecksum, &writeBuffer[writeLocation], length); writeLocation += length; break; case 0x2:

@@ -177,7 +177,7 @@ if (readSourceLocation < 0 || readSourceLocation > (ssize_t) inSize) {

return false; } memmove(&writeBuffer[writeLocation], &readBuffer[readSourceLocation], length); - outputChecksum = updateCrc32(outputChecksum, &writeBuffer[writeLocation], length); + outputChecksum = crc32(outputChecksum, &writeBuffer[writeLocation], length); writeLocation += length; readSourceLocation += length; break;

@@ -198,7 +198,7 @@ writeBuffer[writeLocation] = writeBuffer[readTargetLocation];

++writeLocation; ++readTargetLocation; } - outputChecksum = updateCrc32(outputChecksum, &writeBuffer[writeLocation - length], length); + outputChecksum = crc32(outputChecksum, &writeBuffer[writeLocation - length], length); break; } }
M src/util/png-io.csrc/util/png-io.c

@@ -38,7 +38,7 @@ png_set_write_fn(png, source, _pngWrite, 0);

return png; } -png_infop PNGWriteHeader(png_structp png, unsigned width, unsigned height) { +static png_infop _pngWriteHeader(png_structp png, unsigned width, unsigned height, int type) { png_infop info = png_create_info_struct(png); if (!info) { return 0;

@@ -46,21 +46,21 @@ }

if (setjmp(png_jmpbuf(png))) { return 0; } - png_set_IHDR(png, info, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + png_set_IHDR(png, info, width, height, 8, type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png, info); return info; } +png_infop PNGWriteHeader(png_structp png, unsigned width, unsigned height) { + return _pngWriteHeader(png, width, height, PNG_COLOR_TYPE_RGB); +} + +png_infop PNGWriteHeaderA(png_structp png, unsigned width, unsigned height) { + return _pngWriteHeader(png, width, height, PNG_COLOR_TYPE_RGB_ALPHA); +} + png_infop PNGWriteHeader8(png_structp png, unsigned width, unsigned height) { - png_infop info = png_create_info_struct(png); - if (!info) { - return 0; - } - if (setjmp(png_jmpbuf(png))) { - return 0; - } - png_set_IHDR(png, info, width, height, 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); - return info; + return _pngWriteHeader(png, width, height, PNG_COLOR_TYPE_PALETTE); } bool PNGWritePalette(png_structp png, png_infop info, const uint32_t* palette, unsigned entries) {

@@ -119,6 +119,53 @@ #else

row[x * 3] = pixelData[stride * i * 4 + x * 4]; row[x * 3 + 1] = pixelData[stride * i * 4 + x * 4 + 1]; row[x * 3 + 2] = pixelData[stride * i * 4 + x * 4 + 2]; +#endif +#endif + } + png_write_row(png, row); + } + free(row); + return true; +} + +bool PNGWritePixelsA(png_structp png, unsigned width, unsigned height, unsigned stride, const void* pixels) { + png_bytep row = malloc(sizeof(png_byte) * width * 4); + if (!row) { + return false; + } + const png_byte* pixelData = pixels; + if (setjmp(png_jmpbuf(png))) { + free(row); + return false; + } + unsigned i; + for (i = 0; i < height; ++i) { + unsigned x; + for (x = 0; x < width; ++x) { +#ifdef COLOR_16_BIT + uint16_t c = ((uint16_t*) pixelData)[stride * i + x]; +#ifdef COLOR_5_6_5 + row[x * 4] = (c >> 8) & 0xF8; + row[x * 4 + 1] = (c >> 3) & 0xFC; + row[x * 4 + 2] = (c << 3) & 0xF8; + row[x * 4 + 3] = 0xFF; +#else + row[x * 4] = (c >> 7) & 0xF8; + row[x * 4 + 1] = (c >> 2) & 0xF8; + row[x * 4 + 2] = (c << 3) & 0xF8; + row[x * 4 + 3] = (c >> 15) * 0xFF; +#endif +#else +#ifdef __BIG_ENDIAN__ + row[x * 4] = pixelData[stride * i * 4 + x * 4 + 3]; + row[x * 4 + 1] = pixelData[stride * i * 4 + x * 4 + 2]; + row[x * 4 + 2] = pixelData[stride * i * 4 + x * 4 + 1]; + row[x * 4 + 3] = pixelData[stride * i * 4 + x * 4]; +#else + row[x * 4] = pixelData[stride * i * 4 + x * 4]; + row[x * 4 + 1] = pixelData[stride * i * 4 + x * 4 + 1]; + row[x * 4 + 2] = pixelData[stride * i * 4 + x * 4 + 2]; + row[x * 4 + 3] = pixelData[stride * i * 4 + x * 4 + 3]; #endif #endif }
M src/util/test/suite.hsrc/util/test/suite.h

@@ -12,14 +12,12 @@ #include <cmocka.h>

#define M_TEST_DEFINE(NAME) static void NAME (void **state ATTRIBUTE_UNUSED) -#define M_TEST_SUITE(NAME) _testSuite_ ## NAME -#define M_TEST_SUITE_RUN(NAME) (printf("\nRunning suite %s\n", # NAME), M_TEST_SUITE(NAME)()) #define M_TEST_SUITE_DEFINE(NAME, ...) M_TEST_SUITE_DEFINE_EX(NAME, NULL, NULL, __VA_ARGS__) #define M_TEST_SUITE_DEFINE_SETUP(NAME, ...) M_TEST_SUITE_DEFINE_EX(NAME, _testSuite_setup_ ## NAME, NULL, __VA_ARGS__) #define M_TEST_SUITE_DEFINE_TEARDOWN(NAME, ...) M_TEST_SUITE_DEFINE_EX(NAME, NULL, _testSuite_teardown_ ## NAME, __VA_ARGS__) #define M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(NAME, ...) M_TEST_SUITE_DEFINE_EX(NAME, _testSuite_setup_ ## NAME, _testSuite_teardown_ ## NAME, __VA_ARGS__) #define M_TEST_SUITE_DEFINE_EX(NAME, SETUP, TEARDOWN, ...) \ - int M_TEST_SUITE(NAME) (void) { \ + int main(void) { \ const static struct CMUnitTest tests[] = { \ __VA_ARGS__ \ }; \

@@ -28,7 +26,5 @@ }

#define M_TEST_SUITE_SETUP(NAME) static int _testSuite_setup_ ## NAME (void **state ATTRIBUTE_UNUSED) #define M_TEST_SUITE_TEARDOWN(NAME) static int _testSuite_teardown_ ## NAME (void **state ATTRIBUTE_UNUSED) - -#define M_TEST_SUITE_DECLARE(NAME) extern int M_TEST_SUITE(NAME) (void) #endif
D src/util/test/util.c

@@ -1,16 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "util/test/suite.h" - -M_TEST_SUITE_DECLARE(TextCodec); -M_TEST_SUITE_DECLARE(VFS); - -int TestRunUtil(void) { - int failures = 0; - failures += M_TEST_SUITE_RUN(TextCodec); - failures += M_TEST_SUITE_RUN(VFS); - return failures; -}
D src/util/test/util.h

@@ -1,12 +0,0 @@

-/* Copyright (c) 2013-2016 Jeffrey Pfau - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef TEST_UTIL_H -#define TEST_UTIL_H -#include <mgba-util/common.h> - -int TestRunUtil(void); - -#endif