all repos — mgba @ 97e2004fd34cb5b0c377f8268e332609ac29be6f

mGBA Game Boy Advance Emulator

Merge branch 'master' into feature/input-revamp
Vicki Pfau vi@endrift.com
Thu, 06 Jul 2017 15:16:53 -0700
commit

97e2004fd34cb5b0c377f8268e332609ac29be6f

parent

0e03a612eb4299911c88e92b34dcb759e87e3cd1

M CHANGESCHANGES

@@ -1,3 +1,7 @@

+0.7.0: (Future) +Misc: + - GBA Timer: Use global cycles for timers + 0.6.0: (Future) Features: - GBA: Support printing debug strings from inside a game

@@ -25,6 +29,7 @@ - Implement keypad interrupts

- LR35902: Watchpoints - Memory search - Debugger: Execution tracing + - Qt: Italian translation (by theheroGAC) Bugfixes: - LR35902: Fix core never exiting with certain event patterns - GB Timer: Improve DIV reset behavior

@@ -73,6 +78,10 @@ - GBA Savedata: Update and fix Sharkport importing (fixes mgba.io/i/658)

- OpenGL: Fix some shaders causing offset graphics - Qt: Fix game unpausing after frame advancing and refocusing - GB Timer: Fix sub-M-cycle DIV reset timing and edge triggering + - Core: Fix interrupting a thread while on the thread (fixes mgba.io/i/692) + - Core: Fix directory sets crashing on close if base isn't properly detached + - Qt: Fix window icon being stretched + - Qt: Fix data directory path Misc: - SDL: Remove scancode key input - GBA Video: Clean up unused timers

@@ -142,6 +151,30 @@ - Core: Config values can now be hexadecimal

- GB: Reset with initial state of DIV register - GB MBC: New MBC7 implementation - Qt: Better highlight active key in control binding + - Core: Improved threading interrupted detection + - GBA Timer: Improve accuracy of timers + +0.6 beta 2: (Future) +Features: + - Qt: Italian translation (by theheroGAC) + - Qt: Updated German translation +Bugfixes: + - Qt: Fix memory search close button (fixes mgba.io/i/769) + - Qt: Fix window icon being stretched + - Qt: Fix initial window size (fixes mgba.io/i/766) + - Qt: Fix data directory path + - Qt: Fix controls not saving on non-SDL builds + - GB Video: Fix LYC regression + - Qt: Fix translation initialization (fixes mgba.io/i/776) + - PSP2: Use custom localtime_r since newlib version is broken (fixes mgba.io/i/560) +Misc: + - Qt: Add language selector + - GBA Timer: Improve accuracy of timers + - Qt: Minor test fixes + - PSP2: Update toolchain to use vita.cmake + +0.6 beta 1: (2017-06-29) + - Initial beta for 0.6 0.5.2: (2016-12-31) Bugfixes:
M CMakeLists.txtCMakeLists.txt

@@ -275,7 +275,9 @@

include(CheckFunctionExists) check_function_exists(strdup HAVE_STRDUP) check_function_exists(strndup HAVE_STRNDUP) -check_function_exists(localtime_r HAVE_LOCALTIME_R) +if(NOT DEFINED PSP2) + check_function_exists(localtime_r HAVE_LOCALTIME_R) +endif() if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") check_function_exists(snprintf_l HAVE_SNPRINTF_L) if(CMAKE_SYSTEM_NAME STREQUAL "Linux")

@@ -843,7 +845,6 @@ INCLUDE_DIRECTORIES "${SDL_INCLUDE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/src;${CMAKE_CURRENT_SOURCE_DIR}/include")

endif() endif() -message(STATUS ${USE_PTHREADS}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/core/flags.h.in ${CMAKE_CURRENT_BINARY_DIR}/flags.h) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/flags.h DESTINATION include/mgba COMPONENT lib${BINARY_NAME})

@@ -897,6 +898,7 @@ set(SUMMARY_ZIP OFF)

endif() if(NOT QUIET) + message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "Platforms:") message(STATUS " Game Boy Advance: ${M_CORE_GBA}") message(STATUS " Game Boy: ${M_CORE_GB}")
M include/mgba/internal/gba/serialize.hinclude/mgba/internal/gba/serialize.h

@@ -264,10 +264,10 @@ } video;

struct { uint16_t reload; - uint16_t oldReload; + uint16_t reserved; uint32_t lastEvent; uint32_t nextEvent; - int32_t overflowInterval; + uint32_t nextIrq; GBATimerFlags flags; } timers[4];
M include/mgba/internal/gba/timer.hinclude/mgba/internal/gba/timer.h

@@ -17,19 +17,19 @@ DECL_BITS(GBATimerFlags, PrescaleBits, 0, 4);

DECL_BIT(GBATimerFlags, CountUp, 4); DECL_BIT(GBATimerFlags, DoIrq, 5); DECL_BIT(GBATimerFlags, Enable, 6); +DECL_BIT(GBATimerFlags, IrqPending, 7); struct GBA; struct GBATimer { uint16_t reload; - uint16_t oldReload; - uint32_t lastEvent; + int32_t lastEvent; struct mTimingEvent event; - int32_t overflowInterval; + struct mTimingEvent irq; GBATimerFlags flags; }; void GBATimerInit(struct GBA* gba); -void GBATimerUpdateRegister(struct GBA* gba, int timer); +void GBATimerUpdateRegister(struct GBA* gba, int timer, int32_t cyclesLate); void GBATimerWriteTMCNT_LO(struct GBA* gba, int timer, uint16_t value); void GBATimerWriteTMCNT_HI(struct GBA* gba, int timer, uint16_t value);
M res/patrons.txtres/patrons.txt

@@ -3,6 +3,7 @@ Fog

Reilly Grant Philip Horton Jordan Jorgensen +mars Rohit Nirmal Rhys Powell rootfather
M src/core/core.csrc/core/core.c

@@ -22,7 +22,7 @@ #ifndef MINIMAL_CORE

#include <mgba/feature/video-logger.h> #endif -const static struct mCoreFilter { +static const struct mCoreFilter { bool (*filter)(struct VFile*); struct mCore* (*open)(void); enum mPlatform platform;
M src/core/directories.csrc/core/directories.c

@@ -22,28 +22,58 @@ void mDirectorySetDeinit(struct mDirectorySet* dirs) {

mDirectorySetDetachBase(dirs); if (dirs->archive) { + if (dirs->archive == dirs->save) { + dirs->save = NULL; + } + if (dirs->archive == dirs->patch) { + dirs->patch = NULL; + } + if (dirs->archive == dirs->state) { + dirs->state = NULL; + } + if (dirs->archive == dirs->screenshot) { + dirs->screenshot = NULL; + } dirs->archive->close(dirs->archive); - dirs->archive = 0; + dirs->archive = NULL; } if (dirs->save) { + if (dirs->save == dirs->patch) { + dirs->patch = NULL; + } + if (dirs->save == dirs->state) { + dirs->state = NULL; + } + if (dirs->save == dirs->screenshot) { + dirs->screenshot = NULL; + } dirs->save->close(dirs->save); - dirs->save = 0; + dirs->save = NULL; } if (dirs->patch) { + if (dirs->patch == dirs->state) { + dirs->state = NULL; + } + if (dirs->patch == dirs->screenshot) { + dirs->screenshot = NULL; + } dirs->patch->close(dirs->patch); - dirs->patch = 0; + dirs->patch = NULL; } if (dirs->state) { + if (dirs->state == dirs->screenshot) { + dirs->state = NULL; + } dirs->state->close(dirs->state); - dirs->state = 0; + dirs->state = NULL; } if (dirs->screenshot) { dirs->screenshot->close(dirs->screenshot); - dirs->screenshot = 0; + dirs->screenshot = NULL; } }

@@ -65,21 +95,21 @@ }

void mDirectorySetDetachBase(struct mDirectorySet* dirs) { if (dirs->save == dirs->base) { - dirs->save = 0; + dirs->save = NULL; } if (dirs->patch == dirs->base) { - dirs->patch = 0; + dirs->patch = NULL; } if (dirs->state == dirs->base) { - dirs->state = 0; + dirs->state = NULL; } if (dirs->screenshot == dirs->base) { - dirs->screenshot = 0; + dirs->screenshot = NULL; } if (dirs->base) { dirs->base->close(dirs->base); - dirs->base = 0; + dirs->base = NULL; } }
M src/core/thread.csrc/core/thread.c

@@ -401,11 +401,14 @@ }

MutexLock(&threadContext->stateMutex); ++threadContext->interruptDepth; if (threadContext->interruptDepth > 1 || !mCoreThreadIsActive(threadContext)) { + if (threadContext->state == THREAD_INTERRUPTING) { + threadContext->state = THREAD_INTERRUPTED; + } MutexUnlock(&threadContext->stateMutex); return; } threadContext->savedState = threadContext->state; - threadContext->state = THREAD_INTERRUPTING; + threadContext->state = THREAD_INTERRUPTED; ConditionWake(&threadContext->stateCond); MutexUnlock(&threadContext->stateMutex); }

@@ -465,7 +468,7 @@

bool mCoreThreadIsPaused(struct mCoreThread* threadContext) { bool isPaused; MutexLock(&threadContext->stateMutex); - if (threadContext->state == THREAD_INTERRUPTED || threadContext->state == THREAD_INTERRUPTING) { + if (threadContext->interruptDepth) { isPaused = threadContext->savedState == THREAD_PAUSED; } else { isPaused = threadContext->state == THREAD_PAUSED;

@@ -495,7 +498,7 @@

void mCoreThreadPauseFromThread(struct mCoreThread* threadContext) { bool frameOn = true; MutexLock(&threadContext->stateMutex); - if (threadContext->state == THREAD_RUNNING || (threadContext->state == THREAD_INTERRUPTING && threadContext->savedState == THREAD_RUNNING)) { + if (threadContext->state == THREAD_RUNNING || (threadContext->interruptDepth && threadContext->savedState == THREAD_RUNNING)) { threadContext->state = THREAD_PAUSING; frameOn = false; }

@@ -506,11 +509,11 @@ }

void mCoreThreadSetRewinding(struct mCoreThread* threadContext, bool rewinding) { MutexLock(&threadContext->stateMutex); - if (rewinding && (threadContext->state == THREAD_REWINDING || (threadContext->state == THREAD_INTERRUPTING && threadContext->savedState == THREAD_REWINDING))) { + if (rewinding && (threadContext->state == THREAD_REWINDING || (threadContext->interruptDepth && threadContext->savedState == THREAD_REWINDING))) { MutexUnlock(&threadContext->stateMutex); return; } - if (!rewinding && (threadContext->state == THREAD_RUNNING || (threadContext->state == THREAD_INTERRUPTING && threadContext->savedState == THREAD_RUNNING))) { + if (!rewinding && ((!threadContext->interruptDepth && threadContext->state != THREAD_REWINDING) || (threadContext->interruptDepth && threadContext->savedState != THREAD_REWINDING))) { MutexUnlock(&threadContext->stateMutex); return; }

@@ -526,7 +529,7 @@ }

void mCoreThreadWaitFromThread(struct mCoreThread* threadContext) { MutexLock(&threadContext->stateMutex); - if ((threadContext->state == THREAD_INTERRUPTED || threadContext->state == THREAD_INTERRUPTING) && threadContext->savedState == THREAD_RUNNING) { + if (threadContext->interruptDepth && threadContext->savedState == THREAD_RUNNING) { threadContext->savedState = THREAD_WAITING; } else if (threadContext->state == THREAD_RUNNING) { threadContext->state = THREAD_WAITING;

@@ -536,7 +539,7 @@ }

void mCoreThreadStopWaiting(struct mCoreThread* threadContext) { MutexLock(&threadContext->stateMutex); - if ((threadContext->state == THREAD_INTERRUPTED || threadContext->state == THREAD_INTERRUPTING) && threadContext->savedState == THREAD_WAITING) { + if (threadContext->interruptDepth && threadContext->savedState == THREAD_WAITING) { threadContext->savedState = THREAD_RUNNING; } else if (threadContext->state == THREAD_WAITING) { threadContext->state = THREAD_RUNNING;
M src/feature/video-logger.csrc/feature/video-logger.c

@@ -26,7 +26,7 @@ #define MAX_BLOCK_SIZE 0x800000

const char mVL_MAGIC[] = "mVL\0"; -const static struct mVLDescriptor { +static const struct mVLDescriptor { enum mPlatform platform; struct mCore* (*open)(void); } _descriptors[] = {
M src/gb/core.csrc/gb/core.c

@@ -29,26 +29,26 @@ #ifndef MINIMAL_CORE

#include <mgba/internal/gba/input.h> #endif -const static struct mCoreChannelInfo _GBVideoLayers[] = { +static const struct mCoreChannelInfo _GBVideoLayers[] = { { 0, "bg", "Background", NULL }, { 1, "obj", "Objects", NULL }, { 2, "win", "Window", NULL }, }; -const static struct mCoreChannelInfo _GBAudioChannels[] = { - { 0, "ch0", "Channel 0", "Square/Sweep" }, - { 1, "ch1", "Channel 1", "Square" }, - { 2, "ch2", "Channel 2", "PCM" }, - { 3, "ch3", "Channel 3", "Noise" }, +static const struct mCoreChannelInfo _GBAudioChannels[] = { + { 0, "ch1", "Channel 1", "Square/Sweep" }, + { 1, "ch2", "Channel 2", "Square" }, + { 2, "ch3", "Channel 3", "PCM" }, + { 3, "ch4", "Channel 4", "Noise" }, }; -const static struct LR35902Segment _GBSegments[] = { +static const struct LR35902Segment _GBSegments[] = { { .name = "ROM", .start = GB_BASE_CART_BANK1, .end = GB_BASE_VRAM }, { .name = "RAM", .start = GB_BASE_EXTERNAL_RAM, .end = GB_BASE_WORKING_RAM_BANK0 }, { 0 } }; -const static struct LR35902Segment _GBCSegments[] = { +static const struct LR35902Segment _GBCSegments[] = { { .name = "ROM", .start = GB_BASE_CART_BANK1, .end = GB_BASE_VRAM }, { .name = "RAM", .start = GB_BASE_EXTERNAL_RAM, .end = GB_BASE_WORKING_RAM_BANK0 }, { .name = "WRAM", .start = GB_BASE_WORKING_RAM_BANK1, .end = 0xE000 },

@@ -56,7 +56,7 @@ { .name = "VRAM", .start = GB_BASE_VRAM, .end = GB_BASE_EXTERNAL_RAM },

{ 0 } }; -const static struct mCoreMemoryBlock _GBMemoryBlocks[] = { +static const struct mCoreMemoryBlock _GBMemoryBlocks[] = { { -1, "mem", "All", "All", 0, 0x10000, 0x10000, mCORE_MEMORY_VIRTUAL }, { GB_REGION_CART_BANK0, "cart0", "ROM Bank", "Game Pak (32kiB)", GB_BASE_CART_BANK0, GB_SIZE_CART_BANK0 * 2, 0x800000, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED, 511 }, { GB_REGION_VRAM, "vram", "VRAM", "Video RAM (8kiB)", GB_BASE_VRAM, GB_BASE_VRAM + GB_SIZE_VRAM, GB_SIZE_VRAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

@@ -67,7 +67,7 @@ { GB_BASE_IO, "io", "MMIO", "Memory-Mapped I/O", GB_BASE_IO, GB_BASE_IO + GB_SIZE_IO, GB_SIZE_IO, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

{ GB_BASE_HRAM, "hram", "HRAM", "High RAM", GB_BASE_HRAM, GB_BASE_HRAM + GB_SIZE_HRAM, GB_SIZE_HRAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED }, }; -const static struct mCoreMemoryBlock _GBCMemoryBlocks[] = { +static const struct mCoreMemoryBlock _GBCMemoryBlocks[] = { { -1, "mem", "All", "All", 0, 0x10000, 0x10000, mCORE_MEMORY_VIRTUAL }, { GB_REGION_CART_BANK0, "cart0", "ROM Bank", "Game Pak (32kiB)", GB_BASE_CART_BANK0, GB_SIZE_CART_BANK0 * 2, 0x800000, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED, 511 }, { GB_REGION_VRAM, "vram", "VRAM", "Video RAM (8kiB)", GB_BASE_VRAM, GB_BASE_VRAM + GB_SIZE_VRAM, GB_SIZE_VRAM * 2, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED, 1 },
M src/gb/mbc.csrc/gb/mbc.c

@@ -558,7 +558,7 @@ mbc7->latch = (value & 0x55) == 0x55;

return; case 0x10: mbc7->latch |= (value & 0xAA); - if (mbc7->latch == 0xFF && memory->rotation && memory->rotation->sample) { + if (mbc7->latch == 0xAB && memory->rotation && memory->rotation->sample) { memory->rotation->sample(memory->rotation); } mbc7->latch = 0;
M src/gb/timer.csrc/gb/timer.c

@@ -74,7 +74,7 @@ _GBTimerDivIncrement(timer, (timer->p->cpu->executionState + 1) & 3);

if (timer->internalDiv & (timer->timaPeriod >> 1)) { ++timer->p->memory.io[REG_TIMA]; if (!timer->p->memory.io[REG_TIMA]) { - mTimingSchedule(&timer->p->timing, &timer->irq, 4 - (timer->p->cpu->executionState + 1) & 3); + mTimingSchedule(&timer->p->timing, &timer->irq, 4 - ((timer->p->cpu->executionState + 1) & 3)); } } timer->p->memory.io[REG_DIV] = 0;
M src/gb/video.csrc/gb/video.c

@@ -386,6 +386,7 @@ if (!_statIRQAsserted(video, oldStat) && _statIRQAsserted(video, video->stat)) {

video->p->memory.io[REG_IF] |= (1 << GB_IRQ_LCDSTAT); GBUpdateIRQs(video->p); } + video->p->memory.io[REG_STAT] = video->stat; } void GBVideoWritePalette(struct GBVideo* video, uint16_t address, uint8_t value) {
M src/gba/core.csrc/gba/core.c

@@ -28,7 +28,7 @@ #ifndef MINIMAL_CORE

#include <mgba/internal/gba/input.h> #endif -const static struct mCoreChannelInfo _GBAVideoLayers[] = { +static const struct mCoreChannelInfo _GBAVideoLayers[] = { { 0, "bg0", "Background 0", NULL }, { 1, "bg1", "Background 1", NULL }, { 2, "bg2", "Background 2", NULL },

@@ -36,16 +36,16 @@ { 3, "bg3", "Background 3", NULL },

{ 4, "obj", "Objects", NULL }, }; -const static struct mCoreChannelInfo _GBAAudioChannels[] = { - { 0, "ch0", "PSG Channel 0", "Square/Sweep" }, - { 1, "ch1", "PSG Channel 1", "Square" }, - { 2, "ch2", "PSG Channel 2", "PCM" }, - { 3, "ch3", "PSG Channel 3", "Noise" }, +static const struct mCoreChannelInfo _GBAAudioChannels[] = { + { 0, "ch1", "PSG Channel 1", "Square/Sweep" }, + { 1, "ch2", "PSG Channel 2", "Square" }, + { 2, "ch3", "PSG Channel 3", "PCM" }, + { 3, "ch4", "PSG Channel 4", "Noise" }, { 4, "chA", "FIFO Channel A", NULL }, { 5, "chB", "FIFO Channel B", NULL }, }; -const static struct mCoreMemoryBlock _GBAMemoryBlocks[] = { +static const struct mCoreMemoryBlock _GBAMemoryBlocks[] = { { -1, "mem", "All", "All", 0, 0x10000000, 0x10000000, mCORE_MEMORY_VIRTUAL }, { REGION_BIOS, "bios", "BIOS", "BIOS (16kiB)", BASE_BIOS, SIZE_BIOS, SIZE_BIOS, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, { REGION_WORKING_RAM, "wram", "EWRAM", "Working RAM (256kiB)", BASE_WORKING_RAM, BASE_WORKING_RAM + SIZE_WORKING_RAM, SIZE_WORKING_RAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

@@ -59,7 +59,7 @@ { REGION_CART1, "cart1", "ROM WS1", "Game Pak (Waitstate 1)", BASE_CART1, BASE_CART1 + SIZE_CART1, SIZE_CART1, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED },

{ REGION_CART2, "cart2", "ROM WS2", "Game Pak (Waitstate 2)", BASE_CART2, BASE_CART2 + SIZE_CART2, SIZE_CART2, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, }; -const static struct mCoreMemoryBlock _GBAMemoryBlocksSRAM[] = { +static const struct mCoreMemoryBlock _GBAMemoryBlocksSRAM[] = { { -1, "mem", "All", "All", 0, 0x10000000, 0x10000000, mCORE_MEMORY_VIRTUAL }, { REGION_BIOS, "bios", "BIOS", "BIOS (16kiB)", BASE_BIOS, SIZE_BIOS, SIZE_BIOS, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, { REGION_WORKING_RAM, "wram", "EWRAM", "Working RAM (256kiB)", BASE_WORKING_RAM, BASE_WORKING_RAM + SIZE_WORKING_RAM, SIZE_WORKING_RAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

@@ -74,7 +74,7 @@ { REGION_CART2, "cart2", "ROM WS2", "Game Pak (Waitstate 2)", BASE_CART2, BASE_CART2 + SIZE_CART2, SIZE_CART2, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED },

{ REGION_CART_SRAM, "sram", "SRAM", "Static RAM (64kiB)", BASE_CART_SRAM, BASE_CART_SRAM + SIZE_CART_SRAM, SIZE_CART_SRAM, true }, }; -const static struct mCoreMemoryBlock _GBAMemoryBlocksFlash512[] = { +static const struct mCoreMemoryBlock _GBAMemoryBlocksFlash512[] = { { -1, "mem", "All", "All", 0, 0x10000000, 0x10000000, mCORE_MEMORY_VIRTUAL }, { REGION_BIOS, "bios", "BIOS", "BIOS (16kiB)", BASE_BIOS, SIZE_BIOS, SIZE_BIOS, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, { REGION_WORKING_RAM, "wram", "EWRAM", "Working RAM (256kiB)", BASE_WORKING_RAM, BASE_WORKING_RAM + SIZE_WORKING_RAM, SIZE_WORKING_RAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

@@ -89,7 +89,7 @@ { REGION_CART2, "cart2", "ROM WS2", "Game Pak (Waitstate 2)", BASE_CART2, BASE_CART2 + SIZE_CART2, SIZE_CART2, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED },

{ REGION_CART_SRAM, "sram", "Flash", "Flash Memory (64kiB)", BASE_CART_SRAM, BASE_CART_SRAM + SIZE_CART_FLASH512, SIZE_CART_FLASH512, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED }, }; -const static struct mCoreMemoryBlock _GBAMemoryBlocksFlash1M[] = { +static const struct mCoreMemoryBlock _GBAMemoryBlocksFlash1M[] = { { -1, "mem", "All", "All", 0, 0x10000000, 0x10000000, mCORE_MEMORY_VIRTUAL }, { REGION_BIOS, "bios", "BIOS", "BIOS (16kiB)", BASE_BIOS, SIZE_BIOS, SIZE_BIOS, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, { REGION_WORKING_RAM, "wram", "EWRAM", "Working RAM (256kiB)", BASE_WORKING_RAM, BASE_WORKING_RAM + SIZE_WORKING_RAM, SIZE_WORKING_RAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },

@@ -104,7 +104,7 @@ { REGION_CART2, "cart2", "ROM WS2", "Game Pak (Waitstate 2)", BASE_CART2, BASE_CART2 + SIZE_CART2, SIZE_CART2, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED },

{ REGION_CART_SRAM, "sram", "Flash", "Flash Memory (64kiB)", BASE_CART_SRAM, BASE_CART_SRAM + SIZE_CART_FLASH512, SIZE_CART_FLASH1M, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED, 1 }, }; -const static struct mCoreMemoryBlock _GBAMemoryBlocksEEPROM[] = { +static const struct mCoreMemoryBlock _GBAMemoryBlocksEEPROM[] = { { -1, "mem", "All", "All", 0, 0x10000000, 0x10000000, mCORE_MEMORY_VIRTUAL }, { REGION_BIOS, "bios", "BIOS", "BIOS (16kiB)", BASE_BIOS, SIZE_BIOS, SIZE_BIOS, mCORE_MEMORY_READ | mCORE_MEMORY_MAPPED }, { REGION_WORKING_RAM, "wram", "EWRAM", "Working RAM (256kiB)", BASE_WORKING_RAM, BASE_WORKING_RAM + SIZE_WORKING_RAM, SIZE_WORKING_RAM, mCORE_MEMORY_RW | mCORE_MEMORY_MAPPED },
M src/gba/io.csrc/gba/io.c

@@ -707,17 +707,18 @@ gba->haltPending = false;

} switch (address) { + // Reading this takes two cycles (1N+1I), so let's remove them preemptively case REG_TM0CNT_LO: - GBATimerUpdateRegister(gba, 0); + GBATimerUpdateRegister(gba, 0, 2); break; case REG_TM1CNT_LO: - GBATimerUpdateRegister(gba, 1); + GBATimerUpdateRegister(gba, 1, 2); break; case REG_TM2CNT_LO: - GBATimerUpdateRegister(gba, 2); + GBATimerUpdateRegister(gba, 2, 2); break; case REG_TM3CNT_LO: - GBATimerUpdateRegister(gba, 3); + GBATimerUpdateRegister(gba, 3, 2); break; case REG_KEYINPUT:

@@ -925,10 +926,9 @@

for (i = 0; i < 4; ++i) { STORE_16(gba->memory.io[(REG_DMA0CNT_LO + i * 12) >> 1], (REG_DMA0CNT_LO + i * 12), state->io); STORE_16(gba->timers[i].reload, 0, &state->timers[i].reload); - STORE_16(gba->timers[i].oldReload, 0, &state->timers[i].oldReload); STORE_32(gba->timers[i].lastEvent - mTimingCurrentTime(&gba->timing), 0, &state->timers[i].lastEvent); STORE_32(gba->timers[i].event.when - mTimingCurrentTime(&gba->timing), 0, &state->timers[i].nextEvent); - STORE_32(gba->timers[i].overflowInterval, 0, &state->timers[i].overflowInterval); + STORE_32(gba->timers[i].irq.when - mTimingCurrentTime(&gba->timing), 0, &state->timers[i].nextIrq); STORE_32(gba->timers[i].flags, 0, &state->timers[i].flags); STORE_32(gba->memory.dma[i].nextSource, 0, &state->dma[i].nextSource); STORE_32(gba->memory.dma[i].nextDest, 0, &state->dma[i].nextDest);

@@ -954,8 +954,6 @@

uint32_t when; for (i = 0; i < 4; ++i) { LOAD_16(gba->timers[i].reload, 0, &state->timers[i].reload); - LOAD_16(gba->timers[i].oldReload, 0, &state->timers[i].oldReload); - LOAD_32(gba->timers[i].overflowInterval, 0, &state->timers[i].overflowInterval); LOAD_32(gba->timers[i].flags, 0, &state->timers[i].flags); if (i > 0 && GBATimerFlagsIsCountUp(gba->timers[i].flags)) { // Overwrite invalid values in savestate

@@ -967,6 +965,10 @@ }

LOAD_32(when, 0, &state->timers[i].nextEvent); if (GBATimerFlagsIsEnable(gba->timers[i].flags)) { mTimingSchedule(&gba->timing, &gba->timers[i].event, when); + } + LOAD_32(when, 0, &state->timers[i].nextIrq); + if (GBATimerFlagsIsIrqPending(gba->timers[i].flags)) { + mTimingSchedule(&gba->timing, &gba->timers[i].irq, when); } LOAD_16(gba->memory.dma[i].reg, (REG_DMA0CNT_HI + i * 12), state->io);
M src/gba/timer.csrc/gba/timer.c

@@ -8,14 +8,56 @@

#include <mgba/internal/gba/gba.h> #include <mgba/internal/gba/io.h> -static void GBATimerUpdate(struct mTiming* timing, struct GBA* gba, int timerId, uint32_t cyclesLate) { +#define TIMER_IRQ_DELAY 7 +#define TIMER_RELOAD_DELAY 0 +#define TIMER_STARTUP_DELAY 2 + +static void GBATimerIrq(struct GBA* gba, int timerId) { + struct GBATimer* timer = &gba->timers[timerId]; + if (GBATimerFlagsIsIrqPending(timer->flags)) { + timer->flags = GBATimerFlagsClearIrqPending(timer->flags); + GBARaiseIRQ(gba, IRQ_TIMER0 + timerId); + } +} + +static void GBATimerIrq0(struct mTiming* timing, void* context, uint32_t cyclesLate) { + UNUSED(timing); + UNUSED(cyclesLate); + GBATimerIrq(context, 0); +} + +static void GBATimerIrq1(struct mTiming* timing, void* context, uint32_t cyclesLate) { + UNUSED(timing); + UNUSED(cyclesLate); + GBATimerIrq(context, 1); +} + +static void GBATimerIrq2(struct mTiming* timing, void* context, uint32_t cyclesLate) { + UNUSED(timing); + UNUSED(cyclesLate); + GBATimerIrq(context, 2); +} + +static void GBATimerIrq3(struct mTiming* timing, void* context, uint32_t cyclesLate) { + UNUSED(timing); + UNUSED(cyclesLate); + GBATimerIrq(context, 3); +} + +static void GBATimerUpdate(struct GBA* gba, int timerId, uint32_t cyclesLate) { struct GBATimer* timer = &gba->timers[timerId]; gba->memory.io[(REG_TM0CNT_LO >> 1) + (timerId << 1)] = timer->reload; - timer->oldReload = timer->reload; - timer->lastEvent = timing->masterCycles - cyclesLate; + int32_t currentTime = mTimingCurrentTime(&gba->timing) - cyclesLate; + int32_t tickMask = (1 << GBATimerFlagsGetPrescaleBits(timer->flags)) - 1; + currentTime &= ~tickMask; + timer->lastEvent = currentTime; + GBATimerUpdateRegister(gba, timerId, 0); if (GBATimerFlagsIsDoIrq(timer->flags)) { - GBARaiseIRQ(gba, IRQ_TIMER0 + timerId); + timer->flags = GBATimerFlagsFillIrqPending(timer->flags); + if (!mTimingIsScheduled(&gba->timing, &timer->irq)) { + mTimingSchedule(&gba->timing, &timer->irq, TIMER_IRQ_DELAY - cyclesLate); + } } if (gba->audio.enable && timerId < 2) {

@@ -33,31 +75,30 @@ struct GBATimer* nextTimer = &gba->timers[timerId + 1];

if (GBATimerFlagsIsCountUp(nextTimer->flags)) { // TODO: Does this increment while disabled? ++gba->memory.io[(REG_TM1CNT_LO >> 1) + (timerId << 1)]; if (!gba->memory.io[(REG_TM1CNT_LO >> 1) + (timerId << 1)] && GBATimerFlagsIsEnable(nextTimer->flags)) { - mTimingSchedule(timing, &nextTimer->event, -cyclesLate); + GBATimerUpdate(gba, timerId + 1, cyclesLate); } } } - - if (!GBATimerFlagsIsCountUp(timer->flags)) { - uint32_t nextEvent = timer->overflowInterval - cyclesLate; - mTimingSchedule(timing, &timer->event, nextEvent); - } } static void GBATimerUpdate0(struct mTiming* timing, void* context, uint32_t cyclesLate) { - GBATimerUpdate(timing, context, 0, cyclesLate); + UNUSED(timing); + GBATimerUpdate(context, 0, cyclesLate); } static void GBATimerUpdate1(struct mTiming* timing, void* context, uint32_t cyclesLate) { - GBATimerUpdate(timing, context, 1, cyclesLate); + UNUSED(timing); + GBATimerUpdate(context, 1, cyclesLate); } static void GBATimerUpdate2(struct mTiming* timing, void* context, uint32_t cyclesLate) { - GBATimerUpdate(timing, context, 2, cyclesLate); + UNUSED(timing); + GBATimerUpdate(context, 2, cyclesLate); } static void GBATimerUpdate3(struct mTiming* timing, void* context, uint32_t cyclesLate) { - GBATimerUpdate(timing, context, 3, cyclesLate); + UNUSED(timing); + GBATimerUpdate(context, 3, cyclesLate); } void GBATimerInit(struct GBA* gba) {

@@ -78,62 +119,91 @@ gba->timers[3].event.name = "GBA Timer 3";

gba->timers[3].event.callback = GBATimerUpdate3; gba->timers[3].event.context = gba; gba->timers[3].event.priority = 0x23; + gba->timers[0].irq.name = "GBA Timer 0 IRQ"; + gba->timers[0].irq.callback = GBATimerIrq0; + gba->timers[0].irq.context = gba; + gba->timers[0].irq.priority = 0x28; + gba->timers[1].irq.name = "GBA Timer 1 IRQ"; + gba->timers[1].irq.callback = GBATimerIrq1; + gba->timers[1].irq.context = gba; + gba->timers[1].irq.priority = 0x29; + gba->timers[2].irq.name = "GBA Timer 2 IRQ"; + gba->timers[2].irq.callback = GBATimerIrq2; + gba->timers[2].irq.context = gba; + gba->timers[2].irq.priority = 0x2A; + gba->timers[3].irq.name = "GBA Timer 3 IRQ"; + gba->timers[3].irq.callback = GBATimerIrq3; + gba->timers[3].irq.context = gba; + gba->timers[3].irq.priority = 0x2B; } -void GBATimerUpdateRegister(struct GBA* gba, int timer) { +void GBATimerUpdateRegister(struct GBA* gba, int timer, int32_t cyclesLate) { struct GBATimer* currentTimer = &gba->timers[timer]; - if (GBATimerFlagsIsEnable(currentTimer->flags) && !GBATimerFlagsIsCountUp(currentTimer->flags)) { - int32_t prefetchSkew = -2; - if (gba->memory.lastPrefetchedPc > (uint32_t) gba->cpu->gprs[ARM_PC]) { - prefetchSkew += ((gba->memory.lastPrefetchedPc - gba->cpu->gprs[ARM_PC]) * gba->cpu->memory.activeSeqCycles16) / WORD_SIZE_THUMB; - } - // Reading this takes two cycles (1N+1I), so let's remove them preemptively - int32_t diff = gba->cpu->cycles - (currentTimer->lastEvent - gba->timing.masterCycles); - gba->memory.io[(REG_TM0CNT_LO + (timer << 2)) >> 1] = currentTimer->oldReload + ((diff + prefetchSkew) >> GBATimerFlagsGetPrescaleBits(currentTimer->flags)); + if (!GBATimerFlagsIsEnable(currentTimer->flags) || GBATimerFlagsIsCountUp(currentTimer->flags)) { + return; + } + + if (gba->memory.lastPrefetchedPc > (uint32_t) gba->cpu->gprs[ARM_PC]) { + cyclesLate -= ((gba->memory.lastPrefetchedPc - gba->cpu->gprs[ARM_PC]) * gba->cpu->memory.activeSeqCycles16) / WORD_SIZE_THUMB; + } + + int prescaleBits = GBATimerFlagsGetPrescaleBits(currentTimer->flags); + int32_t currentTime = mTimingCurrentTime(&gba->timing) - cyclesLate; + int32_t tickMask = (1 << prescaleBits) - 1; + currentTime &= ~tickMask; + int32_t tickIncrement = currentTime - currentTimer->lastEvent; + currentTimer->lastEvent = currentTime; + tickIncrement >>= prescaleBits; + tickIncrement += gba->memory.io[(REG_TM0CNT_LO + (timer << 2)) >> 1]; + gba->memory.io[(REG_TM0CNT_LO + (timer << 2)) >> 1] = tickIncrement; + if (!mTimingIsScheduled(&gba->timing, &currentTimer->event)) { + tickIncrement = (0x10000 - tickIncrement) << prescaleBits; + currentTime -= mTimingCurrentTime(&gba->timing) - cyclesLate; + mTimingSchedule(&gba->timing, &currentTimer->event, TIMER_RELOAD_DELAY + tickIncrement + currentTime); } } void GBATimerWriteTMCNT_LO(struct GBA* gba, int timer, uint16_t reload) { gba->timers[timer].reload = reload; - gba->timers[timer].overflowInterval = (0x10000 - gba->timers[timer].reload) << GBATimerFlagsGetPrescaleBits(gba->timers[timer].flags); } void GBATimerWriteTMCNT_HI(struct GBA* gba, int timer, uint16_t control) { struct GBATimer* currentTimer = &gba->timers[timer]; - GBATimerUpdateRegister(gba, timer); + GBATimerUpdateRegister(gba, timer, 0); unsigned oldPrescale = GBATimerFlagsGetPrescaleBits(currentTimer->flags); + unsigned prescaleBits; switch (control & 0x0003) { case 0x0000: - currentTimer->flags = GBATimerFlagsSetPrescaleBits(currentTimer->flags, 0); + prescaleBits = 0; break; case 0x0001: - currentTimer->flags = GBATimerFlagsSetPrescaleBits(currentTimer->flags, 6); + prescaleBits = 6; break; case 0x0002: - currentTimer->flags = GBATimerFlagsSetPrescaleBits(currentTimer->flags, 8); + prescaleBits = 8; break; case 0x0003: - currentTimer->flags = GBATimerFlagsSetPrescaleBits(currentTimer->flags, 10); + prescaleBits = 10; break; } + currentTimer->flags = GBATimerFlagsSetPrescaleBits(currentTimer->flags, prescaleBits); currentTimer->flags = GBATimerFlagsTestFillCountUp(currentTimer->flags, timer > 0 && (control & 0x0004)); currentTimer->flags = GBATimerFlagsTestFillDoIrq(currentTimer->flags, control & 0x0040); - currentTimer->overflowInterval = (0x10000 - currentTimer->reload) << GBATimerFlagsGetPrescaleBits(currentTimer->flags); bool wasEnabled = GBATimerFlagsIsEnable(currentTimer->flags); currentTimer->flags = GBATimerFlagsTestFillEnable(currentTimer->flags, control & 0x0080); if (!wasEnabled && GBATimerFlagsIsEnable(currentTimer->flags)) { mTimingDeschedule(&gba->timing, &currentTimer->event); - if (!GBATimerFlagsIsCountUp(currentTimer->flags)) { - mTimingSchedule(&gba->timing, &currentTimer->event, currentTimer->overflowInterval); - } gba->memory.io[(REG_TM0CNT_LO + (timer << 2)) >> 1] = currentTimer->reload; - currentTimer->oldReload = currentTimer->reload; - currentTimer->lastEvent = gba->timing.masterCycles + gba->cpu->cycles; + int32_t tickMask = (1 << prescaleBits) - 1; + currentTimer->lastEvent = (mTimingCurrentTime(&gba->timing) - TIMER_STARTUP_DELAY) & ~tickMask; + GBATimerUpdateRegister(gba, timer, TIMER_STARTUP_DELAY); } else if (wasEnabled && !GBATimerFlagsIsEnable(currentTimer->flags)) { mTimingDeschedule(&gba->timing, &currentTimer->event); } else if (GBATimerFlagsIsEnable(currentTimer->flags) && GBATimerFlagsGetPrescaleBits(currentTimer->flags) != oldPrescale && !GBATimerFlagsIsCountUp(currentTimer->flags)) { mTimingDeschedule(&gba->timing, &currentTimer->event); - mTimingSchedule(&gba->timing, &currentTimer->event, currentTimer->overflowInterval - currentTimer->lastEvent); + int32_t tickMask = (1 << prescaleBits) - 1; + currentTimer->lastEvent = (mTimingCurrentTime(&gba->timing) - TIMER_STARTUP_DELAY) & ~tickMask; + GBATimerUpdateRegister(gba, timer, TIMER_STARTUP_DELAY); } }
M src/lr35902/decoder.csrc/lr35902/decoder.c

@@ -315,24 +315,24 @@ DEFINE_POPPUSH_DECODER_LR35902(HL);

DEFINE_POPPUSH_DECODER_LR35902(AF); #define DEFINE_CB_2_DECODER_LR35902(NAME, BODY) \ - DEFINE_DECODER_LR35902(NAME ## B, info->op1.reg = LR35902_REG_B; BODY) \ - DEFINE_DECODER_LR35902(NAME ## C, info->op1.reg = LR35902_REG_C; BODY) \ - DEFINE_DECODER_LR35902(NAME ## D, info->op1.reg = LR35902_REG_D; BODY) \ - DEFINE_DECODER_LR35902(NAME ## E, info->op1.reg = LR35902_REG_E; BODY) \ - DEFINE_DECODER_LR35902(NAME ## H, info->op1.reg = LR35902_REG_H; BODY) \ - DEFINE_DECODER_LR35902(NAME ## L, info->op1.reg = LR35902_REG_L; BODY) \ - DEFINE_DECODER_LR35902(NAME ## HL, info->op1.reg = LR35902_REG_HL; BODY) \ - DEFINE_DECODER_LR35902(NAME ## A, info->op1.reg = LR35902_REG_A; BODY) + DEFINE_DECODER_LR35902(NAME ## B, info->op2.reg = LR35902_REG_B; BODY) \ + DEFINE_DECODER_LR35902(NAME ## C, info->op2.reg = LR35902_REG_C; BODY) \ + DEFINE_DECODER_LR35902(NAME ## D, info->op2.reg = LR35902_REG_D; BODY) \ + DEFINE_DECODER_LR35902(NAME ## E, info->op2.reg = LR35902_REG_E; BODY) \ + DEFINE_DECODER_LR35902(NAME ## H, info->op2.reg = LR35902_REG_H; BODY) \ + DEFINE_DECODER_LR35902(NAME ## L, info->op2.reg = LR35902_REG_L; BODY) \ + DEFINE_DECODER_LR35902(NAME ## HL, info->op2.reg = LR35902_REG_HL; info->op2.flags = LR35902_OP_FLAG_MEMORY; BODY) \ + DEFINE_DECODER_LR35902(NAME ## A, info->op2.reg = LR35902_REG_A; BODY) #define DEFINE_CB_DECODER_LR35902(NAME, BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 0, info->op2.immediate = 1; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 1, info->op2.immediate = 2; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 2, info->op2.immediate = 4; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 3, info->op2.immediate = 8; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 4, info->op2.immediate = 16; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 5, info->op2.immediate = 32; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 6, info->op2.immediate = 64; BODY) \ - DEFINE_CB_2_DECODER_LR35902(NAME ## 7, info->op2.immediate = 128; BODY) + DEFINE_CB_2_DECODER_LR35902(NAME ## 0, info->op1.immediate = 0; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 1, info->op1.immediate = 1; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 2, info->op1.immediate = 2; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 3, info->op1.immediate = 3; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 4, info->op1.immediate = 4; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 5, info->op1.immediate = 5; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 6, info->op1.immediate = 6; BODY) \ + DEFINE_CB_2_DECODER_LR35902(NAME ## 7, info->op1.immediate = 7; BODY) DEFINE_CB_DECODER_LR35902(BIT, info->mnemonic = LR35902_MN_BIT) DEFINE_CB_DECODER_LR35902(RES, info->mnemonic = LR35902_MN_RES)

@@ -496,7 +496,7 @@ return 0;

} if (op.flags & LR35902_OP_FLAG_MEMORY) { - strncpy(buffer, "(", blen - 1); + strncpy(buffer, "[", blen - 1); ADVANCE(1); } if (op.reg) {

@@ -519,7 +519,7 @@ strncpy(buffer, "-", blen - 1);

ADVANCE(1); } if (op.flags & LR35902_OP_FLAG_MEMORY) { - strncpy(buffer, ")", blen - 1); + strncpy(buffer, "]", blen - 1); ADVANCE(1); } return total;

@@ -544,7 +544,7 @@ ADVANCE(2);

} } - if (info->op1.reg || info->op1.immediate) { + if (info->op1.reg || info->op1.immediate || info->op2.reg || info->op2.immediate) { written = _decodeOperand(info->op1, buffer, blen); ADVANCE(written); }
M src/platform/psp2/CMakeLists.txtsrc/platform/psp2/CMakeLists.txt

@@ -1,9 +1,7 @@

-find_program(FIXUP vita-elf-create) -find_program(MAKE_FSELF vita-make-fself) -find_program(MAKE_SFO vita-mksfoex) +include("${VITASDK}/share/vita.cmake" REQUIRED) + find_program(OBJCOPY ${cross_prefix}objcopy) find_file(NIDDB db.json PATHS ${VITASDK} ${VITASDK}/bin ${VITASDK}/share) -find_program(STRIP ${cross_prefix}strip) set(OS_DEFINES IOAPI_NO_64) set(OS_DEFINES ${OS_DEFINES} PARENT_SCOPE)

@@ -37,34 +35,16 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/backdrop.o

COMMAND ${OBJCOPY_CMD} backdrop.png ${CMAKE_CURRENT_BINARY_DIR}/backdrop.o WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -add_custom_target(${BINARY_NAME}.velf ALL - ${STRIP} --strip-unneeded -go ${BINARY_NAME}-stripped.elf ${BINARY_NAME}.elf - COMMAND ${FIXUP} ${BINARY_NAME}-stripped.elf ${BINARY_NAME}.velf ${NIDDB} - DEPENDS ${BINARY_NAME}.elf) - -add_custom_target(sce_sys ${CMAKE_COMMAND} -E make_directory sce_sys) - -add_custom_target(param.sfo - ${MAKE_SFO} ${PROJECT_NAME} -s TITLE_ID=MGBA00001 sce_sys/param.sfo - DEPENDS sce_sys) - -add_custom_target(eboot.bin - ${MAKE_FSELF} -s ${BINARY_NAME}.velf eboot.bin - DEPENDS ${BINARY_NAME}.velf) +vita_create_self(${BINARY_NAME}.self ${BINARY_NAME}.elf) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/template.xml.in ${CMAKE_CURRENT_BINARY_DIR}/template.xml) -add_custom_target(livearea - ${CMAKE_COMMAND} -E make_directory sce_sys/livearea/contents - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/icon0.png sce_sys - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/pic0.png sce_sys - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/template.xml sce_sys/livearea/contents - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bg.png sce_sys/livearea/contents - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/startup.png sce_sys/livearea/contents - DEPENDS sce_sys) - -add_custom_target(${BINARY_NAME}.vpk ALL - zip -qr ${BINARY_NAME}.vpk sce_sys eboot.bin - DEPENDS livearea eboot.bin param.sfo) +vita_create_vpk(${BINARY_NAME}.vpk MGBA00001 ${BINARY_NAME}.self + NAME ${PROJECT_NAME} + FILE ${CMAKE_CURRENT_SOURCE_DIR}/icon0.png sce_sys/icon0.png + FILE ${CMAKE_CURRENT_SOURCE_DIR}/pic0.png sce_sys/pic0.png + FILE ${CMAKE_CURRENT_SOURCE_DIR}/bg.png sce_sys/livearea/contents/bg.png + FILE ${CMAKE_CURRENT_SOURCE_DIR}/startup.png sce_sys/livearea/contents/startup.png + FILE ${CMAKE_CURRENT_BINARY_DIR}/template.xml sce_sys/livearea/contents/template.xml) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BINARY_NAME}.vpk DESTINATION . COMPONENT ${BINARY_NAME}-psp2)
M src/platform/psp2/CMakeToolchain.vitasdksrc/platform/psp2/CMakeToolchain.vitasdk

@@ -14,7 +14,7 @@ set(CMAKE_PROGRAM_PATH ${toolchain_dir}/bin)

set(cross_prefix arm-vita-eabi-) set(inc_flags -I${toolchain_dir}/include) -set(link_flags "-L${toolchain_dir}/lib -Wl,-q") +set(link_flags "-L${toolchain_dir}/lib -Wl,-z,nocopyreloc") set(CMAKE_SYSTEM_NAME Generic CACHE INTERNAL "system name") set(CMAKE_SYSTEM_PROCESSOR armv7-a CACHE INTERNAL "processor")

@@ -26,9 +26,9 @@ find_program(CMAKE_C_COMPILER ${cross_prefix}gcc${extension})

find_program(CMAKE_CXX_COMPILER ${cross_prefix}g++${extension}) find_program(CMAKE_ASM_COMPILER ${cross_prefix}gcc${extension}) find_program(CMAKE_LINKER ${cross_prefix}ld${extension}) -set(CMAKE_C_FLAGS ${inc_flags} CACHE INTERNAL "c compiler flags") +set(CMAKE_C_FLAGS "${inc_flags} -Wl,-q" CACHE INTERNAL "c compiler flags") set(CMAKE_ASM_FLAGS ${inc_flags} CACHE INTERNAL "assembler flags") -set(CMAKE_CXX_FLAGS ${inc_flags} CACHE INTERNAL "cxx compiler flags") +set(CMAKE_CXX_FLAGS "${inc_flags} -Wl,-q" CACHE INTERNAL "cxx compiler flags") set(CMAKE_EXE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "exe link flags") set(CMAKE_MODULE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "module link flags")

@@ -40,6 +40,13 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "")

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "") set(ENV{PKG_CONFIG_PATH} ${VITASDK}/arm-vita-eabi/lib/pkgconfig) set(ENV{PKG_CONFIG_LIBDIR} ${VITASDK}/arm-vita-eabi/lib/pkgconfig) + +set(VITA_ELF_CREATE "${VITASDK}/bin/vita-elf-create${TOOL_OS_SUFFIX}" CACHE PATH "vita-elf-create") +set(VITA_ELF_EXPORT "${VITASDK}/bin/vita-elf-export${TOOL_OS_SUFFIX}" CACHE PATH "vita-elf-export") +set(VITA_LIBS_GEN "${VITASDK}/bin/vita-libs-gen${TOOL_OS_SUFFIX}" CACHE PATH "vita-libs-gen") +set(VITA_MAKE_FSELF "${VITASDK}/bin/vita-make-fself${TOOL_OS_SUFFIX}" CACHE PATH "vita-make-fself") +set(VITA_MKSFOEX "${VITASDK}/bin/vita-mksfoex${TOOL_OS_SUFFIX}" CACHE PATH "vita-mksfoex") +set(VITA_PACK_VPK "${VITASDK}/bin/vita-pack-vpk${TOOL_OS_SUFFIX}" CACHE PATH "vita-pack-vpk") set(PSP2 ON) add_definitions(-DPSP2)
M src/platform/python/mgba/gb.pysrc/platform/python/mgba/gb.py

@@ -35,6 +35,10 @@ def _deinitTileCache(self, cache):

self._native.video.renderer.cache = ffi.NULL lib.mTileCacheDeinit(cache) + def reset(self): + super(GB, self).reset() + self.memory = GBMemory(self._core) + def attachSIO(self, link): lib.GBSIOSetDriver(ffi.addressof(self._native.sio), link._native)

@@ -61,21 +65,46 @@ def writeSC(self, value):

return value class GBSIOSimpleDriver(GBSIODriver): - def __init__(self): + def __init__(self, period=0x100): super(GBSIOSimpleDriver, self).__init__() - self.tx = 0xFF - self.rx = 0xFF + self.rx = 0x00 + self._period = period + + def init(self): + self._native.p.period = self._period + return True def writeSB(self, value): self.rx = value - def schedule(self, period=0x100, when=0): + def writeSC(self, value): + self._native.p.period = self._period + if value & 0x80: + lib.mTimingDeschedule(ffi.addressof(self._native.p.p.timing), ffi.addressof(self._native.p.event)) + lib.mTimingSchedule(ffi.addressof(self._native.p.p.timing), ffi.addressof(self._native.p.event), self._native.p.period) + return value + + def isReady(self): + return not self._native.p.remainingBits + + @property + def tx(self): + self._native.p.pendingSB + + @property + def period(self): + return self._native.p.period + + @tx.setter + def tx(self, newTx): + self._native.p.pendingSB = newTx self._native.p.remainingBits = 8 - self._native.p.period = period - self._native.p.pendingSB = self.tx - self.tx = 0xFF - lib.mTimingDeschedule(ffi.addressof(self._native.p.p.timing), ffi.addressof(self._native.p.event)) - lib.mTimingSchedule(ffi.addressof(self._native.p.p.timing), ffi.addressof(self._native.p.event), when) + + @period.setter + def period(self, newPeriod): + self._period = newPeriod + if self._native.p: + self._native.p.period = newPeriod class GBMemory(Memory): def __init__(self, core):
M src/platform/qt/AboutScreen.uisrc/platform/qt/AboutScreen.ui

@@ -83,7 +83,7 @@ <pointsize>10</pointsize>

</font> </property> <property name="text"> - <string>© 2013 – 2016 Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 + <string>© 2013 – 2017 Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</string> </property> <property name="alignment">
M src/platform/qt/CMakeLists.txtsrc/platform/qt/CMakeLists.txt

@@ -217,7 +217,7 @@ endif()

install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt) install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt) if(NOT WIN32 AND NOT APPLE) - list(APPEND QT_DEFINES DATADIR="${DATADIR}") + list(APPEND QT_DEFINES DATADIR="${CMAKE_INSTALL_PREFIX}/${DATADIR}") endif() find_package(Qt5LinguistTools)

@@ -255,7 +255,7 @@ BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)

if(UNIX AND NOT APPLE) find_program(DESKTOP_FILE_INSTALL desktop-file-install) if(DESKTOP_FILE_INSTALL) - install(CODE "execute_process(COMMAND ${DESKTOP_FILE_INSTALL} \"${CMAKE_SOURCE_DIR}/res/mgba-qt.desktop\" --dir \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications/\")") + install(CODE "execute_process(COMMAND ${DESKTOP_FILE_INSTALL} \"${CMAKE_SOURCE_DIR}/res/mgba-qt.desktop\" --dir \"\$ENV{DESTDIR}\${CMAKE_INSTALL_FULL_DATADIR}/applications/\")") endif() endif() if(UNIX)
M src/platform/qt/GBAApp.cppsrc/platform/qt/GBAApp.cpp

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

#include "GBAApp.h" #include "AudioProcessor.h" +#include "ConfigController.h" #include "Display.h" #include "GameController.h" #include "Window.h"

@@ -14,10 +15,8 @@

#include <QFileInfo> #include <QFileOpenEvent> #include <QIcon> -#include <QTranslator> #include <mgba/core/version.h> -#include <mgba/internal/gba/video.h> #include <mgba-util/socket.h> #include <mgba-util/vfs.h>

@@ -31,8 +30,9 @@ static GBAApp* g_app = nullptr;

mLOG_DEFINE_CATEGORY(QT, "Qt", "platform.qt"); -GBAApp::GBAApp(int& argc, char* argv[]) +GBAApp::GBAApp(int& argc, char* argv[], ConfigController* config) : QApplication(argc, argv) + , m_configController(config) { g_app = this;

@@ -41,15 +41,9 @@ SDL_Init(SDL_INIT_NOPARACHUTE);

#endif #ifndef Q_OS_MAC - setWindowIcon(QIcon(":/res/mgba-1024.png")); + setWindowIcon(QIcon(":/res/mgba-512.png")); #endif - QTranslator* translator = new QTranslator(this); - if (translator->load(QLocale(), QLatin1String(binaryName), QLatin1String("-"), QLatin1String(":/translations"))) { - installTranslator(translator); - } - - SocketSubsystemInit(); qRegisterMetaType<const uint32_t*>("const uint32_t*"); qRegisterMetaType<mCoreThread*>("mCoreThread*");

@@ -57,50 +51,15 @@

QApplication::setApplicationName(projectName); QApplication::setApplicationVersion(projectVersion); - if (!m_configController.getQtOption("displayDriver").isNull()) { - Display::setDriver(static_cast<Display::Driver>(m_configController.getQtOption("displayDriver").toInt())); - } - - mArguments args; - mGraphicsOpts graphicsOpts; - mSubParser subparser; - initParserForGraphics(&subparser, &graphicsOpts); - bool loaded = m_configController.parseArguments(&args, argc, argv, &subparser); - if (loaded && args.showHelp) { - usage(argv[0], subparser.usage); - ::exit(0); - return; + if (!m_configController->getQtOption("displayDriver").isNull()) { + Display::setDriver(static_cast<Display::Driver>(m_configController->getQtOption("displayDriver").toInt())); } reloadGameDB(); - if (!m_configController.getQtOption("audioDriver").isNull()) { - AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController.getQtOption("audioDriver").toInt())); + if (!m_configController->getQtOption("audioDriver").isNull()) { + AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController->getQtOption("audioDriver").toInt())); } - Window* w = new Window(&m_configController); - connect(w, &Window::destroyed, [this, w]() { - m_windows.removeAll(w); - }); - m_windows.append(w); - - if (loaded) { - w->argumentsPassed(&args); - } else { - w->loadConfig(); - } - freeArguments(&args); - - if (graphicsOpts.multiplier) { - w->resizeFrame(QSize(VIDEO_HORIZONTAL_PIXELS * graphicsOpts.multiplier, VIDEO_VERTICAL_PIXELS * graphicsOpts.multiplier)); - } - if (graphicsOpts.fullscreen) { - w->enterFullScreen(); - } - - w->show(); - - w->controller()->setMultiplayerController(&m_multiplayer); - w->multiplayerChanged(); } GBAApp::~GBAApp() {

@@ -122,7 +81,7 @@ Window* GBAApp::newWindow() {

if (m_windows.count() >= MAX_GBAS) { return nullptr; } - Window* w = new Window(&m_configController, m_multiplayer.attached()); + Window* w = new Window(m_configController, m_multiplayer.attached()); int windowId = m_multiplayer.attached(); connect(w, &Window::destroyed, [this, w]() { m_windows.removeAll(w);

@@ -165,10 +124,10 @@

QString GBAApp::getOpenFileName(QWidget* owner, const QString& title, const QString& filter) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getOpenFileName(owner, title, m_configController.getOption("lastDirectory"), filter); + QString filename = QFileDialog::getOpenFileName(owner, title, m_configController->getOption("lastDirectory"), filter); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }

@@ -176,10 +135,10 @@

QString GBAApp::getSaveFileName(QWidget* owner, const QString& title, const QString& filter) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getSaveFileName(owner, title, m_configController.getOption("lastDirectory"), filter); + QString filename = QFileDialog::getSaveFileName(owner, title, m_configController->getOption("lastDirectory"), filter); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }

@@ -187,10 +146,10 @@

QString GBAApp::getOpenDirectoryName(QWidget* owner, const QString& title) { QList<Window*> paused; pauseAll(&paused); - QString filename = QFileDialog::getExistingDirectory(owner, title, m_configController.getOption("lastDirectory")); + QString filename = QFileDialog::getExistingDirectory(owner, title, m_configController->getOption("lastDirectory")); continueAll(paused); if (!filename.isEmpty()) { - m_configController.setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); + m_configController->setOption("lastDirectory", QFileInfo(filename).dir().canonicalPath()); } return filename; }
M src/platform/qt/GBAApp.hsrc/platform/qt/GBAApp.h

@@ -10,7 +10,6 @@ #include <QApplication>

#include <QFileDialog> #include <QThread> -#include "ConfigController.h" #include "MultiplayerController.h" struct NoIntroDB;

@@ -21,6 +20,7 @@ mLOG_DECLARE_CATEGORY(QT);

namespace QGBA { +class ConfigController; class GameController; class Window;

@@ -43,7 +43,7 @@ class GBAApp : public QApplication {

Q_OBJECT public: - GBAApp(int& argc, char* argv[]); + GBAApp(int& argc, char* argv[], ConfigController*); ~GBAApp(); static GBAApp* app();

@@ -67,7 +67,7 @@

void pauseAll(QList<Window*>* paused); void continueAll(const QList<Window*>& paused); - ConfigController m_configController; + ConfigController* m_configController; QList<Window*> m_windows; MultiplayerController m_multiplayer;
M src/platform/qt/GameController.cppsrc/platform/qt/GameController.cpp

@@ -9,6 +9,7 @@ #include "AudioProcessor.h"

#include "InputController.h" #include "LogController.h" #include "MultiplayerController.h" +#include "Override.h" #include "VFileDevice.h" #include <QCoreApplication>
M src/platform/qt/MemorySearch.cppsrc/platform/qt/MemorySearch.cpp

@@ -151,6 +151,7 @@ for (size_t i = 0; i < mCoreMemorySearchResultsSize(&m_results); ++i) {

mCoreMemorySearchResult* result = mCoreMemorySearchResultsGetPointer(&m_results, i); QTableWidgetItem* item = new QTableWidgetItem(QString("%1").arg(result->address, 8, 16, QChar('0'))); m_ui.results->setItem(i, 0, item); + QTableWidgetItem* type; if (m_ui.numHex->isChecked()) { switch (result->type) { case mCORE_MEMORY_SEARCH_8:

@@ -182,9 +183,30 @@ case mCORE_MEMORY_SEARCH_STRING:

item = new QTableWidgetItem("?"); // TODO } } + QString divisor; + if (result->guessDivisor > 1) { + divisor = tr(" (⅟%0×)").arg(result->guessDivisor); + } + switch (result->type) { + case mCORE_MEMORY_SEARCH_8: + type = new QTableWidgetItem(tr("1 byte%0").arg(divisor)); + break; + case mCORE_MEMORY_SEARCH_16: + type = new QTableWidgetItem(tr("2 bytes%0").arg(divisor)); + break; + case mCORE_MEMORY_SEARCH_GUESS: + case mCORE_MEMORY_SEARCH_32: + type = new QTableWidgetItem(tr("4 bytes%0").arg(divisor)); + break; + case mCORE_MEMORY_SEARCH_STRING: + item = new QTableWidgetItem("?"); // TODO + } m_ui.results->setItem(i, 1, item); + m_ui.results->setItem(i, 2, type); } m_ui.results->sortItems(0); + m_ui.results->resizeColumnsToContents(); + m_ui.results->resizeRowsToContents(); } void MemorySearch::openMemory() {
M src/platform/qt/MemorySearch.uisrc/platform/qt/MemorySearch.ui

@@ -17,7 +17,7 @@ <height>241</height>

</size> </property> <property name="windowTitle"> - <string>Form</string> + <string>Memory Search</string> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="1">

@@ -214,10 +214,26 @@ </item>

</layout> </widget> <resources/> - <connections/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MemorySearch</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel"> + <x>315</x> + <y>357</y> + </hint> + <hint type="destinationlabel"> + <x>315</x> + <y>188</y> + </hint> + </hints> + </connection> + </connections> <buttongroups> + <buttongroup name="width"/> <buttongroup name="type"/> - <buttongroup name="width"/> - <buttongroup name="numType"/> </buttongroups> </ui>
M src/platform/qt/SettingsView.cppsrc/platform/qt/SettingsView.cpp

@@ -13,6 +13,7 @@ #include "InputController.h"

#include "ShortcutView.h" #include <mgba/core/serialize.h> +#include <mgba/core/version.h> #include <mgba/internal/gba/gba.h> using namespace QGBA;

@@ -145,6 +146,19 @@ updateConfig();

} }); + m_ui.languages->setItemData(0, QLocale("en")); + QDir ts(":/translations/"); + for (auto name : ts.entryList()) { + if (!name.endsWith(".qm")) { + continue; + } + QLocale locale(name.remove(QString("%0-").arg(binaryName)).remove(".qm")); + m_ui.languages->addItem(locale.nativeLanguageName(), locale); + if (locale == QLocale()) { + m_ui.languages->setCurrentIndex(m_ui.languages->count() - 1); + } + } + m_keyView = new ShortcutView(); m_keyView->setModel(inputController->keyIndex()); m_keyView->setInputController(inputController);

@@ -237,6 +251,12 @@ if (displayDriver != m_controller->getQtOption("displayDriver")) {

m_controller->setQtOption("displayDriver", displayDriver); Display::setDriver(static_cast<Display::Driver>(displayDriver.toInt())); emit displayDriverChanged(); + } + + QLocale language = m_ui.languages->itemData(m_ui.languages->currentIndex()).toLocale(); + if (language != m_controller->getQtOption("language").toLocale() && !(language.bcp47Name() == QLocale::system().bcp47Name() && m_controller->getQtOption("language").isNull())) { + m_controller->setQtOption("language", language.bcp47Name()); + emit languageChanged(); } m_controller->write();
M src/platform/qt/SettingsView.hsrc/platform/qt/SettingsView.h

@@ -30,6 +30,7 @@ void biosLoaded(int platform, const QString&);

void audioDriverChanged(); void displayDriverChanged(); void pathsChanged(); + void languageChanged(); void libraryCleared(); private slots:
M src/platform/qt/SettingsView.uisrc/platform/qt/SettingsView.ui

@@ -398,17 +398,30 @@ </layout>

</widget> <widget class="QWidget" name="interface_2"> <layout class="QFormLayout" name="formLayout_4"> - <item row="1" column="1"> - <widget class="QCheckBox" name="showLibrary"> + <item row="0" column="0"> + <widget class="QLabel" name="label_26"> <property name="text"> - <string>Show when no game open</string> - </property> - <property name="checked"> - <bool>true</bool> + <string>Language</string> </property> </widget> </item> <item row="0" column="1"> + <widget class="QComboBox" name="languages"> + <item> + <property name="text"> + <string>English</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Library:</string> + </property> + </widget> + </item> + <item row="2" column="1"> <widget class="QComboBox" name="libraryStyle"> <item> <property name="text">

@@ -422,35 +435,38 @@ </property>

</item> </widget> </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_6"> + <item row="3" column="1"> + <widget class="QCheckBox" name="showLibrary"> <property name="text"> - <string>Library:</string> + <string>Show when no game open</string> + </property> + <property name="checked"> + <bool>true</bool> </property> </widget> </item> - <item row="2" column="1"> + <item row="4" column="1"> <widget class="QPushButton" name="clearCache"> <property name="text"> <string>Clear cache</string> </property> </widget> </item> - <item row="3" column="0" colspan="2"> + <item row="5" column="0" colspan="2"> <widget class="Line" name="line_8"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> - <item row="4" column="1"> + <item row="6" column="1"> <widget class="QCheckBox" name="allowOpposingDirections"> <property name="text"> <string>Allow opposing input directions</string> </property> </widget> </item> - <item row="5" column="1"> + <item row="7" column="1"> <widget class="QCheckBox" name="suspendScreensaver"> <property name="text"> <string>Suspend screensaver</string>

@@ -460,10 +476,17 @@ <bool>true</bool>

</property> </widget> </item> - <item row="6" column="1"> + <item row="8" column="1"> <widget class="QCheckBox" name="pauseOnFocusLost"> <property name="text"> <string>Pause when inactive</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="Line" name="line_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> </widget> </item>
M src/platform/qt/Window.cppsrc/platform/qt/Window.cpp

@@ -86,7 +86,11 @@ m_logo = m_logo; // Free memory left over in old pixmap

m_screenWidget->setMinimumSize(m_display->minimumSize()); m_screenWidget->setSizePolicy(m_display->sizePolicy()); - int i = 2; +#if defined(M_CORE_GBA) + float i = 2; +#elif defined(M_CORE_GB) + float i = 3; +#endif QVariant multiplier = m_config->getOption("scaleMultiplier"); if (!multiplier.isNull()) { m_savedScale = multiplier.toInt();

@@ -120,8 +124,11 @@ QPair<QString, QString> path = m_libraryView->selectedPath();

m_controller->loadGame(output, path.second, path.first); } }); -#elif defined(M_CORE_GBA) - m_screenWidget->setSizeHint(QSize(VIDEO_HORIZONTAL_PIXELS * i, VIDEO_VERTICAL_PIXELS * i)); +#endif +#if defined(M_CORE_GBA) + resizeFrame(QSize(VIDEO_HORIZONTAL_PIXELS * i, VIDEO_VERTICAL_PIXELS * i)); +#elif defined(M_CORE_GB) + resizeFrame(QSize(GB_VIDEO_HORIZONTAL_PIXELS * i, GB_VIDEO_VERTICAL_PIXELS * i)); #endif m_screenWidget->setPixmap(m_logo); m_screenWidget->setLockAspectRatio(m_logo.width(), m_logo.height());

@@ -242,9 +249,6 @@ }

void Window::resizeFrame(const QSize& size) { QSize newSize(size); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) - newSize /= m_screenWidget->devicePixelRatioF(); -#endif m_screenWidget->setSizeHint(newSize); newSize -= m_screenWidget->size(); newSize += this->size();

@@ -468,6 +472,7 @@ SettingsView* settingsWindow = new SettingsView(m_config, &m_inputController);

connect(settingsWindow, &SettingsView::biosLoaded, m_controller, &GameController::loadBIOS); connect(settingsWindow, &SettingsView::audioDriverChanged, m_controller, &GameController::reloadAudioDriver); connect(settingsWindow, &SettingsView::displayDriverChanged, this, &Window::mustRestart); + connect(settingsWindow, &SettingsView::languageChanged, this, &Window::mustRestart); connect(settingsWindow, &SettingsView::pathsChanged, this, &Window::reloadConfig); connect(settingsWindow, &SettingsView::libraryCleared, m_libraryView, &LibraryController::clear); openView(settingsWindow);
M src/platform/qt/library/LibraryController.cppsrc/platform/qt/library/LibraryController.cpp

@@ -5,7 +5,8 @@ * 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 "LibraryController.h" -#include "../GBAApp.h" +#include "ConfigController.h" +#include "GBAApp.h" #include "LibraryGrid.h" #include "LibraryTree.h"

@@ -45,8 +46,10 @@ {

mLibraryListingInit(&m_listing, 0); if (!path.isNull()) { + // This can return NULL if the library is already open m_library = mLibraryLoad(path.toUtf8().constData()); - } else { + } + if (!m_library) { m_library = mLibraryCreateEmpty(); }
M src/platform/qt/main.cppsrc/platform/qt/main.cpp

@@ -7,13 +7,15 @@

// This must be defined before anything else is included. #define SDL_MAIN_HANDLED +#include "ConfigController.h" #include "GBAApp.h" #include "Window.h" +#include <mgba/core/version.h> +#include <mgba/internal/gba/video.h> + #include <QLibraryInfo> #include <QTranslator> - -#include <mgba/core/version.h> #ifdef QT_STATIC #include <QtPlugin>

@@ -25,13 +27,32 @@ #endif

#endif #endif +using namespace QGBA; + int main(int argc, char* argv[]) { #ifdef BUILD_SDL SDL_SetMainReady(); #endif - QGBA::GBAApp application(argc, argv); - QLocale locale = QLocale::system(); + ConfigController configController; + + QLocale locale; + if (!configController.getQtOption("language").isNull()) { + locale = QLocale(configController.getQtOption("language").toString()); + QLocale::setDefault(locale); + } + + mArguments args; + mGraphicsOpts graphicsOpts; + mSubParser subparser; + initParserForGraphics(&subparser, &graphicsOpts); + bool loaded = configController.parseArguments(&args, argc, argv, &subparser); + if (loaded && args.showHelp) { + usage(argv[0], subparser.usage); + return 0; + } + + GBAApp application(argc, argv, &configController); QTranslator qtTranslator; qtTranslator.load(locale, "qt", "_", QLibraryInfo::location(QLibraryInfo::TranslationsPath));

@@ -40,6 +61,23 @@

QTranslator langTranslator; langTranslator.load(locale, binaryName, "-", ":/translations/"); application.installTranslator(&langTranslator); + + Window* w = application.newWindow(); + if (loaded) { + w->argumentsPassed(&args); + } else { + w->loadConfig(); + } + freeArguments(&args); + + if (graphicsOpts.multiplier) { + w->resizeFrame(QSize(VIDEO_HORIZONTAL_PIXELS * graphicsOpts.multiplier, VIDEO_VERTICAL_PIXELS * graphicsOpts.multiplier)); + } + if (graphicsOpts.fullscreen) { + w->enterFullScreen(); + } + + w->show(); return application.exec(); }
M src/platform/qt/ts/mgba-de.tssrc/platform/qt/ts/mgba-de.ts

@@ -455,6 +455,105 @@ <translation>Max. Zeilen</translation>

</message> </context> <context> + <name>MemorySearch</name> + <message> + <location filename="../MemorySearch.ui" line="20"/> + <source>Form</source> + <translation>Eingabemaske</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="45"/> + <source>Address</source> + <translation>Adresse</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="50"/> + <source>Current Value</source> + <translation>Aktueller Wert</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="55"/> + <location filename="../MemorySearch.ui" line="75"/> + <source>Type</source> + <translation>Typ</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="65"/> + <source>Value</source> + <translation>Wert</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="82"/> + <source>Numeric</source> + <translation>Numerisch</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="95"/> + <source>Text</source> + <translation>Text</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="105"/> + <source>Width</source> + <translation>Breite</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="112"/> + <source>1 Byte (8-bit)</source> + <translation>1 Byte (8-bit)</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="122"/> + <source>2 Bytes (16-bit)</source> + <translation>2 Bytes (16-bit)</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="132"/> + <source>4 Bytes (32-bit)</source> + <translation>4 Bytes (32-bit)</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="145"/> + <source>Number type</source> + <translation>Zahlensystem</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="152"/> + <source>Hexadecimal</source> + <translation>Hexadezimal</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="162"/> + <source>Decimal</source> + <translation>Dezimal</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="169"/> + <source>Guess</source> + <translation>automatisch</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="187"/> + <source>Search</source> + <translation>Suchen</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="194"/> + <source>Search Within</source> + <translation>Suchen innerhalb</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="201"/> + <source>Open in Memory Viewer</source> + <translation>Im Speicher-Monitor öffnen</translation> + </message> + <message> + <location filename="../MemorySearch.ui" line="208"/> + <source>Refresh</source> + <translation>Aktualisieren</translation> + </message> +</context> +<context> <name>MemoryView</name> <message> <location filename="../MemoryView.ui" line="14"/>

@@ -834,6 +933,11 @@ <location filename="../OverrideView.ui" line="324"/>

<source>HuC-3</source> <translation>HuC-3</translation> </message> + <message> + <location filename="../OverrideView.ui" line="332"/> + <source>Colors</source> + <translation>Farben</translation> + </message> </context> <context> <name>PaletteView</name>

@@ -981,22 +1085,22 @@ </context>

<context> <name>QGBA::GBAKeyEditor</name> <message> - <location filename="../GBAKeyEditor.cpp" line="67"/> + <location filename="../GBAKeyEditor.cpp" line="68"/> <source>Clear Button</source> <translation>Button löschen</translation> </message> <message> - <location filename="../GBAKeyEditor.cpp" line="79"/> + <location filename="../GBAKeyEditor.cpp" line="80"/> <source>Clear Analog</source> <translation>Analog löschen</translation> </message> <message> - <location filename="../GBAKeyEditor.cpp" line="90"/> + <location filename="../GBAKeyEditor.cpp" line="91"/> <source>Refresh</source> <translation>Aktualisieren</translation> </message> <message> - <location filename="../GBAKeyEditor.cpp" line="100"/> + <location filename="../GBAKeyEditor.cpp" line="101"/> <source>Set all</source> <translation>Alle belegen</translation> </message>

@@ -1065,28 +1169,28 @@ </context>

<context> <name>QGBA::GameController</name> <message> - <location filename="../GameController.cpp" line="350"/> - <location filename="../GameController.cpp" line="534"/> + <location filename="../GameController.cpp" line="351"/> + <location filename="../GameController.cpp" line="535"/> <source>Failed to open game file: %1</source> <translation>Fehler beim Öffnen der Spieldatei: %1</translation> </message> <message> - <location filename="../GameController.cpp" line="506"/> + <location filename="../GameController.cpp" line="507"/> <source>Failed to open save file: %1</source> <translation>Fehler beim Öffnen der Speicherdatei: %1</translation> </message> <message> - <location filename="../GameController.cpp" line="563"/> + <location filename="../GameController.cpp" line="564"/> <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="583"/> + <location filename="../GameController.cpp" line="584"/> <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="848"/> + <location filename="../GameController.cpp" line="850"/> <source>Failed to start audio processor</source> <translation>Fehler beim Starten des Audio-Prozessors</translation> </message>

@@ -2491,7 +2595,7 @@ <source>Corrupted</source>

<translation>Defekt</translation> </message> <message> - <location filename="../LoadSaveState.cpp" line="209"/> + <location filename="../LoadSaveState.cpp" line="215"/> <source>Slot %1</source> <translation>Speicherplatz %1</translation> </message>

@@ -2599,56 +2703,79 @@ <translation>ISO-8859-1</translation>

</message> </context> <context> + <name>QGBA::MemorySearch</name> + <message> + <location filename="../MemorySearch.cpp" line="188"/> + <source> (⅟%0×)</source> + <translation> (⅟%0×)</translation> + </message> + <message> + <location filename="../MemorySearch.cpp" line="192"/> + <source>1 byte%0</source> + <translation>1 Byte%0</translation> + </message> + <message> + <location filename="../MemorySearch.cpp" line="195"/> + <source>2 bytes%0</source> + <translation>2 Bytes%0</translation> + </message> + <message> + <location filename="../MemorySearch.cpp" line="199"/> + <source>4 bytes%0</source> + <translation>4 Bytes%0</translation> + </message> +</context> +<context> <name>QGBA::ObjView</name> <message> - <location filename="../ObjView.cpp" line="142"/> - <location filename="../ObjView.cpp" line="234"/> + <location filename="../ObjView.cpp" line="143"/> + <location filename="../ObjView.cpp" line="236"/> <source>0x%0</source> <translation>0x%0</translation> </message> <message> - <location filename="../ObjView.cpp" line="153"/> + <location filename="../ObjView.cpp" line="154"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../ObjView.cpp" line="158"/> + <location filename="../ObjView.cpp" line="159"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../ObjView.cpp" line="161"/> + <location filename="../ObjView.cpp" line="162"/> <source>Trans</source> <translation>Trans</translation> </message> <message> - <location filename="../ObjView.cpp" line="164"/> + <location filename="../ObjView.cpp" line="165"/> <source>OBJWIN</source> <translation>OBJWIN</translation> </message> <message> - <location filename="../ObjView.cpp" line="167"/> + <location filename="../ObjView.cpp" line="168"/> <source>Invalid</source> <translation>Ungültig</translation> </message> <message> - <location filename="../ObjView.cpp" line="241"/> - <location filename="../ObjView.cpp" line="242"/> + <location filename="../ObjView.cpp" line="243"/> + <location filename="../ObjView.cpp" line="244"/> <source>N/A</source> <translation>N/A</translation> </message> <message> - <location filename="../ObjView.cpp" line="249"/> + <location filename="../ObjView.cpp" line="251"/> <source>Export sprite</source> <translation>Sprite exportieren</translation> </message> <message> - <location filename="../ObjView.cpp" line="250"/> + <location filename="../ObjView.cpp" line="252"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message> <message> - <location filename="../ObjView.cpp" line="253"/> + <location filename="../ObjView.cpp" line="255"/> <source>Failed to open output PNG file: %1</source> <translation>Fehler beim Öffnen der Ausgabe-PNG-Datei: %1</translation> </message>

@@ -2708,7 +2835,7 @@ <message>

<location filename="../ROMInfo.cpp" line="57"/> <location filename="../ROMInfo.cpp" line="64"/> <source> bytes</source> - <translation>Bytes</translation> + <translation> Bytes</translation> </message> <message> <location filename="../ROMInfo.cpp" line="83"/>

@@ -2719,47 +2846,47 @@ </context>

<context> <name>QGBA::SettingsView</name> <message> - <location filename="../SettingsView.cpp" line="96"/> + <location filename="../SettingsView.cpp" line="98"/> <source>Qt Multimedia</source> <translation>Qt Multimedia</translation> </message> <message> - <location filename="../SettingsView.cpp" line="103"/> + <location filename="../SettingsView.cpp" line="105"/> <source>SDL</source> <translation>SDL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="111"/> + <location filename="../SettingsView.cpp" line="113"/> <source>Software (Qt)</source> <translation>Software (Qt)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="117"/> + <location filename="../SettingsView.cpp" line="119"/> <source>OpenGL</source> <translation>OpenGL</translation> </message> <message> - <location filename="../SettingsView.cpp" line="124"/> + <location filename="../SettingsView.cpp" line="126"/> <source>OpenGL (force version 1.x)</source> <translation>OpenGL (erzwinge Version 1.x)</translation> </message> <message> - <location filename="../SettingsView.cpp" line="142"/> + <location filename="../SettingsView.cpp" line="144"/> <source>Keyboard</source> <translation>Tastatur</translation> </message> <message> - <location filename="../SettingsView.cpp" line="151"/> + <location filename="../SettingsView.cpp" line="153"/> <source>Controllers</source> <translation>Gamepads</translation> </message> <message> - <location filename="../SettingsView.cpp" line="170"/> + <location filename="../SettingsView.cpp" line="185"/> <source>Shortcuts</source> <translation>Tastenkürzel</translation> </message> <message> - <location filename="../SettingsView.cpp" line="174"/> + <location filename="../SettingsView.cpp" line="189"/> <source>Select BIOS</source> <translation>BIOS auswählen</translation> </message>

@@ -2841,82 +2968,82 @@ </context>

<context> <name>QGBA::Window</name> <message> - <location filename="../Window.cpp" line="324"/> + <location filename="../Window.cpp" line="329"/> <source>Game Boy Advance ROMs (%1)</source> <translation>Game Boy Advance-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="340"/> + <location filename="../Window.cpp" line="345"/> <source>Game Boy ROMs (%1)</source> <translation>Game Boy-ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="344"/> + <location filename="../Window.cpp" line="349"/> <source>All ROMs (%1)</source> <translation>Alle ROMs (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="345"/> + <location filename="../Window.cpp" line="350"/> <source>%1 Video Logs (*.mvl)</source> <translation>%1 Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="360"/> + <location filename="../Window.cpp" line="365"/> <source>Archives (%1)</source> <translation>Archive (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="365"/> - <location filename="../Window.cpp" line="373"/> - <location filename="../Window.cpp" line="400"/> + <location filename="../Window.cpp" line="370"/> + <location filename="../Window.cpp" line="378"/> + <location filename="../Window.cpp" line="405"/> <source>Select ROM</source> <translation>ROM auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="408"/> + <location filename="../Window.cpp" line="413"/> <source>Game Boy Advance save files (%1)</source> <translation>Game Boy Advance-Speicherdateien (%1)</translation> </message> <message> - <location filename="../Window.cpp" line="409"/> - <location filename="../Window.cpp" line="443"/> - <location filename="../Window.cpp" line="450"/> + <location filename="../Window.cpp" line="414"/> + <location filename="../Window.cpp" line="448"/> + <location filename="../Window.cpp" line="455"/> <source>Select save</source> <translation>Speicherdatei wählen</translation> </message> <message> - <location filename="../Window.cpp" line="429"/> + <location filename="../Window.cpp" line="434"/> <source>Select patch</source> <translation>Patch wählen</translation> </message> <message> - <location filename="../Window.cpp" line="429"/> + <location filename="../Window.cpp" line="434"/> <source>Patches (*.ips *.ups *.bps)</source> <translation>Patches (*.ips *.ups *.bps)</translation> </message> <message> - <location filename="../Window.cpp" line="443"/> - <location filename="../Window.cpp" line="450"/> + <location filename="../Window.cpp" line="448"/> + <location filename="../Window.cpp" line="455"/> <source>GameShark saves (*.sps *.xps)</source> <translation>GameShark-Speicherdaten (*.sps *.xps)</translation> </message> <message> - <location filename="../Window.cpp" line="471"/> + <location filename="../Window.cpp" line="478"/> <source>Select video log</source> <translation>Video-Log auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="471"/> + <location filename="../Window.cpp" line="478"/> <source>Video logs (*.mvl)</source> <translation>Video-Logs (*.mvl)</translation> </message> <message> - <location filename="../Window.cpp" line="813"/> + <location filename="../Window.cpp" line="820"/> <source>Crash</source> <translation>Absturz</translation> </message> <message> - <location filename="../Window.cpp" line="814"/> + <location filename="../Window.cpp" line="821"/> <source>The game has crashed with the following error: %1</source>

@@ -2925,623 +3052,628 @@

%1</translation> </message> <message> - <location filename="../Window.cpp" line="821"/> + <location filename="../Window.cpp" line="828"/> <source>Couldn&apos;t Load</source> <translation>Konnte nicht geladen werden</translation> </message> <message> - <location filename="../Window.cpp" line="822"/> + <location filename="../Window.cpp" line="829"/> <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="835"/> + <location filename="../Window.cpp" line="842"/> <source>Unimplemented BIOS call</source> <translation>Nicht implementierter BIOS-Aufruf</translation> </message> <message> - <location filename="../Window.cpp" line="836"/> + <location filename="../Window.cpp" line="843"/> <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="843"/> + <location filename="../Window.cpp" line="850"/> <source>Really make portable?</source> <translation>Portablen Modus wirklich aktivieren?</translation> </message> <message> - <location filename="../Window.cpp" line="844"/> + <location filename="../Window.cpp" line="851"/> <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="852"/> + <location filename="../Window.cpp" line="859"/> <source>Restart needed</source> <translation>Neustart benötigt</translation> </message> <message> - <location filename="../Window.cpp" line="853"/> + <location filename="../Window.cpp" line="860"/> <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> <message> - <location filename="../Window.cpp" line="900"/> + <location filename="../Window.cpp" line="907"/> <source> - Player %1 of %2</source> <translation> - Spieler %1 von %2</translation> </message> <message> - <location filename="../Window.cpp" line="911"/> + <location filename="../Window.cpp" line="918"/> <source>%1 - %2</source> <translation>%1 - %2</translation> </message> <message> - <location filename="../Window.cpp" line="913"/> + <location filename="../Window.cpp" line="920"/> <source>%1 - %2 - %3</source> <translation>%1 - %2 - %3</translation> </message> <message> - <location filename="../Window.cpp" line="915"/> + <location filename="../Window.cpp" line="922"/> <source>%1 - %2 (%3 fps) - %4</source> <translation>%1 - %2 (%3 Bilder/Sekunde) - %4</translation> </message> <message> - <location filename="../Window.cpp" line="947"/> + <location filename="../Window.cpp" line="954"/> <source>&amp;File</source> <translation>&amp;Datei</translation> </message> <message> - <location filename="../Window.cpp" line="950"/> + <location filename="../Window.cpp" line="957"/> <source>Load &amp;ROM...</source> <translation>&amp;ROM laden...</translation> </message> <message> - <location filename="../Window.cpp" line="953"/> + <location filename="../Window.cpp" line="960"/> <source>Load ROM in archive...</source> <translation>ROM aus Archiv laden...</translation> </message> <message> - <location filename="../Window.cpp" line="959"/> + <location filename="../Window.cpp" line="966"/> <source>Load temporary save...</source> <translation>Temporäre Speicherdatei laden...</translation> </message> <message> - <location filename="../Window.cpp" line="964"/> + <location filename="../Window.cpp" line="971"/> <source>Load &amp;patch...</source> <translation>&amp;Patch laden...</translation> </message> <message> - <location filename="../Window.cpp" line="966"/> + <location filename="../Window.cpp" line="973"/> <source>Boot BIOS</source> <translation>BIOS booten</translation> </message> <message> - <location filename="../Window.cpp" line="973"/> + <location filename="../Window.cpp" line="980"/> <source>Replace ROM...</source> <translation>ROM ersetzen...</translation> </message> <message> - <location filename="../Window.cpp" line="975"/> + <location filename="../Window.cpp" line="982"/> <source>ROM &amp;info...</source> <translation>ROM-&amp;Informationen...</translation> </message> <message> - <location filename="../Window.cpp" line="980"/> + <location filename="../Window.cpp" line="987"/> <source>Recent</source> <translation>Zuletzt verwendet</translation> </message> <message> - <location filename="../Window.cpp" line="984"/> + <location filename="../Window.cpp" line="991"/> <source>Make portable</source> <translation>Portablen Modus aktivieren</translation> </message> <message> - <location filename="../Window.cpp" line="988"/> + <location filename="../Window.cpp" line="995"/> <source>&amp;Load state</source> <translation>Savestate &amp;laden</translation> </message> <message> - <location filename="../Window.cpp" line="989"/> + <location filename="../Window.cpp" line="996"/> <source>F10</source> <translation>F10</translation> </message> <message> - <location filename="../Window.cpp" line="995"/> + <location filename="../Window.cpp" line="1002"/> <source>&amp;Save state</source> <translation>Savestate &amp;speichern</translation> </message> <message> - <location filename="../Window.cpp" line="996"/> + <location filename="../Window.cpp" line="1003"/> <source>Shift+F10</source> <translation>Umschalt+F10</translation> </message> <message> - <location filename="../Window.cpp" line="1002"/> + <location filename="../Window.cpp" line="1009"/> <source>Quick load</source> <translation>Schnell laden</translation> </message> <message> - <location filename="../Window.cpp" line="1003"/> + <location filename="../Window.cpp" line="1010"/> <source>Quick save</source> <translation>Schnell speichern</translation> </message> <message> - <location filename="../Window.cpp" line="1007"/> + <location filename="../Window.cpp" line="1014"/> <source>Load recent</source> <translation>Lade zuletzt gespeicherten Savestate</translation> </message> <message> - <location filename="../Window.cpp" line="1013"/> + <location filename="../Window.cpp" line="1020"/> <source>Save recent</source> <translation>Speichere aktuellen Stand</translation> </message> <message> - <location filename="../Window.cpp" line="1022"/> + <location filename="../Window.cpp" line="1029"/> <source>Undo load state</source> <translation>Laden des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1023"/> + <location filename="../Window.cpp" line="1030"/> <source>F11</source> <translation>F11</translation> </message> <message> - <location filename="../Window.cpp" line="1029"/> + <location filename="../Window.cpp" line="1036"/> <source>Undo save state</source> <translation>Speichern des Savestate rückgängig machen</translation> </message> <message> - <location filename="../Window.cpp" line="1030"/> + <location filename="../Window.cpp" line="1037"/> <source>Shift+F11</source> <translation>Umschalt+F11</translation> </message> <message> - <location filename="../Window.cpp" line="1041"/> <location filename="../Window.cpp" line="1048"/> + <location filename="../Window.cpp" line="1055"/> <source>State &amp;%1</source> <translation>Savestate &amp;%1</translation> </message> <message> - <location filename="../Window.cpp" line="1042"/> + <location filename="../Window.cpp" line="1049"/> <source>F%1</source> <translation>F%1</translation> </message> <message> - <location filename="../Window.cpp" line="1049"/> + <location filename="../Window.cpp" line="1056"/> <source>Shift+F%1</source> <translation>Umschalt+F%1</translation> </message> <message> - <location filename="../Window.cpp" line="1058"/> + <location filename="../Window.cpp" line="1065"/> <source>Import GameShark Save</source> <translation>Importiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1064"/> + <location filename="../Window.cpp" line="1071"/> <source>Export GameShark Save</source> <translation>Exportiere GameShark-Speicherstand</translation> </message> <message> - <location filename="../Window.cpp" line="1072"/> + <location filename="../Window.cpp" line="1079"/> <source>New multiplayer window</source> <translation>Neues Multiplayer-Fenster</translation> </message> <message> - <location filename="../Window.cpp" line="1082"/> + <location filename="../Window.cpp" line="1089"/> <source>About</source> <translation>Über</translation> </message> <message> - <location filename="../Window.cpp" line="1087"/> + <location filename="../Window.cpp" line="1094"/> <source>E&amp;xit</source> <translation>&amp;Beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1090"/> + <location filename="../Window.cpp" line="1097"/> <source>&amp;Emulation</source> <translation>&amp;Emulation</translation> </message> <message> - <location filename="../Window.cpp" line="1092"/> + <location filename="../Window.cpp" line="1099"/> <source>&amp;Reset</source> <translation>Zu&amp;rücksetzen</translation> </message> <message> - <location filename="../Window.cpp" line="1093"/> + <location filename="../Window.cpp" line="1100"/> <source>Ctrl+R</source> <translation>Strg+R</translation> </message> <message> - <location filename="../Window.cpp" line="1098"/> + <location filename="../Window.cpp" line="1105"/> <source>Sh&amp;utdown</source> <translation>B&amp;eenden</translation> </message> <message> - <location filename="../Window.cpp" line="1104"/> + <location filename="../Window.cpp" line="1111"/> <source>Yank game pak</source> <translation>Spielmodul herausziehen</translation> </message> <message> - <location filename="../Window.cpp" line="1112"/> + <location filename="../Window.cpp" line="1119"/> <source>&amp;Pause</source> <translation>&amp;Pause</translation> </message> <message> - <location filename="../Window.cpp" line="1115"/> + <location filename="../Window.cpp" line="1122"/> <source>Ctrl+P</source> <translation>Strg+P</translation> </message> <message> - <location filename="../Window.cpp" line="1124"/> + <location filename="../Window.cpp" line="1131"/> <source>&amp;Next frame</source> <translation>&amp;Nächstes Bild</translation> </message> <message> - <location filename="../Window.cpp" line="1125"/> + <location filename="../Window.cpp" line="1132"/> <source>Ctrl+N</source> <translation>Strg+N</translation> </message> <message> - <location filename="../Window.cpp" line="1136"/> + <location filename="../Window.cpp" line="1143"/> <source>Fast forward (held)</source> <translation>Schneller Vorlauf (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1138"/> + <location filename="../Window.cpp" line="1145"/> <source>&amp;Fast forward</source> <translation>Schneller &amp;Vorlauf</translation> </message> <message> - <location filename="../Window.cpp" line="1141"/> + <location filename="../Window.cpp" line="1148"/> <source>Shift+Tab</source> <translation>Umschalt+Tab</translation> </message> <message> - <location filename="../Window.cpp" line="1145"/> + <location filename="../Window.cpp" line="1152"/> <source>Fast forward speed</source> <translation>Vorlauf-Geschwindigkeit</translation> </message> <message> - <location filename="../Window.cpp" line="1150"/> + <location filename="../Window.cpp" line="1157"/> <source>Unbounded</source> <translation>Unbegrenzt</translation> </message> <message> - <location filename="../Window.cpp" line="1154"/> + <location filename="../Window.cpp" line="1161"/> <source>%0x</source> <translation>%0x</translation> </message> <message> - <location filename="../Window.cpp" line="1162"/> + <location filename="../Window.cpp" line="1169"/> <source>Rewind (held)</source> <translation>Zurückspulen (gehalten)</translation> </message> <message> - <location filename="../Window.cpp" line="1164"/> + <location filename="../Window.cpp" line="1171"/> <source>Re&amp;wind</source> <translation>Zur&amp;ückspulen</translation> </message> <message> - <location filename="../Window.cpp" line="1165"/> + <location filename="../Window.cpp" line="1172"/> <source>~</source> <translation>~</translation> </message> <message> - <location filename="../Window.cpp" line="1171"/> + <location filename="../Window.cpp" line="1178"/> <source>Step backwards</source> <translation>Schrittweiser Rücklauf</translation> </message> <message> - <location filename="../Window.cpp" line="1172"/> + <location filename="../Window.cpp" line="1179"/> <source>Ctrl+B</source> <translation>Strg+B</translation> </message> <message> - <location filename="../Window.cpp" line="1181"/> + <location filename="../Window.cpp" line="1188"/> <source>Sync to &amp;video</source> <translation>Mit &amp;Video synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1188"/> + <location filename="../Window.cpp" line="1195"/> <source>Sync to &amp;audio</source> <translation>Mit &amp;Audio synchronisieren</translation> </message> <message> - <location filename="../Window.cpp" line="1196"/> + <location filename="../Window.cpp" line="1203"/> <source>Solar sensor</source> <translation>Solar-Sensor</translation> </message> <message> - <location filename="../Window.cpp" line="1198"/> + <location filename="../Window.cpp" line="1205"/> <source>Increase solar level</source> <translation>Sonnen-Level erhöhen</translation> </message> <message> - <location filename="../Window.cpp" line="1202"/> + <location filename="../Window.cpp" line="1209"/> <source>Decrease solar level</source> <translation>Sonnen-Level verringern</translation> </message> <message> - <location filename="../Window.cpp" line="1206"/> + <location filename="../Window.cpp" line="1213"/> <source>Brightest solar level</source> <translation>Hellster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1210"/> + <location filename="../Window.cpp" line="1217"/> <source>Darkest solar level</source> <translation>Dunkelster Sonnen-Level</translation> </message> <message> - <location filename="../Window.cpp" line="1216"/> + <location filename="../Window.cpp" line="1223"/> <source>Brightness %1</source> <translation>Helligkeit %1</translation> </message> <message> - <location filename="../Window.cpp" line="1223"/> + <location filename="../Window.cpp" line="1230"/> <source>Audio/&amp;Video</source> <translation>Audio/&amp;Video</translation> </message> <message> - <location filename="../Window.cpp" line="1225"/> + <location filename="../Window.cpp" line="1232"/> <source>Frame size</source> <translation>Bildgröße</translation> </message> <message> - <location filename="../Window.cpp" line="1228"/> + <location filename="../Window.cpp" line="1235"/> <source>%1x</source> <translation>%1x</translation> </message> <message> - <location filename="../Window.cpp" line="1256"/> + <location filename="../Window.cpp" line="1263"/> <source>Toggle fullscreen</source> <translation>Vollbildmodus umschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1259"/> + <location filename="../Window.cpp" line="1266"/> <source>Lock aspect ratio</source> <translation>Seitenverhältnis korrigieren</translation> </message> <message> - <location filename="../Window.cpp" line="1266"/> + <location filename="../Window.cpp" line="1273"/> <source>Force integer scaling</source> <translation>Pixelgenaue Skalierung (Integer scaling)</translation> </message> <message> - <location filename="../Window.cpp" line="1282"/> + <location filename="../Window.cpp" line="1289"/> <source>Frame&amp;skip</source> <translation>Frame&amp;skip</translation> </message> <message> - <location filename="../Window.cpp" line="1292"/> + <location filename="../Window.cpp" line="1299"/> <source>Shader options...</source> <translation>Shader-Optionen...</translation> </message> <message> - <location filename="../Window.cpp" line="1302"/> + <location filename="../Window.cpp" line="1309"/> <source>Mute</source> <translation>Stummschalten</translation> </message> <message> - <location filename="../Window.cpp" line="1309"/> + <location filename="../Window.cpp" line="1316"/> <source>FPS target</source> <translation>Bildwiederholrate</translation> </message> <message> - <location filename="../Window.cpp" line="1314"/> + <location filename="../Window.cpp" line="1321"/> <source>15</source> <translation>15</translation> </message> <message> - <location filename="../Window.cpp" line="1315"/> + <location filename="../Window.cpp" line="1322"/> <source>30</source> <translation>30</translation> </message> <message> - <location filename="../Window.cpp" line="1316"/> + <location filename="../Window.cpp" line="1323"/> <source>45</source> <translation>45</translation> </message> <message> - <location filename="../Window.cpp" line="1317"/> + <location filename="../Window.cpp" line="1324"/> <source>Native (59.7)</source> <translation>Nativ (59.7)</translation> </message> <message> - <location filename="../Window.cpp" line="1318"/> + <location filename="../Window.cpp" line="1325"/> <source>60</source> <translation>60</translation> </message> <message> - <location filename="../Window.cpp" line="1319"/> + <location filename="../Window.cpp" line="1326"/> <source>90</source> <translation>90</translation> </message> <message> - <location filename="../Window.cpp" line="1320"/> + <location filename="../Window.cpp" line="1327"/> <source>120</source> <translation>120</translation> </message> <message> - <location filename="../Window.cpp" line="1321"/> + <location filename="../Window.cpp" line="1328"/> <source>240</source> <translation>240</translation> </message> <message> - <location filename="../Window.cpp" line="1329"/> + <location filename="../Window.cpp" line="1336"/> <source>Take &amp;screenshot</source> <translation>&amp;Screenshot erstellen</translation> </message> <message> - <location filename="../Window.cpp" line="1330"/> + <location filename="../Window.cpp" line="1337"/> <source>F12</source> <translation>F12</translation> </message> <message> - <location filename="../Window.cpp" line="1337"/> + <location filename="../Window.cpp" line="1344"/> <source>Record output...</source> <translation>Ausgabe aufzeichen...</translation> </message> <message> - <location filename="../Window.cpp" line="1344"/> + <location filename="../Window.cpp" line="1351"/> <source>Record GIF...</source> <translation>GIF aufzeichen...</translation> </message> <message> - <location filename="../Window.cpp" line="1349"/> + <location filename="../Window.cpp" line="1356"/> <source>Record video log...</source> <translation>Video-Log aufzeichnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1354"/> + <location filename="../Window.cpp" line="1361"/> <source>Stop video log</source> <translation>Video-Log beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1360"/> + <location filename="../Window.cpp" line="1367"/> <source>Video layers</source> <translation>Video-Ebenen</translation> </message> <message> - <location filename="../Window.cpp" line="1363"/> + <location filename="../Window.cpp" line="1370"/> <source>Audio channels</source> <translation>Audio-Kanäle</translation> </message> <message> - <location filename="../Window.cpp" line="1366"/> + <location filename="../Window.cpp" line="1373"/> <source>&amp;Tools</source> <translation>&amp;Werkzeuge</translation> </message> <message> - <location filename="../Window.cpp" line="1368"/> + <location filename="../Window.cpp" line="1375"/> <source>View &amp;logs...</source> <translation>&amp;Logs ansehen...</translation> </message> <message> - <location filename="../Window.cpp" line="1372"/> + <location filename="../Window.cpp" line="1379"/> <source>Game &amp;overrides...</source> <translation>Spiel-&amp;Überschreibungen...</translation> </message> <message> - <location filename="../Window.cpp" line="1376"/> + <location filename="../Window.cpp" line="1383"/> <source>Game &amp;Pak sensors...</source> <translation>Game &amp;Pak-Sensoren...</translation> </message> <message> - <location filename="../Window.cpp" line="1380"/> + <location filename="../Window.cpp" line="1387"/> <source>&amp;Cheats...</source> <translation>&amp;Cheats...</translation> </message> <message> - <location filename="../Window.cpp" line="1392"/> + <location filename="../Window.cpp" line="1399"/> <source>Open debugger console...</source> <translation>Debugger-Konsole äffnen...</translation> </message> <message> - <location filename="../Window.cpp" line="1398"/> + <location filename="../Window.cpp" line="1405"/> <source>Start &amp;GDB server...</source> <translation>&amp;GDB-Server starten...</translation> </message> <message> - <location filename="../Window.cpp" line="1386"/> + <location filename="../Window.cpp" line="1393"/> <source>Settings...</source> <translation>Einstellungen...</translation> </message> <message> - <location filename="../Window.cpp" line="391"/> + <location filename="../Window.cpp" line="396"/> <source>Select folder</source> <translation>Ordner auswählen</translation> </message> <message> - <location filename="../Window.cpp" line="955"/> + <location filename="../Window.cpp" line="962"/> <source>Add folder to library...</source> <translation>Ordner zur Bibliothek hinzufügen...</translation> </message> <message> - <location filename="../Window.cpp" line="1276"/> + <location filename="../Window.cpp" line="1283"/> <source>Bilinear filtering</source> <translation>Bilineare Filterung</translation> </message> <message> - <location filename="../Window.cpp" line="1405"/> + <location filename="../Window.cpp" line="1412"/> <source>View &amp;palette...</source> <translation>&amp;Palette betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1410"/> + <location filename="../Window.cpp" line="1417"/> <source>View &amp;sprites...</source> <translation>&amp;Sprites betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1415"/> + <location filename="../Window.cpp" line="1422"/> <source>View &amp;tiles...</source> <translation>&amp;Tiles betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1420"/> + <location filename="../Window.cpp" line="1427"/> <source>View memory...</source> <translation>Speicher betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1426"/> + <location filename="../Window.cpp" line="1432"/> + <source>Search memory...</source> + <translation>Speicher durchsuchen...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1438"/> <source>View &amp;I/O registers...</source> <translation>&amp;I/O-Register betrachten...</translation> </message> <message> - <location filename="../Window.cpp" line="1496"/> + <location filename="../Window.cpp" line="1508"/> <source>Exit fullscreen</source> <translation>Vollbildmodus beenden</translation> </message> <message> - <location filename="../Window.cpp" line="1501"/> + <location filename="../Window.cpp" line="1513"/> <source>Autofire</source> <translation>Autofeuer</translation> </message> <message> - <location filename="../Window.cpp" line="1508"/> + <location filename="../Window.cpp" line="1520"/> <source>Autofire A</source> <translation>Autofeuer A</translation> </message> <message> - <location filename="../Window.cpp" line="1514"/> + <location filename="../Window.cpp" line="1526"/> <source>Autofire B</source> <translation>Autofeuer B</translation> </message> <message> - <location filename="../Window.cpp" line="1520"/> + <location filename="../Window.cpp" line="1532"/> <source>Autofire L</source> <translation>Autofeuer L</translation> </message> <message> - <location filename="../Window.cpp" line="1526"/> + <location filename="../Window.cpp" line="1538"/> <source>Autofire R</source> <translation>Autofeuer R</translation> </message> <message> - <location filename="../Window.cpp" line="1532"/> + <location filename="../Window.cpp" line="1544"/> <source>Autofire Start</source> <translation>Autofeuer Start</translation> </message> <message> - <location filename="../Window.cpp" line="1538"/> + <location filename="../Window.cpp" line="1550"/> <source>Autofire Select</source> <translation>Autofeuer Select</translation> </message> <message> - <location filename="../Window.cpp" line="1544"/> + <location filename="../Window.cpp" line="1556"/> <source>Autofire Up</source> <translation>Autofeuer nach oben</translation> </message> <message> - <location filename="../Window.cpp" line="1550"/> + <location filename="../Window.cpp" line="1562"/> <source>Autofire Right</source> <translation>Autofeuer rechts</translation> </message> <message> - <location filename="../Window.cpp" line="1556"/> + <location filename="../Window.cpp" line="1568"/> <source>Autofire Down</source> <translation>Autofeuer nach unten</translation> </message> <message> - <location filename="../Window.cpp" line="1562"/> + <location filename="../Window.cpp" line="1574"/> <source>Autofire Left</source> <translation>Autofeuer links</translation> </message>

@@ -3833,7 +3965,7 @@ <translation>Alle</translation>

</message> <message> <location filename="../SettingsView.ui" line="307"/> - <location filename="../SettingsView.ui" line="556"/> + <location filename="../SettingsView.ui" line="576"/> <source>frames</source> <translation>Bilder</translation> </message>

@@ -3874,81 +4006,91 @@ <translation>Erzwinge pixelgenaue Skalierung

(Integer scaling)</translation> </message> <message> - <location filename="../SettingsView.ui" line="415"/> + <location filename="../SettingsView.ui" line="404"/> + <source>Language</source> + <translation>Sprache</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="412"/> + <source>English</source> + <translation>Englisch</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="428"/> <source>List view</source> <translation>Listenansicht</translation> </message> <message> - <location filename="../SettingsView.ui" line="420"/> + <location filename="../SettingsView.ui" line="433"/> <source>Tree view</source> <translation>Baumansicht</translation> </message> <message> - <location filename="../SettingsView.ui" line="428"/> + <location filename="../SettingsView.ui" line="420"/> <source>Library:</source> <translation>Bibliothek:</translation> </message> <message> - <location filename="../SettingsView.ui" line="404"/> + <location filename="../SettingsView.ui" line="441"/> <source>Show when no game open</source> <translation>Anzeigen, wenn kein Spiel geöffnet ist</translation> </message> <message> - <location filename="../SettingsView.ui" line="438"/> + <location filename="../SettingsView.ui" line="451"/> <source>Clear cache</source> <translation>Cache leeren</translation> </message> <message> - <location filename="../SettingsView.ui" line="483"/> + <location filename="../SettingsView.ui" line="503"/> <source>Fast forward speed:</source> <translation>Vorlauf-Geschwindigkeit:</translation> </message> <message> - <location filename="../SettingsView.ui" line="680"/> + <location filename="../SettingsView.ui" line="700"/> <source>Rewind affects save data</source> <translation>Rücklauf beeinflusst Speicherdaten</translation> </message> <message> - <location filename="../SettingsView.ui" line="690"/> + <location filename="../SettingsView.ui" line="710"/> <source>Preload entire ROM into memory</source> <translation>ROM-Datei vollständig in Arbeitsspeicher vorladen</translation> </message> <message> - <location filename="../SettingsView.ui" line="720"/> - <location filename="../SettingsView.ui" line="758"/> - <location filename="../SettingsView.ui" line="793"/> - <location filename="../SettingsView.ui" line="834"/> - <location filename="../SettingsView.ui" line="882"/> - <location filename="../SettingsView.ui" line="930"/> - <location filename="../SettingsView.ui" line="978"/> + <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"/> <source>Browse</source> <translation>Durchsuchen</translation> </message> <message> - <location filename="../SettingsView.ui" line="729"/> + <location filename="../SettingsView.ui" line="749"/> <source>Use BIOS file if found</source> <translation>BIOS-Datei verwenden, wenn vorhanden</translation> </message> <message> - <location filename="../SettingsView.ui" line="739"/> + <location filename="../SettingsView.ui" line="759"/> <source>Skip BIOS intro</source> <translation>BIOS-Intro überspringen</translation> </message> <message> - <location filename="../SettingsView.ui" line="495"/> + <location filename="../SettingsView.ui" line="515"/> <source>×</source> <translation>×</translation> </message> <message> - <location filename="../SettingsView.ui" line="514"/> + <location filename="../SettingsView.ui" line="534"/> <source>Unbounded</source> <translation>unbegrenzt</translation> </message> <message> - <location filename="../SettingsView.ui" line="459"/> + <location filename="../SettingsView.ui" line="472"/> <source>Suspend screensaver</source> <translation>Bildschirmschoner deaktivieren</translation> </message>

@@ -3958,50 +4100,50 @@ <source>BIOS</source>

<translation>BIOS</translation> </message> <message> - <location filename="../SettingsView.ui" line="469"/> + <location filename="../SettingsView.ui" line="482"/> <source>Pause when inactive</source> <translation>Pause, wenn inaktiv</translation> </message> <message> - <location filename="../SettingsView.ui" line="580"/> + <location filename="../SettingsView.ui" line="600"/> <source>Run all</source> <translation>Alle ausführen</translation> </message> <message> - <location filename="../SettingsView.ui" line="585"/> + <location filename="../SettingsView.ui" line="605"/> <source>Remove known</source> <translation>Bekannte entfernen</translation> </message> <message> - <location filename="../SettingsView.ui" line="590"/> + <location filename="../SettingsView.ui" line="610"/> <source>Detect and remove</source> <translation>Erkennen und entfernen</translation> </message> <message> - <location filename="../SettingsView.ui" line="452"/> + <location filename="../SettingsView.ui" line="465"/> <source>Allow opposing input directions</source> <translation>Gegensätzliche Eingaberichtungen erlauben</translation> </message> <message> - <location filename="../SettingsView.ui" line="612"/> - <location filename="../SettingsView.ui" line="649"/> + <location filename="../SettingsView.ui" line="632"/> + <location filename="../SettingsView.ui" line="669"/> <source>Screenshot</source> <translation>Screenshot</translation> </message> <message> - <location filename="../SettingsView.ui" line="622"/> - <location filename="../SettingsView.ui" line="659"/> + <location filename="../SettingsView.ui" line="642"/> + <location filename="../SettingsView.ui" line="679"/> <source>Save data</source> <translation>Speicherdaten</translation> </message> <message> - <location filename="../SettingsView.ui" line="632"/> - <location filename="../SettingsView.ui" line="666"/> + <location filename="../SettingsView.ui" line="652"/> + <location filename="../SettingsView.ui" line="686"/> <source>Cheat codes</source> <translation>Cheat-Codes</translation> </message> <message> - <location filename="../SettingsView.ui" line="533"/> + <location filename="../SettingsView.ui" line="553"/> <source>Enable rewind</source> <translation>Rücklauf aktivieren</translation> </message>

@@ -4011,65 +4153,65 @@ <source>Bilinear filtering</source>

<translation>Bilineare Filterung</translation> </message> <message> - <location filename="../SettingsView.ui" line="540"/> + <location filename="../SettingsView.ui" line="560"/> <source>Rewind history:</source> <translation>Rücklauf-Verlauf:</translation> </message> <message> - <location filename="../SettingsView.ui" line="572"/> + <location filename="../SettingsView.ui" line="592"/> <source>Idle loops:</source> <translation>Leerlaufprozesse:</translation> </message> <message> - <location filename="../SettingsView.ui" line="605"/> + <location filename="../SettingsView.ui" line="625"/> <source>Savestate extra data:</source> <translation>Zusätzliche Savestate-Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="642"/> + <location filename="../SettingsView.ui" line="662"/> <source>Load extra data:</source> <translation>Lade zusätzliche Daten:</translation> </message> <message> - <location filename="../SettingsView.ui" line="701"/> + <location filename="../SettingsView.ui" line="721"/> <source>GB BIOS file:</source> <translation>Datei mit GB-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="767"/> + <location filename="../SettingsView.ui" line="787"/> <source>GBA BIOS file:</source> <translation>Datei mit GBA-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="774"/> + <location filename="../SettingsView.ui" line="794"/> <source>GBC BIOS file:</source> <translation>Datei mit GBC-BIOS:</translation> </message> <message> - <location filename="../SettingsView.ui" line="809"/> + <location filename="../SettingsView.ui" line="829"/> <source>Save games</source> <translation>Spielstände</translation> </message> <message> - <location filename="../SettingsView.ui" line="843"/> - <location filename="../SettingsView.ui" line="891"/> - <location filename="../SettingsView.ui" line="939"/> - <location filename="../SettingsView.ui" line="987"/> + <location filename="../SettingsView.ui" line="863"/> + <location filename="../SettingsView.ui" line="911"/> + <location filename="../SettingsView.ui" line="959"/> + <location filename="../SettingsView.ui" line="1007"/> <source>Same directory as the ROM</source> <translation>Verzeichnis der ROM-Datei</translation> </message> <message> - <location filename="../SettingsView.ui" line="857"/> + <location filename="../SettingsView.ui" line="877"/> <source>Save states</source> <translation>Savestates</translation> </message> <message> - <location filename="../SettingsView.ui" line="905"/> + <location filename="../SettingsView.ui" line="925"/> <source>Screenshots</source> <translation>Screenshots</translation> </message> <message> - <location filename="../SettingsView.ui" line="953"/> + <location filename="../SettingsView.ui" line="973"/> <source>Patches</source> <translation>Patches</translation> </message>
A src/platform/qt/ts/mgba-it.ts

@@ -0,0 +1,4305 @@

+<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="it" sourcelanguage="en_US"> +<context> + <name>AboutScreen</name> + <message> + <location filename="../AboutScreen.ui" line="14"/> + <source>About</source> + <translation>About</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="23"/> + <source>&lt;a href=&quot;http://mgba.io/&quot;&gt;Website&lt;/a&gt; • &lt;a href=&quot;https://forums.mgba.io/&quot;&gt;Forums / Support&lt;/a&gt; • &lt;a href=&quot;https://patreon.com/mgba&quot;&gt;Donate&lt;/a&gt; • &lt;a href=&quot;https://github.com/mgba-emu/mgba/tree/{gitBranch}&quot;&gt;Source&lt;/a&gt;</source> + <translation>&lt;a href=&quot;http://mgba.io/&quot;&gt;Sitio web&lt;/a&gt; • &lt;a href=&quot;https://forums.mgba.io/&quot;&gt;Foros / Supporto&lt;/a&gt; • &lt;a href=&quot;https://patreon.com/mgba&quot;&gt;Donar&lt;/a&gt; • &lt;a href=&quot;https://github.com/mgba-emu/mgba/tree/{gitBranch}&quot;&gt;Codice sorgente&lt;/a&gt;</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="58"/> + <source>{projectName}</source> + <translation>{projectName}</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="68"/> + <source>{projectName} would like to thank the following patrons from Patreon:</source> + <translation>{projectName} desidera ringraziare i seguenti sponsor di Patreon:</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="86"/> + <source>© 2013 – 2016 Jeffrey Pfau, licensed under the Mozilla Public License, version 2.0 +Game Boy Advance is a registered trademark of Nintendo Co., Ltd.</source> + <translation>© 2013 - 2016 Jeffrey Pfau, sotto licenza Mozilla Public License, versione 2.0 +Game Boy Advance è un marchio registrato di Nintendo Co., Ltd.</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="190"/> + <source>{patrons}</source> + <translation>{patrons}</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="106"/> + <source>{projectVersion}</source> + <translation>{projectVersion}</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="155"/> + <source>{logo}</source> + <translation>{logo}</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="177"/> + <source>{projectName} is an open-source Game Boy Advance emulator</source> + <translation>{projectName} è un emulatore open-source del Game Boy Advance</translation> + </message> + <message> + <location filename="../AboutScreen.ui" line="41"/> + <source>Branch: &lt;tt&gt;{gitBranch}&lt;/tt&gt;&lt;br/&gt;Revision: &lt;tt&gt;{gitCommit}&lt;/tt&gt;</source> + <translation>Ramo Git: &lt;tt&gt;{gitBranch}&lt;/tt&gt;&lt;br/&gt;Revisione: &lt;tt&gt;{gitCommit}&lt;/tt&gt;</translation> + </message> +</context> +<context> + <name>ArchiveInspector</name> + <message> + <location filename="../ArchiveInspector.ui" line="14"/> + <source>Open in archive...</source> + <translation>Apri il file in ...</translation> + </message> + <message> + <location filename="../ArchiveInspector.ui" line="20"/> + <source>Loading...</source> + <translation>Caricamento in corso...</translation> + </message> +</context> +<context> + <name>AssetTile</name> + <message> + <location filename="../AssetTile.ui" line="12"/> + <source>AssetTile</source> + <translation>AssetTile</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="33"/> + <source>Tile #</source> + <translation>Tile Nº</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="40"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="54"/> + <source>Address</source> + <translation>Indirizzo</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="61"/> + <source>0x06000000</source> + <translation>0x06000000</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="100"/> + <source>Red</source> + <translation>Rosso</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="107"/> + <source>Green</source> + <translation>Verde</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="114"/> + <source>Blue</source> + <translation>Blue</translation> + </message> + <message> + <location filename="../AssetTile.ui" line="128"/> + <location filename="../AssetTile.ui" line="135"/> + <location filename="../AssetTile.ui" line="142"/> + <source>0x00 (00)</source> + <translation>0x00 (00)</translation> + </message> +</context> +<context> + <name>CheatsView</name> + <message> + <location filename="../CheatsView.ui" line="14"/> + <source>Cheats</source> + <translation>Trucchi</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="20"/> + <source>Remove</source> + <translation>Rimuovere</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="34"/> + <source>Save</source> + <translation>Salva</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="41"/> + <source>Load</source> + <translation>Carica</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="69"/> + <source>Add New Set</source> + <translation>Aggiungere Nuovo Set</translation> + </message> + <message> + <location filename="../CheatsView.ui" line="76"/> + <source>Add</source> + <translation>Aggiungi</translation> + </message> +</context> +<context> + <name>DebuggerConsole</name> + <message> + <location filename="../DebuggerConsole.ui" line="14"/> + <source>Debugger</source> + <translation>Debugger</translation> + </message> + <message> + <location filename="../DebuggerConsole.ui" line="25"/> + <source>Enter command (try `help` for more info)</source> + <translation>Inserire un comando (premere `help` per maggiori informazioni)</translation> + </message> + <message> + <location filename="../DebuggerConsole.ui" line="32"/> + <source>Break</source> + <translation>Pausa</translation> + </message> +</context> +<context> + <name>GIFView</name> + <message> + <location filename="../GIFView.ui" line="14"/> + <source>Record GIF</source> + <translation>Registra GIF</translation> + </message> + <message> + <location filename="../GIFView.ui" line="34"/> + <source>Start</source> + <translation>Avvia</translation> + </message> + <message> + <location filename="../GIFView.ui" line="50"/> + <source>Stop</source> + <translation>Stop</translation> + </message> + <message> + <location filename="../GIFView.ui" line="63"/> + <source>Select File</source> + <translation>Seleziona File</translation> + </message> + <message> + <location filename="../GIFView.ui" line="101"/> + <source>Frameskip</source> + <translation>Salta Frame</translation> + </message> + <message> + <location filename="../GIFView.ui" line="115"/> + <source>Frame delay (ms)</source> + <translation>Ritardo Frame (ms)</translation> + </message> + <message> + <location filename="../GIFView.ui" line="122"/> + <source>Automatic</source> + <translation>Automatico</translation> + </message> +</context> +<context> + <name>IOViewer</name> + <message> + <location filename="../IOViewer.ui" line="14"/> + <source>I/O Viewer</source> + <translation>Visualizzatore I/O</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="26"/> + <source>0x0000</source> + <translation>0x0000</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="58"/> + <source>2</source> + <translation>2</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="82"/> + <source>5</source> + <translation>5</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="100"/> + <source>4</source> + <translation>4</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="118"/> + <source>7</source> + <translation>7</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="136"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="157"/> + <source>9</source> + <translation>9</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="178"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="196"/> + <source>3</source> + <translation>3</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="217"/> + <source>8</source> + <translation>8</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="241"/> + <source>C</source> + <translation>C</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="259"/> + <source>E</source> + <translation>E</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="283"/> + <source>6</source> + <translation>6</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="310"/> + <source>D</source> + <translation>D</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="328"/> + <source>F</source> + <translation>F</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="346"/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location filename="../IOViewer.ui" line="364"/> + <source>B</source> + <translation>B</translation> + </message> +</context> +<context> + <name>LibraryView</name> + <message> + <location filename="../LibraryView.ui" line="14"/> + <source>Library</source> + <translation>Biblioteca</translation> + </message> +</context> +<context> + <name>LoadSaveState</name> + <message> + <location filename="../LoadSaveState.ui" line="14"/> + <location filename="../LoadSaveState.ui" line="88"/> + <source>%1 State</source> + <translation>%1 cattura stato</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="41"/> + <location filename="../LoadSaveState.ui" line="63"/> + <location filename="../LoadSaveState.ui" line="107"/> + <location filename="../LoadSaveState.ui" line="129"/> + <location filename="../LoadSaveState.ui" line="151"/> + <location filename="../LoadSaveState.ui" line="173"/> + <location filename="../LoadSaveState.ui" line="195"/> + <location filename="../LoadSaveState.ui" line="217"/> + <location filename="../LoadSaveState.ui" line="239"/> + <source>No Save</source> + <translation>Senza Salvare</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="50"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="72"/> + <source>2</source> + <translation>2</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="116"/> + <source>3</source> + <translation>3</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="138"/> + <source>4</source> + <translation>4</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="160"/> + <source>5</source> + <translation>5</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="182"/> + <source>6</source> + <translation>6</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="204"/> + <source>7</source> + <translation>7</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="226"/> + <source>8</source> + <translation>8</translation> + </message> + <message> + <location filename="../LoadSaveState.ui" line="248"/> + <source>9</source> + <translation>9</translation> + </message> +</context> +<context> + <name>LogView</name> + <message> + <location filename="../LogView.ui" line="14"/> + <source>Logs</source> + <translation>Logs</translation> + </message> + <message> + <location filename="../LogView.ui" line="22"/> + <source>Enabled Levels</source> + <translation>Abilita Livelli</translation> + </message> + <message> + <location filename="../LogView.ui" line="28"/> + <source>Debug</source> + <translation>Debug</translation> + </message> + <message> + <location filename="../LogView.ui" line="38"/> + <source>Stub</source> + <translation>Stub</translation> + </message> + <message> + <location filename="../LogView.ui" line="48"/> + <source>Info</source> + <translation>Informazioni</translation> + </message> + <message> + <location filename="../LogView.ui" line="58"/> + <source>Warning</source> + <translation>Avvertenze</translation> + </message> + <message> + <location filename="../LogView.ui" line="68"/> + <source>Error</source> + <translation>Errore</translation> + </message> + <message> + <location filename="../LogView.ui" line="78"/> + <source>Fatal</source> + <translation>Fatale</translation> + </message> + <message> + <location filename="../LogView.ui" line="95"/> + <source>Game Error</source> + <translation>Errore del gioco</translation> + </message> + <message> + <location filename="../LogView.ui" line="121"/> + <source>Clear</source> + <translation>Pulisci</translation> + </message> + <message> + <location filename="../LogView.ui" line="130"/> + <source>Max Lines</source> + <translation>Linee di massima</translation> + </message> +</context> +<context> + <name>MemoryView</name> + <message> + <location filename="../MemoryView.ui" line="14"/> + <source>Memory</source> + <translation>Memoria</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="38"/> + <source>Inspect Address:</source> + <translation>Ispezionare indirizzo:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="61"/> + <source>0x</source> + <translation>0x</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="81"/> + <source>Set Alignment:</source> + <translation>Set di allignamento:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="101"/> + <source>1 Byte</source> + <translation>1 byte</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="124"/> + <source>2 Bytes</source> + <translation>2 bytes</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="144"/> + <source>4 Bytes</source> + <translation>4 bytes</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="199"/> + <source>Signed Integer:</source> + <translation>Integer Signato:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="217"/> + <source>String:</source> + <translation>Stringa:</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="231"/> + <source>Load TBL</source> + <translation>Carica TBL</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="244"/> + <source>Copy Selection</source> + <translation>Copia la selezione</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="251"/> + <source>Paste</source> + <translation>Incolla</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="271"/> + <source>Save Selection</source> + <translation>Salva Selezione</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="278"/> + <source>Load</source> + <translation>Carica</translation> + </message> + <message> + <location filename="../MemoryView.ui" line="181"/> + <source>Unsigned Integer:</source> + <translation>Integer non signato:</translation> + </message> +</context> +<context> + <name>ObjView</name> + <message> + <location filename="../ObjView.ui" line="14"/> + <source>Sprites</source> + <translation>Sprites</translation> + </message> + <message> + <location filename="../ObjView.ui" line="56"/> + <location filename="../ObjView.ui" line="499"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../ObjView.ui" line="69"/> + <source>Magnification</source> + <translation>Magnification</translation> + </message> + <message> + <location filename="../ObjView.ui" line="78"/> + <source>Attributes</source> + <translation>Attributi</translation> + </message> + <message> + <location filename="../ObjView.ui" line="86"/> + <source>Transform</source> + <translation>Transformazione</translation> + </message> + <message> + <location filename="../ObjView.ui" line="106"/> + <source>Off</source> + <translation>No</translation> + </message> + <message> + <location filename="../ObjView.ui" line="117"/> + <source>Palette</source> + <translation>Palette</translation> + </message> + <message> + <location filename="../ObjView.ui" line="137"/> + <location filename="../ObjView.ui" line="367"/> + <location filename="../ObjView.ui" line="423"/> + <location filename="../ObjView.ui" line="449"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../ObjView.ui" line="151"/> + <source>Double Size</source> + <translation>Doppia Dimensione</translation> + </message> + <message> + <location filename="../ObjView.ui" line="177"/> + <location filename="../ObjView.ui" line="221"/> + <location filename="../ObjView.ui" line="234"/> + <location filename="../ObjView.ui" line="302"/> + <source>Return, Ctrl+R</source> + <translation>Return, Ctrl+R</translation> + </message> + <message> + <location filename="../ObjView.ui" line="195"/> + <source>Flipped</source> + <translation>Flippato</translation> + </message> + <message> + <location filename="../ObjView.ui" line="218"/> + <source>H</source> + <translation>H</translation> + </message> + <message> + <location filename="../ObjView.ui" line="231"/> + <source>V</source> + <translation>V</translation> + </message> + <message> + <location filename="../ObjView.ui" line="245"/> + <source>Mode</source> + <translation>Modalità</translation> + </message> + <message> + <location filename="../ObjView.ui" line="265"/> + <source>Normal</source> + <translation>Normale</translation> + </message> + <message> + <location filename="../ObjView.ui" line="276"/> + <source>Mosaic</source> + <translation>Mosaico</translation> + </message> + <message> + <location filename="../ObjView.ui" line="313"/> + <source>Enabled</source> + <translation>Abilitato</translation> + </message> + <message> + <location filename="../ObjView.ui" line="347"/> + <source>Priority</source> + <translation>Priorità</translation> + </message> + <message> + <location filename="../ObjView.ui" line="382"/> + <source>Tile</source> + <translation>Tile</translation> + </message> + <message> + <location filename="../ObjView.ui" line="389"/> + <source>Geometry</source> + <translation>Geometria</translation> + </message> + <message> + <location filename="../ObjView.ui" line="397"/> + <source>Position</source> + <translation>Posizione</translation> + </message> + <message> + <location filename="../ObjView.ui" line="433"/> + <source>, </source> + <translation>, </translation> + </message> + <message> + <location filename="../ObjView.ui" line="463"/> + <source>Dimensions</source> + <translation>Dimensione</translation> + </message> + <message> + <location filename="../ObjView.ui" line="489"/> + <location filename="../ObjView.ui" line="515"/> + <source>8</source> + <translation>8</translation> + </message> + <message> + <location filename="../ObjView.ui" line="545"/> + <source>Address</source> + <translation>Indirizzo</translation> + </message> + <message> + <location filename="../ObjView.ui" line="552"/> + <source>0x07000000</source> + <translation>0x07000000</translation> + </message> +</context> +<context> + <name>OverrideView</name> + <message> + <location filename="../OverrideView.ui" line="20"/> + <source>Game Overrides</source> + <translation>Valori specifici per gioco</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="30"/> + <source>Game Boy Advance</source> + <translation>Game Boy Advance</translation> + </message> + <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"/> + <source>Autodetect</source> + <translation>Rilevamento automatico</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="55"/> + <source>Realtime clock</source> + <translation>RealTime clock</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="65"/> + <source>Gyroscope</source> + <translation>Giroscopio</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="75"/> + <source>Tilt</source> + <translation>Inclinazione</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="85"/> + <source>Light sensor</source> + <translation>Sensore di luce</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="95"/> + <source>Rumble</source> + <translation>Vibrazione</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="113"/> + <source>Save type</source> + <translation>Tipo di salvataggio</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="126"/> + <location filename="../OverrideView.ui" line="284"/> + <source>None</source> + <translation>Nessuno</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="131"/> + <source>SRAM</source> + <translation>SRAM</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="136"/> + <source>Flash 512kb</source> + <translation>Flash 512kb</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="141"/> + <source>Flash 1Mb</source> + <translation>Flash 1Mb</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="146"/> + <source>EEPROM</source> + <translation>EEPROM</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="154"/> + <source>Idle loop</source> + <translation>Idle loop</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="195"/> + <source>Game Boy Player features</source> + <translation>Caratteristiche Game Boy Player</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="234"/> + <source>Game Boy</source> + <translation>Game Boy</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="240"/> + <source>Game Boy model</source> + <translation>Modello del Game Boy</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="253"/> + <source>Game Boy (DMG)</source> + <translation>Game Boy (DMG)</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="258"/> + <source>Game Boy Color (CGB)</source> + <translation>Game Boy Color (CGB)</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="263"/> + <source>Game Boy Advance (AGB)</source> + <translation>Game Boy Advance (AGB)</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="271"/> + <source>Memory bank controller</source> + <translation>Controller del banco di memoria</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="289"/> + <source>MBC1</source> + <translation>MBC1</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="294"/> + <source>MBC2</source> + <translation>MBC2</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="299"/> + <source>MBC3</source> + <translation>MBC3</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="304"/> + <source>MBC3 + RTC</source> + <translation>MBC3 + Reloj</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="309"/> + <source>MBC5</source> + <translation>MBC5</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="314"/> + <source>MBC5 + Rumble</source> + <translation>MBC5 + Vibrazione</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="319"/> + <source>MBC7</source> + <translation>MBC7</translation> + </message> + <message> + <location filename="../OverrideView.ui" line="324"/> + <source>HuC-3</source> + <translation>HuC-3</translation> + </message> +</context> +<context> + <name>PaletteView</name> + <message> + <location filename="../PaletteView.ui" line="14"/> + <source>Palette</source> + <translation>Palette</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="44"/> + <source>Background</source> + <translation>SFondo (BG)</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="94"/> + <source>Objects</source> + <translation>Oggetti (OBJ)</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="153"/> + <source>Selection</source> + <translation>Selezione</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="184"/> + <source>Red</source> + <translation>Rosso</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="191"/> + <source>Green</source> + <translation>Verde</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="198"/> + <source>Blue</source> + <translation>Blue</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="212"/> + <location filename="../PaletteView.ui" line="219"/> + <location filename="../PaletteView.ui" line="226"/> + <source>0x00 (00)</source> + <translation>0x00 (00)</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="244"/> + <source>16-bit value</source> + <translation>Valore in 16 bits</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="251"/> + <source>Hex code</source> + <translation>Codice esadecimale</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="258"/> + <source>Palette index</source> + <translation>Indice palette</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="272"/> + <source>0x0000</source> + <translation>0x0000</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="282"/> + <source>#000000</source> + <translation>#000000</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="292"/> + <source>000</source> + <translation>000</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="322"/> + <source>Export BG</source> + <translation>Esporta BG</translation> + </message> + <message> + <location filename="../PaletteView.ui" line="342"/> + <source>Export OBJ</source> + <translation>Esporta OBJ</translation> + </message> +</context> +<context> + <name>QGBA::AssetTile</name> + <message> + <location filename="../AssetTile.cpp" line="107"/> + <source>%0%1%2</source> + <translation>%0%1%2</translation> + </message> + <message> + <location filename="../AssetTile.cpp" line="136"/> + <location filename="../AssetTile.cpp" line="137"/> + <location filename="../AssetTile.cpp" line="138"/> + <source>0x%0 (%1)</source> + <translation>0x%0 (%1)</translation> + </message> +</context> +<context> + <name>QGBA::CheatsModel</name> + <message> + <location filename="../CheatsModel.cpp" line="54"/> + <source>(untitled)</source> + <translation>(senza titolo)</translation> + </message> + <message> + <location filename="../CheatsModel.cpp" line="209"/> + <source>Failed to open cheats file: %1</source> + <translation>Impossibile aprire il file cheats: %1</translation> + </message> +</context> +<context> + <name>QGBA::CheatsView</name> + <message> + <location filename="../CheatsView.cpp" line="49"/> + <location filename="../CheatsView.cpp" line="74"/> + <source>Add GameShark</source> + <translation>Aggiungi GameShark</translation> + </message> + <message> + <location filename="../CheatsView.cpp" line="55"/> + <source>Add Pro Action Replay</source> + <translation>Aggiungi Pro Action Replay</translation> + </message> + <message> + <location filename="../CheatsView.cpp" line="61"/> + <source>Add CodeBreaker</source> + <translation>Aggiungi CodeBreaker</translation> + </message> + <message> + <location filename="../CheatsView.cpp" line="80"/> + <source>Add GameGenie</source> + <translation>Aggiungi GameGenie</translation> + </message> + <message> + <location filename="../CheatsView.cpp" line="112"/> + <location filename="../CheatsView.cpp" line="119"/> + <source>Select cheats file</source> + <translation>Seleziona il file cheats</translation> + </message> +</context> +<context> + <name>QGBA::GBAKeyEditor</name> + <message> + <location filename="../GBAKeyEditor.cpp" line="68"/> + <source>Clear Button</source> + <translation>Pulisci bottoni</translation> + </message> + <message> + <location filename="../GBAKeyEditor.cpp" line="80"/> + <source>Clear Analog</source> + <translation>Pulisci analogici</translation> + </message> + <message> + <location filename="../GBAKeyEditor.cpp" line="91"/> + <source>Refresh</source> + <translation>Aggiornare</translation> + </message> + <message> + <location filename="../GBAKeyEditor.cpp" line="101"/> + <source>Set all</source> + <translation>Impostare tutti</translation> + </message> +</context> +<context> + <name>QGBA::GDBWindow</name> + <message> + <location filename="../GDBWindow.cpp" line="28"/> + <source>Server settings</source> + <translation>Impostazioni Server</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="34"/> + <source>Local port</source> + <translation>Porta locale</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="36"/> + <source>Bind address</source> + <translation>Indirizzo Bind</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="55"/> + <source>Break</source> + <translation>Break</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="104"/> + <source>Stop</source> + <translation>Stop</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="114"/> + <source>Start</source> + <translation>Avvia</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="122"/> + <source>Crash</source> + <translation>Errore</translation> + </message> + <message> + <location filename="../GDBWindow.cpp" line="122"/> + <source>Could not start GDB server</source> + <translation>Impossibile avviare il server GDB</translation> + </message> +</context> +<context> + <name>QGBA::GIFView</name> + <message> + <location filename="../GIFView.cpp" line="45"/> + <source>Failed to open output GIF file: %1</source> + <translation>Impossibile aprire il file GIF di output: %1</translation> + </message> + <message> + <location filename="../GIFView.cpp" line="63"/> + <source>Select output file</source> + <translation>Seleziona file di output</translation> + </message> + <message> + <location filename="../GIFView.cpp" line="63"/> + <source>Graphics Interchange Format (*.gif)</source> + <translation>Formato di interconnessione grafica (*.gif)</translation> + </message> +</context> +<context> + <name>QGBA::GameController</name> + <message> + <location filename="../GameController.cpp" line="397"/> + <location filename="../GameController.cpp" line="572"/> + <source>Failed to open game file: %1</source> + <translation>Impossibile aprire il file di gioco: %1</translation> + </message> + <message> + <location filename="../GameController.cpp" line="544"/> + <source>Failed to open save file: %1</source> + <translation>Impossibile aprire il file di salvataggio: %1</translation> + </message> + <message> + <location filename="../GameController.cpp" line="601"/> + <source>Failed to open snapshot file for reading: %1</source> + <translation>Impossibile aprire il file snapshot per la lettura: %1</translation> + </message> + <message> + <location filename="../GameController.cpp" line="621"/> + <source>Failed to open snapshot file for writing: %1</source> + <translation>Impossibile aprire il file snapshot per la scrittura: %1</translation> + </message> + <message> + <location filename="../GameController.cpp" line="914"/> + <source>Failed to start audio processor</source> + <translation>Impossibile avviare il processore audio</translation> + </message> +</context> +<context> + <name>QGBA::IOViewer</name> + <message> + <location filename="../IOViewer.cpp" line="30"/> + <source>Background mode</source> + <translation>Modalità Background (BG)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="31"/> + <source>Mode 0: 4 tile layers</source> + <translation>Modalità 0: 4 tiles layers</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="32"/> + <source>Mode 1: 2 tile layers + 1 rotated/scaled tile layer</source> + <translation>Modalità 1: 2 tile layers + 1 ruotato/scalato tile layer</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="33"/> + <source>Mode 2: 2 rotated/scaled tile layers</source> + <translation>Modalità 2: 2 ruotato/scalato tile layers</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="34"/> + <source>Mode 3: Full 15-bit bitmap</source> + <translation>Modalità 3: completo 15 bitmap</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="35"/> + <source>Mode 4: Full 8-bit bitmap</source> + <translation>Modalità 4: completo 8 bits</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="36"/> + <source>Mode 5: Small 15-bit bitmap</source> + <translation>Modalità 5: basso 15-bit bitmap</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="40"/> + <source>CGB Mode</source> + <translation>Modalità CGB</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="41"/> + <source>Frame select</source> + <translation>Seleziona Frame</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="42"/> + <source>Unlocked HBlank</source> + <translation>HBlank sbloccato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="43"/> + <source>Linear OBJ tile mapping</source> + <translation>Mappatura lineare tile OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="44"/> + <source>Force blank screen</source> + <translation>Forza schermo bianco</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="45"/> + <source>Enable background 0</source> + <translation>Abilitare sfondo 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="46"/> + <source>Enable background 1</source> + <translation>Abilitare sfondo 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="47"/> + <source>Enable background 2</source> + <translation>Abilitare sfondo 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="48"/> + <source>Enable background 3</source> + <translation>Abilitare sfondo 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="49"/> + <source>Enable OBJ</source> + <translation>Abilitare OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="50"/> + <source>Enable Window 0</source> + <translation>Abilitare Window 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="51"/> + <source>Enable Window 1</source> + <translation>Abilitare Window 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="52"/> + <source>Enable OBJ Window</source> + <translation>Abilitare Window OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="58"/> + <source>Currently in VBlank</source> + <translation>Attualmente in VBlank</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="59"/> + <source>Currently in HBlank</source> + <translation>Attualmente in HBlank</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="60"/> + <source>Currently in VCounter</source> + <translation>Attualmente in VCounter</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="61"/> + <source>Enable VBlank IRQ generation</source> + <translation>Abilita VBlank</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="62"/> + <source>Enable HBlank IRQ generation</source> + <translation>Abilita HBlank generazione IRQ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="63"/> + <source>Enable VCounter IRQ generation</source> + <translation>Abilita generazione IRQ VCounter</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="64"/> + <source>VCounter scanline</source> + <translation>VCounter scanline</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="68"/> + <source>Current scanline</source> + <translation>Scanline corrente</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="72"/> + <location filename="../IOViewer.cpp" line="81"/> + <location filename="../IOViewer.cpp" line="90"/> + <location filename="../IOViewer.cpp" line="100"/> + <source>Priority</source> + <translation>Priorità</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="73"/> + <location filename="../IOViewer.cpp" line="82"/> + <location filename="../IOViewer.cpp" line="91"/> + <location filename="../IOViewer.cpp" line="101"/> + <source>Tile data base (* 16kB)</source> + <translation>Tile data base (* 16kB)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="74"/> + <location filename="../IOViewer.cpp" line="83"/> + <location filename="../IOViewer.cpp" line="92"/> + <location filename="../IOViewer.cpp" line="102"/> + <source>Enable mosaic</source> + <translation>Abilita Mosaico</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="75"/> + <location filename="../IOViewer.cpp" line="84"/> + <location filename="../IOViewer.cpp" line="93"/> + <location filename="../IOViewer.cpp" line="103"/> + <source>Enable 256-color</source> + <translation>Abilita 256 colori</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="76"/> + <location filename="../IOViewer.cpp" line="85"/> + <location filename="../IOViewer.cpp" line="94"/> + <location filename="../IOViewer.cpp" line="104"/> + <source>Tile map base (* 2kB)</source> + <translation>Tile map base (* 2kB)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="77"/> + <location filename="../IOViewer.cpp" line="86"/> + <location filename="../IOViewer.cpp" line="96"/> + <location filename="../IOViewer.cpp" line="106"/> + <source>Background dimensions</source> + <translation>Dimensioni dello sfondo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="95"/> + <location filename="../IOViewer.cpp" line="105"/> + <source>Overflow wraps</source> + <translation>Overflow wraps</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="110"/> + <location filename="../IOViewer.cpp" line="118"/> + <location filename="../IOViewer.cpp" line="126"/> + <location filename="../IOViewer.cpp" line="134"/> + <source>Horizontal offset</source> + <translation>Compensazione orizzontale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="114"/> + <location filename="../IOViewer.cpp" line="122"/> + <location filename="../IOViewer.cpp" line="130"/> + <location filename="../IOViewer.cpp" line="138"/> + <source>Vertical offset</source> + <translation>Compensazione verticale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="142"/> + <location filename="../IOViewer.cpp" line="147"/> + <location filename="../IOViewer.cpp" line="152"/> + <location filename="../IOViewer.cpp" line="157"/> + <location filename="../IOViewer.cpp" line="162"/> + <location filename="../IOViewer.cpp" line="171"/> + <location filename="../IOViewer.cpp" line="180"/> + <location filename="../IOViewer.cpp" line="185"/> + <location filename="../IOViewer.cpp" line="190"/> + <location filename="../IOViewer.cpp" line="195"/> + <location filename="../IOViewer.cpp" line="200"/> + <location filename="../IOViewer.cpp" line="209"/> + <source>Fractional part</source> + <translation>Parte frazionale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="143"/> + <location filename="../IOViewer.cpp" line="148"/> + <location filename="../IOViewer.cpp" line="153"/> + <location filename="../IOViewer.cpp" line="158"/> + <location filename="../IOViewer.cpp" line="181"/> + <location filename="../IOViewer.cpp" line="186"/> + <location filename="../IOViewer.cpp" line="191"/> + <location filename="../IOViewer.cpp" line="196"/> + <source>Integer part</source> + <translation>Parte Integer</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="163"/> + <location filename="../IOViewer.cpp" line="172"/> + <location filename="../IOViewer.cpp" line="201"/> + <location filename="../IOViewer.cpp" line="210"/> + <source>Integer part (bottom)</source> + <translation>Parte Integer (inferiore)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="167"/> + <location filename="../IOViewer.cpp" line="176"/> + <location filename="../IOViewer.cpp" line="205"/> + <location filename="../IOViewer.cpp" line="214"/> + <source>Integer part (top)</source> + <translation>Parte Integer (superiore)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="218"/> + <location filename="../IOViewer.cpp" line="223"/> + <source>End x</source> + <translation>Fine x</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="219"/> + <location filename="../IOViewer.cpp" line="224"/> + <source>Start x</source> + <translation>Inizio x</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="228"/> + <location filename="../IOViewer.cpp" line="233"/> + <source>End y</source> + <translation>Fine y</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="229"/> + <location filename="../IOViewer.cpp" line="234"/> + <source>Start y</source> + <translation>Inizio y</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="238"/> + <source>Window 0 enable BG 0</source> + <translation>Window 0 BG 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="239"/> + <source>Window 0 enable BG 1</source> + <translation>Window 0 BG 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="240"/> + <source>Window 0 enable BG 2</source> + <translation>Window 0 BG 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="241"/> + <source>Window 0 enable BG 3</source> + <translation>Window 0 BG 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="242"/> + <source>Window 0 enable OBJ</source> + <translation>Window 0 OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="243"/> + <source>Window 0 enable blend</source> + <translation>Abilita Window 0 miscelato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="244"/> + <source>Window 1 enable BG 0</source> + <translation>Abilita Window 1 BG 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="245"/> + <source>Window 1 enable BG 1</source> + <translation>Abilita Window 1 BG 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="246"/> + <source>Window 1 enable BG 2</source> + <translation>Abilita Window 1 BG 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="247"/> + <source>Window 1 enable BG 3</source> + <translation>AbilitaWindow 1 BG 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="248"/> + <source>Window 1 enable OBJ</source> + <translation>Abilita Window 1 OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="249"/> + <source>Window 1 enable blend</source> + <translation>Abilita Window 1 miscelato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="253"/> + <source>Outside window enable BG 0</source> + <translation>Abilita Outside window BG 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="254"/> + <source>Outside window enable BG 1</source> + <translation>Abilita Outside window BG 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="255"/> + <source>Outside window enable BG 2</source> + <translation>Abilita Outside window BG 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="256"/> + <source>Outside window enable BG 3</source> + <translation>Abilita Outside window BG 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="257"/> + <source>Outside window enable OBJ</source> + <translation>Abilita Outside window OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="258"/> + <source>Outside window enable blend</source> + <translation>Outside window mezcla</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="259"/> + <source>OBJ window enable BG 0</source> + <translation>Abilita OBJ window BG 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="260"/> + <source>OBJ window enable BG 1</source> + <translation>Abilita OBJ window BG 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="261"/> + <source>OBJ window enable BG 2</source> + <translation>Abilita OBJ window BG 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="262"/> + <source>OBJ window enable BG 3</source> + <translation>Abilita OBJ window BG 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="263"/> + <source>OBJ window enable OBJ</source> + <translation>Abilita OBJ window OBJ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="264"/> + <source>OBJ window enable blend</source> + <translation>Abilita OBJ window blend</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="268"/> + <source>Background mosaic size vertical</source> + <translation>Sfondo mosaico verticale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="269"/> + <source>Background mosaic size horizontal</source> + <translation>Sfondo mosaico orizzontale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="270"/> + <source>Object mosaic size vertical</source> + <translation>Sfondo mosaico oggetto verticale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="271"/> + <source>Object mosaic size horizontal</source> + <translation>Sfondo mosaico oggetto orizzontale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="277"/> + <source>BG 0 target 1</source> + <translation>BG 0 target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="278"/> + <source>BG 1 target 1</source> + <translation>BG 1 target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="279"/> + <source>BG 2 target 1</source> + <translation>BG 2 target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="280"/> + <source>BG 3 target 1</source> + <translation>BG 3 target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="281"/> + <source>OBJ target 1</source> + <translation>OBJ target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="282"/> + <source>Backdrop target 1</source> + <translation>Backdrop target 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="283"/> + <source>Blend mode</source> + <translation>Modalità miscelato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="284"/> + <source>Disabled</source> + <translation>Disabilitato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="285"/> + <source>Additive blending</source> + <translation>Miscelazione dell'additivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="286"/> + <source>Brighten</source> + <translation>Schiarire</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="287"/> + <source>Darken</source> + <translation>Oscurire</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="289"/> + <source>BG 0 target 2</source> + <translation>BG 0 target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="290"/> + <source>BG 1 target 2</source> + <translation>BG 1 target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="291"/> + <source>BG 2 target 2</source> + <translation>BG 2 target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="292"/> + <source>BG 3 target 2</source> + <translation>BG 3 target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="293"/> + <source>OBJ target 2</source> + <translation>OBJ target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="294"/> + <source>Backdrop target 2</source> + <translation>Backdrop target 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="298"/> + <source>Blend A (target 1)</source> + <translation>Miscelato A (target 1)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="299"/> + <source>Blend B (target 2)</source> + <translation>Miscelato B (target 2)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="303"/> + <source>Blend Y</source> + <translation>Miscelato Y</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="317"/> + <source>Sweep shifts</source> + <translation>Sweep shifts</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="318"/> + <source>Sweep subtract</source> + <translation>Sposta subastratto</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="319"/> + <source>Sweep time (in 1/128s)</source> + <translation>Tempo di sweep (in 1/128seg)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="323"/> + <location filename="../IOViewer.cpp" line="339"/> + <location filename="../IOViewer.cpp" line="363"/> + <location filename="../IOViewer.cpp" line="385"/> + <source>Sound length</source> + <translation>Lunghezza del suono</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="324"/> + <location filename="../IOViewer.cpp" line="340"/> + <source>Duty cycle</source> + <translation>Ciclo di lavoro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="325"/> + <location filename="../IOViewer.cpp" line="341"/> + <location filename="../IOViewer.cpp" line="386"/> + <source>Envelope step time</source> + <translation>Envelope step time</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="326"/> + <location filename="../IOViewer.cpp" line="342"/> + <location filename="../IOViewer.cpp" line="387"/> + <source>Envelope increase</source> + <translation>Aumento envelope</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="327"/> + <location filename="../IOViewer.cpp" line="343"/> + <location filename="../IOViewer.cpp" line="388"/> + <source>Initial volume</source> + <translation>Volume iniziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="331"/> + <location filename="../IOViewer.cpp" line="349"/> + <location filename="../IOViewer.cpp" line="377"/> + <source>Sound frequency</source> + <translation>Frequenza del suono</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="332"/> + <location filename="../IOViewer.cpp" line="350"/> + <location filename="../IOViewer.cpp" line="378"/> + <location filename="../IOViewer.cpp" line="400"/> + <source>Timed</source> + <translation>Temporizzato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="333"/> + <location filename="../IOViewer.cpp" line="351"/> + <location filename="../IOViewer.cpp" line="379"/> + <location filename="../IOViewer.cpp" line="401"/> + <source>Reset</source> + <translation>Reset</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="357"/> + <source>Double-size wave table</source> + <translation>Tavola delle onde a doppia dimensione</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="358"/> + <source>Active wave table</source> + <translation>Tavola delle onde attive</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="359"/> + <source>Enable channel 3</source> + <translation>Canale 3 attivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="364"/> + <source>Volume</source> + <translation>Volume</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="365"/> + <source>0%</source> + <translation>0%</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="366"/> + <location filename="../IOViewer.cpp" line="423"/> + <source>100%</source> + <translation>100%</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="367"/> + <location filename="../IOViewer.cpp" line="422"/> + <source>50%</source> + <translation>50%</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="368"/> + <location filename="../IOViewer.cpp" line="421"/> + <source>25%</source> + <translation>25%</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="369"/> + <location filename="../IOViewer.cpp" line="370"/> + <location filename="../IOViewer.cpp" line="371"/> + <location filename="../IOViewer.cpp" line="372"/> + <source>75%</source> + <translation>75%</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="394"/> + <source>Clock divider</source> + <translation>Divisore dell'orologio</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="395"/> + <source>Register stages</source> + <translation>Stadi di registrazione</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="396"/> + <source>15</source> + <translation>15</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="397"/> + <source>7</source> + <translation>7</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="399"/> + <source>Shifter frequency</source> + <translation>Cambio di frequenza</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="407"/> + <source>PSG volume right</source> + <translation>PSG volume destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="408"/> + <source>PSG volume left</source> + <translation>PSG volume sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="409"/> + <source>Enable channel 1 right</source> + <translation>Abilita Canale 1 destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="410"/> + <source>Enable channel 2 right</source> + <translation>Abilita Canale 2 destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="411"/> + <source>Enable channel 3 right</source> + <translation>Abilita Canale 3 destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="412"/> + <source>Enable channel 4 right</source> + <translation>Abilita Canale 4 destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="413"/> + <source>Enable channel 1 left</source> + <translation>Abilita Canale 1 sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="414"/> + <source>Enable channel 2 left</source> + <translation>Abilita Canale 2 sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="415"/> + <source>Enable channel 3 left</source> + <translation>Abilita Canale 3 sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="416"/> + <source>Enable channel 4 left</source> + <translation>Abilita Canale 4 sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="420"/> + <source>PSG master volume</source> + <translation>PSG volume master</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="426"/> + <source>Loud channel A</source> + <translation>Canale A forte</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="427"/> + <source>Loud channel B</source> + <translation>Canale B forte</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="428"/> + <source>Enable channel A right</source> + <translation>Abilita Canale A destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="429"/> + <source>Enable channel A left</source> + <translation>Abilta Canale A sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="430"/> + <source>Channel A timer</source> + <translation>Canale A temporizzato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="431"/> + <location filename="../IOViewer.cpp" line="438"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="432"/> + <location filename="../IOViewer.cpp" line="439"/> + <location filename="../IOViewer.cpp" line="768"/> + <location filename="../IOViewer.cpp" line="783"/> + <location filename="../IOViewer.cpp" line="799"/> + <location filename="../IOViewer.cpp" line="815"/> + <location filename="../IOViewer.cpp" line="987"/> + <location filename="../IOViewer.cpp" line="997"/> + <location filename="../IOViewer.cpp" line="1007"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="434"/> + <source>Channel A reset</source> + <translation>Resetta canale A</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="435"/> + <source>Enable channel B right</source> + <translation>Abilita Canale B destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="436"/> + <source>Enable channel B left</source> + <translation>Abilita Canale B sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="437"/> + <source>Channel B timer</source> + <translation>Canale B temporizzato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="441"/> + <source>Channel B reset</source> + <translation>Resetta canale B</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="445"/> + <source>Active channel 1</source> + <translation>Canale 1 attivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="446"/> + <source>Active channel 2</source> + <translation>Canale 2 attivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="447"/> + <source>Active channel 3</source> + <translation>Canale 3 attivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="448"/> + <source>Active channel 4</source> + <translation>Canale 4 attivo</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="449"/> + <source>Enable audio</source> + <translation>Abilitare audio</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="455"/> + <source>Bias</source> + <translation>Polarizzazione</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="456"/> + <source>Resolution</source> + <translation>Risoluzione</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="466"/> + <location filename="../IOViewer.cpp" line="467"/> + <location filename="../IOViewer.cpp" line="468"/> + <location filename="../IOViewer.cpp" line="469"/> + <location filename="../IOViewer.cpp" line="473"/> + <location filename="../IOViewer.cpp" line="474"/> + <location filename="../IOViewer.cpp" line="475"/> + <location filename="../IOViewer.cpp" line="476"/> + <location filename="../IOViewer.cpp" line="480"/> + <location filename="../IOViewer.cpp" line="481"/> + <location filename="../IOViewer.cpp" line="482"/> + <location filename="../IOViewer.cpp" line="483"/> + <location filename="../IOViewer.cpp" line="487"/> + <location filename="../IOViewer.cpp" line="488"/> + <location filename="../IOViewer.cpp" line="489"/> + <location filename="../IOViewer.cpp" line="490"/> + <location filename="../IOViewer.cpp" line="494"/> + <location filename="../IOViewer.cpp" line="495"/> + <location filename="../IOViewer.cpp" line="496"/> + <location filename="../IOViewer.cpp" line="497"/> + <location filename="../IOViewer.cpp" line="501"/> + <location filename="../IOViewer.cpp" line="502"/> + <location filename="../IOViewer.cpp" line="503"/> + <location filename="../IOViewer.cpp" line="504"/> + <location filename="../IOViewer.cpp" line="508"/> + <location filename="../IOViewer.cpp" line="509"/> + <location filename="../IOViewer.cpp" line="510"/> + <location filename="../IOViewer.cpp" line="511"/> + <location filename="../IOViewer.cpp" line="515"/> + <location filename="../IOViewer.cpp" line="516"/> + <location filename="../IOViewer.cpp" line="517"/> + <location filename="../IOViewer.cpp" line="518"/> + <location filename="../IOViewer.cpp" line="522"/> + <location filename="../IOViewer.cpp" line="523"/> + <location filename="../IOViewer.cpp" line="527"/> + <location filename="../IOViewer.cpp" line="528"/> + <location filename="../IOViewer.cpp" line="532"/> + <location filename="../IOViewer.cpp" line="533"/> + <location filename="../IOViewer.cpp" line="537"/> + <location filename="../IOViewer.cpp" line="538"/> + <source>Sample</source> + <translation>Mostra</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="550"/> + <location filename="../IOViewer.cpp" line="558"/> + <location filename="../IOViewer.cpp" line="595"/> + <location filename="../IOViewer.cpp" line="603"/> + <location filename="../IOViewer.cpp" line="640"/> + <location filename="../IOViewer.cpp" line="648"/> + <location filename="../IOViewer.cpp" line="685"/> + <location filename="../IOViewer.cpp" line="693"/> + <source>Address (bottom)</source> + <translation>Indirizzo (inferiore)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="554"/> + <location filename="../IOViewer.cpp" line="562"/> + <location filename="../IOViewer.cpp" line="599"/> + <location filename="../IOViewer.cpp" line="607"/> + <location filename="../IOViewer.cpp" line="644"/> + <location filename="../IOViewer.cpp" line="652"/> + <location filename="../IOViewer.cpp" line="689"/> + <location filename="../IOViewer.cpp" line="697"/> + <source>Address (top)</source> + <translation>Indirizzo (superiore)</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="566"/> + <location filename="../IOViewer.cpp" line="611"/> + <location filename="../IOViewer.cpp" line="656"/> + <location filename="../IOViewer.cpp" line="701"/> + <source>Word count</source> + <translation>Contatore di parole</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="570"/> + <location filename="../IOViewer.cpp" line="615"/> + <location filename="../IOViewer.cpp" line="660"/> + <location filename="../IOViewer.cpp" line="705"/> + <source>Destination offset</source> + <translation>Compensazione offset</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="571"/> + <location filename="../IOViewer.cpp" line="577"/> + <location filename="../IOViewer.cpp" line="616"/> + <location filename="../IOViewer.cpp" line="622"/> + <location filename="../IOViewer.cpp" line="661"/> + <location filename="../IOViewer.cpp" line="667"/> + <location filename="../IOViewer.cpp" line="706"/> + <location filename="../IOViewer.cpp" line="712"/> + <source>Increment</source> + <translation>Incremento</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="572"/> + <location filename="../IOViewer.cpp" line="578"/> + <location filename="../IOViewer.cpp" line="617"/> + <location filename="../IOViewer.cpp" line="623"/> + <location filename="../IOViewer.cpp" line="662"/> + <location filename="../IOViewer.cpp" line="668"/> + <location filename="../IOViewer.cpp" line="707"/> + <location filename="../IOViewer.cpp" line="713"/> + <source>Decrement</source> + <translation>Decremento</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="573"/> + <location filename="../IOViewer.cpp" line="579"/> + <location filename="../IOViewer.cpp" line="618"/> + <location filename="../IOViewer.cpp" line="624"/> + <location filename="../IOViewer.cpp" line="663"/> + <location filename="../IOViewer.cpp" line="669"/> + <location filename="../IOViewer.cpp" line="708"/> + <location filename="../IOViewer.cpp" line="714"/> + <source>Fixed</source> + <translation>Fissato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="574"/> + <location filename="../IOViewer.cpp" line="619"/> + <location filename="../IOViewer.cpp" line="664"/> + <location filename="../IOViewer.cpp" line="709"/> + <source>Increment and reload</source> + <translation>Incremento e ricarica</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="576"/> + <location filename="../IOViewer.cpp" line="621"/> + <location filename="../IOViewer.cpp" line="666"/> + <location filename="../IOViewer.cpp" line="711"/> + <source>Source offset</source> + <translation>Compensazione di origine</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="582"/> + <location filename="../IOViewer.cpp" line="627"/> + <location filename="../IOViewer.cpp" line="672"/> + <location filename="../IOViewer.cpp" line="718"/> + <source>Repeat</source> + <translation>Ripeti</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="583"/> + <location filename="../IOViewer.cpp" line="628"/> + <location filename="../IOViewer.cpp" line="673"/> + <location filename="../IOViewer.cpp" line="719"/> + <source>32-bit</source> + <translation>32 bit</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="584"/> + <location filename="../IOViewer.cpp" line="629"/> + <location filename="../IOViewer.cpp" line="674"/> + <location filename="../IOViewer.cpp" line="720"/> + <source>Start timing</source> + <translation>Avvia temporizzatore</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="585"/> + <location filename="../IOViewer.cpp" line="630"/> + <location filename="../IOViewer.cpp" line="675"/> + <location filename="../IOViewer.cpp" line="721"/> + <source>Immediate</source> + <translation>Immediato</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="586"/> + <location filename="../IOViewer.cpp" line="631"/> + <location filename="../IOViewer.cpp" line="676"/> + <location filename="../IOViewer.cpp" line="722"/> + <location filename="../IOViewer.cpp" line="939"/> + <location filename="../IOViewer.cpp" line="956"/> + <source>VBlank</source> + <translation>VBlank</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="587"/> + <location filename="../IOViewer.cpp" line="632"/> + <location filename="../IOViewer.cpp" line="677"/> + <location filename="../IOViewer.cpp" line="723"/> + <location filename="../IOViewer.cpp" line="940"/> + <location filename="../IOViewer.cpp" line="957"/> + <source>HBlank</source> + <translation>HBlank</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="590"/> + <location filename="../IOViewer.cpp" line="635"/> + <location filename="../IOViewer.cpp" line="680"/> + <location filename="../IOViewer.cpp" line="726"/> + <location filename="../IOViewer.cpp" line="773"/> + <location filename="../IOViewer.cpp" line="789"/> + <location filename="../IOViewer.cpp" line="805"/> + <location filename="../IOViewer.cpp" line="821"/> + <location filename="../IOViewer.cpp" line="881"/> + <source>IRQ</source> + <translation>IRQ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="591"/> + <location filename="../IOViewer.cpp" line="636"/> + <location filename="../IOViewer.cpp" line="681"/> + <location filename="../IOViewer.cpp" line="727"/> + <location filename="../IOViewer.cpp" line="774"/> + <location filename="../IOViewer.cpp" line="790"/> + <location filename="../IOViewer.cpp" line="806"/> + <location filename="../IOViewer.cpp" line="822"/> + <source>Enable</source> + <translation>Abilitare</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="633"/> + <location filename="../IOViewer.cpp" line="678"/> + <location filename="../IOViewer.cpp" line="724"/> + <source>Audio FIFO</source> + <translation>Audio FIFO</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="715"/> + <source>Video Capture</source> + <translation>Cattura video</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="717"/> + <source>DRQ</source> + <translation>DRQ</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="763"/> + <location filename="../IOViewer.cpp" line="778"/> + <location filename="../IOViewer.cpp" line="794"/> + <location filename="../IOViewer.cpp" line="810"/> + <source>Value</source> + <translation>Valore</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="767"/> + <location filename="../IOViewer.cpp" line="782"/> + <location filename="../IOViewer.cpp" line="798"/> + <location filename="../IOViewer.cpp" line="814"/> + <source>Scale</source> + <translation>Scala</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="769"/> + <location filename="../IOViewer.cpp" line="784"/> + <location filename="../IOViewer.cpp" line="800"/> + <location filename="../IOViewer.cpp" line="816"/> + <source>1/64</source> + <translation>1/64</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="770"/> + <location filename="../IOViewer.cpp" line="785"/> + <location filename="../IOViewer.cpp" line="801"/> + <location filename="../IOViewer.cpp" line="817"/> + <source>1/256</source> + <translation>1/256</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="771"/> + <location filename="../IOViewer.cpp" line="786"/> + <location filename="../IOViewer.cpp" line="802"/> + <location filename="../IOViewer.cpp" line="818"/> + <source>1/1024</source> + <translation>1/1024</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="788"/> + <location filename="../IOViewer.cpp" line="804"/> + <location filename="../IOViewer.cpp" line="820"/> + <source>Cascade</source> + <translation>Cascata</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="858"/> + <location filename="../IOViewer.cpp" line="871"/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="859"/> + <location filename="../IOViewer.cpp" line="872"/> + <source>B</source> + <translation>B</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="860"/> + <location filename="../IOViewer.cpp" line="873"/> + <source>Select</source> + <translation>Seleziona</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="861"/> + <location filename="../IOViewer.cpp" line="874"/> + <source>Start</source> + <translation>Avvia</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="862"/> + <location filename="../IOViewer.cpp" line="875"/> + <source>Right</source> + <translation>Destro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="863"/> + <location filename="../IOViewer.cpp" line="876"/> + <source>Left</source> + <translation>Sinistro</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="864"/> + <location filename="../IOViewer.cpp" line="877"/> + <source>Up</source> + <translation>Sù</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="865"/> + <location filename="../IOViewer.cpp" line="878"/> + <source>Down</source> + <translation>Giù</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="866"/> + <location filename="../IOViewer.cpp" line="879"/> + <source>R</source> + <translation>R</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="867"/> + <location filename="../IOViewer.cpp" line="880"/> + <source>L</source> + <translation>L</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="882"/> + <source>Condition</source> + <translation>Condizione</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="886"/> + <source>SC</source> + <translation>SC</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="887"/> + <source>SD</source> + <translation>SD</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="888"/> + <source>SI</source> + <translation>SI</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="889"/> + <source>SO</source> + <translation>SO</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="941"/> + <location filename="../IOViewer.cpp" line="958"/> + <source>VCounter</source> + <translation>VCounter</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="942"/> + <location filename="../IOViewer.cpp" line="959"/> + <source>Timer 0</source> + <translation>Timer 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="943"/> + <location filename="../IOViewer.cpp" line="960"/> + <source>Timer 1</source> + <translation>Timer 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="944"/> + <location filename="../IOViewer.cpp" line="961"/> + <source>Timer 2</source> + <translation>Timer 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="945"/> + <location filename="../IOViewer.cpp" line="962"/> + <source>Timer 3</source> + <translation>Timer 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="946"/> + <location filename="../IOViewer.cpp" line="963"/> + <source>SIO</source> + <translation>SIO</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="947"/> + <location filename="../IOViewer.cpp" line="964"/> + <source>DMA 0</source> + <translation>DMA 0</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="948"/> + <location filename="../IOViewer.cpp" line="965"/> + <source>DMA 1</source> + <translation>DMA 1</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="949"/> + <location filename="../IOViewer.cpp" line="966"/> + <source>DMA 2</source> + <translation>DMA 2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="950"/> + <location filename="../IOViewer.cpp" line="967"/> + <source>DMA 3</source> + <translation>DMA 3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="951"/> + <location filename="../IOViewer.cpp" line="968"/> + <source>Keypad</source> + <translation>Tastiera</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="952"/> + <location filename="../IOViewer.cpp" line="969"/> + <source>Gamepak</source> + <translation>Gamepak</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="973"/> + <source>SRAM wait</source> + <translation>Attesa SRAM</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="974"/> + <location filename="../IOViewer.cpp" line="980"/> + <location filename="../IOViewer.cpp" line="990"/> + <location filename="../IOViewer.cpp" line="996"/> + <location filename="../IOViewer.cpp" line="1000"/> + <source>4</source> + <translation>4</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="975"/> + <location filename="../IOViewer.cpp" line="981"/> + <location filename="../IOViewer.cpp" line="991"/> + <location filename="../IOViewer.cpp" line="1001"/> + <source>3</source> + <translation>3</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="976"/> + <location filename="../IOViewer.cpp" line="982"/> + <location filename="../IOViewer.cpp" line="986"/> + <location filename="../IOViewer.cpp" line="992"/> + <location filename="../IOViewer.cpp" line="1002"/> + <source>2</source> + <translation>2</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="977"/> + <location filename="../IOViewer.cpp" line="983"/> + <location filename="../IOViewer.cpp" line="993"/> + <location filename="../IOViewer.cpp" line="1003"/> + <location filename="../IOViewer.cpp" line="1006"/> + <source>8</source> + <translation>8</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="979"/> + <source>Cart 0 non-sequential</source> + <translation>Cart 0 non sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="985"/> + <source>Cart 0 sequential</source> + <translation>Cart 0 sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="989"/> + <source>Cart 1 non-sequential</source> + <translation>Cart 1 non sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="995"/> + <source>Cart 1 sequential</source> + <translation>Cart 1 sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="999"/> + <source>Cart 2 non-sequential</source> + <translation>Cart 2 non sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1005"/> + <source>Cart 2 sequential</source> + <translation>Cart 2 sequenziale</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1009"/> + <source>PHI terminal</source> + <translation>Terminale PHI</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1010"/> + <source>Disable</source> + <translation>Disabilita</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1011"/> + <source>4.19MHz</source> + <translation>4.19MHz</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1012"/> + <source>8.38MHz</source> + <translation>8.38MHz</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1013"/> + <source>16.78MHz</source> + <translation>16.78MHz</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1015"/> + <source>Gamepak prefetch</source> + <translation>Gamepak prefetch</translation> + </message> + <message> + <location filename="../IOViewer.cpp" line="1021"/> + <source>Enable IRQs</source> + <translation>Abilitare IRQs</translation> + </message> +</context> +<context> + <name>QGBA::KeyEditor</name> + <message> + <location filename="../KeyEditor.cpp" line="37"/> + <location filename="../KeyEditor.cpp" line="211"/> + <source>---</source> + <translation>---</translation> + </message> +</context> +<context> + <name>QGBA::LibraryModel</name> + <message> + <location filename="../LibraryModel.cpp" line="24"/> + <source>Name</source> + <translation>Nome</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="33"/> + <source>Filename</source> + <translation>Nome del file</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="39"/> + <source>Size</source> + <translation>Dimensione</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="56"/> + <source>Platform</source> + <translation>Piattaforma</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="62"/> + <source>GBA</source> + <translation>GBA</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="66"/> + <source>GB</source> + <translation>GB</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="69"/> + <source>?</source> + <translation>?</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="74"/> + <source>Location</source> + <translation>Posizione</translation> + </message> + <message> + <location filename="../LibraryModel.cpp" line="80"/> + <source>CRC32</source> + <translation>CRC32</translation> + </message> +</context> +<context> + <name>QGBA::LoadSaveState</name> + <message> + <location filename="../LoadSaveState.cpp" line="68"/> + <source>Load State</source> + <translation>Carica stato</translation> + </message> + <message> + <location filename="../LoadSaveState.cpp" line="68"/> + <source>Save State</source> + <translation>Salva stato</translation> + </message> + <message> + <location filename="../LoadSaveState.cpp" line="177"/> + <source>Empty</source> + <translation>Vuoto</translation> + </message> + <message> + <location filename="../LoadSaveState.cpp" line="186"/> + <source>Corrupted</source> + <translation>Corrotto</translation> + </message> + <message> + <location filename="../LoadSaveState.cpp" line="209"/> + <source>Slot %1</source> + <translation>Slot %1</translation> + </message> +</context> +<context> + <name>QGBA::LogController</name> + <message> + <location filename="../LogController.cpp" line="57"/> + <source>DEBUG</source> + <translation>DEBUG</translation> + </message> + <message> + <location filename="../LogController.cpp" line="59"/> + <source>STUB</source> + <translation>STUB</translation> + </message> + <message> + <location filename="../LogController.cpp" line="61"/> + <source>INFO</source> + <translation>INFORMAZIONI</translation> + </message> + <message> + <location filename="../LogController.cpp" line="63"/> + <source>WARN</source> + <translation>AVVERTENZA</translation> + </message> + <message> + <location filename="../LogController.cpp" line="65"/> + <source>ERROR</source> + <translation>ERRORE</translation> + </message> + <message> + <location filename="../LogController.cpp" line="67"/> + <source>FATAL</source> + <translation>FATALE</translation> + </message> + <message> + <location filename="../LogController.cpp" line="69"/> + <source>GAME ERROR</source> + <translation>ERRORE NEL GIOCO</translation> + </message> +</context> +<context> + <name>QGBA::MemoryModel</name> + <message> + <location filename="../MemoryModel.cpp" line="50"/> + <source>Copy selection</source> + <translation>Copia selezionato</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="55"/> + <source>Save selection</source> + <translation>Salva selezionato</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="60"/> + <source>Paste</source> + <translation>Incolla</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="65"/> + <source>Load</source> + <translation>Carica</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="97"/> + <location filename="../MemoryModel.cpp" line="162"/> + <source>All</source> + <translation>Tutto</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="142"/> + <source>Load TBL</source> + <translation>Carica TBL</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="202"/> + <source>Save selected memory</source> + <translation>Salva la memoria selezionate</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="208"/> + <source>Failed to open output file: %1</source> + <translation>Impossibile aprire il file di output: %1</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="216"/> + <source>Load memory</source> + <translation>Carica memoria</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="222"/> + <source>Failed to open input file: %1</source> + <translation>Impossibile aprire il file di input: %1</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="338"/> + <source>TBL</source> + <translation>TBL</translation> + </message> + <message> + <location filename="../MemoryModel.cpp" line="338"/> + <source>ISO-8859-1</source> + <translation>ISO-8859-1</translation> + </message> +</context> +<context> + <name>QGBA::ObjView</name> + <message> + <location filename="../ObjView.cpp" line="135"/> + <location filename="../ObjView.cpp" line="221"/> + <source>0x%0</source> + <translation>0x%0</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="146"/> + <source>Off</source> + <translation>No</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="151"/> + <source>Normal</source> + <translation>Normale</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="154"/> + <source>Trans</source> + <translation>Trans</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="157"/> + <source>OBJWIN</source> + <translation>OBJWIN</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="160"/> + <source>Invalid</source> + <translation>Invalido</translation> + </message> + <message> + <location filename="../ObjView.cpp" line="228"/> + <location filename="../ObjView.cpp" line="229"/> + <source>N/A</source> + <translation>n/d</translation> + </message> +</context> +<context> + <name>QGBA::PaletteView</name> + <message> + <location filename="../PaletteView.cpp" line="120"/> + <source>#%0</source> + <translation>#%0</translation> + </message> + <message> + <location filename="../PaletteView.cpp" line="121"/> + <source>0x%0</source> + <translation>0x%0</translation> + </message> + <message> + <location filename="../PaletteView.cpp" line="122"/> + <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"/> + <source>0x%0 (%1)</source> + <translation>0x%0 (%1)</translation> + </message> + <message> + <location filename="../PaletteView.cpp" line="137"/> + <source>Export palette</source> + <translation>Esporta palette</translation> + </message> + <message> + <location filename="../PaletteView.cpp" line="138"/> + <source>Windows PAL (*.pal);;Adobe Color Table (*.act)</source> + <translation>WIndows PAL (*.pal);;Tabella dei colori Adobe (*.act)</translation> + </message> + <message> + <location filename="../PaletteView.cpp" line="145"/> + <source>Failed to open output palette file: %1</source> + <translation>Errore nell'aprire il file palette di output : %1</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"/> + <source>(unknown)</source> + <translation>(sconosciuto)</translation> + </message> + <message> + <location filename="../ROMInfo.cpp" line="57"/> + <location filename="../ROMInfo.cpp" line="64"/> + <source> bytes</source> + <translation> bytes</translation> + </message> + <message> + <location filename="../ROMInfo.cpp" line="83"/> + <source>(no database present)</source> + <translation>(nessun database presente)</translation> + </message> +</context> +<context> + <name>QGBA::SettingsView</name> + <message> + <location filename="../SettingsView.cpp" line="96"/> + <source>Qt Multimedia</source> + <translation>Qt Multimedia</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="103"/> + <source>SDL</source> + <translation>SDL</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="111"/> + <source>Software (Qt)</source> + <translation>Software (Qt)</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="117"/> + <source>OpenGL</source> + <translation>OpenGL</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="124"/> + <source>OpenGL (force version 1.x)</source> + <translation>OpenGL (forza la versione 1.x)</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="142"/> + <source>Keyboard</source> + <translation>Tastiera</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="151"/> + <source>Controllers</source> + <translation>Controllers</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="170"/> + <source>Shortcuts</source> + <translation>Tasti di scelta rapida</translation> + </message> + <message> + <location filename="../SettingsView.cpp" line="174"/> + <source>Select BIOS</source> + <translation>Seleziona BIOS</translation> + </message> +</context> +<context> + <name>QGBA::ShaderSelector</name> + <message> + <location filename="../ShaderSelector.cpp" line="50"/> + <source>No shader active</source> + <translation>Nessun shader attivo</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="63"/> + <source>Load shader</source> + <translation>Carica shader</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="63"/> + <source>%1 Shader (%.shader)</source> + <translation>%1 Shader (%.shader)</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="102"/> + <source>No shader loaded</source> + <translation>Nessun shader caricato</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="110"/> + <source>by %1</source> + <translation>por %1</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="121"/> + <source>Preprocessing</source> + <translation>Preprocesso</translation> + </message> + <message> + <location filename="../ShaderSelector.cpp" line="128"/> + <source>Pass %1</source> + <translation>Pass %1</translation> + </message> +</context> +<context> + <name>QGBA::ShortcutController</name> + <message> + <location filename="../ShortcutController.cpp" line="67"/> + <source>Action</source> + <translation>Azione</translation> + </message> + <message> + <location filename="../ShortcutController.cpp" line="69"/> + <source>Keyboard</source> + <translation>Tastiera</translation> + </message> + <message> + <location filename="../ShortcutController.cpp" line="71"/> + <source>Gamepad</source> + <translation>Gamepad</translation> + </message> +</context> +<context> + <name>QGBA::VideoView</name> + <message> + <location filename="../VideoView.cpp" line="208"/> + <source>Failed to open output video file: %1</source> + <translation>Errore durante l'archiviazione del video: %1</translation> + </message> + <message> + <location filename="../VideoView.cpp" line="226"/> + <source>Native (%0x%1)</source> + <translation>Nativo (%0x%1)</translation> + </message> + <message> + <location filename="../VideoView.cpp" line="241"/> + <source>Select output file</source> + <translation>Seleziona file di output</translation> + </message> +</context> +<context> + <name>QGBA::Window</name> + <message> + <location filename="../Window.cpp" line="340"/> + <source>Game Boy Advance ROMs (%1)</source> + <translation>ROM di Game Boy Advance (%1)</translation> + </message> + <message> + <location filename="../Window.cpp" line="356"/> + <source>Game Boy ROMs (%1)</source> + <translation>ROMs del Game Boy (%1)</translation> + </message> + <message> + <location filename="../Window.cpp" line="360"/> + <source>All ROMs (%1)</source> + <translation>Tutte le ROM (%1)</translation> + </message> + <message> + <location filename="../Window.cpp" line="375"/> + <source>Archives (%1)</source> + <translation>Archivio (%1)</translation> + </message> + <message> + <location filename="../Window.cpp" line="380"/> + <location filename="../Window.cpp" line="388"/> + <location filename="../Window.cpp" line="415"/> + <source>Select ROM</source> + <translation>Seleziona ROM</translation> + </message> + <message> + <location filename="../Window.cpp" line="423"/> + <source>Game Boy Advance save files (%1)</source> + <translation>Game Boy Advance file di salvataggio (%1)</translation> + </message> + <message> + <location filename="../Window.cpp" line="424"/> + <location filename="../Window.cpp" line="457"/> + <location filename="../Window.cpp" line="464"/> + <source>Select save</source> + <translation>Seleziona salvataggio</translation> + </message> + <message> + <location filename="../Window.cpp" line="444"/> + <source>Select patch</source> + <translation>Seleziona patch</translation> + </message> + <message> + <location filename="../Window.cpp" line="444"/> + <source>Patches (*.ips *.ups *.bps)</source> + <translation>Patches (*.ips *.ups *.bps)</translation> + </message> + <message> + <location filename="../Window.cpp" line="457"/> + <location filename="../Window.cpp" line="464"/> + <source>GameShark saves (*.sps *.xps)</source> + <translation>Salvataggi GameShark (*.sps *.xps)</translation> + </message> + <message> + <location filename="../Window.cpp" line="782"/> + <source>Crash</source> + <translation>Errore fatale</translation> + </message> + <message> + <location filename="../Window.cpp" line="783"/> + <source>The game has crashed with the following error: + +%1</source> + <translation>Il gioco è andato in crash con il seguente errore:: + +%1</translation> + </message> + <message> + <location filename="../Window.cpp" line="790"/> + <source>Couldn&apos;t Load</source> + <translation>Non è possibile caricare</translation> + </message> + <message> + <location filename="../Window.cpp" line="791"/> + <source>Could not load game. Are you sure it&apos;s in the correct format?</source> + <translation>Impossibile caricare il gioco. Sei sicuro che sia nel formato corretto?</translation> + </message> + <message> + <location filename="../Window.cpp" line="804"/> + <source>Unimplemented BIOS call</source> + <translation>BIOS non implementato</translation> + </message> + <message> + <location filename="../Window.cpp" line="805"/> + <source>This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience.</source> + <translation>Questo gioco utilizza una chiamata BIOS non implementata. Utilizza il BIOS ufficiale per una migliore esperienza</translation> + </message> + <message> + <location filename="../Window.cpp" line="812"/> + <source>Really make portable?</source> + <translation>Davvero rendere portatile?</translation> + </message> + <message> + <location filename="../Window.cpp" line="813"/> + <source>This will make the emulator load its configuration from the same directory as the executable. Do you want to continue?</source> + <translation>In questo modo l'emulatore carica la propria configurazione dalla stessa directory dell'eseguibile. Vuoi continuare?</translation> + </message> + <message> + <location filename="../Window.cpp" line="821"/> + <source>Restart needed</source> + <translation>È necessario riavviare</translation> + </message> + <message> + <location filename="../Window.cpp" line="822"/> + <source>Some changes will not take effect until the emulator is restarted.</source> + <translation>Alcune modifiche non avranno effetto finché l'emulatore non viene riavviato.</translation> + </message> + <message> + <location filename="../Window.cpp" line="869"/> + <source> - Player %1 of %2</source> + <translation> - Giocatore %1 di %2</translation> + </message> + <message> + <location filename="../Window.cpp" line="880"/> + <source>%1 - %2</source> + <translation>%1 - %2</translation> + </message> + <message> + <location filename="../Window.cpp" line="882"/> + <source>%1 - %2 - %3</source> + <translation>%1 - %2 - %3</translation> + </message> + <message> + <location filename="../Window.cpp" line="884"/> + <source>%1 - %2 (%3 fps) - %4</source> + <translation>%1 - %2 (%3 fps) - %4</translation> + </message> + <message> + <location filename="../Window.cpp" line="916"/> + <source>&amp;File</source> + <translation>&amp;File</translation> + </message> + <message> + <location filename="../Window.cpp" line="919"/> + <source>Load &amp;ROM...</source> + <translation>Carica &amp;ROM...</translation> + </message> + <message> + <location filename="../Window.cpp" line="922"/> + <source>Load ROM in archive...</source> + <translation>Carica la ROM in archivio...</translation> + </message> + <message> + <location filename="../Window.cpp" line="928"/> + <source>Load temporary save...</source> + <translation>Carica il salvataggio temporaneo..</translation> + </message> + <message> + <location filename="../Window.cpp" line="933"/> + <source>Load &amp;patch...</source> + <translation>Carica &amp;patch...</translation> + </message> + <message> + <location filename="../Window.cpp" line="935"/> + <source>Boot BIOS</source> + <translation>Boot BIOS</translation> + </message> + <message> + <location filename="../Window.cpp" line="942"/> + <source>Replace ROM...</source> + <translation>Sostituire la ROM...</translation> + </message> + <message> + <location filename="../Window.cpp" line="944"/> + <source>ROM &amp;info...</source> + <translation>ROM &amp;info...</translation> + </message> + <message> + <location filename="../Window.cpp" line="949"/> + <source>Recent</source> + <translation>Recente</translation> + </message> + <message> + <location filename="../Window.cpp" line="953"/> + <source>Make portable</source> + <translation>Rendi portatile</translation> + </message> + <message> + <location filename="../Window.cpp" line="957"/> + <source>&amp;Load state</source> + <translation>&amp;Carica stato</translation> + </message> + <message> + <location filename="../Window.cpp" line="958"/> + <source>F10</source> + <translation>F10</translation> + </message> + <message> + <location filename="../Window.cpp" line="964"/> + <source>&amp;Save state</source> + <translation>&amp;Salva stato</translation> + </message> + <message> + <location filename="../Window.cpp" line="965"/> + <source>Shift+F10</source> + <translatorcomment>DO NOT TRANSLATE</translatorcomment> + <translation>Shift+F10</translation> + </message> + <message> + <location filename="../Window.cpp" line="971"/> + <source>Quick load</source> + <translation>Caricamento rapido</translation> + </message> + <message> + <location filename="../Window.cpp" line="972"/> + <source>Quick save</source> + <translation>Salvataggio rapido</translation> + </message> + <message> + <location filename="../Window.cpp" line="976"/> + <source>Load recent</source> + <translation>Carica recente</translation> + </message> + <message> + <location filename="../Window.cpp" line="982"/> + <source>Save recent</source> + <translation>Salva recente</translation> + </message> + <message> + <location filename="../Window.cpp" line="991"/> + <source>Undo load state</source> + <translation>Annulla il caricamento dello stato</translation> + </message> + <message> + <location filename="../Window.cpp" line="992"/> + <source>F11</source> + <translatorcomment>DO NOT TRANSLATE</translatorcomment> + <translation>F11</translation> + </message> + <message> + <location filename="../Window.cpp" line="998"/> + <source>Undo save state</source> + <translation>Annulla salva stato</translation> + </message> + <message> + <location filename="../Window.cpp" line="999"/> + <source>Shift+F11</source> + <translatorcomment>DO NOT TRANSLATE</translatorcomment> + <translation>Shift+F11</translation> + </message> + <message> + <location filename="../Window.cpp" line="1010"/> + <location filename="../Window.cpp" line="1017"/> + <source>State &amp;%1</source> + <translation>Stato &amp;%1</translation> + </message> + <message> + <location filename="../Window.cpp" line="1011"/> + <source>F%1</source> + <translation>F%1</translation> + </message> + <message> + <location filename="../Window.cpp" line="1018"/> + <source>Shift+F%1</source> + <translatorcomment>DO NOT TRANSLATE</translatorcomment> + <translation>Shift+F%1</translation> + </message> + <message> + <location filename="../Window.cpp" line="1027"/> + <source>Import GameShark Save</source> + <translation>Importa il salvataggio del GameShark</translation> + </message> + <message> + <location filename="../Window.cpp" line="1033"/> + <source>Export GameShark Save</source> + <translation>Esporta salvataggio dal GameShark</translation> + </message> + <message> + <location filename="../Window.cpp" line="1041"/> + <source>New multiplayer window</source> + <translation>Nuova finestra multigiocatore</translation> + </message> + <message> + <location filename="../Window.cpp" line="1051"/> + <source>About</source> + <translation>About</translation> + </message> + <message> + <location filename="../Window.cpp" line="1056"/> + <source>E&amp;xit</source> + <translation>Uscire (&amp;X)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1059"/> + <source>&amp;Emulation</source> + <translation>&amp;Emulazione</translation> + </message> + <message> + <location filename="../Window.cpp" line="1061"/> + <source>&amp;Reset</source> + <translation>&amp;Reset</translation> + </message> + <message> + <location filename="../Window.cpp" line="1062"/> + <source>Ctrl+R</source> + <translation>Ctrl+R</translation> + </message> + <message> + <location filename="../Window.cpp" line="1067"/> + <source>Sh&amp;utdown</source> + <translation>Spegni (&amp;U)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1073"/> + <source>Yank game pak</source> + <translation>Yank game pak</translation> + </message> + <message> + <location filename="../Window.cpp" line="1081"/> + <source>&amp;Pause</source> + <translation>&amp;Pausa</translation> + </message> + <message> + <location filename="../Window.cpp" line="1084"/> + <source>Ctrl+P</source> + <translation>Ctrl+P</translation> + </message> + <message> + <location filename="../Window.cpp" line="1093"/> + <source>&amp;Next frame</source> + <translation>Salta il prossimo frame (&amp;N)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1094"/> + <source>Ctrl+N</source> + <translation>Ctrl+N</translation> + </message> + <message> + <location filename="../Window.cpp" line="1105"/> + <source>Fast forward (held)</source> + <translation>Avanzamento rapido (sostenuto)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1107"/> + <source>&amp;Fast forward</source> + <translation>Avanzamento rapido (&amp;F)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1110"/> + <source>Shift+Tab</source> + <translation>Shift+Tab</translation> + </message> + <message> + <location filename="../Window.cpp" line="1114"/> + <source>Fast forward speed</source> + <translation>Velocità di avanzamento rapido</translation> + </message> + <message> + <location filename="../Window.cpp" line="1119"/> + <source>Unbounded</source> + <translation>Illimitato</translation> + </message> + <message> + <location filename="../Window.cpp" line="1123"/> + <source>%0x</source> + <translation>%0x</translation> + </message> + <message> + <location filename="../Window.cpp" line="1131"/> + <source>Rewind (held)</source> + <translation>Riavvolgi (sostenuto)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1133"/> + <source>Re&amp;wind</source> + <translation>Riavvolgi (&amp;W)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1134"/> + <source>~</source> + <translation>~</translation> + </message> + <message> + <location filename="../Window.cpp" line="1140"/> + <source>Step backwards</source> + <translation>Torna indietro</translation> + </message> + <message> + <location filename="../Window.cpp" line="1141"/> + <source>Ctrl+B</source> + <translation>Ctrl+B</translation> + </message> + <message> + <location filename="../Window.cpp" line="1150"/> + <source>Sync to &amp;video</source> + <translation>Sincronizzare su &amp;video</translation> + </message> + <message> + <location filename="../Window.cpp" line="1157"/> + <source>Sync to &amp;audio</source> + <translation>Sincronizzare su &amp;audio</translation> + </message> + <message> + <location filename="../Window.cpp" line="1165"/> + <source>Solar sensor</source> + <translation>Sensore solare</translation> + </message> + <message> + <location filename="../Window.cpp" line="1167"/> + <source>Increase solar level</source> + <translation>Aumenta il livello solare</translation> + </message> + <message> + <location filename="../Window.cpp" line="1171"/> + <source>Decrease solar level</source> + <translation>Riduce il livello solare</translation> + </message> + <message> + <location filename="../Window.cpp" line="1175"/> + <source>Brightest solar level</source> + <translation>Livello solare brillante</translation> + </message> + <message> + <location filename="../Window.cpp" line="1179"/> + <source>Darkest solar level</source> + <translation>Livello solare più scuro</translation> + </message> + <message> + <location filename="../Window.cpp" line="1185"/> + <source>Brightness %1</source> + <translation>Luminosità %1</translation> + </message> + <message> + <location filename="../Window.cpp" line="1192"/> + <source>Audio/&amp;Video</source> + <translation>Audio/&amp;Video</translation> + </message> + <message> + <location filename="../Window.cpp" line="1194"/> + <source>Frame size</source> + <translation>Dimensione Frame</translation> + </message> + <message> + <location filename="../Window.cpp" line="1197"/> + <source>%1x</source> + <translation>%1x</translation> + </message> + <message> + <location filename="../Window.cpp" line="1225"/> + <source>Toggle fullscreen</source> + <translation>Abilita schermo intero</translation> + </message> + <message> + <location filename="../Window.cpp" line="1228"/> + <source>Lock aspect ratio</source> + <translation>Blocca aspect ratio</translation> + </message> + <message> + <location filename="../Window.cpp" line="1235"/> + <source>Resample video</source> + <translation>Rimostra video</translation> + </message> + <message> + <location filename="../Window.cpp" line="1241"/> + <source>Frame&amp;skip</source> + <translation>Frame&amp;skip</translation> + </message> + <message> + <location filename="../Window.cpp" line="1251"/> + <source>Shader options...</source> + <translation>Opzioni shader...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1261"/> + <source>Mute</source> + <translation>Muto</translation> + </message> + <message> + <location filename="../Window.cpp" line="1267"/> + <source>FPS target</source> + <translation>FPS mirato</translation> + </message> + <message> + <location filename="../Window.cpp" line="1272"/> + <source>15</source> + <translation>15</translation> + </message> + <message> + <location filename="../Window.cpp" line="1273"/> + <source>30</source> + <translation>30</translation> + </message> + <message> + <location filename="../Window.cpp" line="1274"/> + <source>45</source> + <translation>45</translation> + </message> + <message> + <location filename="../Window.cpp" line="1275"/> + <source>Native (59.7)</source> + <translation>Nativo (59.7)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1276"/> + <source>60</source> + <translation>60</translation> + </message> + <message> + <location filename="../Window.cpp" line="1277"/> + <source>90</source> + <translation>90</translation> + </message> + <message> + <location filename="../Window.cpp" line="1278"/> + <source>120</source> + <translation>120</translation> + </message> + <message> + <location filename="../Window.cpp" line="1279"/> + <source>240</source> + <translation>240</translation> + </message> + <message> + <location filename="../Window.cpp" line="1287"/> + <source>Take &amp;screenshot</source> + <translation>Effettua &amp;screenshot</translation> + </message> + <message> + <location filename="../Window.cpp" line="1288"/> + <source>F12</source> + <translation>F12</translation> + </message> + <message> + <location filename="../Window.cpp" line="1295"/> + <source>Record output...</source> + <translation>Registra salida...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1302"/> + <source>Record GIF...</source> + <translation>Registra GIF...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1308"/> + <source>Video layers</source> + <translation>Layers video</translation> + </message> + <message> + <location filename="../Window.cpp" line="1312"/> + <source>Background %0</source> + <translation>Sfondo %0</translation> + </message> + <message> + <location filename="../Window.cpp" line="1319"/> + <source>OBJ (sprites)</source> + <translation>OBJ (sprites)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1325"/> + <source>Audio channels</source> + <translation>Canali audio</translation> + </message> + <message> + <location filename="../Window.cpp" line="1329"/> + <source>Channel %0</source> + <translation>Canale %0</translation> + </message> + <message> + <location filename="../Window.cpp" line="1336"/> + <source>Channel A</source> + <translation>Canale A</translation> + </message> + <message> + <location filename="../Window.cpp" line="1342"/> + <source>Channel B</source> + <translation>Canale B</translation> + </message> + <message> + <location filename="../Window.cpp" line="1348"/> + <source>&amp;Tools</source> + <translation>&amp;Strumenti</translation> + </message> + <message> + <location filename="../Window.cpp" line="1350"/> + <source>View &amp;logs...</source> + <translation>Visualizza registri... (&amp;L)</translation> + </message> + <message> + <location filename="../Window.cpp" line="1354"/> + <source>Game &amp;overrides...</source> + <translation>Val&amp;specifico per il gioco...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1358"/> + <source>Game &amp;Pak sensors...</source> + <translation>Sensori di gioco &amp;Pak...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1362"/> + <source>&amp;Cheats...</source> + <translation>&amp;Trucchi...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1374"/> + <source>Open debugger console...</source> + <translation>Apri debugger console...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1380"/> + <source>Start &amp;GDB server...</source> + <translation>Avvia server &amp;GDB...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1368"/> + <source>Settings...</source> + <translation>Impostazioni...</translation> + </message> + <message> + <location filename="../Window.cpp" line="406"/> + <source>Select folder</source> + <translation>Seleziona cartella</translation> + </message> + <message> + <location filename="../Window.cpp" line="924"/> + <source>Add folder to library...</source> + <translation>Aggiungi cartella alla libreria...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1387"/> + <source>View &amp;palette...</source> + <translation>Ver &amp;palette...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1392"/> + <source>View &amp;sprites...</source> + <translation>Ver &amp;sprites...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1397"/> + <source>View &amp;tiles...</source> + <translation>Ver &amp;tiles...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1402"/> + <source>View memory...</source> + <translation>Ver memoria...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1408"/> + <source>View &amp;I/O registers...</source> + <translation>Ver reg&amp;registri I/O...</translation> + </message> + <message> + <location filename="../Window.cpp" line="1465"/> + <source>Exit fullscreen</source> + <translation>Esci da schermo intero</translation> + </message> + <message> + <location filename="../Window.cpp" line="1470"/> + <source>Autofire</source> + <translation>Pulsanti Auto fuoco</translation> + </message> + <message> + <location filename="../Window.cpp" line="1477"/> + <source>Autofire A</source> + <translation>Auto fuoco A</translation> + </message> + <message> + <location filename="../Window.cpp" line="1483"/> + <source>Autofire B</source> + <translation>Auto fuoco B</translation> + </message> + <message> + <location filename="../Window.cpp" line="1489"/> + <source>Autofire L</source> + <translation>Auto fuoco L</translation> + </message> + <message> + <location filename="../Window.cpp" line="1495"/> + <source>Autofire R</source> + <translation>Auto fuoco R</translation> + </message> + <message> + <location filename="../Window.cpp" line="1501"/> + <source>Autofire Start</source> + <translation>Avvia Auto fuoco</translation> + </message> + <message> + <location filename="../Window.cpp" line="1507"/> + <source>Autofire Select</source> + <translation>Seleziona Auto fuoco</translation> + </message> + <message> + <location filename="../Window.cpp" line="1513"/> + <source>Autofire Up</source> + <translation>Auto fuoco sù</translation> + </message> + <message> + <location filename="../Window.cpp" line="1519"/> + <source>Autofire Right</source> + <translation>Auto fuoco destro</translation> + </message> + <message> + <location filename="../Window.cpp" line="1525"/> + <source>Autofire Down</source> + <translation>Auto fuoco giù</translation> + </message> + <message> + <location filename="../Window.cpp" line="1531"/> + <source>Autofire Left</source> + <translation>Auto fuoco sinistro</translation> + </message> +</context> +<context> + <name>ROMInfo</name> + <message> + <location filename="../ROMInfo.ui" line="14"/> + <source>ROM Info</source> + <translation>Informazioni della ROM</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="26"/> + <source>Game name:</source> + <translation>Nome del gioco:</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="33"/> + <source>{NAME}</source> + <translation>{NAME}</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="46"/> + <source>Internal name:</source> + <translation>Nome interno:</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="53"/> + <source>{TITLE}</source> + <translation>{TITLE}</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="63"/> + <source>Game ID:</source> + <translation>ID del gioco:</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="70"/> + <source>{ID}</source> + <translation>{ID}</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="80"/> + <source>File size:</source> + <translation>Dimensione del file:</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="87"/> + <source>{SIZE}</source> + <translation>{SIZE}</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="97"/> + <source>CRC32:</source> + <translation>CRC32:</translation> + </message> + <message> + <location filename="../ROMInfo.ui" line="104"/> + <source>{CRC}</source> + <translation>{CRC}</translation> + </message> +</context> +<context> + <name>SensorView</name> + <message> + <location filename="../SensorView.ui" line="20"/> + <source>Sensors</source> + <translation>Sensori</translation> + </message> + <message> + <location filename="../SensorView.ui" line="31"/> + <source>Realtime clock</source> + <translation>Realtime clock</translation> + </message> + <message> + <location filename="../SensorView.ui" line="37"/> + <source>Fixed time</source> + <translation>Ora fissa</translation> + </message> + <message> + <location filename="../SensorView.ui" line="47"/> + <source>System time</source> + <translation>Ora del sistema</translation> + </message> + <message> + <location filename="../SensorView.ui" line="60"/> + <source>Start time at</source> + <translation>Avvia tempo a</translation> + </message> + <message> + <location filename="../SensorView.ui" line="70"/> + <source>Now</source> + <translation>Adesso</translation> + </message> + <message> + <location filename="../SensorView.ui" line="97"/> + <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"/> + <source>Light sensor</source> + <translation>Sensore di luce</translation> + </message> + <message> + <location filename="../SensorView.ui" line="116"/> + <source>Brightness</source> + <translation>Luminosità</translation> + </message> + <message> + <location filename="../SensorView.ui" line="153"/> + <source>Tilt sensor</source> + <translation>Sensore di inclinazione</translation> + </message> + <message> + <location filename="../SensorView.ui" line="161"/> + <location filename="../SensorView.ui" line="250"/> + <source>Set Y</source> + <translation>Config. Y</translation> + </message> + <message> + <location filename="../SensorView.ui" line="171"/> + <location filename="../SensorView.ui" line="260"/> + <source>Set X</source> + <translation>Config. X</translation> + </message> + <message> + <location filename="../SensorView.ui" line="242"/> + <source>Gyroscope</source> + <translation>Giroscopio</translation> + </message> + <message> + <location filename="../SensorView.ui" line="270"/> + <source>Sensitivity</source> + <translation>Sensibilità</translation> + </message> +</context> +<context> + <name>SettingsView</name> + <message> + <location filename="../SettingsView.ui" line="20"/> + <source>Settings</source> + <translation>Impostazioni</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="45"/> + <source>Audio/Video</source> + <translation>Audio/Video</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="50"/> + <source>Interface</source> + <translation>Interfaccia</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="55"/> + <source>Emulation</source> + <translation>Emulazione</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="65"/> + <source>Paths</source> + <translation>Paths</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="90"/> + <source>Audio driver:</source> + <translation>Audio driver:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="107"/> + <source>Audio buffer:</source> + <translation>Buffer audio:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="119"/> + <location filename="../SettingsView.ui" line="141"/> + <source>1536</source> + <translation>1536</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="126"/> + <source>512</source> + <translation>512</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="131"/> + <source>768</source> + <translation>768</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="136"/> + <source>1024</source> + <translation>1024</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="146"/> + <source>2048</source> + <translation>2048</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="151"/> + <source>3072</source> + <translation>3072</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="156"/> + <source>4096</source> + <translation>4096</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="164"/> + <source>samples</source> + <translation>samples</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="173"/> + <source>Sample rate:</source> + <translation>Sample rate:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="185"/> + <location filename="../SettingsView.ui" line="202"/> + <source>44100</source> + <translation>44100</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="192"/> + <source>22050</source> + <translation>22050</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="197"/> + <source>32000</source> + <translation>32000</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="207"/> + <source>48000</source> + <translation>48000</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="215"/> + <source>Hz</source> + <translation>Hz</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="224"/> + <source>Volume:</source> + <translation>Volume:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="255"/> + <source>Mute</source> + <translation>Muto</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="271"/> + <source>Display driver:</source> + <translation>Visualizza driver:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="288"/> + <source>Frameskip:</source> + <translation>Frameskip:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="297"/> + <source>Skip every</source> + <translation>Salta ognuno</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="307"/> + <location filename="../SettingsView.ui" line="532"/> + <source>frames</source> + <translation>frames</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="316"/> + <source>FPS target:</source> + <translation>FPS mirato:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="338"/> + <source>frames per second</source> + <translation>frame per secondo</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="354"/> + <source>Sync:</source> + <translation>Sincronizzare:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="363"/> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="370"/> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="379"/> + <source>Lock aspect ratio</source> + <translation>Blocca aspect ratio</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="386"/> + <source>Resample video</source> + <translation>Rimostrare video</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="421"/> + <source>Library:</source> + <translation>Biblioteca:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="428"/> + <source>Show when no game open</source> + <translation>Mostra quando nessun gioco è aperto</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="445"/> + <source>Clear cache</source> + <translation>Cancella cache</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="459"/> + <source>Fast forward speed:</source> + <translation>Velocità di avanzamento rapido:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="679"/> + <location filename="../SettingsView.ui" line="717"/> + <location filename="../SettingsView.ui" line="752"/> + <location filename="../SettingsView.ui" line="793"/> + <location filename="../SettingsView.ui" line="841"/> + <location filename="../SettingsView.ui" line="889"/> + <location filename="../SettingsView.ui" line="937"/> + <source>Browse</source> + <translation>Sfoglia</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="688"/> + <source>Use BIOS file if found</source> + <translation>Utilizzare il file del BIOS se è stato trovato</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="698"/> + <source>Skip BIOS intro</source> + <translation>Salta BIOS intro</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="471"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="490"/> + <source>Unbounded</source> + <translation>Illimitato</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="404"/> + <source>Suspend screensaver</source> + <translation>Sospendi screensaver</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="60"/> + <source>BIOS</source> + <translation>BIOS</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="414"/> + <source>Pause when inactive</source> + <translation>Pausa se inattivo</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="556"/> + <source>Run all</source> + <translation>Avviare tutto</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="561"/> + <source>Remove known</source> + <translation>Rimuovi conosciuto</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="566"/> + <source>Detect and remove</source> + <translation>Rileva e rimuovi</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="397"/> + <source>Allow opposing input directions</source> + <translation>Consenti direzioni opposte</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="588"/> + <location filename="../SettingsView.ui" line="625"/> + <source>Screenshot</source> + <translation>Screenshot</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="598"/> + <location filename="../SettingsView.ui" line="635"/> + <source>Save data</source> + <translation>Salva dati</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="608"/> + <location filename="../SettingsView.ui" line="642"/> + <source>Cheat codes</source> + <translation>Trucchi</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="509"/> + <source>Enable rewind</source> + <translation>Abilita riavvolgi</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="516"/> + <source>Rewind history:</source> + <translation>Riavvolgi storia:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="548"/> + <source>Idle loops:</source> + <translation>Idle loops:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="581"/> + <source>Savestate extra data:</source> + <translation>Salva dati extra:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="618"/> + <source>Load extra data:</source> + <translation>Carica dati extra:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="660"/> + <source>GB BIOS file:</source> + <translation>File GB BIOS:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="726"/> + <source>GBA BIOS file:</source> + <translation>File GBA BIOS:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="733"/> + <source>GBC BIOS file:</source> + <translation>File GBC BIOS:</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="768"/> + <source>Save games</source> + <translation>Salva il gioco</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="802"/> + <location filename="../SettingsView.ui" line="850"/> + <location filename="../SettingsView.ui" line="898"/> + <location filename="../SettingsView.ui" line="946"/> + <source>Same directory as the ROM</source> + <translation>Stessa directory della ROM</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="816"/> + <source>Save states</source> + <translation>Salva Stato</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="864"/> + <source>Screenshots</source> + <translation>Screenshots</translation> + </message> + <message> + <location filename="../SettingsView.ui" line="912"/> + <source>Patches</source> + <translation>Patches</translation> + </message> +</context> +<context> + <name>ShaderSelector</name> + <message> + <location filename="../ShaderSelector.ui" line="14"/> + <source>Shaders</source> + <translation>Shaders</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="28"/> + <source>Active Shader:</source> + <translation>Attiva Shader:</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="35"/> + <source>Name</source> + <translation>Nome</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="45"/> + <source>Author</source> + <translation>Autore</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="62"/> + <source>Description</source> + <translation>Descrizione</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="88"/> + <source>Unload Shader</source> + <translation>Non caricare shader</translation> + </message> + <message> + <location filename="../ShaderSelector.ui" line="95"/> + <source>Load New Shader</source> + <translation>Carica Nuovo shader</translation> + </message> +</context> +<context> + <name>ShortcutView</name> + <message> + <location filename="../ShortcutView.ui" line="14"/> + <source>Edit Shortcuts</source> + <translation>Edita Shortcuts</translation> + </message> + <message> + <location filename="../ShortcutView.ui" line="29"/> + <source>Keyboard</source> + <translation>Tastiera</translation> + </message> + <message> + <location filename="../ShortcutView.ui" line="39"/> + <source>Gamepad</source> + <translation>Gamepad</translation> + </message> + <message> + <location filename="../ShortcutView.ui" line="46"/> + <source>Clear</source> + <translation>Cancella</translation> + </message> +</context> +<context> + <name>TileView</name> + <message> + <location filename="../TileView.ui" line="14"/> + <source>Tiles</source> + <translation>Tiles</translation> + </message> + <message> + <location filename="../TileView.ui" line="20"/> + <source>256 colors</source> + <translation>256 colori</translation> + </message> + <message> + <location filename="../TileView.ui" line="70"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../TileView.ui" line="83"/> + <source>Magnification</source> + <translation>Magnification</translation> + </message> +</context> +<context> + <name>VideoView</name> + <message> + <location filename="../VideoView.ui" line="20"/> + <source>Record Video</source> + <translation>Registra video</translation> + </message> + <message> + <location filename="../VideoView.ui" line="40"/> + <source>Start</source> + <translation>Avvia</translation> + </message> + <message> + <location filename="../VideoView.ui" line="56"/> + <source>Stop</source> + <translation>Stop</translation> + </message> + <message> + <location filename="../VideoView.ui" line="69"/> + <source>Select File</source> + <translation>Seleziona File</translation> + </message> + <message> + <location filename="../VideoView.ui" line="101"/> + <source>Presets</source> + <translation>Presets</translation> + </message> + <message> + <location filename="../VideoView.ui" line="109"/> + <source>High Quality</source> + <translation>Alta Qualità</translation> + </message> + <message> + <location filename="../VideoView.ui" line="119"/> + <source>YouTube</source> + <translation>YouTube</translation> + </message> + <message> + <location filename="../VideoView.ui" line="129"/> + <location filename="../VideoView.ui" line="237"/> + <source>WebM</source> + <translation>WebM</translation> + </message> + <message> + <location filename="../VideoView.ui" line="139"/> + <source>Lossless</source> + <translation>Senza perdite</translation> + </message> + <message> + <location filename="../VideoView.ui" line="156"/> + <source>1080p</source> + <translation>1080p</translation> + </message> + <message> + <location filename="../VideoView.ui" line="166"/> + <source>720p</source> + <translation>720p</translation> + </message> + <message> + <location filename="../VideoView.ui" line="176"/> + <source>480p</source> + <translation>480p</translation> + </message> + <message> + <location filename="../VideoView.ui" line="189"/> + <source>Native</source> + <translation>Nativo</translation> + </message> + <message> + <location filename="../VideoView.ui" line="222"/> + <source>Format</source> + <translation>Formato</translation> + </message> + <message> + <location filename="../VideoView.ui" line="232"/> + <source>MKV</source> + <translation>MKV</translation> + </message> + <message> + <location filename="../VideoView.ui" line="242"/> + <source>AVI</source> + <translation>AVI</translation> + </message> + <message> + <location filename="../VideoView.ui" line="247"/> + <source>MP4</source> + <translation>MP4</translation> + </message> + <message> + <location filename="../VideoView.ui" line="259"/> + <source>PNG</source> + <translation>PNG</translation> + </message> + <message> + <location filename="../VideoView.ui" line="264"/> + <source>h.264</source> + <translation>h.264</translation> + </message> + <message> + <location filename="../VideoView.ui" line="269"/> + <source>VP8</source> + <translation></translation> + </message> + <message> + <location filename="../VideoView.ui" line="274"/> + <source>Xvid</source> + <translation>Xvid</translation> + </message> + <message> + <location filename="../VideoView.ui" line="279"/> + <source>FFV1</source> + <translation>FFV1</translation> + </message> + <message> + <location filename="../VideoView.ui" line="291"/> + <source>FLAC</source> + <translation>FLAC</translation> + </message> + <message> + <location filename="../VideoView.ui" line="296"/> + <source>Opus</source> + <translation>Opus</translation> + </message> + <message> + <location filename="../VideoView.ui" line="301"/> + <source>Vorbis</source> + <translation>Vorbis</translation> + </message> + <message> + <location filename="../VideoView.ui" line="306"/> + <source>MP3</source> + <translation>MP3</translation> + </message> + <message> + <location filename="../VideoView.ui" line="311"/> + <source>AAC</source> + <translation>AAC</translation> + </message> + <message> + <location filename="../VideoView.ui" line="316"/> + <source>Uncompressed</source> + <translation>Senza compressione</translation> + </message> + <message> + <location filename="../VideoView.ui" line="327"/> + <source> Bitrate (kbps)</source> + <translation>Bitrate (kbps)</translation> + </message> + <message> + <location filename="../VideoView.ui" line="333"/> + <source>VBR </source> + <translation>VBR </translation> + </message> + <message> + <location filename="../VideoView.ui" line="381"/> + <source>ABR</source> + <translation>ABR</translation> + </message> + <message> + <location filename="../VideoView.ui" line="397"/> + <source>Dimensions</source> + <translation>Dimensioni</translation> + </message> + <message> + <location filename="../VideoView.ui" line="403"/> + <source>:</source> + <translation>:</translation> + </message> + <message> + <location filename="../VideoView.ui" line="413"/> + <source>×</source> + <translation>×</translation> + </message> + <message> + <location filename="../VideoView.ui" line="463"/> + <source>Lock aspect ratio</source> + <translation>Blocca aspect ratio</translation> + </message> + <message> + <location filename="../VideoView.ui" line="478"/> + <source>Show advanced</source> + <translation>Mostra avanzato</translation> + </message> +</context> +</TS>