GBA BIOS: Fix BIOS decompression routines with invalid source addresses

This commit is contained in:
Jeffrey Pfau 2015-03-06 22:18:27 -08:00
parent e61d413d69
commit 826569fdf7
2 changed files with 5 additions and 0 deletions

View File

@ -47,6 +47,7 @@ Bugfixes:
- Qt: Fix patch loading while a game is running - Qt: Fix patch loading while a game is running
- Util: Fix sockets on Windows - Util: Fix sockets on Windows
- Qt: Fix crash when loading a game after stopping GDB server - Qt: Fix crash when loading a game after stopping GDB server
- GBA BIOS: Fix BIOS decompression routines with invalid source addresses
Misc: Misc:
- GBA Audio: Change internal audio sample buffer from 32-bit to 16-bit samples - GBA Audio: Change internal audio sample buffer from 32-bit to 16-bit samples
- GBA Memory: Simplify memory API and use fixed bus width - GBA Memory: Simplify memory API and use fixed bus width

View File

@ -233,6 +233,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) {
case 0x12: case 0x12:
if (cpu->gprs[0] < BASE_WORKING_RAM) { if (cpu->gprs[0] < BASE_WORKING_RAM) {
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad LZ77 source"); GBALog(gba, GBA_LOG_GAME_ERROR, "Bad LZ77 source");
break;
} }
switch (cpu->gprs[1] >> BASE_OFFSET) { switch (cpu->gprs[1] >> BASE_OFFSET) {
default: default:
@ -247,6 +248,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) {
case 0x13: case 0x13:
if (cpu->gprs[0] < BASE_WORKING_RAM) { if (cpu->gprs[0] < BASE_WORKING_RAM) {
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad Huffman source"); GBALog(gba, GBA_LOG_GAME_ERROR, "Bad Huffman source");
break;
} }
switch (cpu->gprs[1] >> BASE_OFFSET) { switch (cpu->gprs[1] >> BASE_OFFSET) {
default: default:
@ -262,6 +264,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) {
case 0x15: case 0x15:
if (cpu->gprs[0] < BASE_WORKING_RAM) { if (cpu->gprs[0] < BASE_WORKING_RAM) {
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad RL source"); GBALog(gba, GBA_LOG_GAME_ERROR, "Bad RL source");
break;
} }
switch (cpu->gprs[1] >> BASE_OFFSET) { switch (cpu->gprs[1] >> BASE_OFFSET) {
default: default:
@ -278,6 +281,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) {
case 0x18: case 0x18:
if (cpu->gprs[0] < BASE_WORKING_RAM) { if (cpu->gprs[0] < BASE_WORKING_RAM) {
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad UnFilter source"); GBALog(gba, GBA_LOG_GAME_ERROR, "Bad UnFilter source");
break;
} }
switch (cpu->gprs[1] >> BASE_OFFSET) { switch (cpu->gprs[1] >> BASE_OFFSET) {
default: default: