GBA BIOS: Implement Diff8bitUnFilterVram

This commit is contained in:
Jeffrey Pfau 2015-01-07 21:43:21 -08:00
parent fb35a8b3f7
commit 600080ba0c
2 changed files with 18 additions and 12 deletions

View File

@ -14,7 +14,7 @@ Features:
- Support for games using the tilt sensor
- Remappable shortcuts for keyboard and gamepad
- Rewinding of emulation
- Implemented BIOS routines Diff8bitUnFilterWram, and Diff16bitUnFilter
- Implemented BIOS routines Diff8bitUnFilterWram, Diff8bitUnFilterVram, and Diff16bitUnFilter
Bugfixes:
- Qt: Fix issue with set frame sizes being the wrong height
- Qt: Fix emulator crashing when full screen if a game is not running

View File

@ -477,27 +477,33 @@ static void _unFilter(struct GBA* gba, int inwidth, int outwidth) {
uint16_t old = 0;
source += 4;
while (remaining > 0) {
uint16_t new;
if (inwidth == 1) {
halfword = cpu->memory.loadU8(cpu, source, 0);
new = cpu->memory.loadU8(cpu, source, 0);
} else {
halfword = cpu->memory.loadU16(cpu, source, 0);
new = cpu->memory.loadU16(cpu, source, 0);
}
halfword += old;
new += old;
if (outwidth > inwidth) {
GBALog(gba, GBA_LOG_STUB, "Unimplemented Diff8bitUnFilterVram");
} else {
if (outwidth == 1) {
halfword &= 0xFF;
cpu->memory.store8(cpu, dest, halfword, 0);
} else {
halfword >>= 8;
halfword |= (new << 8);
if (source & 1) {
cpu->memory.store16(cpu, dest, halfword, 0);
}
old = halfword;
dest += outwidth;
}
source += inwidth;
remaining -= outwidth;
}
} else if (outwidth == 1) {
cpu->memory.store8(cpu, dest, new, 0);
dest += outwidth;
remaining -= outwidth;
} else {
cpu->memory.store16(cpu, dest, new, 0);
dest += outwidth;
remaining -= outwidth;
}
old = new;
source += inwidth;
}
cpu->gprs[0] = source;
cpu->gprs[1] = dest;
}