static jboolean Emulator_loadROM(JNIEnv *env, jobject self, jstring jfile) { unloadROM(env, self); const char *file = env->GetStringUTFChars(jfile, NULL); jboolean rv = JNI_FALSE; currentGame = engine->loadRom(file); if (currentGame == NULL) goto error; gameSpeed = 1.0f; media->audioCreate(env, currentGame->soundRate, currentGame->soundBits, currentGame->soundChannels); memset(trackballEvents, 0, sizeof(trackballEvents)); resumeEmulator(); rv = JNI_TRUE; error: env->ReleaseStringUTFChars(jfile, file); return rv; }
static void Emulator_setRenderSurface(JNIEnv *env, jobject self, jobject surface, int width, int height) { pauseEmulator(); if (renderSurface != NULL) { delete[] screen16; screen16 = NULL; env->DeleteGlobalRef(jImage); jImage = NULL; env->DeleteGlobalRef(renderSurface); renderSurface = NULL; } if (surface != NULL) { surfaceWidth = width; surfaceHeight = height; screen16 = new unsigned short[width * height]; jImage = env->NewIntArray(width * height); jImage = (jintArray) env->NewGlobalRef(jImage); renderSurface = env->NewGlobalRef(surface); jclass cls = env->GetObjectClass(surface); jSendImageMethod = env->GetMethodID(cls, "onImageUpdate", "([I)V"); resumeEmulator(); } }
static void Cheats_nativeRemove(JNIEnv *env, jobject self, jstring jcode) { const char *code = env->GetStringUTFChars(jcode, NULL); pauseEmulator(env, self); engine->removeCheat(code); resumeEmulator(); env->ReleaseStringUTFChars(jcode, code); }
static jboolean Emulator_loadState(JNIEnv *env, jobject self, jstring jfile) { const char *file = env->GetStringUTFChars(jfile, NULL); pauseEmulator(); jboolean rv = engine->loadState(file); resumeEmulator(); env->ReleaseStringUTFChars(jfile, file); return rv; }
static jboolean Cheats_nativeAdd(JNIEnv *env, jobject self, jstring jcode) { const char *code = env->GetStringUTFChars(jcode, NULL); pauseEmulator(env, self); jboolean rv = engine->addCheat(code); resumeEmulator(); env->ReleaseStringUTFChars(jcode, code); return rv; }
static void Emulator_setSurfaceRegion(JNIEnv *env, jobject self, int x, int y, int w, int h) { pauseEmulator(env, self); media->setSurfaceRegion(env, x, y, w, h); surfaceReady = true; resumeEmulator(); }
static void Emulator_setFrameUpdateListener(JNIEnv *env, jobject self, jobject listener) { pauseEmulator(env, self); if (jFrameUpdateListener != NULL) env->DeleteGlobalRef(jFrameUpdateListener); jFrameUpdateListener = env->NewGlobalRef(listener); resumeEmulator(); }
static void Emulator_getScreenshot(JNIEnv *env, jobject self, jobject jbuffer) { pauseEmulator(env, self); EmuEngine::Surface surface; surface.bits = env->GetDirectBufferAddress(jbuffer); surface.w = currentGame->videoWidth; surface.h = currentGame->videoHeight; surface.bpr = surface.w * 2; engine->renderFrame(surface); resumeEmulator(); }
static jboolean Emulator_loadROM(JNIEnv *env, jobject self, jstring jfile) { unloadROM(); const char *file = env->GetStringUTFChars(jfile, NULL); jboolean rv = JNI_FALSE; currentGame = engine->loadRom(file); if (currentGame == NULL) goto error; if (audioPlayer != NULL) { audioPlayer->init( currentGame->soundRate, currentGame->soundBits, currentGame->soundChannels); } resumeEmulator(); rv = JNI_TRUE; error: env->ReleaseStringUTFChars(jfile, file); return rv; }
static void Emulator_resume(JNIEnv *env, jobject self) { resumeRequested = true; resumeEmulator(); }
static void Emulator_power(JNIEnv *env, jobject self) { pauseEmulator(); engine->power(); resumeEmulator(); }
static void Emulator_reset(JNIEnv *env, jobject self) { pauseEmulator(); engine->reset(); resumeEmulator(); }