/* * Class: com_Revsoft_Wabbitemu_CalcInterface * Method: CreateRom * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT jint JNICALL Java_com_Revsoft_Wabbitemu_calc_CalcInterface_CreateRom (JNIEnv *env, jclass classObj, jstring jOsPath, jstring jBootPath, jstring jRomPath, jint model) { checkThread(); const char *osPath = env->GetStringUTFChars(jOsPath, JNI_FALSE); const char *bootPath = env->GetStringUTFChars(jBootPath, JNI_FALSE); const char *romPath = env->GetStringUTFChars(jRomPath, JNI_FALSE); //Do not allow more than one calc currently if (lpCalc) { calc_slot_free(lpCalc); } lpCalc = calc_slot_new(); calc_init_model(lpCalc, model, NULL); //slot stuff strcpy(lpCalc->rom_path, romPath); lpCalc->active = TRUE; lpCalc->model = (CalcModel) model; lpCalc->cpu.pio.model = model; FILE *file = fopen(bootPath, "rb"); if (file == NULL) { calc_slot_free(lpCalc); lpCalc = NULL; return -1; } writeboot(file, &lpCalc->mem_c, -1); fclose(file); remove(bootPath); TIFILE_t *tifile = importvar(osPath, FALSE); if (tifile == NULL) { calc_slot_free(lpCalc); lpCalc = NULL; return -2; } int link_error = forceload_os(&lpCalc->cpu, tifile); if (link_error != LERR_SUCCESS) { calc_slot_free(lpCalc); lpCalc = NULL; return -2; } calc_erase_certificate(lpCalc->mem_c.flash,lpCalc->mem_c.flash_size); calc_reset(lpCalc); //write the output from file MFILE *romfile = ExportRom((char *) romPath, lpCalc); if (romfile != NULL) { mclose(romfile); calc_slot_free(lpCalc); lpCalc = NULL; return 0; } calc_slot_free(lpCalc); lpCalc = NULL; return -3; }
/* * Class: com_Revsoft_Wabbitemu_CalcInterface * Method: SetCacheDir * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_Revsoft_Wabbitemu_calc_CalcInterface_Initialize (JNIEnv *env, jclass classObj, jstring filePath) { checkThread(); const char *path = env->GetStringUTFChars(filePath, JNI_FALSE); strcpy(cache_dir, path); lpCalc = calc_slot_new(); lpCalc->model = INVALID_MODEL; calc_register_event(lpCalc, ROM_LOAD_EVENT, &load_settings, NULL); for (int i = 0; i < 256; i++) { redPalette[i] = (0x9E * (256 - i)) / 255; bluePalette[i] = (0x88 * (256 - i)) / 255; greenPalette[i] = (0xAB * (256 - i)) / 255; } }
bool WabbitemuApp::OnInit() { wxImage::AddHandler(new wxPNGHandler); //stolen from the windows version ParseCommandLineArgs(); memset(frames, 0, sizeof(frames)); LPCALC lpCalc = calc_slot_new(); LoadSettings(lpCalc); WabbitemuFrame *frame; int result = rom_load(lpCalc, lpCalc->rom_path); if (result == TRUE) { frame = gui_frame(lpCalc); } else { calc_slot_free(lpCalc); BOOL loadedRom = FALSE; if (parsedArgs.num_rom_files > 0) { for (int i = 0; i < parsedArgs.num_rom_files; i++) { if (rom_load(lpCalc, parsedArgs.rom_files[i])) { gui_frame(lpCalc); loadedRom = TRUE; break; } } } if (!loadedRom) { bool success = DoRomWizard(); if (!success) { return FALSE; } } } LoadCommandlineFiles((INT_PTR) lpCalc, LoadToLPCALC); timer = new wxTimer(); timer->Connect(wxEVT_TIMER, (wxObjectEventFunction) &WabbitemuApp::OnTimer); timer->Start(TPF, false); return TRUE; }