mirror of https://github.com/mgba-emu/mgba.git
Merge branch 'master' (early part) into medusa
This commit is contained in:
commit
bb78133b21
4
CHANGES
4
CHANGES
|
@ -40,6 +40,7 @@ Features:
|
|||
- Support for unlicensed Wisdom Tree Game Boy mapper
|
||||
- Qt: Add export button for tile view (closes mgba.io/i/1507)
|
||||
- Qt: Add recent game list clearing (closes mgba.io/i/1380)
|
||||
- GB: Yanking gamepak now supported
|
||||
Emulation fixes:
|
||||
- GBA: All IRQs have 7 cycle delay (fixes mgba.io/i/539, mgba.io/i/1208)
|
||||
- GBA: Reset now reloads multiboot ROMs
|
||||
|
@ -58,6 +59,7 @@ Emulation fixes:
|
|||
- GB: Fix savedata initialization (fixes mgba.io/i/1473, mgba.io/i/1478)
|
||||
- GB Memory: Better emulate 0xFEA0 region on DMG, MGB and AGB
|
||||
- GB Printer: Reset printer buffer index after printing
|
||||
- GB Video: Fix mode 0 window edge case (fixes mgba.io/i/1519)
|
||||
Other fixes:
|
||||
- Qt: Fix some Qt display driver race conditions
|
||||
- Core: Improved lockstep driver reliability (Le Hoang Quyen)
|
||||
|
@ -75,7 +77,7 @@ Other fixes:
|
|||
- GBA Cheats: Fix value incrementing in CB slide codes (fixes mgba.io/i/1501)
|
||||
- Qt: Only show emulator restart warning once per settings saving
|
||||
- Qt: Improve cheat view UX
|
||||
- GB: Fix SGB controller selection initialization (fixes mgba.io/i/1104)
|
||||
- GB: Fix SGB controller incrementing (fixes mgba.io/i/1104)
|
||||
Misc:
|
||||
- GBA Savedata: EEPROM performance fixes
|
||||
- GBA Savedata: Automatically map 1Mbit Flash files as 1Mbit Flash
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
|
@ -94,6 +94,7 @@ struct GB {
|
|||
bool isPristine;
|
||||
size_t pristineRomSize;
|
||||
size_t yankedRomSize;
|
||||
enum GBMemoryBankControllerType yankedMbc;
|
||||
uint32_t romCrc32;
|
||||
struct VFile* romVf;
|
||||
struct VFile* biosVf;
|
||||
|
@ -109,6 +110,7 @@ struct GB {
|
|||
uint8_t sgbPacket[16];
|
||||
uint8_t sgbControllers;
|
||||
uint8_t sgbCurrentController;
|
||||
bool sgbIncrement;
|
||||
|
||||
struct mCoreCallbacksList coreCallbacks;
|
||||
struct mAVStream* stream;
|
||||
|
@ -162,6 +164,7 @@ bool GBLoadROM(struct GB* gb, struct VFile* vf);
|
|||
bool GBLoadSave(struct GB* gb, struct VFile* vf);
|
||||
void GBUnloadROM(struct GB* gb);
|
||||
void GBSynthesizeROM(struct VFile* vf);
|
||||
void GBYankROM(struct GB* gb);
|
||||
|
||||
void GBLoadBIOS(struct GB* gb, struct VFile* vf);
|
||||
|
||||
|
|
|
@ -263,6 +263,7 @@ DECL_BITS(GBSerializedSGBFlags, RenderMode, 2, 2);
|
|||
DECL_BITS(GBSerializedSGBFlags, BufferIndex, 4, 3);
|
||||
DECL_BITS(GBSerializedSGBFlags, CurrentController, 7, 2);
|
||||
DECL_BITS(GBSerializedSGBFlags, ReqControllers, 9, 2);
|
||||
DECL_BIT(GBSerializedSGBFlags, Increment, 11);
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct GBSerializedState {
|
||||
|
|
17
src/gb/gb.c
17
src/gb/gb.c
|
@ -127,6 +127,19 @@ bool GBLoadROM(struct GB* gb, struct VFile* vf) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void GBYankROM(struct GB* gb) {
|
||||
gb->yankedRomSize = gb->memory.romSize;
|
||||
gb->yankedMbc = gb->memory.mbcType;
|
||||
gb->memory.romSize = 0;
|
||||
gb->memory.mbcType = GB_MBC_NONE;
|
||||
gb->memory.sramAccess = false;
|
||||
|
||||
if (gb->cpu) {
|
||||
struct LR35902Core* cpu = gb->cpu;
|
||||
cpu->memory.setActiveRegion(cpu, cpu->pc);
|
||||
}
|
||||
}
|
||||
|
||||
static void GBSramDeinit(struct GB* gb) {
|
||||
if (gb->sramVf) {
|
||||
gb->sramVf->unmap(gb->sramVf, gb->memory.sram, gb->sramSize);
|
||||
|
@ -430,13 +443,15 @@ void GBReset(struct LR35902Core* cpu) {
|
|||
|
||||
if (gb->yankedRomSize) {
|
||||
gb->memory.romSize = gb->yankedRomSize;
|
||||
gb->memory.mbcType = gb->yankedMbc;
|
||||
gb->yankedRomSize = 0;
|
||||
}
|
||||
|
||||
gb->sgbBit = -1;
|
||||
gb->sgbControllers = 0;
|
||||
gb->sgbCurrentController = 3;
|
||||
gb->sgbCurrentController = 0;
|
||||
gb->currentSgbBits = 0;
|
||||
gb->sgbIncrement = false;
|
||||
memset(gb->sgbPacket, 0, sizeof(gb->sgbPacket));
|
||||
|
||||
mTimingClear(&gb->timing);
|
||||
|
|
35
src/gb/io.c
35
src/gb/io.c
|
@ -115,23 +115,21 @@ static void _writeSGBBits(struct GB* gb, int bits) {
|
|||
if (bits == gb->currentSgbBits) {
|
||||
return;
|
||||
}
|
||||
gb->currentSgbBits = bits;
|
||||
if (gb->sgbBit > 128) {
|
||||
switch (bits) {
|
||||
case 1:
|
||||
gb->sgbBit |= 2;
|
||||
break;
|
||||
case 2:
|
||||
gb->sgbBit |= 4;
|
||||
break;
|
||||
case 3:
|
||||
if (gb->sgbBit == 135) {
|
||||
gb->sgbBit &= ~6;
|
||||
gb->sgbCurrentController = (gb->sgbCurrentController + 1) & gb->sgbControllers;
|
||||
}
|
||||
break;
|
||||
switch (bits) {
|
||||
case 0:
|
||||
case 1:
|
||||
if (gb->currentSgbBits & 2) {
|
||||
gb->sgbIncrement = !gb->sgbIncrement;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (gb->sgbIncrement) {
|
||||
gb->sgbIncrement = false;
|
||||
gb->sgbCurrentController = (gb->sgbCurrentController + 1) & gb->sgbControllers;
|
||||
}
|
||||
break;
|
||||
}
|
||||
gb->currentSgbBits = bits;
|
||||
if (gb->sgbBit == 128 && bits == 2) {
|
||||
GBVideoWriteSGBPacket(&gb->video, gb->sgbPacket);
|
||||
++gb->sgbBit;
|
||||
|
@ -460,6 +458,9 @@ void GBIOWrite(struct GB* gb, unsigned address, uint8_t value) {
|
|||
value = gb->video.stat;
|
||||
break;
|
||||
case 0x50:
|
||||
if (gb->memory.io[0x50] != 0xFF) {
|
||||
break;
|
||||
}
|
||||
GBUnmapBIOS(gb);
|
||||
if (gb->model >= GB_MODEL_CGB && gb->memory.io[REG_UNK4C] < 0x80) {
|
||||
gb->model = GB_MODEL_DMG;
|
||||
|
@ -535,13 +536,13 @@ void GBIOWrite(struct GB* gb, unsigned address, uint8_t value) {
|
|||
|
||||
static uint8_t _readKeys(struct GB* gb) {
|
||||
uint8_t keys = *gb->keySource;
|
||||
if (gb->sgbCurrentController & gb->sgbControllers) {
|
||||
if (gb->sgbCurrentController != 0) {
|
||||
keys = 0;
|
||||
}
|
||||
uint8_t joyp = gb->memory.io[REG_JOYP];
|
||||
switch (joyp & 0x30) {
|
||||
case 0x30:
|
||||
keys = gb->sgbCurrentController & gb->sgbControllers;
|
||||
keys = gb->sgbCurrentController;
|
||||
break;
|
||||
case 0x20:
|
||||
keys >>= 4;
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
mLOG_DEFINE_CATEGORY(GB_MEM, "GB Memory", "gb.memory");
|
||||
|
||||
static const uint8_t _yankBuffer[] = { 0xFF };
|
||||
|
||||
enum GBBus {
|
||||
GB_BUS_CPU,
|
||||
GB_BUS_MAIN,
|
||||
|
@ -69,6 +71,14 @@ static void GBSetActiveRegion(struct LR35902Core* cpu, uint16_t address) {
|
|||
cpu->memory.activeRegion = memory->romBase;
|
||||
cpu->memory.activeRegionEnd = GB_BASE_CART_BANK1;
|
||||
cpu->memory.activeMask = GB_SIZE_CART_BANK0 - 1;
|
||||
if (gb->memory.romSize < GB_SIZE_CART_BANK0) {
|
||||
if (address >= gb->memory.romSize) {
|
||||
cpu->memory.activeRegion = _yankBuffer;
|
||||
cpu->memory.activeMask = 0;
|
||||
} else {
|
||||
cpu->memory.activeRegionEnd = gb->memory.romSize;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GB_REGION_CART_BANK1:
|
||||
case GB_REGION_CART_BANK1 + 1:
|
||||
|
@ -89,6 +99,14 @@ static void GBSetActiveRegion(struct LR35902Core* cpu, uint16_t address) {
|
|||
cpu->memory.activeRegionEnd = GB_BASE_CART_BANK1 + 0x2000;
|
||||
}
|
||||
}
|
||||
if (gb->memory.romSize < GB_SIZE_CART_BANK0 * 2) {
|
||||
if (address >= gb->memory.romSize) {
|
||||
cpu->memory.activeRegion = _yankBuffer;
|
||||
cpu->memory.activeMask = 0;
|
||||
} else {
|
||||
cpu->memory.activeRegionEnd = gb->memory.romSize;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
cpu->memory.cpuLoad8 = GBLoad8;
|
||||
|
@ -243,6 +261,9 @@ uint8_t GBLoad8(struct LR35902Core* cpu, uint16_t address) {
|
|||
case GB_REGION_CART_BANK0 + 1:
|
||||
case GB_REGION_CART_BANK0 + 2:
|
||||
case GB_REGION_CART_BANK0 + 3:
|
||||
if (address >= memory->romSize) {
|
||||
return 0xFF;
|
||||
}
|
||||
return memory->romBase[address & (GB_SIZE_CART_BANK0 - 1)];
|
||||
case GB_REGION_CART_BANK1 + 2:
|
||||
case GB_REGION_CART_BANK1 + 3:
|
||||
|
@ -252,6 +273,9 @@ uint8_t GBLoad8(struct LR35902Core* cpu, uint16_t address) {
|
|||
// Fall through
|
||||
case GB_REGION_CART_BANK1:
|
||||
case GB_REGION_CART_BANK1 + 1:
|
||||
if (address >= memory->romSize) {
|
||||
return 0xFF;
|
||||
}
|
||||
return memory->romBank[address & (GB_SIZE_CART_BANK0 - 1)];
|
||||
case GB_REGION_VRAM:
|
||||
case GB_REGION_VRAM + 1:
|
||||
|
|
|
@ -224,6 +224,9 @@ static void GBVideoSoftwareRendererUpdateWindow(struct GBVideoSoftwareRenderer*
|
|||
if (renderer->lastY >= GB_VIDEO_VERTICAL_PIXELS || !(after || before)) {
|
||||
return;
|
||||
}
|
||||
if (!renderer->hasWindow && renderer->lastX == GB_VIDEO_HORIZONTAL_PIXELS) {
|
||||
return;
|
||||
}
|
||||
if (renderer->lastY >= oldWy) {
|
||||
if (!after) {
|
||||
renderer->currentWy -= renderer->lastY;
|
||||
|
|
|
@ -225,6 +225,7 @@ void GBSGBSerialize(struct GB* gb, struct GBSerializedState* state) {
|
|||
flags = GBSerializedSGBFlagsSetRenderMode(flags, gb->video.renderer->sgbRenderMode);
|
||||
flags = GBSerializedSGBFlagsSetBufferIndex(flags, gb->video.sgbBufferIndex);
|
||||
flags = GBSerializedSGBFlagsSetReqControllers(flags, gb->sgbControllers);
|
||||
flags = GBSerializedSGBFlagsSetIncrement(flags, gb->sgbIncrement);
|
||||
flags = GBSerializedSGBFlagsSetCurrentController(flags, gb->sgbCurrentController);
|
||||
STORE_32LE(flags, 0, &state->sgb.flags);
|
||||
|
||||
|
@ -260,6 +261,12 @@ void GBSGBDeserialize(struct GB* gb, const struct GBSerializedState* state) {
|
|||
gb->video.sgbBufferIndex = GBSerializedSGBFlagsGetBufferIndex(flags);
|
||||
gb->sgbControllers = GBSerializedSGBFlagsGetReqControllers(flags);
|
||||
gb->sgbCurrentController = GBSerializedSGBFlagsGetCurrentController(flags);
|
||||
gb->sgbIncrement = GBSerializedSGBFlagsGetIncrement(flags);
|
||||
|
||||
// Old versions of mGBA stored the increment bits here
|
||||
if (gb->sgbBit > 129 && gb->sgbBit & 2) {
|
||||
gb->sgbIncrement = true;
|
||||
}
|
||||
|
||||
memcpy(gb->video.sgbPacketBuffer, state->sgb.packet, sizeof(state->sgb.packet));
|
||||
memcpy(gb->sgbPacket, state->sgb.inProgressPacket, sizeof(state->sgb.inProgressPacket));
|
||||
|
|
|
@ -701,6 +701,9 @@ void GBVideoWriteSGBPacket(struct GBVideo* video, uint8_t* data) {
|
|||
case SGB_ATTR_SET:
|
||||
break;
|
||||
case SGB_MLT_REQ:
|
||||
if ((video->sgbPacketBuffer[1] & 0x3) == 2) { // XXX: This unmasked increment appears to be an SGB hardware bug
|
||||
++video->p->sgbCurrentController;
|
||||
}
|
||||
video->p->sgbControllers = video->sgbPacketBuffer[1] & 0x3;
|
||||
video->p->sgbCurrentController &= video->p->sgbControllers;
|
||||
return;
|
||||
|
|
|
@ -633,13 +633,16 @@ void CoreController::replaceGame(const QString& path) {
|
|||
}
|
||||
|
||||
void CoreController::yankPak() {
|
||||
#ifdef M_CORE_GBA
|
||||
if (platform() != PLATFORM_GBA) {
|
||||
return;
|
||||
}
|
||||
Interrupter interrupter(this);
|
||||
GBAYankROM(static_cast<GBA*>(m_threadContext.core->board));
|
||||
#endif
|
||||
|
||||
switch (platform()) {
|
||||
case PLATFORM_GBA:
|
||||
GBAYankROM(static_cast<GBA*>(m_threadContext.core->board));
|
||||
break;
|
||||
case PLATFORM_GB:
|
||||
GBYankROM(static_cast<GB*>(m_threadContext.core->board));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_PNG
|
||||
|
|
|
@ -1352,12 +1352,12 @@ Game Boy Advance ist ein eingetragenes Warenzeichen von Nintendo Co., Ltd.</tran
|
|||
<translation>Fehler beim Öffnen der Spieldatei: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="686"/>
|
||||
<location filename="../CoreController.cpp" line="689"/>
|
||||
<source>Failed to open snapshot file for reading: %1</source>
|
||||
<translation>Konnte Snapshot-Datei %1 nicht zum Lesen öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CoreController.cpp" line="702"/>
|
||||
<location filename="../CoreController.cpp" line="705"/>
|
||||
<source>Failed to open snapshot file for writing: %1</source>
|
||||
<translation>Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen</translation>
|
||||
</message>
|
||||
|
@ -3801,222 +3801,222 @@ Game Boy Advance ist ein eingetragenes Warenzeichen von Nintendo Co., Ltd.</tran
|
|||
<translation>Schli&eßen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1216"/>
|
||||
<location filename="../Window.cpp" line="1215"/>
|
||||
<source>Yank game pak</source>
|
||||
<translation>Spielmodul herausziehen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1223"/>
|
||||
<location filename="../Window.cpp" line="1221"/>
|
||||
<source>&Pause</source>
|
||||
<translation>&Pause</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1232"/>
|
||||
<location filename="../Window.cpp" line="1230"/>
|
||||
<source>&Next frame</source>
|
||||
<translation>&Nächstes Bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1238"/>
|
||||
<location filename="../Window.cpp" line="1236"/>
|
||||
<source>Fast forward (held)</source>
|
||||
<translation>Schneller Vorlauf (gehalten)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1244"/>
|
||||
<location filename="../Window.cpp" line="1242"/>
|
||||
<source>&Fast forward</source>
|
||||
<translation>Schneller &Vorlauf</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1248"/>
|
||||
<location filename="../Window.cpp" line="1246"/>
|
||||
<source>Fast forward speed</source>
|
||||
<translation>Vorlauf-Geschwindigkeit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1253"/>
|
||||
<location filename="../Window.cpp" line="1251"/>
|
||||
<source>Unbounded</source>
|
||||
<translation>Unbegrenzt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1257"/>
|
||||
<location filename="../Window.cpp" line="1255"/>
|
||||
<source>%0x</source>
|
||||
<translation>%0x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1261"/>
|
||||
<location filename="../Window.cpp" line="1259"/>
|
||||
<source>Rewind (held)</source>
|
||||
<translation>Zurückspulen (gehalten)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1268"/>
|
||||
<location filename="../Window.cpp" line="1266"/>
|
||||
<source>Re&wind</source>
|
||||
<translation>Zur&ückspulen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1273"/>
|
||||
<location filename="../Window.cpp" line="1271"/>
|
||||
<source>Step backwards</source>
|
||||
<translation>Schrittweiser Rücklauf</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1279"/>
|
||||
<location filename="../Window.cpp" line="1277"/>
|
||||
<source>Sync to &video</source>
|
||||
<translation>Mit &Video synchronisieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1286"/>
|
||||
<location filename="../Window.cpp" line="1284"/>
|
||||
<source>Sync to &audio</source>
|
||||
<translation>Mit &Audio synchronisieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1294"/>
|
||||
<location filename="../Window.cpp" line="1292"/>
|
||||
<source>Solar sensor</source>
|
||||
<translation>Sonnen-Sensor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1295"/>
|
||||
<location filename="../Window.cpp" line="1293"/>
|
||||
<source>Increase solar level</source>
|
||||
<translation>Sonnen-Level erhöhen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1296"/>
|
||||
<location filename="../Window.cpp" line="1294"/>
|
||||
<source>Decrease solar level</source>
|
||||
<translation>Sonnen-Level verringern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1297"/>
|
||||
<location filename="../Window.cpp" line="1295"/>
|
||||
<source>Brightest solar level</source>
|
||||
<translation>Hellster Sonnen-Level</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1300"/>
|
||||
<location filename="../Window.cpp" line="1298"/>
|
||||
<source>Darkest solar level</source>
|
||||
<translation>Dunkelster Sonnen-Level</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1306"/>
|
||||
<location filename="../Window.cpp" line="1304"/>
|
||||
<source>Brightness %1</source>
|
||||
<translation>Helligkeit %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1321"/>
|
||||
<location filename="../Window.cpp" line="1319"/>
|
||||
<source>BattleChip Gate...</source>
|
||||
<translation>BattleChip Gate...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1325"/>
|
||||
<location filename="../Window.cpp" line="1323"/>
|
||||
<source>Audio/&Video</source>
|
||||
<translation>Audio/&Video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1326"/>
|
||||
<location filename="../Window.cpp" line="1324"/>
|
||||
<source>Frame size</source>
|
||||
<translation>Bildgröße</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1353"/>
|
||||
<location filename="../Window.cpp" line="1351"/>
|
||||
<source>Toggle fullscreen</source>
|
||||
<translation>Vollbildmodus umschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1356"/>
|
||||
<location filename="../Window.cpp" line="1354"/>
|
||||
<source>Lock aspect ratio</source>
|
||||
<translation>Seitenverhältnis korrigieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1368"/>
|
||||
<location filename="../Window.cpp" line="1366"/>
|
||||
<source>Force integer scaling</source>
|
||||
<translation>Pixelgenaue Skalierung (Integer scaling)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1380"/>
|
||||
<location filename="../Window.cpp" line="1378"/>
|
||||
<source>Interframe blending</source>
|
||||
<translation>Interframe-Überblendung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1397"/>
|
||||
<location filename="../Window.cpp" line="1395"/>
|
||||
<source>Frame&skip</source>
|
||||
<translation>Frame&skip</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1410"/>
|
||||
<location filename="../Window.cpp" line="1408"/>
|
||||
<source>Mute</source>
|
||||
<translation>Stummschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1417"/>
|
||||
<location filename="../Window.cpp" line="1415"/>
|
||||
<source>FPS target</source>
|
||||
<translation>Bildwiederholrate</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1440"/>
|
||||
<location filename="../Window.cpp" line="1438"/>
|
||||
<source>Take &screenshot</source>
|
||||
<translation>&Screenshot erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1442"/>
|
||||
<location filename="../Window.cpp" line="1440"/>
|
||||
<source>F12</source>
|
||||
<translation>F12</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1450"/>
|
||||
<location filename="../Window.cpp" line="1448"/>
|
||||
<source>Record GIF...</source>
|
||||
<translation>GIF aufzeichen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1723"/>
|
||||
<location filename="../Window.cpp" line="1721"/>
|
||||
<source>Clear</source>
|
||||
<translation>Leeren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1312"/>
|
||||
<location filename="../Window.cpp" line="1310"/>
|
||||
<source>Game Boy Printer...</source>
|
||||
<translation>Game Boy Printer...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1454"/>
|
||||
<location filename="../Window.cpp" line="1452"/>
|
||||
<source>Video layers</source>
|
||||
<translation>Video-Ebenen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1455"/>
|
||||
<location filename="../Window.cpp" line="1453"/>
|
||||
<source>Audio channels</source>
|
||||
<translation>Audio-Kanäle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1457"/>
|
||||
<location filename="../Window.cpp" line="1455"/>
|
||||
<source>Adjust layer placement...</source>
|
||||
<translation>Lage der Bildebenen anpassen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1459"/>
|
||||
<location filename="../Window.cpp" line="1457"/>
|
||||
<source>&Tools</source>
|
||||
<translation>&Werkzeuge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1460"/>
|
||||
<location filename="../Window.cpp" line="1458"/>
|
||||
<source>View &logs...</source>
|
||||
<translation>&Logs ansehen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1462"/>
|
||||
<location filename="../Window.cpp" line="1460"/>
|
||||
<source>Game &overrides...</source>
|
||||
<translation>Spiel-&Überschreibungen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1485"/>
|
||||
<location filename="../Window.cpp" line="1483"/>
|
||||
<source>&Cheats...</source>
|
||||
<translation>&Cheats...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1492"/>
|
||||
<location filename="../Window.cpp" line="1490"/>
|
||||
<source>Open debugger console...</source>
|
||||
<translation>Debugger-Konsole öffnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1494"/>
|
||||
<location filename="../Window.cpp" line="1492"/>
|
||||
<source>Start &GDB server...</source>
|
||||
<translation>&GDB-Server starten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1488"/>
|
||||
<location filename="../Window.cpp" line="1486"/>
|
||||
<source>Settings...</source>
|
||||
<translation>Einstellungen...</translation>
|
||||
</message>
|
||||
|
@ -4051,57 +4051,57 @@ Game Boy Advance ist ein eingetragenes Warenzeichen von Nintendo Co., Ltd.</tran
|
|||
<translation>Über...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1328"/>
|
||||
<location filename="../Window.cpp" line="1326"/>
|
||||
<source>%1×</source>
|
||||
<translation>%1x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1389"/>
|
||||
<location filename="../Window.cpp" line="1387"/>
|
||||
<source>Bilinear filtering</source>
|
||||
<translation>Bilineare Filterung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1425"/>
|
||||
<location filename="../Window.cpp" line="1423"/>
|
||||
<source>Native (59.7275)</source>
|
||||
<translation>Nativ (59.7275)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1446"/>
|
||||
<location filename="../Window.cpp" line="1444"/>
|
||||
<source>Record A/V...</source>
|
||||
<translation>Audio/Video aufzeichnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1474"/>
|
||||
<location filename="../Window.cpp" line="1472"/>
|
||||
<source>Game Pak sensors...</source>
|
||||
<translation>Spielmodul-Sensoren...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1500"/>
|
||||
<location filename="../Window.cpp" line="1498"/>
|
||||
<source>View &palette...</source>
|
||||
<translation>&Palette betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1501"/>
|
||||
<location filename="../Window.cpp" line="1499"/>
|
||||
<source>View &sprites...</source>
|
||||
<translation>&Sprites betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1502"/>
|
||||
<location filename="../Window.cpp" line="1500"/>
|
||||
<source>View &tiles...</source>
|
||||
<translation>&Tiles betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1503"/>
|
||||
<location filename="../Window.cpp" line="1501"/>
|
||||
<source>View &map...</source>
|
||||
<translation>&Map betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1506"/>
|
||||
<location filename="../Window.cpp" line="1504"/>
|
||||
<source>&Frame inspector...</source>
|
||||
<translation>&Bildbetrachter...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1524"/>
|
||||
<location filename="../Window.cpp" line="1522"/>
|
||||
<source>View memory...</source>
|
||||
<translation>Speicher betrachten...</translation>
|
||||
</message>
|
||||
|
@ -4111,87 +4111,87 @@ Game Boy Advance ist ein eingetragenes Warenzeichen von Nintendo Co., Ltd.</tran
|
|||
<translation>&I/O-Register betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1525"/>
|
||||
<location filename="../Window.cpp" line="1523"/>
|
||||
<source>Search memory...</source>
|
||||
<translation>Speicher durchsuchen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1528"/>
|
||||
<location filename="../Window.cpp" line="1526"/>
|
||||
<source>View &I/O registers...</source>
|
||||
<translation>&I/O-Register betrachten...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1533"/>
|
||||
<location filename="../Window.cpp" line="1531"/>
|
||||
<source>Record debug video log...</source>
|
||||
<translation>Video-Protokoll aufzeichnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1534"/>
|
||||
<location filename="../Window.cpp" line="1532"/>
|
||||
<source>Stop debug video log</source>
|
||||
<translation>Aufzeichnen des Video-Protokolls beenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1615"/>
|
||||
<location filename="../Window.cpp" line="1613"/>
|
||||
<source>Exit fullscreen</source>
|
||||
<translation>Vollbildmodus beenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1617"/>
|
||||
<location filename="../Window.cpp" line="1615"/>
|
||||
<source>GameShark Button (held)</source>
|
||||
<translation>GameShark-Taste (gehalten)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1623"/>
|
||||
<location filename="../Window.cpp" line="1621"/>
|
||||
<source>Autofire</source>
|
||||
<translation>Autofeuer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1624"/>
|
||||
<location filename="../Window.cpp" line="1622"/>
|
||||
<source>Autofire A</source>
|
||||
<translation>Autofeuer A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1629"/>
|
||||
<location filename="../Window.cpp" line="1627"/>
|
||||
<source>Autofire B</source>
|
||||
<translation>Autofeuer B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1634"/>
|
||||
<location filename="../Window.cpp" line="1632"/>
|
||||
<source>Autofire L</source>
|
||||
<translation>Autofeuer L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1639"/>
|
||||
<location filename="../Window.cpp" line="1637"/>
|
||||
<source>Autofire R</source>
|
||||
<translation>Autofeuer R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1644"/>
|
||||
<location filename="../Window.cpp" line="1642"/>
|
||||
<source>Autofire Start</source>
|
||||
<translation>Autofeuer Start</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1649"/>
|
||||
<location filename="../Window.cpp" line="1647"/>
|
||||
<source>Autofire Select</source>
|
||||
<translation>Autofeuer Select</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1654"/>
|
||||
<location filename="../Window.cpp" line="1652"/>
|
||||
<source>Autofire Up</source>
|
||||
<translation>Autofeuer nach oben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1659"/>
|
||||
<location filename="../Window.cpp" line="1657"/>
|
||||
<source>Autofire Right</source>
|
||||
<translation>Autofeuer rechts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1664"/>
|
||||
<location filename="../Window.cpp" line="1662"/>
|
||||
<source>Autofire Down</source>
|
||||
<translation>Autofeuer nach unten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Window.cpp" line="1669"/>
|
||||
<location filename="../Window.cpp" line="1667"/>
|
||||
<source>Autofire Left</source>
|
||||
<translation>Autofeuer links</translation>
|
||||
</message>
|
||||
|
@ -4639,11 +4639,6 @@ Game Boy Advance ist ein eingetragenes Warenzeichen von Nintendo Co., Ltd.</tran
|
|||
<source>High-resolution scale:</source>
|
||||
<translation>Hochauflösende Skalierung:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="986"/>
|
||||
<source>{size}</source>
|
||||
<translation>{size}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1011"/>
|
||||
<source>XQ GBA audio (experimental)</source>
|
||||
|
@ -4915,6 +4910,11 @@ wenn vorhanden</translation>
|
|||
<source>Autofire interval:</source>
|
||||
<translation>Autofeuer-Intervall:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="986"/>
|
||||
<source>(240×160)</source>
|
||||
<translation>(240×160)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1022"/>
|
||||
<source>GB BIOS file:</source>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue