# HG changeset patch # User Robert McIntyre # Date 1331109099 21600 # Node ID 9d0ec26144431be3382e1f40ee1f70ef10513791 # Parent ee70875e0d3ebf829b674d742dc9afbc9c30a9ad enabled stepping from clojure diff -r ee70875e0d3e -r 9d0ec2614443 java/src/com/aurellem/gb/Gb.java --- a/java/src/com/aurellem/gb/Gb.java Wed Mar 07 02:12:59 2012 -0600 +++ b/java/src/com/aurellem/gb/Gb.java Wed Mar 07 02:31:39 2012 -0600 @@ -26,5 +26,8 @@ } + public static native void step(); + + public static native void shutdown(); } diff -r ee70875e0d3e -r 9d0ec2614443 src/clojure/clojure.cpp --- a/src/clojure/clojure.cpp Wed Mar 07 02:12:59 2012 -0600 +++ b/src/clojure/clojure.cpp Wed Mar 07 02:31:39 2012 -0600 @@ -37,3 +37,24 @@ runVBA(2, arguments); } +/* + * Class: com_aurellem_gb_Gb + * Method: step + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_step +(JNIEnv *env, jclass clazz){ + step(); +} + +/* + * Class: com_aurellem_gb_Gb + * Method: shutdown + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_aurellem_gb_Gb_shutdown +(JNIEnv *env, jclass clazz){ + shutdown(); +} + + diff -r ee70875e0d3e -r 9d0ec2614443 src/sdl/Drive.h --- a/src/sdl/Drive.h Wed Mar 07 02:12:59 2012 -0600 +++ b/src/sdl/Drive.h Wed Mar 07 02:31:39 2012 -0600 @@ -1,2 +1,5 @@ int runVBA(int, char**); +void step(); + +void shutdown(); diff -r ee70875e0d3e -r 9d0ec2614443 src/sdl/SDL.cpp --- a/src/sdl/SDL.cpp Wed Mar 07 02:12:59 2012 -0600 +++ b/src/sdl/SDL.cpp Wed Mar 07 02:31:39 2012 -0600 @@ -2043,6 +2043,60 @@ renderedFrames = 0; } + +void shutdown () { +fprintf(stderr,"Shutting down\n"); + remoteCleanUp(); + soundShutdown(); + + if(gbRom != NULL || rom != NULL) { + sdlWriteBattery(); + theEmulator.emuCleanUp(); + } + + if(delta) { + free(delta); + delta = NULL; + } + + SDL_Quit(); +} + + +void step () { + if(!paused && active) { + if(debugger && theEmulator.emuHasDebugger) + dbgMain(); + else { + //printf("RLM: emulator main\n"); + theEmulator.emuMain(theEmulator.emuCount); + //printf("RLM: emulator main called\n"); + if(rewindSaveNeeded && rewindMemory && theEmulator.emuWriteMemState) { + rewindCount++; + if(rewindCount > 8) + rewindCount = 8; + if(theEmulator.emuWriteMemState && + theEmulator.emuWriteMemState(&rewindMemory[rewindPos*REWIND_SIZE], + REWIND_SIZE)) { + rewindPos = ++rewindPos & 7; + if(rewindCount == 8) + rewindTopPos = ++rewindTopPos & 7; + } + } + + rewindSaveNeeded = false; + } + } else { + SDL_Delay(500); + } + sdlPollEvents(); + if(mouseCounter) { + mouseCounter--; + if(mouseCounter == 0) + SDL_ShowCursor(SDL_DISABLE); + } +} + int main(int argc, char **argv) { fprintf(stderr, "VisualBoyAdvance version %s [SDL]\n", PACKAGE_VERSION); @@ -2651,57 +2705,7 @@ fprintf (stderr, "I got a filename OMG!\nCalling VBAMovieOpen...\n"); VBAMovieOpen(moviefile, true); } - - while(emulating) { - if(!paused && active) { - if(debugger && theEmulator.emuHasDebugger) - dbgMain(); - else { - //printf("RLM: emulator main\n"); - theEmulator.emuMain(theEmulator.emuCount); - //printf("RLM: emulator main called\n"); - if(rewindSaveNeeded && rewindMemory && theEmulator.emuWriteMemState) { - rewindCount++; - if(rewindCount > 8) - rewindCount = 8; - if(theEmulator.emuWriteMemState && - theEmulator.emuWriteMemState(&rewindMemory[rewindPos*REWIND_SIZE], - REWIND_SIZE)) { - rewindPos = ++rewindPos & 7; - if(rewindCount == 8) - rewindTopPos = ++rewindTopPos & 7; - } - } - - rewindSaveNeeded = false; - } - } else { - SDL_Delay(500); - } - sdlPollEvents(); - if(mouseCounter) { - mouseCounter--; - if(mouseCounter == 0) - SDL_ShowCursor(SDL_DISABLE); - } - } - - emulating = 0; - fprintf(stderr,"Shutting down\n"); - remoteCleanUp(); - soundShutdown(); - - if(gbRom != NULL || rom != NULL) { - sdlWriteBattery(); - theEmulator.emuCleanUp(); - } - - if(delta) { - free(delta); - delta = NULL; - } - - SDL_Quit(); + step(); return 0; } @@ -2711,6 +2715,11 @@ } + + + + + void systemMessage(int num, const char *msg, ...) { char buffer[2048];