jint Java_org_yabause_android_YabauseRunnable_init( JNIEnv* env, jobject obj, jobject yab ) { yabauseinit_struct yinit; int res; void * padbits; if( initEGLFunc() == -1 ) return -1; yabause = (*env)->NewGlobalRef(env, yab); memset(&yinit, 0, sizeof(yabauseinit_struct)); yinit.m68kcoretype = M68KCORE_C68K; yinit.percoretype = PERCORE_DUMMY; #ifdef SH2_DYNAREC yinit.sh2coretype = 2; #else yinit.sh2coretype = SH2CORE_DEFAULT; #endif yinit.vidcoretype = VIDCORE_SOFT; #ifdef HAVE_OPENSL yinit.sndcoretype = SNDCORE_OPENSL; #else yinit.sndcoretype = SNDCORE_AUDIOTRACK; #endif yinit.cdcoretype = CDCORE_ISO; yinit.carttype = GetCartridgeType(); yinit.regionid = 0; yinit.biospath = GetBiosPath(); yinit.cdpath = GetGamePath(); yinit.buppath = GetMemoryPath(); yinit.mpegpath = mpegpath; yinit.cartpath = GetCartridgePath(); yinit.videoformattype = VIDEOFORMATTYPE_NTSC; yinit.frameskip = 0; yinit.skip_load = 0; res = YabauseInit(&yinit); OSDChangeCore(OSDCORE_SOFT); PerPortReset(); padbits = PerPadAdd(&PORTDATA1); PerSetKey(PERPAD_UP, PERPAD_UP, padbits); PerSetKey(PERPAD_RIGHT, PERPAD_RIGHT, padbits); PerSetKey(PERPAD_DOWN, PERPAD_DOWN, padbits); PerSetKey(PERPAD_LEFT, PERPAD_LEFT, padbits); PerSetKey(PERPAD_START, PERPAD_START, padbits); PerSetKey(PERPAD_A, PERPAD_A, padbits); PerSetKey(PERPAD_B, PERPAD_B, padbits); PerSetKey(PERPAD_C, PERPAD_C, padbits); PerSetKey(PERPAD_X, PERPAD_X, padbits); PerSetKey(PERPAD_Y, PERPAD_Y, padbits); PerSetKey(PERPAD_Z, PERPAD_Z, padbits); ScspSetFrameAccurate(1); return res; }
void YabauseThread::reloadControllers() { PerPortReset(); QtYabause::clearPadsBits(); Settings* settings = QtYabause::settings(); for ( uint port = 1; port < 3; port++ ) { settings->beginGroup( QString( "Input/Port/%1/Id" ).arg( port ) ); QStringList ids = settings->childGroups(); settings->endGroup(); ids.sort(); foreach ( const QString& id, ids ) { uint type = settings->value( QString( UIPortManager::mSettingsType ).arg( port ).arg( id ) ).toUInt(); switch ( type ) { case PERPAD: { PerPad_struct* padbits = PerPadAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList padKeys = settings->childKeys(); settings->endGroup(); padKeys.sort(); foreach ( const QString& padKey, padKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( padKey ) ).toString(); PerSetKey( key.toUInt(), padKey.toUInt(), padbits ); } break; } case PERMOUSE: QtYabause::mainWindow()->appendLog( "Mouse controller type is not yet supported" ); break; default: QtYabause::mainWindow()->appendLog( "Invalid controller type" ); break; } } }
int PERLIBRETROInit(void) { void *controller; uint32_t i, j; PortData_struct* portdata = NULL; //1 multitap + 1 peripherial players = 7; if(!multitap[0] && !multitap[1]) players = 2; else if(multitap[0] && multitap[1]) players = 12; PerPortReset(); for(i = 0; i < players; i++) { //Ports can handle 6 peripherals, fill port 1 first. if((players > 2 && i < 6) || i == 0) portdata = &PORTDATA1; else portdata = &PORTDATA2; switch(pad_type[i]) { case RETRO_DEVICE_NONE: controller = NULL; break; case RETRO_DEVICE_ANALOG: controller = (void*)Per3DPadAdd(portdata); for(j = PERPAD_UP; j <= PERPAD_Z; j++) PerSetKey((i << 8) + j, j, controller); for(j = PERANALOG_AXIS1; j <= PERANALOG_AXIS7; j++) PerSetKey((i << 8) + j, j, controller); break; case RETRO_DEVICE_JOYPAD: default: controller = (void*)PerPadAdd(portdata); for(j = PERPAD_UP; j <= PERPAD_Z; j++) PerSetKey((i << 8) + j, j, controller); break; } } return 0; }
void LoadDefaultPort1A(void) { porttype[0] = 1; porttype[1] = 0; pad[0] = PerPadAdd(&PORTDATA1); PerSetKey(DIK_UP, PERPAD_UP, pad[0]); PerSetKey(DIK_DOWN, PERPAD_DOWN, pad[0]); PerSetKey(DIK_LEFT, PERPAD_LEFT, pad[0]); PerSetKey(DIK_RIGHT, PERPAD_RIGHT, pad[0]); PerSetKey(DIK_K, PERPAD_A, pad[0]); PerSetKey(DIK_L, PERPAD_B, pad[0]); PerSetKey(DIK_M, PERPAD_C, pad[0]); PerSetKey(DIK_U, PERPAD_X, pad[0]); PerSetKey(DIK_I, PERPAD_Y, pad[0]); PerSetKey(DIK_O, PERPAD_Z, pad[0]); PerSetKey(DIK_X, PERPAD_LEFT_TRIGGER, pad[0]); PerSetKey(DIK_Z, PERPAD_RIGHT_TRIGGER, pad[0]); PerSetKey(DIK_J, PERPAD_START, pad[0]); }
void YabauseThread::reloadControllers() { PerPortReset(); QtYabause::clearPadsBits(); Settings* settings = QtYabause::settings(); for ( uint port = 1; port < 3; port++ ) { settings->beginGroup( QString( "Input/Port/%1/Id" ).arg( port ) ); QStringList ids = settings->childGroups(); settings->endGroup(); ids.sort(); foreach ( const QString& id, ids ) { uint type = settings->value( QString( UIPortManager::mSettingsType ).arg( port ).arg( id ) ).toUInt(); switch ( type ) { case PERPAD: { PerPad_struct* padbits = PerPadAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList padKeys = settings->childKeys(); settings->endGroup(); padKeys.sort(); foreach ( const QString& padKey, padKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( padKey ) ).toString(); PerSetKey( key.toUInt(), padKey.toUInt(), padbits ); } break; } case PERWHEEL: QtYabause::mainWindow()->appendLog( "Wheel controller type is not yet supported" ); break; case PER3DPAD: { PerAnalog_struct* analogbits = Per3DPadAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList analogKeys = settings->childKeys(); settings->endGroup(); analogKeys.sort(); foreach ( const QString& analogKey, analogKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( analogKey ) ).toString(); PerSetKey( key.toUInt(), analogKey.toUInt(), analogbits ); } break; } case PERGUN: QtYabause::mainWindow()->appendLog( "Gun controller type is not yet supported" ); break; case PERKEYBOARD: QtYabause::mainWindow()->appendLog( "Keyboard controller type is not yet supported" ); break; case PERMOUSE: { PerMouse_struct* mousebits = PerMouseAdd( port == 1 ? &PORTDATA1 : &PORTDATA2 ); settings->beginGroup( QString( "Input/Port/%1/Id/%2/Controller/%3/Key" ).arg( port ).arg( id ).arg( type ) ); QStringList mouseKeys = settings->childKeys(); settings->endGroup(); mouseKeys.sort(); foreach ( const QString& mouseKey, mouseKeys ) { const QString key = settings->value( QString( UIPortManager::mSettingsKey ).arg( port ).arg( id ).arg( type ).arg( mouseKey ) ).toString(); PerSetKey( key.toUInt(), mouseKey.toUInt(), mousebits ); } break; } case 0: // Unconnected break; default: QtYabause::mainWindow()->appendLog( "Invalid controller type" ); break; } } }
extern "C" __declspec(dllexport) int libyabause_init ( CDInterface *_CD, const char *biosfn, int usegl, int carttype, int quickload, int clocksync, int clockbase ) { usinggl = usegl; if (usegl) { //headless cores should not create GL contexts, but use the one from the invoking frontend #ifndef HEADLESS if(!StartGLContext()) return 0; #endif if(!LoadExtensions()) return 0; } FECD.DeInit = _CD->DeInit; FECD.GetStatus = _CD->GetStatus; FECD.Init = _CD->Init; FECD.ReadAheadFAD = _CD->ReadAheadFAD; FECD.ReadSectorFAD = _CD->ReadSectorFAD; FECD.ReadTOC = _CD->ReadTOC; // only overwrite a few SNDDummy functions memcpy(&FESND, &SNDDummy, sizeof(FESND)); FESND.id = 2; FESND.Name = "FESND"; FESND.GetAudioSpace = FESNDGetAudioSpace; FESND.UpdateAudio = FESNDUpdateAudio; yabauseinit_struct yinit; memset(&yinit, 0, sizeof(yabauseinit_struct)); yinit.percoretype = PERCORE_DUMMY; yinit.sh2coretype = SH2CORE_INTERPRETER; if (usegl) yinit.vidcoretype = VIDCORE_OGL; else yinit.vidcoretype = VIDCORE_SOFT; yinit.sndcoretype = 2; //SNDCORE_DUMMY; yinit.cdcoretype = 2; // CDCORE_ISO; //CDCORE_DUMMY; yinit.m68kcoretype = M68KCORE_C68K; yinit.cartpath = CART_NONE; yinit.regionid = REGION_AUTODETECT; yinit.biospath = biosfn; yinit.cdpath = "Saturnus"; //NULL; yinit.buppath = NULL; yinit.mpegpath = NULL; yinit.carttype = carttype; yinit.netlinksetting = NULL; yinit.videoformattype = VIDEOFORMATTYPE_NTSC; yabsys.usequickload = quickload; yinit.usethreads = 0; yinit.frameskip = 0; yinit.clocksync = clocksync; yinit.basetime = clockbase; // same format as return from time(); 0 to use time() if (usegl && !vdp2hookfcn) { // hook vdp2setresolution vdp2hookfcn = VIDOGL.Vdp2SetResolution; VIDOGL.Vdp2SetResolution = vdp2newhook; } if (YabauseInit(&yinit) != 0) return 0; SpeedThrottleDisable(); DisableAutoFrameSkip(); ScspSetFrameAccurate(1); OSDChangeCore(OSDCORE_DUMMY); ctrl1 = PerPadAdd(&PORTDATA1); ctrl2 = PerPadAdd(&PORTDATA2); return 1; }
int PERDCInit(void) { PerPortReset(); pad1 = PerPadAdd(&PORTDATA1); return 0; }