예제 #1
0
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;
}
예제 #2
0
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();
	}
}
예제 #3
0
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);
}
예제 #4
0
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;
}
예제 #5
0
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;
}
예제 #6
0
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();
}
예제 #7
0
static void
Emulator_setFrameUpdateListener(JNIEnv *env, jobject self, jobject listener)
{
	pauseEmulator(env, self);

	if (jFrameUpdateListener != NULL)
		env->DeleteGlobalRef(jFrameUpdateListener);
	jFrameUpdateListener = env->NewGlobalRef(listener);

	resumeEmulator();
}
예제 #8
0
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();
}
예제 #9
0
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;
}
예제 #10
0
static void Emulator_resume(JNIEnv *env, jobject self)
{
	resumeRequested = true;
	resumeEmulator();
}
예제 #11
0
static void Emulator_power(JNIEnv *env, jobject self)
{
	pauseEmulator();
	engine->power();
	resumeEmulator();
}
예제 #12
0
static void Emulator_reset(JNIEnv *env, jobject self)
{
	pauseEmulator();
	engine->reset();
	resumeEmulator();
}