diff --git a/NEWS b/NEWS index ed0c2ad1..e517a320 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,52 @@ +Version 1.8.0: +Core changes: +- added almost all AR V3 cheat codes (PokemonHacker) +- added prefetch emulation +- added full CBA support (verified for every CBA code type) +- added emulation for DMA interaction with reading from invalid address +- fixed CPU init for 256Mbit roms +- fixed HuffUnComp bug regarding tree size (SF #984608) +- fixed RTC support for day of the week (fixed at Sunday before) +- fixed loading of ELF multiboot files (thanks J.W.) +- fixed bug on CBA code type 5 +- fixed OBJWIN rendering bug when sprite wraps around (SF #1065447) +- fixed battery saving bug when save type equals to Flash or Sram +- fixed a compilation warning +- fixed BIOS ArcTan and ArcTan2 emulation (several bugs) +- fixed some instruction having incorrect cycles (caused SDL debugger to skip several instructions) +- fixed lq2x filter (was using hq2x code) +- fixed some bugs with IntrWait emulation +- fixed some timer bugs +- fixed memory timing when loading a save state (was using the timings before loading the state) +- fixed bug writing to IO register past 0x4000400 (no mirroring) +- initialize sram and flash memory to 0xff instead of 0x00 +- clean flash/sram on load/reload +- ignore 8-bit writes to OBJ and OAM memory +- major AR V1/2/3 support by PokemonHacker +- simplified GBA emulation loop (easier to understand and maintain) + +Windows: +- added dialog to edit game overrides +- added GPL link to Help menu +- fixed GB Disassemble crash when going to another address +- fixed a minor repaint bug when focus changed +- fixed problem displaying rom names that use & character +- fixed palette save name bug +- moved vsync code to where it should be +- moved common palette initialization and cleaned up rendering code to use it + +SDL versions: +- SDL debugger improvements adapted from VBA-H: + - break on change + - conditional breakpoints (ARM and THUMB) + - dump load and save (memory) + - edit register (exception of R15) + - disassemble to file + - save and load state from debugger + +Other: +- fixed some compilation issues (libpng, gtkmm) + Version 1.7.2: Core changes: - fixed bugs on ELF clean up diff --git a/README b/README index 83362e2a..091424ff 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Welcome to version 1.7.2 of VisualBoyAdvance [SDL]. +Welcome to version 1.8.0 of VisualBoyAdvance [SDL]. This is a GB/GBC/GBA emulator for Windows, Linux, MacOS X and BeOS. Features diff --git a/README-win.txt b/README-win.txt index 559edb8c..f43e53bc 100644 --- a/README-win.txt +++ b/README-win.txt @@ -1,4 +1,4 @@ -Welcome to VisualBoyAdvance version 1.7.2. +Welcome to VisualBoyAdvance version 1.8.0. Compiling the sources --------------------- diff --git a/VERSION b/VERSION index 07c515ea..058302d3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -VisualBoyAdvance 1.7.2 +VisualBoyAdvance 1.8.0 diff --git a/configure b/configure index 4c3bd9ef..fcb534a4 100755 --- a/configure +++ b/configure @@ -1705,7 +1705,7 @@ fi # Define the identity of the package. PACKAGE=VisualBoyAdvance - VERSION=1.7.2 + VERSION=1.8.0 cat >>confdefs.h <<_ACEOF @@ -7848,7 +7848,7 @@ fi done - GETTEXT_PACKAGE=vba-1.7.2 + GETTEXT_PACKAGE=vba-1.8.0 diff --git a/configure.in b/configure.in index 4151c468..9756b55c 100644 --- a/configure.in +++ b/configure.in @@ -16,7 +16,7 @@ case "$target" in ;; esac -AM_INIT_AUTOMAKE(VisualBoyAdvance, 1.7.2) +AM_INIT_AUTOMAKE(VisualBoyAdvance, 1.8.0) AC_ARG_ENABLE(c-core, AC_HELP_STRING([--enable-c-core],[enable C core (default is no on x86 targets)]), @@ -140,7 +140,7 @@ if test "x$enable_gtk" = xyes; then ALL_LINGUAS="fr" AM_GNU_GETTEXT(external) AC_CHECK_HEADERS(libintl.h) - GETTEXT_PACKAGE=vba-1.7.2 + GETTEXT_PACKAGE=vba-1.8.0 AC_SUBST(GETTEXT_PACKAGE) PKG_CHECK_MODULES(GTKMM, gtkmm-$gtk_version >= 2.0.0 libglademm-$gtk_version >= 2.1.0) diff --git a/src/sdl/TestEmu.cpp b/src/sdl/TestEmu.cpp index 8b475f36..00a5fd3a 100644 --- a/src/sdl/TestEmu.cpp +++ b/src/sdl/TestEmu.cpp @@ -352,6 +352,38 @@ void systemSetTitle(const char *title) { } +void sdlWriteState(int num) +{ + char stateName[2048]; + + if(saveDir[0]) + sprintf(stateName, "%s/%s%d.sgm", saveDir, sdlGetFilename(filename), + num+1); + else + sprintf(stateName,"%s%d.sgm", filename, num+1); + if(emulator.emuWriteState) + emulator.emuWriteState(stateName); + sprintf(stateName, "Wrote state %d", num+1); + systemScreenMessage(stateName); +} + +void sdlReadState(int num) +{ + char stateName[2048]; + + if(saveDir[0]) + sprintf(stateName, "%s/%s%d.sgm", saveDir, sdlGetFilename(filename), + num+1); + else + sprintf(stateName,"%s%d.sgm", filename, num+1); + + if(emulator.emuReadState) + emulator.emuReadState(stateName); + + sprintf(stateName, "Loaded state %d", num+1); + systemScreenMessage(stateName); +} + void systemScreenCapture(int a) { char buffer[2048]; diff --git a/src/sdl/debugger.cpp b/src/sdl/debugger.cpp index 9dd994a2..1515af3c 100644 --- a/src/sdl/debugger.cpp +++ b/src/sdl/debugger.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "GBA.h" #include "Port.h" @@ -73,54 +74,54 @@ struct DebuggerCommand { char *syntax; }; -void debuggerContinueAfterBreakpoint(); - -void debuggerHelp(int,char **); -void debuggerNext(int,char **); -void debuggerContinue(int, char **); -void debuggerRegisters(int, char **); -void debuggerBreak(int, char **); -void debuggerBreakDelete(int, char **); -void debuggerBreakList(int, char **); -void debuggerBreakArm(int, char **); -void debuggerBreakThumb(int, char **); -void debuggerBreakChange(int, char **); -void debuggerBreakChangeClear(int, char **); -void debuggerBreakWriteClear(int, char **); -void debuggerBreakWrite(int, char **); -void debuggerDebug(int, char **); -void debuggerDisassemble(int, char **); -void debuggerDisassembleArm(int, char **); -void debuggerDisassembleThumb(int, char **); -void debuggerEditByte(int, char **); -void debuggerEditHalfWord(int, char **); -void debuggerEditRegister(int, char **); -void debuggerEdit(int, char **); -void debuggerFileDisassemble(int, char **); -void debuggerFileDisassembleArm(int, char **); -void debuggerFileDisassembleThumb(int, char **); -void debuggerIo(int, char **); -void debuggerLocals(int, char **); -void debuggerMemoryByte(int, char **); -void debuggerMemoryHalfWord(int, char **); -void debuggerMemory(int, char **); -void debuggerPrint(int, char **); -void debuggerQuit(int, char **); -void debuggerSetRadix(int, char **); -void debuggerSymbols(int, char **); -void debuggerVerbose(int, char **); -void debuggerWhere(int, char **); - -void debuggerReadState(int, char **); -void debuggerWriteState(int, char **); -void debuggerDumpLoad(int, char**); -void debuggerDumpSave(int, char**); -void debuggerCondValidate(int n, char **args, int start); -bool debuggerCondEvaluate(int num); -void debuggerCondBreakThumb(int, char **); -void debuggerCondBreakArm(int, char **); - -DebuggerCommand debuggerCommands[] = { +static void debuggerContinueAfterBreakpoint(); + +static void debuggerHelp(int,char **); +static void debuggerNext(int,char **); +static void debuggerContinue(int, char **); +static void debuggerRegisters(int, char **); +static void debuggerBreak(int, char **); +static void debuggerBreakDelete(int, char **); +static void debuggerBreakList(int, char **); +static void debuggerBreakArm(int, char **); +static void debuggerBreakThumb(int, char **); +static void debuggerBreakChange(int, char **); +static void debuggerBreakChangeClear(int, char **); +static void debuggerBreakWriteClear(int, char **); +static void debuggerBreakWrite(int, char **); +static void debuggerDebug(int, char **); +static void debuggerDisassemble(int, char **); +static void debuggerDisassembleArm(int, char **); +static void debuggerDisassembleThumb(int, char **); +static void debuggerEditByte(int, char **); +static void debuggerEditHalfWord(int, char **); +static void debuggerEditRegister(int, char **); +static void debuggerEdit(int, char **); +static void debuggerFileDisassemble(int, char **); +static void debuggerFileDisassembleArm(int, char **); +static void debuggerFileDisassembleThumb(int, char **); +static void debuggerIo(int, char **); +static void debuggerLocals(int, char **); +static void debuggerMemoryByte(int, char **); +static void debuggerMemoryHalfWord(int, char **); +static void debuggerMemory(int, char **); +static void debuggerPrint(int, char **); +static void debuggerQuit(int, char **); +static void debuggerSetRadix(int, char **); +static void debuggerSymbols(int, char **); +static void debuggerVerbose(int, char **); +static void debuggerWhere(int, char **); + +static void debuggerReadState(int, char **); +static void debuggerWriteState(int, char **); +static void debuggerDumpLoad(int, char**); +static void debuggerDumpSave(int, char**); +static void debuggerCondValidate(int n, char **args, int start); +static bool debuggerCondEvaluate(int num); +static void debuggerCondBreakThumb(int, char **); +static void debuggerCondBreakArm(int, char **); + +static DebuggerCommand debuggerCommands[] = { { "?", debuggerHelp, "Show this help information. Type ? for command help", "[]" }, { "ba", debuggerBreakArm, "Add an ARM breakpoint", "
" }, { "bd", debuggerBreakDelete,"Delete a breakpoint", "" }, @@ -368,10 +369,10 @@ static char *debuggerPrintType(Type *t) return t->name; } -void debuggerPrintValueInternal(Function *, Type *, ELFBlock *, int, int, u32); -void debuggerPrintValueInternal(Function *f, Type *t, - int bitSize, int bitOffset, - u32 objLocation, LocationType type); +static void debuggerPrintValueInternal(Function *, Type *, ELFBlock *, int, int, u32); +static void debuggerPrintValueInternal(Function *f, Type *t, + int bitSize, int bitOffset, + u32 objLocation, LocationType type); static u32 debuggerGetValue(u32 location, LocationType type) { @@ -1860,7 +1861,7 @@ static void debuggerCondValidate(int n,char **args,int start) u32 value1=0; u32 value2=0; - char size=NULL; + char size=0; int j=1; if(n==6) { @@ -1911,7 +1912,7 @@ static void debuggerCondValidate(int n,char **args,int start) break; default: printf("Erroneous Condition\n"); - debuggerUsage((toupper(args[0][2])=='T') ? "cbt" : "cba"); + debuggerUsage((char *)((toupper(args[0][2])=='T') ? "cbt" : "cba")); return; } debuggerBreakpointList[i].ia1=true; @@ -2010,7 +2011,7 @@ static void debuggerCondValidate(int n,char **args,int start) break; default: printf("Erroneous Condition\n"); - debuggerUsage((toupper(args[0][2])=='T') ? "cbt" : "cba"); + debuggerUsage((char *)((toupper(args[0][2])=='T') ? "cbt" : "cba")); return; } break;