Android: Do some work to try to get it to build

This commit is contained in:
zilmar 2022-06-06 19:49:44 +09:30
parent 68348d59f3
commit b557dcf187
51 changed files with 587 additions and 2873 deletions

View File

@ -68,9 +68,6 @@ public class AboutActivity extends AppCompatActivity
TextView about_text = (TextView)findViewById(R.id.about_text);
about_text.setText(Strings.GetString(LanguageStringID.ANDROID_ABOUT_TEXT));
TextView Project64_authors = (TextView)findViewById(R.id.Project64_authors);
Project64_authors.setText(Strings.GetString(LanguageStringID.ANDROID_ABOUT_PJ64_AUTHORS));
webView.loadData(Utility.readAsset("licence.htm", ""), "text/html", "UTF8");
}
@ -91,7 +88,7 @@ public class AboutActivity extends AppCompatActivity
m_title_clicks += 1;
if (m_title_clicks == 6)
{
NativeExports.SettingsSaveBool(SettingsID.UserInterface_BasicMode.getValue(), false);
NativeExports.SettingsSaveBool(SettingsID.UserInterface_BasicMode.toString(), false);
Toast.makeText(this, "Advanced Mode Enabled", Toast.LENGTH_SHORT).show();
}
}

View File

@ -8,17 +8,14 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import emu.project64.util.Strings;
import emu.project64.util.FileUtil;
import emu.project64.util.Utility;
import tv.ouya.console.api.OuyaFacade;
import android.annotation.SuppressLint;
import android.graphics.Point;
import android.os.Build;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.WindowManager;
@SuppressLint("NewApi")
@ -45,23 +42,15 @@ public class AndroidDevice
/** True if device is running Lollipop or later (21 - Android 5.0.x) */
public static final boolean IS_LOLLIPOP = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
/** True if device is an OUYA. */
public static final boolean IS_OUYA_HARDWARE = OuyaFacade.getInstance().isRunningOnOUYAHardware();
public final static String EXTERNAL_PUBLIC_DIRECTORY = Environment.getExternalStorageDirectory().getPath();
public final static String PACKAGE_DIRECTORY = EXTERNAL_PUBLIC_DIRECTORY + "/Android/data/" + AndroidDevice.class.getPackage().getName();
public static final boolean IS_ACTION_BAR_AVAILABLE = AndroidDevice.IS_HONEYCOMB && !AndroidDevice.IS_OUYA_HARDWARE;
public static final boolean IS_ACTION_BAR_AVAILABLE = AndroidDevice.IS_HONEYCOMB;
final static boolean isTv;
public final static int nativeWidth;
public final static int nativeHeight;
public static boolean MapVolumeKeys = false;
static
{
isTv = Project64Application.getAppContext().getPackageManager().hasSystemFeature("android.software.leanback");
DisplayMetrics metrics = Project64Application.getAppContext().getResources().getDisplayMetrics();
int _nativeWidth = metrics.widthPixels < metrics.heightPixels ? metrics.heightPixels : metrics.widthPixels;
int _nativeHeight = metrics.widthPixels < metrics.heightPixels ? metrics.widthPixels: metrics.heightPixels;
@ -83,29 +72,6 @@ public class AndroidDevice
nativeHeight = _nativeHeight;
}
public static boolean isAndroidTv()
{
return isTv;
}
public static List<Integer> getUnmappableKeyCodes ()
{
List<Integer> unmappables = new ArrayList<Integer>();
unmappables.add( KeyEvent.KEYCODE_MENU );
if( IS_HONEYCOMB )
{
// Back key is needed to show/hide the action bar in HC+
unmappables.add( KeyEvent.KEYCODE_BACK );
}
if( !MapVolumeKeys )
{
unmappables.add( KeyEvent.KEYCODE_VOLUME_UP );
unmappables.add( KeyEvent.KEYCODE_VOLUME_DOWN );
unmappables.add( KeyEvent.KEYCODE_VOLUME_MUTE );
}
return unmappables;
}
public static ArrayList<String> getStorageDirectories()
{
BufferedReader bufReader = null;

View File

@ -15,16 +15,13 @@ import java.util.regex.Pattern;
import emu.project64.R;
import emu.project64.dialog.ProgressDialog;
import emu.project64.game.GameActivity;
import emu.project64.game.GameActivityXperiaPlay;
import emu.project64.jni.LanguageStringID;
import emu.project64.jni.NativeExports;
import emu.project64.jni.SettingsID;
import emu.project64.jni.SystemEvent;
import emu.project64.jni.UISettingID;
import emu.project64.settings.GameSettingsActivity;
import emu.project64.settings.SettingsActivity;
import emu.project64.util.Strings;
import emu.project64.util.Utility;
import android.annotation.TargetApi;
import android.app.Activity;
import androidx.appcompat.app.AlertDialog;
@ -57,6 +54,7 @@ import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import androidx.appcompat.view.menu.MenuBuilder;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
@ -89,6 +87,7 @@ public class GalleryActivity extends AppCompatActivity
private static List<GalleryItem> mRecentItems = new ArrayList<GalleryItem>();
private static GalleryActivity mActiveGalleryActivity = null;
public static final int GAME_DIR_REQUEST_CODE = 1;
static final int RC_SETTINGS = 10002;
@Override
@ -114,7 +113,6 @@ public class GalleryActivity extends AppCompatActivity
super.onCreate( savedInstanceState );
mActiveGalleryActivity = this;
Log.d("GalleryActivity", "Starting setup.");
// Lay out the content
setContentView( R.layout.gallery_activity );
@ -142,39 +140,20 @@ public class GalleryActivity extends AppCompatActivity
Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
toolbar.setTitle( R.string.app_name );
setSupportActionBar( toolbar );
// Configure the navigation drawer
mDrawerLayout = (DrawerLayout) findViewById( R.id.drawerLayout );
mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, toolbar, 0, 0 );
mDrawerLayout.addDrawerListener( mDrawerToggle );
// Configure the list in the navigation drawer
mDrawerList = (MenuListView) findViewById( R.id.drawerNavigation );
mDrawerList.setMenuResource( R.menu.gallery_drawer );
// Handle menu item selections
mDrawerList.setOnClickListener( new MenuListView.OnClickListener()
{
@Override
public void onClick( MenuItem menuItem )
{
GalleryActivity.this.onOptionsItemSelected( menuItem );
}
});
UpdateLanguage();
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setHomeButtonEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
}
void UpdateLanguage()
void UpdateMenuLanguage(Menu menu)
{
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_settings, LanguageStringID.ANDROID_SETTINGS);
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_discord, LanguageStringID.ANDROID_DISCORD);
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_reportBug, LanguageStringID.ANDROID_REPORT_BUG);
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_review, LanguageStringID.ANDROID_REVIEW_PJ64);
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_support, LanguageStringID.ANDROID_SUPPORT_PJ64);
Strings.SetMenuTitle(mDrawerList.getMenu(), R.id.menuItem_about, LanguageStringID.ANDROID_ABOUT);
Strings.SetMenuTitle(menu, R.id.menuItem_GameDir, LanguageStringID.ANDROID_GAMEDIR);
Strings.SetMenuTitle(menu, R.id.menuItem_settings, LanguageStringID.ANDROID_SETTINGS);
Strings.SetMenuTitle(menu, R.id.menuItem_discord, LanguageStringID.ANDROID_DISCORD);
Strings.SetMenuTitle(menu, R.id.menuItem_about, LanguageStringID.ANDROID_ABOUT);
}
void alert(String message)
{
AlertDialog.Builder bld = new AlertDialog.Builder(this);
@ -184,28 +163,30 @@ public class GalleryActivity extends AppCompatActivity
bld.create().show();
}
@Override
protected void onPostCreate( Bundle savedInstanceState )
{
super.onPostCreate( savedInstanceState );
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged( Configuration newConfig )
{
super.onConfigurationChanged( newConfig );
mDrawerToggle.onConfigurationChanged( newConfig );
}
@Override
public boolean onCreateOptionsMenu( Menu menu )
{
getMenuInflater().inflate( R.menu.gallery_activity, menu );
Strings.SetMenuTitle(menu, R.id.menuItem_gameDir, LanguageStringID.ANDROID_GAMEDIR);
return super.onCreateOptionsMenu( menu );
super.onCreateOptionsMenu( menu );
getMenuInflater().inflate( R.menu.gallery, menu );
UpdateMenuLanguage(menu);
if(menu instanceof MenuBuilder)
{
MenuBuilder menuBuilder = (MenuBuilder) menu;
menuBuilder.setOptionalIconsVisible(true);
}
return true;
}
@Override
@ -222,26 +203,15 @@ public class GalleryActivity extends AppCompatActivity
startActivity( SettingsIntent );
return true;
case R.id.menuItem_discord:
Intent ForumIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://discord.gg/sbYbnda"));
startActivity(ForumIntent);
return true;
case R.id.menuItem_reportBug:
Intent IssueIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/project64/project64/issues"));
startActivity(IssueIntent);
return true;
case R.id.menuItem_review:
ShowReviewOptions();
return true;
case R.id.menuItem_support:
ShowPaymentOptions();
Intent DiscordIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://discord.gg/Cg3zquF"));
startActivity(DiscordIntent);
return true;
case R.id.menuItem_about:
Intent AboutIntent = new Intent(this, AboutActivity.class);
startActivity( AboutIntent );
return true;
default:
return super.onOptionsItemSelected( item );
}
return super.onOptionsItemSelected( item );
}
private boolean HasAutoSave(File GameSaveDir)
@ -280,8 +250,8 @@ public class GalleryActivity extends AppCompatActivity
private void StartGameMenu (boolean ShowSettings)
{
File InstantSaveDir = new File(NativeExports.SettingsLoadString(SettingsID.Directory_InstantSave.getValue()));
final File GameSaveDir = new File(InstantSaveDir,NativeExports.SettingsLoadString(SettingsID.Game_UniqueSaveDir.getValue()));
File InstantSaveDir = new File(NativeExports.SettingsLoadString(SettingsID.Directory_InstantSave.toString()));
final File GameSaveDir = new File(InstantSaveDir,NativeExports.SettingsLoadString(SettingsID.Game_UniqueSaveDir.toString()));
class Item
{
@ -303,7 +273,7 @@ public class GalleryActivity extends AppCompatActivity
menuItemLst.add(new Item("Resume from Native save", R.drawable.ic_controller));
menuItemLst.add(new Item("Resume from Auto save", R.drawable.ic_play));
menuItemLst.add(new Item("Restart", R.drawable.ic_refresh));
if (ShowSettings && !NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.getValue()))
if (ShowSettings && !NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.toString()))
{
menuItemLst.add(new Item("Settings", R.drawable.ic_sliders));
}
@ -370,7 +340,7 @@ public class GalleryActivity extends AppCompatActivity
final Context finalContext = this;
AlertDialog.Builder GameMenu = new AlertDialog.Builder(finalContext);
GameMenu.setTitle(NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.getValue()));
GameMenu.setTitle(NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.toString()));
GameMenu.setAdapter(adapter, new DialogInterface.OnClickListener()
{
@Override
@ -420,8 +390,8 @@ public class GalleryActivity extends AppCompatActivity
public void onGalleryItemClick( GalleryItem item )
{
NativeExports.LoadGame(item.romFile.getAbsolutePath());
File InstantSaveDir = new File(NativeExports.SettingsLoadString(SettingsID.Directory_InstantSave.getValue()));
File GameSaveDir = new File(InstantSaveDir,NativeExports.SettingsLoadString(SettingsID.Game_UniqueSaveDir.getValue()));
File InstantSaveDir = new File(NativeExports.SettingsLoadString(SettingsID.Directory_InstantSave.toString()));
File GameSaveDir = new File(InstantSaveDir,NativeExports.SettingsLoadString(SettingsID.Game_UniqueSaveDir.toString()));
Boolean ResumeGame = HasAutoSave(GameSaveDir);
launchGameActivity(ResumeGame);
}
@ -438,11 +408,6 @@ public class GalleryActivity extends AppCompatActivity
{
Log.d("GalleryActivity", "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (requestCode == RC_SETTINGS)
{
StartGameMenu(true);
return;
}
// Check which request we're responding to
if (requestCode == GAME_DIR_REQUEST_CODE)
{
@ -544,18 +509,14 @@ public class GalleryActivity extends AppCompatActivity
}
// Enables or disables the "please wait" screen.
public void launchGameActivity(boolean ResumeGame)
{
if (ResumeGame)
{
NativeExports.SettingsSaveDword(SettingsID.Game_CurrentSaveState.getValue(), 0);
NativeExports.SettingsSaveDword(SettingsID.Game_CurrentSaveState.toString(), 0);
}
NativeExports.SettingsSaveBool(SettingsID.Game_LoadSaveAtStart.getValue(), ResumeGame);
// Launch the game activity
boolean isXperiaPlay = false;
Intent intent = isXperiaPlay ? new Intent( this, GameActivityXperiaPlay.class ) : new Intent( this, GameActivity.class );
NativeExports.SettingsSaveBool(SettingsID.Game_LoadSaveAtStart.toString(), ResumeGame);
Intent intent = new Intent( this, GameActivity.class );
this.startActivity( intent );
}
@ -611,9 +572,9 @@ public class GalleryActivity extends AppCompatActivity
{
mRecentItems = new ArrayList<GalleryItem>();
for (int i = 0, n = NativeExports.UISettingsLoadDword(UISettingID.File_RecentGameFileCount.getValue()); i < n; i++)
for (int i = 0, n = NativeExports.SettingsLoadDword(UISettingID.FileRecentGameFileCount.toString()); i < n; i++)
{
String RecentFile = NativeExports.UISettingsLoadStringIndex(UISettingID.File_RecentGameFileIndex.getValue(), i);
String RecentFile = NativeExports.SettingsLoadStringIndex(UISettingID.FileRecentGameFileIndex.toString(), i);
if (RecentFile.length() == 0)
{
break;

View File

@ -2,11 +2,12 @@ package emu.project64;
import emu.project64.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.support.v7.view.menu.MenuBuilder;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@ -18,6 +19,7 @@ import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import androidx.appcompat.view.menu.MenuBuilder;
/* ExpandableListView which stores its data set as a Menu hierarchy */
@ -71,38 +73,39 @@ public class MenuListView extends ExpandableListView
{
reload();
}
} );
});
setOnGroupClickListener( new OnGroupClickListener()
{
@Override
public boolean onGroupClick( ExpandableListView parent, View view, int groupPosition,
long itemId )
public boolean onGroupClick( ExpandableListView parent, View view, int groupPosition, long itemId )
{
MenuItem menuItem = mListData.getItem( groupPosition );
SubMenu submenu = menuItem.getSubMenu();
if( submenu == null )
{
if( mListener != null )
{
mListener.onClick( menuItem );
}
}
return false;
}
} );
});
setOnChildClickListener( new OnChildClickListener()
{
@Override
public boolean onChildClick( ExpandableListView parent, View view, int groupPosition,
int childPosition, long itemId )
public boolean onChildClick( ExpandableListView parent, View view, int groupPosition, int childPosition, long itemId )
{
MenuItem menuItem = mListData.getItem( groupPosition ).getSubMenu() .getItem( childPosition );
if (mListener != null)
{
MenuItem menuItem = mListData.getItem( groupPosition ).getSubMenu()
.getItem( childPosition );
if( mListener != null )
mListener.onClick( menuItem );
}
return false;
}
} );
});
}
public Menu getMenu()
@ -162,14 +165,14 @@ public class MenuListView extends ExpandableListView
}
@Override
public View getChildView( int groupPosition, final int childPosition, boolean isLastChild,
View convertView, ViewGroup parent )
public View getChildView( int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent )
{
LayoutInflater inflater = (LayoutInflater) mListView.getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
LayoutInflater inflater = (LayoutInflater) mListView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View view = convertView;
if( view == null )
{
view = inflater.inflate( R.layout.list_item_menu, null );
}
MenuItem item = getChild( groupPosition, childPosition );
if( item != null )
@ -187,11 +190,9 @@ public class MenuListView extends ExpandableListView
// Indent child views by 15 points
DisplayMetrics metrics = new DisplayMetrics();
( (Activity) mListView.getContext() ).getWindowManager().getDefaultDisplay()
.getMetrics( metrics );
( (Activity) mListView.getContext() ).getWindowManager().getDefaultDisplay().getMetrics( metrics );
view.setPadding( (int) ( 15 * metrics.density ), view.getPaddingTop(),
view.getPaddingRight(), view.getPaddingBottom() );
view.setPadding((int)(15 * metrics.density), view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom() );
if( !item.isCheckable() )
indicator.setImageResource( 0x0 );
@ -222,25 +223,23 @@ public class MenuListView extends ExpandableListView
}
@Override
public View getGroupView( int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent )
public View getGroupView( int groupPosition, boolean isExpanded, View convertView, ViewGroup parent )
{
LayoutInflater inflater = (LayoutInflater) mListView.getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
LayoutInflater inflater = (LayoutInflater) mListView.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE );
View view = convertView;
if( view == null )
{
view = inflater.inflate( R.layout.list_item_menu, null );
}
MenuItem item = getGroup( groupPosition );
if( item != null )
{
TextView text1 = (TextView) view.findViewById( R.id.text1 );
TextView text2 = (TextView) view.findViewById( R.id.text2 );
ImageView icon = (ImageView) view.findViewById( R.id.icon );
ImageView indicator = (ImageView) view.findViewById( R.id.indicator );
text1.setText( item.getTitle() );
text2.setVisibility( View.GONE );
text1.setText(item.getTitle());
icon.setImageDrawable( item.getIcon() );
if( item.isChecked() )

View File

@ -2,8 +2,6 @@ package emu.project64;
import android.content.Context;
import android.content.res.Resources;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
public class Project64Application extends android.app.Application
{
@ -14,33 +12,15 @@ public class Project64Application extends android.app.Application
{
super.onCreate();
m_instance = this;
}
/**
* @return the main context of the Application
*/
public static Context getAppContext()
{
return m_instance;
}
/**
* @return the main resources from the Application
*/
public static Resources getAppResources()
{
return m_instance.getResources();
}
private Tracker tracker;
synchronized public Tracker getDefaultTracker()
{
if (tracker == null)
{
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
tracker = analytics.newTracker(R.xml.analytics);
}
return tracker;
}
}

View File

@ -14,10 +14,10 @@ import android.content.Intent;
import android.content.Context;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
@ -28,6 +28,7 @@ import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class ScanRomsActivity extends AppCompatActivity implements OnItemClickListener
{
@ -49,9 +50,9 @@ public class ScanRomsActivity extends AppCompatActivity implements OnItemClickLi
{
super.onCreate(savedInstanceState);
setContentView(R.layout.scan_roms_activity);
if (NativeExports.SettingsLoadBool(SettingsID.RomList_GameDirUseSelected.getValue()))
if (NativeExports.SettingsLoadBool(SettingsID.RomList_GameDirUseSelected.toString()))
{
File CurrentPath = new File(NativeExports.SettingsLoadString(SettingsID.RomList_GameDir.getValue()));
File CurrentPath = new File(NativeExports.SettingsLoadString(SettingsID.RomList_GameDir.toString()));
if (CurrentPath.exists() && CurrentPath.isDirectory())
{
mCurrentPath = CurrentPath;
@ -62,7 +63,7 @@ public class ScanRomsActivity extends AppCompatActivity implements OnItemClickLi
// Set check box state
mScanRecursively = (CheckBox) findViewById( R.id.ScanRecursively );
mScanRecursively.setChecked( NativeExports.SettingsLoadBool(SettingsID.RomList_GameDirRecursive.getValue()) );
mScanRecursively.setChecked( NativeExports.SettingsLoadBool(SettingsID.RomList_GameDirRecursive.toString()) );
mScanRecursively.setText(Strings.GetString(LanguageStringID.ANDROID_INCLUDE_SUBDIRECTORIES));
mCancelButton = (Button) findViewById( R.id.buttonCancel );

View File

@ -125,7 +125,7 @@ public class SplashActivity extends AppCompatActivity implements ExtractAssetsLi
Log.i( "Splash", "extractAssetsTaskLauncher - startup");
final Handler handler = new Handler();
if (!mAppInit || NativeExports.UISettingsLoadDword(UISettingID.Asserts_Version.getValue()) != ASSET_VERSION)
if (!mAppInit || NativeExports.SettingsLoadDword(UISettingID.AssertsVersion.toString()) != NativeExports.SettingsLoadDword(UISettingID.BuildVersion.toString()))
{
handler.post( extractAssetsTaskLauncher );
}
@ -207,35 +207,35 @@ public class SplashActivity extends AppCompatActivity implements ExtractAssetsLi
}
String SyncDir = this.getFilesDir().getParentFile().getAbsolutePath() + "/lib-sync/";
NativeExports.appInit(AndroidDevice.PACKAGE_DIRECTORY);
NativeExports.SettingsSaveString(SettingsID.Directory_PluginSelected.getValue(), LibsDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_PluginUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_PluginSyncSelected.getValue(), SyncDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_PluginSyncUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_PluginSelected.toString(), LibsDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_PluginUseSelected.toString(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_PluginSyncSelected.toString(), SyncDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_PluginSyncUseSelected.toString(), true);
String SaveDir = AndroidDevice.EXTERNAL_PUBLIC_DIRECTORY + "/Project64/Save";
if (!NativeExports.IsSettingSet(SettingsID.Directory_NativeSave.getValue()))
if (!NativeExports.IsSettingSet(SettingsID.Directory_NativeSave.toString()))
{
NativeExports.SettingsSaveString(SettingsID.Directory_NativeSaveSelected.getValue(), SaveDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_NativeSaveUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_NativeSaveSelected.toString(), SaveDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_NativeSaveUseSelected.toString(), true);
}
if (!NativeExports.IsSettingSet(SettingsID.Directory_InstantSave.getValue()))
if (!NativeExports.IsSettingSet(SettingsID.Directory_InstantSave.toString()))
{
NativeExports.SettingsSaveString(SettingsID.Directory_InstantSaveSelected.getValue(), SaveDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_InstantSaveUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_InstantSaveSelected.toString(), SaveDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_InstantSaveUseSelected.toString(), true);
}
if (!NativeExports.IsSettingSet(SettingsID.Directory_Log.getValue()))
if (!NativeExports.IsSettingSet(SettingsID.Directory_Log.toString()))
{
String LogDir = AndroidDevice.EXTERNAL_PUBLIC_DIRECTORY + "/Project64/Logs";
NativeExports.SettingsSaveString(SettingsID.Directory_LogSelected.getValue(), LogDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_LogUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_LogSelected.toString(), LogDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_LogUseSelected.toString(), true);
}
if (!NativeExports.IsSettingSet(SettingsID.Directory_SnapShot.getValue()))
if (!NativeExports.IsSettingSet(SettingsID.Directory_SnapShot.toString()))
{
String SnapShotDir = AndroidDevice.EXTERNAL_PUBLIC_DIRECTORY + "/Project64/Screenshots";
NativeExports.SettingsSaveString(SettingsID.Directory_SnapShotSelected.getValue(), SnapShotDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_SnapShotUseSelected.getValue(), true);
NativeExports.SettingsSaveString(SettingsID.Directory_SnapShotSelected.toString(), SnapShotDir);
NativeExports.SettingsSaveBool(SettingsID.Directory_SnapShotUseSelected.toString(), true);
}
mAppInit = true;
}
@ -311,7 +311,7 @@ public class SplashActivity extends AppCompatActivity implements ExtractAssetsLi
InitProject64();
}
mTextView.setText( R.string.assetExtractor_finished );
NativeExports.UISettingsSaveDword(UISettingID.Asserts_Version.getValue(), ASSET_VERSION);
NativeExports.SettingsSaveDword(UISettingID.AssertsVersion.toString(), NativeExports.SettingsLoadDword(UISettingID.BuildVersion.toString()));
Intent intent = new Intent( this, GalleryActivity.class );
this.startActivity( intent );
finish();

View File

@ -1,7 +0,0 @@
package emu.project64.compat;
import android.preference.PreferenceActivity;
public class AppCompatPreferenceActivity extends PreferenceActivity
{
}

View File

@ -1,9 +0,0 @@
package emu.project64.game;
import android.annotation.TargetApi;
import android.app.NativeActivity;
@TargetApi( 9 )
public class GameActivityXperiaPlay extends NativeActivity
{
}

View File

@ -72,7 +72,6 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
private Controller mMogaController;
// Internal flags
private final boolean mIsXperiaPlay;
private boolean mStarted = false;
private boolean mStopped = false;
@ -81,14 +80,13 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
private boolean mIsResumed = false; // true if the activity is resumed
private boolean mIsSurface = false; // true if the surface is available
private float mtouchscreenScale = ((float)NativeExports.UISettingsLoadDword(UISettingID.TouchScreen_ButtonScale.getValue())) / 100.0f;
private String mlayout = NativeExports.UISettingsLoadString(UISettingID.TouchScreen_Layout.getValue());
private float mtouchscreenScale = ((float)NativeExports.SettingsLoadDword(UISettingID.TouchScreenButtonScale.toString())) / 100.0f;
private String mlayout = NativeExports.SettingsLoadString(UISettingID.TouchScreenLayout.toString());
public GameLifecycleHandler(Activity activity)
{
mActivity = activity;
mControllers = new ArrayList<AbstractController>();
mIsXperiaPlay = !(activity instanceof GameActivity);
mMogaController = Controller.getInstance(mActivity);
}
@ -97,7 +95,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
{
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onCreateBegin");
Log.i("GameLifecycleHandler", "onCreateBegin - Start");
}
// Initialize MOGA controller API
// TODO: Remove hack after MOGA SDK is fixed
@ -117,7 +115,11 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
window.setFlags(LayoutParams.FLAG_KEEP_SCREEN_ON, LayoutParams.FLAG_KEEP_SCREEN_ON);
// Set the screen orientation
mActivity.setRequestedOrientation(NativeExports.UISettingsLoadDword(UISettingID.Screen_Orientation.getValue()));
mActivity.setRequestedOrientation(NativeExports.SettingsLoadDword(UISettingID.ScreenOrientation.toString()));
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onCreateBegin - end");
}
}
@TargetApi(11)
@ -125,13 +127,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
{
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onCreateEnd");
}
// Take control of the GameSurface if necessary
if (mIsXperiaPlay)
{
mActivity.getWindow().takeSurface(null);
Log.i("GameLifecycleHandler", "onCreateEnd start");
}
// Lay out content and get the views
@ -139,8 +135,13 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
mSurface = (GameSurface) mActivity.findViewById(R.id.gameSurface);
mOverlay = (GameOverlay) mActivity.findViewById(R.id.gameOverlay);
if (NativeVideo.getResolutionCount() == 0)
{
NativeVideo.UpdateScreenRes(AndroidDevice.nativeWidth, AndroidDevice.nativeHeight);
}
float widthRatio = (float)AndroidDevice.nativeWidth/(float)AndroidDevice.nativeHeight;
int ScreenRes = NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Resolution.getValue());
int ScreenRes = NativeExports.SettingsLoadDword(VideoSettingID.Set_Resolution.toString());
int videoRenderWidth = Math.round(NativeVideo.GetScreenResHeight(ScreenRes) * widthRatio);
int videoRenderHeight = Math.round(NativeVideo.GetScreenResHeight(ScreenRes));
@ -156,24 +157,17 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
mSurface.getHolder().addCallback(this);
mSurface.createGLContext((ActivityManager) mActivity.getSystemService(Context.ACTIVITY_SERVICE));
// Configure the action bar introduced in higher Android versions
if (AndroidDevice.IS_ACTION_BAR_AVAILABLE)
{
mActivity.getActionBar().hide();
ColorDrawable color = new ColorDrawable(Color.parseColor("#303030"));
color.setAlpha(50 /* mGlobalPrefs.displayActionBarTransparency */);
mActivity.getActionBar().setBackgroundDrawable(color);
}
CreateTouchScreenControls();
// Initialize user interface devices
View inputSource = mIsXperiaPlay ? new NativeXperiaTouchpad(mActivity) : mOverlay;
initControllers(inputSource);
//CreateTouchScreenControls();
//View inputSource = mOverlay;
//initControllers(inputSource);
// Override the peripheral controllers' key provider, to add some extra
// functionality
inputSource.setOnKeyListener(this);
//inputSource.setOnKeyListener(this);
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onCreateEnd done");
}
}
public void onStart()
@ -237,7 +231,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
{
Log.i("GameLifecycleHandler", "OnAutoSave");
}
if (NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Running.getValue()) == true)
/*if (NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Running.getValue()) == true)
{
Boolean pause = false;
int PauseType = 0;
@ -286,12 +280,12 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "OnAutoSave Done");
}
}*/
}
public void onPause()
{
if (LOG_GAMELIFECYCLEHANDLER)
/*if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onPause");
}
@ -304,7 +298,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
if (LOG_GAMELIFECYCLEHANDLER)
{
Log.i("GameLifecycleHandler", "onPause - done");
}
}*/
}
@Override
@ -336,7 +330,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
public void onSettingDone()
{
mtouchscreenScale = ((float) NativeExports.UISettingsLoadDword(UISettingID.TouchScreen_ButtonScale.getValue())) / 100.0f;
/*mtouchscreenScale = ((float) NativeExports.UISettingsLoadDword(UISettingID.TouchScreen_ButtonScale.getValue())) / 100.0f;
mlayout = NativeExports.UISettingsLoadString(UISettingID.TouchScreen_Layout.getValue());
mControllers = new ArrayList<AbstractController>();
CreateTouchScreenControls();
@ -344,12 +338,12 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
// Initialize user interface devices
View inputSource = mIsXperiaPlay ? new NativeXperiaTouchpad(mActivity) : mOverlay;
initControllers(inputSource);
*/
}
private void CreateTouchScreenControls()
{
boolean isTouchscreenAnimated = false; // mGlobalPrefs.isTouchscreenAnimated
/*boolean isTouchscreenAnimated = false; // mGlobalPrefs.isTouchscreenAnimated
boolean isTouchscreenHidden = false; // !isTouchscreenEnabled ||
// globalPrefs.touchscreenTransparency
// == 0;
@ -371,7 +365,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
// controls
mTouchscreenMap = new VisibleTouchMap(mActivity.getResources());
mTouchscreenMap.load(touchscreenSkin, touchscreenProfile, isTouchscreenAnimated, mtouchscreenScale, touchscreenTransparency);
mOverlay.initialize(mTouchscreenMap, !isTouchscreenHidden, isTouchscreenAnimated);
mOverlay.initialize(mTouchscreenMap, !isTouchscreenHidden, isTouchscreenAnimated);*/
}
@Override
@ -391,7 +385,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
private void initControllers(View inputSource)
{
// By default, send Player 1 rumbles through phone vibrator
Vibrator vibrator = (Vibrator) mActivity.getSystemService(Context.VIBRATOR_SERVICE);
/*Vibrator vibrator = (Vibrator) mActivity.getSystemService(Context.VIBRATOR_SERVICE);
int touchscreenAutoHold = 0;
boolean isTouchscreenFeedbackEnabled = false;
Set<Integer> autoHoldableButtons = null;
@ -417,7 +411,7 @@ public class GameLifecycleHandler implements View.OnKeyListener, SurfaceHolder.C
int Deadzone = NativeExports.UISettingsLoadDword(UISettingID.Controller_Deadzone.getValue());
int Sensitivity = NativeExports.UISettingsLoadDword(UISettingID.Controller_Sensitivity.getValue());
mControllers.add(new PeripheralController(1, map, Deadzone, Sensitivity, mKeyProvider, axisProvider, mogaProvider));
}
}*/
}
private void tryRunning()

View File

@ -5,7 +5,7 @@ import java.sql.Date;
import java.text.SimpleDateFormat;
import emu.project64.R;
import emu.project64.jni.LanguageStringID;
//import emu.project64.jni.LanguageStringID;
import emu.project64.jni.NativeExports;
import emu.project64.jni.SettingsID;
import emu.project64.jni.SystemEvent;
@ -32,7 +32,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
public GameMenuHandler( Activity activity, GameLifecycleHandler LifecycleHandler )
{
mActivity = activity;
/*mActivity = activity;
mLifecycleHandler = LifecycleHandler;
final ImageButton MenuButton = (ImageButton)activity.findViewById( R.id.gameMenu );
@ -43,7 +43,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
@Override
public void onClick(View view)
{
Boolean GamePaused = NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Paused.getValue());
/*Boolean GamePaused = NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Paused.getValue());
Boolean RecordExecutionTimes = NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordExecutionTimes.getValue());
Boolean ShowDebugMenu = NativeExports.SettingsLoadBool(SettingsID.Debugger_Enabled.getValue());
@ -99,9 +99,9 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
FixSaveStateMenu(SaveDirectory, CurrentSaveState, menu, R.id.menuItem_CurrentSave8, 8);
FixSaveStateMenu(SaveDirectory, CurrentSaveState, menu, R.id.menuItem_CurrentSave9, 9);
FixSaveStateMenu(SaveDirectory, CurrentSaveState, menu, R.id.menuItem_CurrentSave10, 10);
popupMenu.show();
}
});
popupMenu.show();*/
/*}
});*/
}
public boolean onMenuItemClick(MenuItem item)
@ -122,7 +122,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
case R.id.menuItem_LoadState:
NativeExports.ExternalEvent(SystemEvent.SysEvent_LoadMachineState.getValue());
break;
case R.id.menuItem_CurrentSaveAuto:
/*case R.id.menuItem_CurrentSaveAuto:
NativeExports.SettingsSaveDword(SettingsID.Game_CurrentSaveState.getValue(), 0);
break;
case R.id.menuItem_CurrentSave1:
@ -154,7 +154,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
break;
case R.id.menuItem_CurrentSave10:
NativeExports.SettingsSaveDword(SettingsID.Game_CurrentSaveState.getValue(), 10);
break;
break;*/
case R.id.menuItem_pause:
NativeExports.ExternalEvent( SystemEvent.SysEvent_PauseCPU_FromMenu.getValue());
break;
@ -195,7 +195,7 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
@SuppressLint("SimpleDateFormat")
private void FixSaveStateMenu(String SaveDirectory, int CurrentSaveState,Menu menu, int MenuId, int SaveSlot )
{
MenuItem item = menu.findItem(MenuId);
/*MenuItem item = menu.findItem(MenuId);
if (CurrentSaveState == SaveSlot)
{
item.setChecked(true);
@ -219,12 +219,12 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
}
String SlotName = SaveSlot == 0 ? Strings.GetString(LanguageStringID.ANDROID_MENU_CURRENTSAVEAUTO) :
Strings.GetString(LanguageStringID.ANDROID_MENU_CURRENTSAVESLOT) + " " + SaveSlot;
item.setTitle(SlotName + Timestamp);
item.setTitle(SlotName + Timestamp);*/
}
private void SelectGameSpeed()
{
NativeExports.ExternalEvent( SystemEvent.SysEvent_PauseCPU_AppLostActive.getValue());
/*NativeExports.ExternalEvent( SystemEvent.SysEvent_PauseCPU_AppLostActive.getValue());
final int MAX_SPEED = 300;
final int MIN_SPEED = 10;
final int initial = (NativeExports.GetSpeed() * 100) / NativeExports.GetBaseSpeed();
@ -291,6 +291,6 @@ public class GameMenuHandler implements PopupMenu.OnMenuItemClickListener, Popup
dialog.dismiss();
NativeExports.ExternalEvent( SystemEvent.SysEvent_ResumeCPU_AppGainedActive.getValue());
}
});
});*/
}
}

View File

@ -1,60 +0,0 @@
/* Copyright (c) 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Receiver for the "com.android.vending.billing.PURCHASES_UPDATED" Action
* from the Play Store.
*
* <p>It is possible that an in-app item may be acquired without the
* application calling getBuyIntent(), for example if the item can be
* redeemed from inside the Play Store using a promotional code. If this
* application isn't running at the time, then when it is started a call
* to getPurchases() will be sufficient notification. However, if the
* application is already running in the background when the item is acquired,
* a message to this BroadcastReceiver will indicate that the an item
* has been acquired.</p>
*/
public class IabBroadcastReceiver extends BroadcastReceiver {
/**
* Listener interface for received broadcast messages.
*/
public interface IabBroadcastListener {
void receivedBroadcast();
}
/**
* The Intent action that this Receiver should filter for.
*/
public static final String ACTION = "com.android.vending.billing.PURCHASES_UPDATED";
private final IabBroadcastListener mListener;
public IabBroadcastReceiver(IabBroadcastListener listener) {
mListener = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (mListener != null) {
mListener.receivedBroadcast();
}
}
}

View File

@ -1,43 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
/**
* Exception thrown when something went wrong with in-app billing.
* An IabException has an associated IabResult (an error).
* To get the IAB result that caused this exception to be thrown,
* call {@link #getResult()}.
*/
public class IabException extends Exception {
IabResult mResult;
public IabException(IabResult r) {
this(r, null);
}
public IabException(int response, String message) {
this(new IabResult(response, message));
}
public IabException(IabResult r, Exception cause) {
super(r.getMessage(), cause);
mResult = r;
}
public IabException(int response, String message, Exception cause) {
this(new IabResult(response, message), cause);
}
/** Returns the IAB result (error) that this exception signals. */
public IabResult getResult() { return mResult; }
}

View File

@ -1,45 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
/**
* Represents the result of an in-app billing operation.
* A result is composed of a response code (an integer) and possibly a
* message (String). You can get those by calling
* {@link #getResponse} and {@link #getMessage()}, respectively. You
* can also inquire whether a result is a success or a failure by
* calling {@link #isSuccess()} and {@link #isFailure()}.
*/
public class IabResult {
int mResponse;
String mMessage;
public IabResult(int response, String message) {
mResponse = response;
if (message == null || message.trim().length() == 0) {
mMessage = IabHelper.getResponseDesc(response);
}
else {
mMessage = message + " (response: " + IabHelper.getResponseDesc(response) + ")";
}
}
public int getResponse() { return mResponse; }
public String getMessage() { return mMessage; }
public boolean isSuccess() { return mResponse == IabHelper.BILLING_RESPONSE_RESULT_OK; }
public boolean isFailure() { return !isSuccess(); }
public String toString() { return "IabResult: " + getMessage(); }
}

View File

@ -1,91 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Represents a block of information about in-app items.
* An Inventory is returned by such methods as {@link IabHelper#queryInventory}.
*/
public class Inventory {
Map<String,SkuDetails> mSkuMap = new HashMap<String,SkuDetails>();
Map<String,Purchase> mPurchaseMap = new HashMap<String,Purchase>();
Inventory() { }
/** Returns the listing details for an in-app product. */
public SkuDetails getSkuDetails(String sku) {
return mSkuMap.get(sku);
}
/** Returns purchase information for a given product, or null if there is no purchase. */
public Purchase getPurchase(String sku) {
return mPurchaseMap.get(sku);
}
/** Returns whether or not there exists a purchase of the given product. */
public boolean hasPurchase(String sku) {
return mPurchaseMap.containsKey(sku);
}
/** Return whether or not details about the given product are available. */
public boolean hasDetails(String sku) {
return mSkuMap.containsKey(sku);
}
/**
* Erase a purchase (locally) from the inventory, given its product ID. This just
* modifies the Inventory object locally and has no effect on the server! This is
* useful when you have an existing Inventory object which you know to be up to date,
* and you have just consumed an item successfully, which means that erasing its
* purchase data from the Inventory you already have is quicker than querying for
* a new Inventory.
*/
public void erasePurchase(String sku) {
if (mPurchaseMap.containsKey(sku)) mPurchaseMap.remove(sku);
}
/** Returns a list of all owned product IDs. */
List<String> getAllOwnedSkus() {
return new ArrayList<String>(mPurchaseMap.keySet());
}
/** Returns a list of all owned product IDs of a given type */
List<String> getAllOwnedSkus(String itemType) {
List<String> result = new ArrayList<String>();
for (Purchase p : mPurchaseMap.values()) {
if (p.getItemType().equals(itemType)) result.add(p.getSku());
}
return result;
}
/** Returns a list of all purchases. */
List<Purchase> getAllPurchases() {
return new ArrayList<Purchase>(mPurchaseMap.values());
}
void addSkuDetails(SkuDetails d) {
mSkuMap.put(d.getSku(), d);
}
void addPurchase(Purchase p) {
mPurchaseMap.put(p.getSku(), p);
}
}

View File

@ -1,66 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Represents an in-app billing purchase.
*/
public class Purchase {
String mItemType; // ITEM_TYPE_INAPP or ITEM_TYPE_SUBS
String mOrderId;
String mPackageName;
String mSku;
long mPurchaseTime;
int mPurchaseState;
String mDeveloperPayload;
String mToken;
String mOriginalJson;
String mSignature;
boolean mIsAutoRenewing;
public Purchase(String itemType, String jsonPurchaseInfo, String signature) throws JSONException {
mItemType = itemType;
mOriginalJson = jsonPurchaseInfo;
JSONObject o = new JSONObject(mOriginalJson);
mOrderId = o.optString("orderId");
mPackageName = o.optString("packageName");
mSku = o.optString("productId");
mPurchaseTime = o.optLong("purchaseTime");
mPurchaseState = o.optInt("purchaseState");
mDeveloperPayload = o.optString("developerPayload");
mToken = o.optString("token", o.optString("purchaseToken"));
mIsAutoRenewing = o.optBoolean("autoRenewing");
mSignature = signature;
}
public String getItemType() { return mItemType; }
public String getOrderId() { return mOrderId; }
public String getPackageName() { return mPackageName; }
public String getSku() { return mSku; }
public long getPurchaseTime() { return mPurchaseTime; }
public int getPurchaseState() { return mPurchaseState; }
public String getDeveloperPayload() { return mDeveloperPayload; }
public String getToken() { return mToken; }
public String getOriginalJson() { return mOriginalJson; }
public String getSignature() { return mSignature; }
public boolean isAutoRenewing() { return mIsAutoRenewing; }
@Override
public String toString() { return "PurchaseInfo(type:" + mItemType + "):" + mOriginalJson; }
}

View File

@ -1,121 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
/**
* Security-related methods. For a secure implementation, all of this code
* should be implemented on a server that communicates with the
* application on the device. For the sake of simplicity and clarity of this
* example, this code is included here and is executed on the device. If you
* must verify the purchases on the phone, you should obfuscate this code to
* make it harder for an attacker to replace the code with stubs that treat all
* purchases as verified.
*/
public class Security {
private static final String TAG = "IABUtil/Security";
private static final String KEY_FACTORY_ALGORITHM = "RSA";
private static final String SIGNATURE_ALGORITHM = "SHA1withRSA";
/**
* Verifies that the data was signed with the given signature, and returns
* the verified purchase. The data is in JSON format and signed
* with a private key. The data also contains the {@link PurchaseState}
* and product ID of the purchase.
* @param base64PublicKey the base64-encoded public key to use for verifying.
* @param signedData the signed JSON string (signed, not encrypted)
* @param signature the signature for the data, signed with the private key
*/
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
/**
* Generates a PublicKey instance from a string containing the
* Base64-encoded public key.
*
* @param encodedPublicKey Base64-encoded public key
* @throws IllegalArgumentException if encodedPublicKey is invalid
*/
public static PublicKey generatePublicKey(String encodedPublicKey) {
try {
byte[] decodedKey = Base64.decode(encodedPublicKey, Base64.DEFAULT);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM);
return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (InvalidKeySpecException e) {
Log.e(TAG, "Invalid key specification.");
throw new IllegalArgumentException(e);
}
}
/**
* Verifies that the signature from the server matches the computed
* signature on the data. Returns true if the data is correctly signed.
*
* @param publicKey public key associated with the developer account
* @param signedData signed data from server
* @param signature server signature
* @return true if the data and signature match
*/
public static boolean verify(PublicKey publicKey, String signedData, String signature) {
byte[] signatureBytes;
try {
signatureBytes = Base64.decode(signature, Base64.DEFAULT);
} catch (IllegalArgumentException e) {
Log.e(TAG, "Base64 decoding failed.");
return false;
}
try {
Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM);
sig.initVerify(publicKey);
sig.update(signedData.getBytes());
if (!sig.verify(signatureBytes)) {
Log.e(TAG, "Signature verification failed.");
return false;
}
return true;
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "NoSuchAlgorithmException.");
} catch (InvalidKeyException e) {
Log.e(TAG, "Invalid key specification.");
} catch (SignatureException e) {
Log.e(TAG, "Signature exception.");
}
return false;
}
}

View File

@ -1,64 +0,0 @@
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package emu.project64.inAppPurchase;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Represents an in-app product's listing details.
*/
public class SkuDetails {
private final String mItemType;
private final String mSku;
private final String mType;
private final String mPrice;
private final long mPriceAmountMicros;
private final String mPriceCurrencyCode;
private final String mTitle;
private final String mDescription;
private final String mJson;
public SkuDetails(String jsonSkuDetails) throws JSONException {
this(IabHelper.ITEM_TYPE_INAPP, jsonSkuDetails);
}
public SkuDetails(String itemType, String jsonSkuDetails) throws JSONException {
mItemType = itemType;
mJson = jsonSkuDetails;
JSONObject o = new JSONObject(mJson);
mSku = o.optString("productId");
mType = o.optString("type");
mPrice = o.optString("price");
mPriceAmountMicros = o.optLong("price_amount_micros");
mPriceCurrencyCode = o.optString("price_currency_code");
mTitle = o.optString("title");
mDescription = o.optString("description");
}
public String getSku() { return mSku; }
public String getType() { return mType; }
public String getPrice() { return mPrice; }
public long getPriceAmountMicros() { return mPriceAmountMicros; }
public String getPriceCurrencyCode() { return mPriceCurrencyCode; }
public String getTitle() { return mTitle; }
public String getDescription() { return mDescription; }
@Override
public String toString() {
return "SkuDetails:" + mJson;
}
}

View File

@ -141,14 +141,14 @@ public class PeripheralController extends AbstractController implements
if( magnitude > mDeadzoneFraction )
{
// Normalize the vector
float normalizedX = rawX / magnitude;
/*float normalizedX = rawX / magnitude;
float normalizedY = rawY / magnitude;
// Rescale strength to account for deadzone
magnitude = ( magnitude - mDeadzoneFraction ) / ( 1f - mDeadzoneFraction );
magnitude = Utility.clamp( magnitude, 0f, 1f );
mState.axisFractionX = normalizedX * magnitude;
mState.axisFractionY = normalizedY * magnitude;
mState.axisFractionY = normalizedY * magnitude;*/
}
else
{

View File

@ -377,9 +377,10 @@ public class TouchMap
*/
public float getAnalogStrength( float displacement )
{
displacement /= scale;
/*displacement /= scale;
float p = ( displacement - analogDeadzone ) / ( analogMaximum - analogDeadzone );
return Utility.clamp( p, 0.0f, 1.0f );
return Utility.clamp( p, 0.0f, 1.0f );*/
return 0.0f;
}
/**

View File

@ -3,7 +3,6 @@ package emu.project64.input.provider;
import java.util.ArrayList;
import emu.project64.AndroidDevice;
import tv.ouya.console.api.OuyaController;
import android.annotation.TargetApi;
import android.view.InputDevice;
import android.view.KeyEvent;
@ -214,7 +213,7 @@ public abstract class AbstractProvider
{
if( inputCode > 0 )
{
if( AndroidDevice.IS_HONEYCOMB_MR1 )
/*if( AndroidDevice.IS_HONEYCOMB_MR1 )
{
String name = null;
if( inputCode != -1 && AndroidDevice.IS_OUYA_HARDWARE )
@ -255,14 +254,14 @@ public abstract class AbstractProvider
else
return name + " (" + KeyEvent.keyCodeToString( inputCode ) + ")";
}
else
else*/
return "KEYCODE_" + inputCode;
}
else if( inputCode < 0 )
{
int axis = inputToAxisCode( inputCode );
String direction = inputToAxisDirection( inputCode ) ? " (+)" : " (-)";
if( AndroidDevice.IS_HONEYCOMB_MR1 )
/*if( AndroidDevice.IS_HONEYCOMB_MR1 )
{
String name = null;
if( axis != -1 && AndroidDevice.IS_OUYA_HARDWARE )
@ -285,7 +284,7 @@ public abstract class AbstractProvider
else
return name + " (" + MotionEvent.axisToString( axis ) + ")" + direction;
}
else
else*/
return "AXIS_" + axis + direction;
}
else

View File

@ -1,30 +0,0 @@
package emu.project64.jni;
public enum AudioSettingID
{
Output_SwapChannels,
Output_DefaultFrequency,
Buffer_PrimarySize,
Buffer_SecondarySize,
Buffer_SecondaryNbr,
Logging_LogAudioInitShutdown,
Logging_LogAudioInterface,
;
private int value;
public int getValue()
{
return this.value;
}
private static final class StaticFields
{
public static int Counter = 0;
}
private AudioSettingID()
{
this.value = StaticFields.Counter;
StaticFields.Counter += 1;
}
}

View File

@ -1,11 +0,0 @@
package emu.project64.jni;
public class NativeConstants
{
// @formatter:off
public static final int EMULATOR_STATE_UNKNOWN = 0;
public static final int EMULATOR_STATE_IDLE = 1;
public static final int EMULATOR_STATE_RUNNING = 2;
public static final int EMULATOR_STATE_PAUSED = 3;
// @formatter:on
}

View File

@ -10,40 +10,27 @@ public class NativeExports
System.loadLibrary( "Project64-bridge" );
}
public static native void appInit (String BaseDir );
public static native boolean appInit (String BaseDir );
public static native String appVersion();
public static native void StopEmulation();
public static native void StartEmulation();
public static native void CloseSystem();
public static native void SettingsSaveBool(int type, boolean value);
public static native void SettingsSaveDword(int type, int value);
public static native void SettingsSaveString(int type, String value);
public static native boolean SettingsLoadBool(int type);
public static native int SettingsLoadDword(int type);
public static native String SettingsLoadString(int type);
public static native boolean IsSettingSet(int type);
public static native void SettingsSaveBool(String Type, boolean Value);
public static native void SettingsSaveDword(String Type, int Value);
public static native void SettingsSaveString(String Type, String Value);
public static native boolean SettingsLoadBool(String Type);
public static native int SettingsLoadDword(String Type);
public static native String SettingsLoadString(String Type);
public static native String SettingsLoadStringIndex(String Type, int Index);
public static native boolean IsSettingSet(String Type);
public static native void LoadGame(String FileLoc);
public static native void StartGame(Activity activity, GameSurface.GLThread thread);
public static native void LoadRomList();
public static native void RefreshRomDir(String RomDir, boolean Recursive);
public static native void ExternalEvent(int Type);
public static native void ResetApplicationSettings();
public static native byte[] GetString(int StringId);
public static native void SetSpeed(int Speed);
public static native int GetSpeed();
public static native int GetBaseSpeed();
public static native void onSurfaceCreated();
public static native void onSurfaceChanged(int width, int height);
public static native void onDrawFrame();
public static native void UISettingsSaveBool(int Type, boolean Value);
public static native void UISettingsSaveDword(int Type, int Value);
public static native void UISettingsSaveString(int type, String value);
public static native boolean UISettingsLoadBool(int Type);
public static native int UISettingsLoadDword(int Type);
public static native String UISettingsLoadString(int type);
public static native String UISettingsLoadStringIndex(int Type, int Index);
}

View File

@ -330,36 +330,10 @@ public enum SettingsID
Enhancement_Gameshark,
Enhancement_GamesharkCode,
Enhancement_Notes,
FirstUISettings, LastUISettings(FirstUISettings.getValue() + 65535),
FirstRSPDefaultSet, LastRSPDefaultSet(FirstRSPDefaultSet.getValue() + 65535),
FirstRSPSettings, LastRSPSettings(FirstRSPSettings.getValue() + 65535),
FirstGfxDefaultSet, LastGfxDefaultSet(FirstGfxDefaultSet.getValue() + 65535),
FirstGfxSettings, LastGfxSettings(FirstGfxSettings.getValue() + 65535),
FirstAudioDefaultSet, LastAudioDefaultSet(FirstAudioDefaultSet.getValue() + 65535),
FirstAudioSettings, LastAudioSettings(FirstAudioSettings.getValue() + 65535),
FirstCtrlDefaultSet, LastCtrlDefaultSet(FirstCtrlDefaultSet.getValue() + 65535),
FirstCtrlSettings, LastCtrlSettings(FirstCtrlSettings.getValue() + 65535),
;
private int value;
public int getValue()
{
return this.value;
}
private static final class StaticFields
{
public static int Counter = 0;
}
private SettingsID()
{
this.value = StaticFields.Counter;
StaticFields.Counter += 1;
}
private SettingsID(int value)
{
this.value = value;
StaticFields.Counter = this.value + 1;
@Override
public String toString() {
return "Core." + super.toString();
}
}

View File

@ -2,41 +2,30 @@ package emu.project64.jni;
public enum UISettingID
{
Asserts_Version,
Screen_Orientation,
AssertsVersion,
BuildVersion,
ScreenOrientation,
//Recent Game
File_RecentGameFileCount,
File_RecentGameFileIndex,
FileRecentGameFileCount,
FileRecentGameFileIndex,
//Touch Screen
TouchScreen_ButtonScale,
TouchScreen_Layout,
TouchScreenButtonScale,
TouchScreenLayout,
//Controller Config
Controller_ConfigFile,
Controller_CurrentProfile,
Controller_Deadzone,
Controller_Sensitivity,
ControllerConfigFile,
ControllerCurrentProfile,
ControllerDeadzone,
ControllerSensitivity,
//App Info
AppInfo_RunCount,
AppInfoRunCount,
;
private int value;
public int getValue()
{
return this.value;
}
private static final class StaticFields
{
public static int Counter = 0;
}
private UISettingID()
{
this.value = StaticFields.Counter;
StaticFields.Counter += 1;
@Override
public String toString() {
return "UISettingID." + super.toString();
}
}

View File

@ -39,20 +39,9 @@ public enum VideoSettingID
Set_Logging_OGLWrapper, Set_Logging_RDPCommands,
;
private int value;
public int getValue()
@Override
public String toString()
{
return this.value;
}
private static final class StaticFields
{
public static int Counter = 0;
}
private VideoSettingID()
{
this.value = StaticFields.Counter;
StaticFields.Counter += 1;
return "VideoSettingID." + super.toString();
}
}

View File

@ -1,500 +0,0 @@
package emu.project64.profile;
import java.util.ArrayList;
import java.util.List;
import emu.project64.AndroidDevice;
import emu.project64.R;
import emu.project64.hack.MogaHack;
import emu.project64.input.AbstractController;
import emu.project64.input.map.InputMap;
import emu.project64.input.provider.AbstractProvider;
import emu.project64.input.provider.AbstractProvider.OnInputListener;
import emu.project64.input.provider.AxisProvider;
import emu.project64.input.provider.KeyProvider;
import emu.project64.input.provider.KeyProvider.ImeFormula;
import emu.project64.input.provider.MogaProvider;
import emu.project64.jni.NativeExports;
import emu.project64.jni.UISettingID;
import emu.project64.persistent.ConfigFile;
import emu.project64.persistent.ConfigFile.ConfigSection;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.bda.controller.Controller;
public class ControllerProfileActivity extends AppCompatActivity implements OnInputListener,
OnClickListener
{
// Visual settings
private static final float UNMAPPED_BUTTON_ALPHA = 0.2f;
private static final int UNMAPPED_BUTTON_FILTER = 0x66FFFFFF;
private static final int MIN_LAYOUT_WIDTH_DP = 480;
// Controller profile objects
private ConfigFile mConfigFile;
private Profile mProfile;
// Input listening
private KeyProvider mKeyProvider;
private MogaProvider mMogaProvider;
private AxisProvider mAxisProvider;
private Controller mMogaController = Controller.getInstance( this );
// Widgets
private final Button[] mN64Buttons = new Button[InputMap.NUM_MAPPABLES];
private TextView mFeedbackText;
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
// Initialize MOGA controller API
// TODO: Remove hack after MOGA SDK is fixed
// mMogaController.init();
MogaHack.init( mMogaController, this );
// Load the profile; fail fast if there are any programmer usage errors
String name = NativeExports.UISettingsLoadString(UISettingID.Controller_CurrentProfile.getValue());
if( TextUtils.isEmpty( name ) )
throw new Error( "Invalid usage: profile name cannot be null or empty" );
mConfigFile = new ConfigFile(NativeExports.UISettingsLoadString(UISettingID.Controller_ConfigFile.getValue()));
ConfigSection section = mConfigFile.get( name );
if( section == null )
{
//profile not found create it
mConfigFile.put(name, "map", "-");
section = mConfigFile.get( name );
if( section == null )
{
throw new Error( "Invalid usage: profile name not found in config file" );
}
}
mProfile = new Profile( false, section );
// Set up input listeners
mKeyProvider = new KeyProvider( ImeFormula.DEFAULT, AndroidDevice.getUnmappableKeyCodes() );
mKeyProvider.registerListener( this );
mMogaProvider = new MogaProvider( mMogaController );
mMogaProvider.registerListener( this );
if( AndroidDevice.IS_HONEYCOMB_MR1 )
{
mAxisProvider = new AxisProvider();
mAxisProvider.registerListener( this );
}
// Initialize the layout
initLayoutDefault();
// Refresh everything
refreshAllButtons();
}
@Override
public void onResume()
{
super.onResume();
mMogaController.onResume();
}
@Override
public void onPause()
{
super.onPause();
mMogaController.onPause();
// Lazily persist the profile data; only need to do it on pause
mProfile.writeTo( mConfigFile );
mConfigFile.save();
}
@Override
public void onDestroy()
{
super.onDestroy();
mMogaController.exit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed()
{
finish();
}
private void initLayoutDefault()
{
WindowManager manager = (WindowManager) getSystemService( Context.WINDOW_SERVICE );
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics( metrics );
float scalefactor = (float) DisplayMetrics.DENSITY_DEFAULT / (float) metrics.densityDpi;
int widthDp = Math.round( metrics.widthPixels * scalefactor );
// For narrow screens, use an alternate layout
if( widthDp < MIN_LAYOUT_WIDTH_DP )
{
setContentView( R.layout.controller_profile_activity_port );
}
else
{
setContentView( R.layout.controller_profile_activity );
}
// Add the tool bar to the activity (which supports the fancy menu/arrow animation)
Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
toolbar.setTitle( getString(R.string.gamepad_title) );
setSupportActionBar( toolbar );
ActionBar actionbar = getSupportActionBar();
if (AndroidDevice.IS_ICE_CREAM_SANDWICH)
{
actionbar.setHomeButtonEnabled(true);
actionbar.setDisplayHomeAsUpEnabled(true);
}
// Initialize and refresh the widgets
initWidgets();
}
private void initWidgets()
{
// Get the text view object
mFeedbackText = (TextView) findViewById( R.id.textFeedback );
mFeedbackText.setText( "" );
// Create a button list to simplify highlighting and mapping
setupButton( R.id.buttonDR, AbstractController.DPD_R );
setupButton( R.id.buttonDL, AbstractController.DPD_L );
setupButton( R.id.buttonDD, AbstractController.DPD_D );
setupButton( R.id.buttonDU, AbstractController.DPD_U );
setupButton( R.id.buttonS, AbstractController.START );
setupButton( R.id.buttonZ, AbstractController.BTN_Z );
setupButton( R.id.buttonB, AbstractController.BTN_B );
setupButton( R.id.buttonA, AbstractController.BTN_A );
setupButton( R.id.buttonCR, AbstractController.CPD_R );
setupButton( R.id.buttonCL, AbstractController.CPD_L );
setupButton( R.id.buttonCD, AbstractController.CPD_D );
setupButton( R.id.buttonCU, AbstractController.CPD_U );
setupButton( R.id.buttonR, AbstractController.BTN_R );
setupButton( R.id.buttonL, AbstractController.BTN_L );
setupButton( R.id.buttonAR, InputMap.AXIS_R );
setupButton( R.id.buttonAL, InputMap.AXIS_L );
setupButton( R.id.buttonAD, InputMap.AXIS_D );
setupButton( R.id.buttonAU, InputMap.AXIS_U );
}
private void setupButton( int resId, int index )
{
mN64Buttons[index] = (Button) findViewById( resId );
if( mN64Buttons[index] != null )
{
mN64Buttons[index].setOnClickListener( this );
}
}
@Override
public void onClick(View view)
{
// Handle button clicks in the mapping screen
for( int i = 0; i < mN64Buttons.length; i++ )
{
// Find the button that was pressed
if( view.equals( mN64Buttons[i] ) )
{
// Popup a dialog to listen to input codes from user
Button button = (Button) view;
popupListener( button.getText(), i );
}
}
}
private interface PromptInputCodeListener
{
public void onDialogClosed( int inputCode, int hardwareId, int which );
}
/**
* Open a dialog to prompt the user for an input code.
*
* @param context The activity context.
* @param moga The MOGA controller interface.
* @param title The title of the dialog.
* @param message The message to be shown inside the dialog.
* @param neutralButtonText The text to be shown on the neutral button, or null.
* @param ignoredKeyCodes The key codes to ignore.
* @param listener The listener to process the input code, when provided.
*/
public static void promptInputCode( Context context, Controller moga, CharSequence title, CharSequence message,
CharSequence neutralButtonText, final PromptInputCodeListener listener )
{
final ArrayList<AbstractProvider> providers = new ArrayList<AbstractProvider>();
// Create a widget to dispatch key/motion event data
FrameLayout view = new FrameLayout( context );
EditText dummyImeListener = new EditText( context );
dummyImeListener.setVisibility( View.INVISIBLE );
dummyImeListener.setHeight( 0 );
view.addView( dummyImeListener );
// Set the focus parameters of the view so that it will dispatch events
view.setFocusable( true );
view.setFocusableInTouchMode( true );
view.requestFocus();
// Create the input event providers
providers.add( new KeyProvider( view, ImeFormula.DEFAULT, AndroidDevice.getUnmappableKeyCodes() ) );
providers.add( new MogaProvider( moga ) );
if( AndroidDevice.IS_HONEYCOMB_MR1 )
{
providers.add( new AxisProvider( view ) );
}
// Notify the client when the user clicks the dialog's positive button
DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
for( AbstractProvider provider : providers )
provider.unregisterAllListeners();
listener.onDialogClosed( 0, 0, which );
}
};
final AlertDialog dialog = new Builder( context ).setTitle( title ).setMessage( message ).setCancelable( false )
.setNegativeButton( context.getString( android.R.string.cancel ), clickListener )
.setPositiveButton( context.getString( android.R.string.ok ), clickListener )
.setNeutralButton( neutralButtonText, clickListener ).setPositiveButton( null, null )
.setView( view ).create();
OnInputListener inputListener = new OnInputListener()
{
@Override
public void onInput( int[] inputCodes, float[] strengths, int hardwareId )
{
if( inputCodes == null || strengths == null )
return;
// Find the strongest input
float maxStrength = 0;
int strongestInputCode = 0;
for( int i = 0; i < inputCodes.length; i++ )
{
// Identify the strongest input
float strength = strengths[i];
if( strength > maxStrength )
{
maxStrength = strength;
strongestInputCode = inputCodes[i];
}
}
// Call the overloaded method with the strongest found
onInput( strongestInputCode, maxStrength, hardwareId );
}
@Override
public void onInput( int inputCode, float strength, int hardwareId )
{
if( inputCode != 0 && strength > AbstractProvider.STRENGTH_THRESHOLD )
{
for( AbstractProvider provider : providers )
provider.unregisterAllListeners();
listener.onDialogClosed( inputCode, hardwareId, DialogInterface.BUTTON_POSITIVE );
dialog.dismiss();
}
}
};
// Connect the upstream event listeners
for( AbstractProvider provider : providers )
{
provider.registerListener( inputListener );
}
// Launch the dialog
dialog.show();
}
private void popupListener( CharSequence title, final int index )
{
final InputMap map = new InputMap( mProfile.get( "map" ) );
String message = getString( R.string.inputMapActivity_popupMessage,map.getMappedCodeInfo( index ) );
String btnText = getString( R.string.inputMapActivity_popupUnmap );
PromptInputCodeListener listener = new PromptInputCodeListener()
{
@Override
public void onDialogClosed( int inputCode, int hardwareId, int which )
{
if( which != DialogInterface.BUTTON_NEGATIVE )
{
if( which == DialogInterface.BUTTON_POSITIVE )
{
map.map( inputCode, index );
}
else
{
map.unmapCommand( index );
}
mProfile.put( "map", map.serialize() );
refreshAllButtons();
}
// Refresh our MOGA provider since the prompt disconnected it
mMogaProvider = new MogaProvider( mMogaController );
mMogaProvider.registerListener( ControllerProfileActivity.this );
}
};
promptInputCode( this, mMogaController, title, message, btnText, listener);
}
@Override
public boolean onKeyDown( int keyCode, KeyEvent event )
{
return mKeyProvider.onKey( keyCode, event ) || super.onKeyDown( keyCode, event );
}
@Override
public boolean onKeyUp( int keyCode, KeyEvent event )
{
return mKeyProvider.onKey( keyCode, event ) || super.onKeyUp( keyCode, event );
}
@TargetApi( 12 )
@Override
public boolean onGenericMotionEvent( MotionEvent event )
{
if( !AndroidDevice.IS_HONEYCOMB_MR1 )
{
return false;
}
return mAxisProvider.onGenericMotion( event ) || super.onGenericMotionEvent( event );
}
@Override
public void onInput(int inputCode, float strength, int hardwareId)
{
refreshButton( inputCode, strength );
refreshFeedbackText( inputCode, strength );
}
@Override
public void onInput(int[] inputCodes, float[] strengths, int hardwareId)
{
float maxStrength = AbstractProvider.STRENGTH_THRESHOLD;
int strongestInputCode = 0;
for( int i = 0; i < inputCodes.length; i++ )
{
int inputCode = inputCodes[i];
float strength = strengths[i];
// Cache the strongest input
if( strength > maxStrength )
{
maxStrength = strength;
strongestInputCode = inputCode;
}
refreshButton( inputCode, strength );
}
refreshFeedbackText( strongestInputCode, maxStrength );
}
private void refreshFeedbackText( int inputCode, float strength )
{
// Update the feedback text (not all layouts include this, so check null)
if( mFeedbackText != null )
{
mFeedbackText.setText( strength > AbstractProvider.STRENGTH_THRESHOLD ? AbstractProvider.getInputName( inputCode ) : "" );
}
}
private void refreshButton( int inputCode, float strength )
{
InputMap map = new InputMap( mProfile.get( "map" ) );
int command = map.get( inputCode );
if( command != InputMap.UNMAPPED )
{
Button button = mN64Buttons[command];
refreshButton( button, strength, true );
}
}
@TargetApi( 11 )
private void refreshButton( Button button, float strength, boolean isMapped )
{
if( button != null )
{
button.setPressed( strength > AbstractProvider.STRENGTH_THRESHOLD );
// Fade any buttons that aren't mapped
if( AndroidDevice.IS_HONEYCOMB )
{
if( isMapped )
{
button.setAlpha( 1 );
}
else
{
button.setAlpha( UNMAPPED_BUTTON_ALPHA );
}
}
else
{
// For older APIs try something similar (not quite the same)
if( isMapped )
{
button.getBackground().clearColorFilter();
}
else
{
button.getBackground().setColorFilter( UNMAPPED_BUTTON_FILTER, PorterDuff.Mode.MULTIPLY );
}
button.invalidate();
}
}
}
private void refreshAllButtons()
{
final InputMap map = new InputMap( mProfile.get( "map" ) );
for( int i = 0; i < mN64Buttons.length; i++ )
{
refreshButton( mN64Buttons[i], 0, map.isMapped( i ) );
}
}
}

View File

@ -3,7 +3,6 @@ package emu.project64.settings;
import emu.project64.R;
import emu.project64.SplashActivity;
import emu.project64.jni.NativeExports;
import emu.project64.profile.ControllerProfileActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@ -48,25 +47,6 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat
@Override
public void onDisplayPreferenceDialog(Preference preference)
{
DialogFragment dialogFragment = null;
if (preference instanceof SeekBarPreference)
{
dialogFragment = SeekBarPreferencePreferenceDialogFragmentCompat.newInstance(preference.getKey());
}
else if (preference instanceof TwoLinesListPreference)
{
dialogFragment = TwoLinesListPreferenceDialogFragmentCompat.newInstance(preference.getKey());
}
else
{
super.onDisplayPreferenceDialog(preference);
}
if (dialogFragment != null)
{
dialogFragment.setTargetFragment(this, 0);
dialogFragment.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
}
}
@Override
@ -84,9 +64,6 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat
}
else if (preference.getKey().equals("settings_gamepad_screen"))
{
final AppCompatActivity activity = (AppCompatActivity)getActivity();
Intent intent = new Intent( activity, ControllerProfileActivity.class );
activity.startActivity( intent );
}
else if (preference.getKey().equals("settings_video"))
{
@ -125,7 +102,6 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat
{
if( which == DialogInterface.BUTTON_POSITIVE )
{
NativeExports.ResetApplicationSettings();
SplashActivity.Reset();
Intent SplashIntent = new Intent(getActivity(), SplashActivity.class);
SplashIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
@ -133,13 +109,6 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat
}
}
};
String title = getString( R.string.settings_reset_title );
String message = getString( R.string.settings_reset_message );
AlertDialog.Builder builder = new AlertDialog.Builder( getActivity() ).setTitle( title ).setMessage( message ).setCancelable( false )
.setNegativeButton( getString( android.R.string.cancel ), internalListener )
.setPositiveButton( getString( android.R.string.ok ), internalListener );
builder.create().show();
}
else
{

View File

@ -35,8 +35,8 @@ public class GameSettingsActivity extends AppCompatActivity implements SharedPre
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefs.edit().clear()
.putString("Game_CpuType",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Game_CpuType.getValue())))
.putBoolean("Game_BlockLinking",NativeExports.SettingsLoadBool(SettingsID.Game_BlockLinking.getValue()))
.putString("Game_CpuType",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Game_CpuType.toString())))
.putBoolean("Game_BlockLinking",NativeExports.SettingsLoadBool(SettingsID.Game_BlockLinking.toString()))
.apply();
sharedPrefs.registerOnSharedPreferenceChangeListener(this);
@ -71,7 +71,7 @@ public class GameSettingsActivity extends AppCompatActivity implements SharedPre
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
if (key.equals("Game_CpuType")) { NativeExports.SettingsSaveDword(SettingsID.Game_CpuType.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Game_BlockLinking")) { NativeExports.SettingsSaveBool(SettingsID.Game_BlockLinking.getValue(), sharedPreferences.getBoolean(key,false)); }
if (key.equals("Game_CpuType")) { NativeExports.SettingsSaveDword(SettingsID.Game_CpuType.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Game_BlockLinking")) { NativeExports.SettingsSaveBool(SettingsID.Game_BlockLinking.toString(), sharedPreferences.getBoolean(key,false)); }
}
}

View File

@ -3,95 +3,56 @@ package emu.project64.settings;
import emu.project64.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.v7.preference.ListPreference;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.text.TextUtils;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.Preference;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
public class LogLevelPreference extends ListPreference
{
public class LogLevelPreference extends Preference {
private CharSequence[] mEntries;
private CharSequence[] mEntryValues;
private CharSequence[] mEntriesSubtitles;
private String mValue;
private int mValueIndex;
private boolean mValueSet;
public LogLevelPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
super(context, attrs, getAttr(context, R.attr.LogLevelPreferenceStyle, android.R.attr.preferenceStyle));
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TwoLinesListPreference);
mEntriesSubtitles = a.getTextArray(R.styleable.TwoLinesListPreference_entriesSubtitles);
String[] TraceSeverityList=context.getResources().getStringArray(R.array.trace_severity_list);
setEntries(TraceSeverityList);
String[] TraceSeverityValues=context.getResources().getStringArray(R.array.trace_severity_values);
setEntryValues(TraceSeverityValues);
mEntries = context.getResources().getStringArray(R.array.trace_severity_list);
mEntryValues = context.getResources().getStringArray(R.array.trace_severity_values);
a.recycle();
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue)
{
super.onSetInitialValue(restoreValue, defaultValue);
mEntriesSubtitles = getEntriesSubtitles();
mValueIndex = getValueIndex();
}
@Override
public void setValue(String value)
{
super.setValue(value);
mValueIndex = getValueIndex();
updateSummary();
}
/**
* Returns the index of the given value (in the entry values array).
*
* @param value The value whose index should be returned.
* @return The index of the value, or -1 if not found.
*/
public int findIndexOfValue(String value)
{
CharSequence[] EntryValues = getEntryValues();
if (value != null && EntryValues != null)
{
for (int i = EntryValues.length - 1; i >= 0; i--)
{
if (EntryValues[i].equals(value))
{
return i;
}
}
}
return -1;
}
public int getValueIndex()
{
return findIndexOfValue(getValue());
}
public CharSequence[] getEntriesSubtitles()
{
return mEntriesSubtitles;
}
@Override
public void setEntries(CharSequence[] Entries)
{
super.setEntries(Entries);
updateSummary();
}
@Override
public void setEntryValues(CharSequence[] EntryValues)
{
super.setEntryValues(EntryValues);
mValueIndex = getValueIndex();
updateSummary();
protected void onClick() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(getTitle())
.setSingleChoiceItems(mEntries, mValueIndex, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int index) {
setValueIndex(index);
dialog.dismiss();
}
public void setEntriesSubtitles(CharSequence[] mEntriesSubtitles)
{
this.mEntriesSubtitles = mEntriesSubtitles;
updateSummary();
})
.setPositiveButton("Go", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int index) {
setValueIndex(index);
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
private void updateSummary()
@ -100,16 +61,50 @@ public class LogLevelPreference extends ListPreference
{
return;
}
CharSequence[] Entries = getEntries();
String summary = Entries[mValueIndex].toString();
if (mEntriesSubtitles != null && mEntriesSubtitles.length > mValueIndex)
setSummary(mEntries[mValueIndex].toString());
}
private void setValueIndex(int index)
{
String subtitle = mEntriesSubtitles[mValueIndex].toString();
if (summary.length() > 0 && subtitle.length() > 0)
{
summary += " - " + subtitle;
String value = mEntryValues[index].toString();
final boolean changed = !TextUtils.equals(mValue, value);
if (changed || !mValueSet) {
mValueIndex = index;
mValue = value;
mValueSet = true;
persistString(value);
if (changed) {
notifyChanged();
}
updateSummary();
}
}
private static int getAttr(Context context, int attr, int fallbackAttr)
{
TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(attr, value, true);
if (value.resourceId != 0)
{
return attr;
}
return fallbackAttr;
}
@Override
protected void onSetInitialValue(Object defaultValue)
{
if (getSharedPreferences().contains(getKey()))
{
String Value = getPersistedString( Integer.toString(mValueIndex));
for (int i = 0, n = mEntryValues.length; i < n; i++)
{
if (mEntryValues[i].equals(Value))
{
mValueIndex = i;
updateSummary();
}
}
}
setSummary( summary );
}
}

View File

@ -172,7 +172,8 @@ public class SeekBarPreference extends DialogPreference
*/
public String getValueString( int value )
{
return getContext().getString( R.string.seekBarPreference_summary, value, mUnits );
//return getContext().getString( R.string.seekBarPreference_summary, value, mUnits );
return "";
}
@Override

View File

@ -1,20 +1,18 @@
package emu.project64.settings;
import emu.project64.AndroidDevice;
import emu.project64.GalleryActivity;
import emu.project64.R;
import emu.project64.jni.AudioSettingID;
import emu.project64.jni.NativeExports;
import emu.project64.jni.SettingsID;
import emu.project64.jni.SystemEvent;
import emu.project64.jni.UISettingID;
import emu.project64.jni.VideoSettingID;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import androidx.appcompat.app.ActionBar;
import androidx.preference.PreferenceManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
public class SettingsActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener
@ -24,61 +22,60 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere
{
super.onCreate(savedInstanceState);
if (NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Running.getValue()) == true)
/*if (NativeExports.SettingsLoadBool(SettingsID.GameRunning_CPU_Running.getValue()) == true)
{
NativeExports.ExternalEvent( SystemEvent.SysEvent_ResumeCPU_FromMenu.getValue());
}
}*/
setContentView(R.layout.settings_activity);
// Add the tool bar to the activity (which supports the fancy menu/arrow animation)
Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
toolbar.setTitle( getString(R.string.settings_title) );
setSupportActionBar( toolbar );
ActionBar actionbar = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setTitle(getString(R.string.settings_title));
if (AndroidDevice.IS_ICE_CREAM_SANDWICH)
{
ActionBar actionbar = getSupportActionBar();
actionbar.setHomeButtonEnabled(true);
actionbar.setDisplayHomeAsUpEnabled(true);
}
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefs.edit().clear()
.putInt("touchscreenScale",NativeExports.UISettingsLoadDword(UISettingID.TouchScreen_ButtonScale.getValue()))
/*.putInt("touchscreenScale",NativeExports.UISettingsLoadDword(UISettingID.TouchScreen_ButtonScale.getValue()))
.putString("touchscreenLayout",NativeExports.UISettingsLoadString(UISettingID.TouchScreen_Layout.getValue()))
.putBoolean("audio_Enabled",NativeExports.SettingsLoadBool(SettingsID.Plugin_EnableAudio.getValue()))
.putBoolean("UserInterface_BasicMode",NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.getValue()))
.putBoolean("Debugger_Enabled",NativeExports.SettingsLoadBool(SettingsID.Debugger_Enabled.getValue()))
.putBoolean("Debugger_RecordRecompilerAsm",NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordRecompilerAsm.getValue()))
.putBoolean("Debugger_LimitFPS",NativeExports.SettingsLoadBool(SettingsID.GameRunning_LimitFPS.getValue()))
.putBoolean("Debugger_DisplaySpeed",NativeExports.SettingsLoadBool(SettingsID.UserInterface_DisplayFrameRate.getValue()))
.putBoolean("Debugger_CpuUsage",NativeExports.SettingsLoadBool(SettingsID.UserInterface_ShowCPUPer.getValue()))
.putBoolean("Debugger_RecordExecutionTimes",NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordExecutionTimes.getValue()))
.putBoolean("Debugger_DebugLanguage",NativeExports.SettingsLoadBool(SettingsID.Debugger_DebugLanguage.getValue()))
.putString("Debugger_DisplaySpeedType",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.UserInterface_FrameDisplayType.getValue())))
.putString("Debugger_TraceMD5",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceMD5.getValue())))
.putString("Debugger_TraceThread",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceThread.getValue())))
.putString("Debugger_TracePath",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TracePath.getValue())))
.putString("Debugger_TraceSettings",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceSettings.getValue())))
.putString("Debugger_TraceUnknown",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceUnknown.getValue())))
.putString("Debugger_TraceAppInit",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAppInit.getValue())))
.putString("Debugger_TraceAppCleanup",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAppCleanup.getValue())))
.putString("Debugger_TraceN64System",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceN64System.getValue())))
.putString("Debugger_TracePlugins",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TracePlugins.getValue())))
.putString("Debugger_TraceGFXPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceGFXPlugin.getValue())))
.putString("Debugger_TraceAudioPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAudioPlugin.getValue())))
.putString("Debugger_TraceControllerPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceControllerPlugin.getValue())))
.putString("Debugger_TraceRSPPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRSPPlugin.getValue())))
.putString("Debugger_TraceRSP",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRSP.getValue())))
.putString("Debugger_TraceAudio",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAudio.getValue())))
.putString("Debugger_TraceRegisterCache",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRegisterCache.getValue())))
.putString("Debugger_TraceRecompiler",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRecompiler.getValue())))
.putString("Debugger_TraceTLB",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceTLB.getValue())))
.putString("Debugger_TraceProtectedMEM",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceProtectedMEM.getValue())))
.putString("Debugger_TraceUserInterface",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceUserInterface.getValue())))
.putString("Debugger_TraceRomList",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRomList.getValue())))
.putString("Debugger_TraceExceptionHandler",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceExceptionHandler.getValue())))
.putString("Debugger_TraceVideoMD5",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_MD5.getValue())))
.putBoolean("audio_Enabled",NativeExports.SettingsLoadBool(SettingsID.Plugin_EnableAudio.getValue()))*/
.putBoolean("UserInterface_BasicMode",NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.toString()))
.putBoolean("Debugger_Enabled",NativeExports.SettingsLoadBool(SettingsID.Debugger_Enabled.toString()))
.putBoolean("Debugger_RecordRecompilerAsm",NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordRecompilerAsm.toString()))
.putBoolean("Debugger_LimitFPS",NativeExports.SettingsLoadBool(SettingsID.GameRunning_LimitFPS.toString()))
.putBoolean("Debugger_DisplaySpeed",NativeExports.SettingsLoadBool(SettingsID.UserInterface_DisplayFrameRate.toString()))
.putBoolean("Debugger_CpuUsage",NativeExports.SettingsLoadBool(SettingsID.UserInterface_ShowCPUPer.toString()))
.putBoolean("Debugger_RecordExecutionTimes",NativeExports.SettingsLoadBool(SettingsID.Debugger_RecordExecutionTimes.toString()))
.putBoolean("Debugger_DebugLanguage",NativeExports.SettingsLoadBool(SettingsID.Debugger_DebugLanguage.toString()))
.putString("Debugger_DisplaySpeedType",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.UserInterface_FrameDisplayType.toString())))
.putString("Debugger_TraceMD5",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceMD5.toString())))
.putString("Debugger_TraceThread",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceThread.toString())))
.putString("Debugger_TracePath",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TracePath.toString())))
.putString("Debugger_TraceSettings",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceSettings.toString())))
.putString("Debugger_TraceUnknown",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceUnknown.toString())))
.putString("Debugger_TraceAppInit",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAppInit.toString())))
.putString("Debugger_TraceAppCleanup",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAppCleanup.toString())))
.putString("Debugger_TraceN64System",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceN64System.toString())))
.putString("Debugger_TracePlugins",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TracePlugins.toString())))
.putString("Debugger_TraceGFXPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceGFXPlugin.toString())))
.putString("Debugger_TraceAudioPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAudioPlugin.toString())))
.putString("Debugger_TraceControllerPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceControllerPlugin.toString())))
.putString("Debugger_TraceRSPPlugin",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRSPPlugin.toString())))
.putString("Debugger_TraceRSP",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRSP.toString())))
.putString("Debugger_TraceAudio",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceAudio.toString())))
.putString("Debugger_TraceRegisterCache",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRegisterCache.toString())))
.putString("Debugger_TraceRecompiler",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRecompiler.toString())))
.putString("Debugger_TraceTLB",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceTLB.toString())))
.putString("Debugger_TraceProtectedMEM",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceProtectedMEM.toString())))
.putString("Debugger_TraceUserInterface",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceUserInterface.toString())))
.putString("Debugger_TraceRomList",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceRomList.toString())))
.putString("Debugger_TraceExceptionHandler",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.Debugger_TraceExceptionHandler.toString())))
/*.putString("Debugger_TraceVideoMD5",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_MD5.getValue())))
.putString("Debugger_TraceVideoThread",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Thread.getValue())))
.putString("Debugger_TraceVideoPath",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Path.getValue())))
.putString("Debugger_TraceVideoSettings",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Settings.getValue())))
@ -95,7 +92,7 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere
.putString("Debugger_TraceAudioAudioInterface",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstAudioSettings.getValue() + AudioSettingID.Logging_LogAudioInterface.getValue())))
.putString("video_screenResolution",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Resolution.getValue())))
.putString("video_AspectRatio",String.valueOf(NativeExports.SettingsLoadDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_aspect.getValue())))
.putInt("MaxRomsRemembered",NativeExports.UISettingsLoadDword(UISettingID.File_RecentGameFileCount.getValue()))
.putInt("MaxRomsRemembered",NativeExports.UISettingsLoadDword(UISettingID.File_RecentGameFileCount.getValue()))*/
.apply();
sharedPrefs.registerOnSharedPreferenceChangeListener(this);
@ -132,48 +129,48 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere
{
if (key.equals("UserInterface_BasicMode"))
{
NativeExports.SettingsSaveBool(SettingsID.UserInterface_BasicMode.getValue(), sharedPreferences.getBoolean(key,false));
NativeExports.SettingsSaveBool(SettingsID.UserInterface_BasicMode.toString(), sharedPreferences.getBoolean(key,false));
getSupportFragmentManager().popBackStackImmediate();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_placeholder, new SettingsFragment()).commit();
}
else if (key.equals("Debugger_DebugLanguage"))
/*else if (key.equals("Debugger_DebugLanguage"))
{
NativeExports.SettingsSaveBool(SettingsID.Debugger_DebugLanguage.getValue(), sharedPreferences.getBoolean(key,false));
GalleryActivity.LanguageChanged();
}
else if (key.equals("touchscreenScale")) { NativeExports.UISettingsSaveDword(UISettingID.TouchScreen_ButtonScale.getValue(), sharedPreferences.getInt(key, 100)); }
else if (key.equals("touchscreenLayout")) { NativeExports.UISettingsSaveString(UISettingID.TouchScreen_Layout.getValue(), sharedPreferences.getString(key, "Analog")); }
else if (key.equals("audio_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Plugin_EnableAudio.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_Enabled.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_RecordRecompilerAsm")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_RecordRecompilerAsm.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_CpuUsage")) { NativeExports.SettingsSaveBool(SettingsID.UserInterface_ShowCPUPer.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_RecordExecutionTimes")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_RecordExecutionTimes.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_LimitFPS")) { NativeExports.SettingsSaveBool(SettingsID.GameRunning_LimitFPS.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_DisplaySpeed")) { NativeExports.SettingsSaveBool(SettingsID.UserInterface_DisplayFrameRate.getValue(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_DisplaySpeedType")) { NativeExports.SettingsSaveDword(SettingsID.UserInterface_FrameDisplayType.getValue(), Integer.valueOf(sharedPreferences.getString(key, "0"))); }
else if (key.equals("Debugger_TraceMD5")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceMD5.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceThread")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceThread.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TracePath")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TracePath.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceSettings")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceSettings.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceUnknown")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceUnknown.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAppInit")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAppInit.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAppCleanup")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAppCleanup.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceN64System")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceN64System.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TracePlugins")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TracePlugins.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceGFXPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceGFXPlugin.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudioPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAudioPlugin.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceControllerPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceControllerPlugin.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRSPPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRSPPlugin.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRSP")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRSP.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudio")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAudio.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRegisterCache")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRegisterCache.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRecompiler")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRecompiler.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceTLB")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceTLB.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceProtectedMEM")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceProtectedMEM.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceUserInterface")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceUserInterface.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRomList")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRomList.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceExceptionHandler")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceExceptionHandler.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceVideoMD5")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_MD5.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("audio_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Plugin_EnableAudio.getValue(), sharedPreferences.getBoolean(key,false)); }*/
else if (key.equals("Debugger_Enabled")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_Enabled.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_RecordRecompilerAsm")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_RecordRecompilerAsm.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_CpuUsage")) { NativeExports.SettingsSaveBool(SettingsID.UserInterface_ShowCPUPer.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_RecordExecutionTimes")) { NativeExports.SettingsSaveBool(SettingsID.Debugger_RecordExecutionTimes.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_LimitFPS")) { NativeExports.SettingsSaveBool(SettingsID.GameRunning_LimitFPS.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_DisplaySpeed")) { NativeExports.SettingsSaveBool(SettingsID.UserInterface_DisplayFrameRate.toString(), sharedPreferences.getBoolean(key,false)); }
else if (key.equals("Debugger_DisplaySpeedType")) { NativeExports.SettingsSaveDword(SettingsID.UserInterface_FrameDisplayType.toString(), Integer.valueOf(sharedPreferences.getString(key, "0"))); }
else if (key.equals("Debugger_TraceMD5")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceMD5.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceThread")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceThread.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TracePath")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TracePath.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceSettings")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceSettings.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceUnknown")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceUnknown.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAppInit")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAppInit.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAppCleanup")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAppCleanup.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceN64System")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceN64System.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TracePlugins")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TracePlugins.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceGFXPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceGFXPlugin.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudioPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAudioPlugin.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceControllerPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceControllerPlugin.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRSPPlugin")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRSPPlugin.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRSP")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRSP.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudio")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceAudio.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRegisterCache")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRegisterCache.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRecompiler")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRecompiler.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceTLB")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceTLB.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceProtectedMEM")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceProtectedMEM.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceUserInterface")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceUserInterface.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceRomList")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceRomList.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceExceptionHandler")) { NativeExports.SettingsSaveDword(SettingsID.Debugger_TraceExceptionHandler.toString(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
/*else if (key.equals("Debugger_TraceVideoMD5")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_MD5.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceVideoThread")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Thread.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceVideoPath")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Path.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceVideoSettings")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_Settings.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
@ -188,13 +185,13 @@ public class SettingsActivity extends AppCompatActivity implements SharedPrefere
else if (key.equals("Debugger_TraceVideoOGLWrapper")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Logging_OGLWrapper.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudioInitShutdown")) { NativeExports.SettingsSaveDword(SettingsID.FirstAudioSettings.getValue() + AudioSettingID.Logging_LogAudioInitShutdown.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("Debugger_TraceAudioAudioInterface")) { NativeExports.SettingsSaveDword(SettingsID.FirstAudioSettings.getValue() + AudioSettingID.Logging_LogAudioInterface.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("video_screenResolution")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Resolution.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
/*else if (key.equals("video_screenResolution")) { NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_Resolution.getValue(), Integer.valueOf(sharedPreferences.getString(key, "1"))); }
else if (key.equals("video_AspectRatio"))
{
NativeExports.SettingsSaveDword(SettingsID.FirstGfxSettings.getValue() + VideoSettingID.Set_aspect.getValue(), Integer.valueOf(sharedPreferences.getString(key, "0")));
getSupportFragmentManager().popBackStackImmediate();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_placeholder, new VideoFragment()).addToBackStack("main").commit();
}
else if (key.equals("MaxRomsRemembered")) { NativeExports.UISettingsSaveDword(UISettingID.File_RecentGameFileCount.getValue(), sharedPreferences.getInt(key, 10)); }
else if (key.equals("MaxRomsRemembered")) { NativeExports.UISettingsSaveDword(UISettingID.File_RecentGameFileCount.getValue(), sharedPreferences.getInt(key, 10)); }*/
}
}

View File

@ -9,7 +9,7 @@ public class SettingsFragment extends BaseSettingsFragment
@Override
protected int getXml()
{
if (NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.getValue()))
if (NativeExports.SettingsLoadBool(SettingsID.UserInterface_BasicMode.toString()))
{
return R.xml.settings_basic;
}

View File

@ -4,8 +4,8 @@ import emu.project64.R;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.PreferenceDialogFragmentCompat;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceDialogFragmentCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;

View File

@ -28,7 +28,7 @@ public final class DeviceUtil
public static String getCpuInfo()
{
// From http://android-er.blogspot.com/2009/09/read-android-cpu-info.html
String result = Utility.executeShellCommand( "/system/bin/cat", "/proc/cpuinfo" );
/*String result = Utility.executeShellCommand( "/system/bin/cat", "/proc/cpuinfo" );
// Remove the serial number for privacy
Pattern pattern = Pattern.compile( "^serial\\s*?:.*?$", Pattern.CASE_INSENSITIVE
@ -46,17 +46,19 @@ public final class DeviceUtil
result += "Manufacturer: " + Build.MANUFACTURER + "\n";
result += "Model: " + Build.MODEL + "\n";
result += "Product: " + Build.PRODUCT + "\n";
return result;
return result;*/
return "";
}
public static String getLogCat()
{
return Utility.executeShellCommand( "logcat", "-d", "-v", "long" );
//return Utility.executeShellCommand( "logcat", "-d", "-v", "long" );
return "";
}
public static void clearLogCat()
{
Utility.executeShellCommand( "logcat", "-c" );
//Utility.executeShellCommand( "logcat", "-c" );
}
@TargetApi( 12 )

View File

@ -1,13 +1,11 @@
package emu.project64.util;
import emu.project64.game.GameOverlay;
//import emu.project64.game.GameOverlay;
import emu.project64.jni.NativeExports;
import emu.project64.jni.SettingsID;
import emu.project64.Project64Application;
import emu.project64.R;
import com.google.android.gms.analytics.HitBuilders;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
@ -81,11 +79,11 @@ public final class Notifier
if( activity == null )
return;
GameOverlay overlay = (GameOverlay) activity.findViewById(R.id.gameOverlay);
/*GameOverlay overlay = (GameOverlay) activity.findViewById(R.id.gameOverlay);
if (overlay == null)
return;
overlay.SetDisplayMessage(message, Duratation);
overlay.SetDisplayMessage(message, Duratation);*/
}
public static void showMessage2( Activity activity, String message )
@ -93,17 +91,17 @@ public final class Notifier
if( activity == null )
return;
GameOverlay overlay = (GameOverlay) activity.findViewById(R.id.gameOverlay);
overlay.SetDisplayMessage2(message);
/*GameOverlay overlay = (GameOverlay) activity.findViewById(R.id.gameOverlay);
overlay.SetDisplayMessage2(message);*/
}
public static void EmulationStarted (Activity activity)
{
((Project64Application) activity.getApplication()).getDefaultTracker().send(new HitBuilders.EventBuilder()
/*((Project64Application) activity.getApplication()).getDefaultTracker().send(new HitBuilders.EventBuilder()
.setCategory("game")
.setAction(NativeExports.SettingsLoadString(SettingsID.Rdb_GoodName.getValue()))
.setLabel(NativeExports.appVersion())
.build());
.build());*/
}
private static Runnable runEmulationStopped = null;

View File

@ -9,54 +9,6 @@ import emu.project64.Project64Application;
public final class Utility
{
/**
* Clamps a value to the limit defined by min and max.
*
* @param val The value to clamp to min and max.
* @param min The lowest number val can be equal to.
* @param max The largest number val can be equal to.
*
* @return If the value is lower than min, min is returned. <br/>
* If the value is higher than max, max is returned.
*/
public static<T extends Comparable<? super T>> T clamp( T val, T min, T max )
{
final T temp;
// val < max
if ( val.compareTo(max) < 0 )
temp = val;
else
temp = max;
// temp > min
if ( temp.compareTo(min) > 0 )
return temp;
else
return min;
}
public static String executeShellCommand(String... args)
{
try
{
Process process = Runtime.getRuntime().exec( args );
BufferedReader reader = new BufferedReader( new InputStreamReader( process.getInputStream() ) );
StringBuilder result = new StringBuilder();
String line;
while( ( line = reader.readLine() ) != null )
{
result.append( line + "\n" );
}
return result.toString();
}
catch( IOException ignored )
{
}
return "";
}
public static boolean close(Closeable closeable)
{
if (closeable != null)

View File

@ -17,4 +17,105 @@
<declare-styleable name="TwoLinesListPreference">
<attr name="entriesSubtitles" format="string"/>
</declare-styleable>
<declare-styleable name="ListPreference">
<attr name="entries" format="string"/>
<attr name="entryValues" format="string"/>
</declare-styleable>
<attr name="background_default" format="reference|color" />
<attr name="header_background" format="reference|color" />
<attr name="bottom_navigation_background" format="reference|color" />
<attr name="audio_header_background" format="reference|color" />
<attr name="audio_header_divider" format="color" />
<attr name="audio_menu_icon" format="color" />
<attr name="audio_list_background" format="reference|color" />
<attr name="bottom_sheet_background" format="reference|color" />
<attr name="bottom_sheet_radius" format="dimension" />
<attr name="bottom_navigation_color" format="reference|color" />
<attr name="background_default_darker" format="reference|color" />
<attr name="background_audio_tips" format="reference|color" />
<attr name="font_default" format="reference|color" />
<attr name="font_audio_light" format="reference|color" />
<attr name="font_light" format="reference|color" />
<attr name="audio_browser_separator" format="reference|color" />
<attr name="list_subtitle" format="reference|color" />
<attr name="list_title" format="reference|color" />
<attr name="audio_player_background_tint" format="reference|color" />
<attr name="progress_background" format="reference|color" />
<attr name="ariane_text_color" format="reference|color"/>
<attr name="ariane_text_size" format="dimension" />
<attr name="card_background" format="color"/>
<attr name="empty_button" format="reference" />
<attr name="default_separator" format="color" />
<attr name="card_border" format="color" />
<attr name="rounded_corners_bottom_default_darker" format="reference" />
<attr name="donate_card" format="color" />
<attr name="donate_item_background" format="reference" />
<attr name="empty_foreground" format="color" />
<attr name="empty_background" format="color" />
<attr name="disabled_overlay_color" format="color" />
<attr name="video_card_background" format="reference"/>
<attr name="video_list_background" format="reference"/>
<attr name="audio_chip_background" format="color" />
<attr name="audio_chip_text_color" format="color" />
<attr name="audio_seek_bar" format="reference" />
<attr name="mini_visualizer_color" format="color" />
<attr name="audio_chips_color" format="color" />
<attr name="audio_chips_text_color" format="color" />
<attr name="bookmark_background" format="color" />
<attr name="bottom_navigation_focus" format="color" />
<attr name="primary_focus" format="color" />
<attr name="scan_background" format="reference" />
<attr name="fast_scroller_bubble" format="reference" />
<attr name="fast_scroller_handle" format="reference" />
<!--Main Icons-->
<attr name="ic_playlist" format="reference" />
<attr name="ic_playlist_on" format="reference" />
<attr name="ic_menu_search" format="reference" />
<attr name="ic_save" format="reference" />
<attr name="gridview_progressbar" format="reference" />
<attr name="progress_mini_player" format="reference" />
<!--Advance Options Icons-->
<attr name="adv_options_item_background" format="reference" />
<attr name="ic_speed_normal_style" format="reference" />
<attr name="ic_sleep_normal_style" format="reference" />
<attr name="ic_jumpto_normal_style" format="reference" />
<attr name="ic_chapter_normal_style" format="reference" />
<attr name="ic_bookmark_normal_style" format="reference" />
<attr name="ic_equalizer_normal_style" format="reference" />
<attr name="ic_playasaudio_off" format="reference" />
<attr name="ic_playasaudio_on" format="reference" />
<attr name="ic_popup_dim" format="reference" />
<attr name="ic_passthrough" format="reference" />
<attr name="ic_abrepeat" format="reference" />
<attr name="ic_abrepeat_reset" format="reference" />
<attr name="ic_video_stats" format="reference" />
<attr name="ic_lock_player" format="reference" />
<attr name="player_icon_color" format="reference" />
<attr name="dialog_circle_background" format="reference"/>
<attr name="advanced_options_bg" format="reference"/>
<declare-styleable name="MiniVisualizer">
<attr name="bar_color" format="reference"/>
</declare-styleable>
<declare-styleable name="EmptyLoadingStateView">
<attr name="empty_text" format="reference|string" />
<attr name="show_no_media" format="boolean" />
<attr name="compact_mode" format="boolean" />
</declare-styleable>
<declare-styleable name="TitleListView">
<attr name="title" format="reference|string" />
<attr name="show_button" format="boolean" />
<attr name="button_icon" format="reference" />
</declare-styleable>
<declare-styleable name="HalfCircleView">
<attr name="is_left" format="boolean"/>
</declare-styleable>
<attr name="marginTopContent" format="dimension" />
</resources>

View File

@ -8,7 +8,7 @@
<color name="TabActive">#4683ec</color>
<color name="ButtonTextColor">#ffffff</color>
<color name="black">#000001</color>
<color name="white">#ffffff</color>
<color name="yellow1">#F8E334</color>
<color name="yellow2">#F29620</color>
@ -22,21 +22,12 @@
<color name="gray2">#9C9897</color>
<color name="gray3">#747273</color>
<color name="gray4">#424042</color>
<color name="grey50">#fafafa</color>
<color name="grey100">#f5f5f5</color>
<color name="grey200">#eeeeee</color>
<color name="orange500">#FF8800</color>
<color name="orange800">#ff610a</color>
<color name="grey300">#e0e0e0</color>
<color name="grey400">#bdbdbd</color>
<color name="grey500">#9e9e9e</color>
<color name="grey600">#757575</color>
<color name="grey700">#616161</color>
<color name="grey800">#424242</color>
<color name="grey850">#323232</color>
<color name="grey875">#2a2a2a</color>
<color name="grey900">#212121</color>
<color name="holo_blue1">#33B5E5</color>
<color name="holo_blue2">#0099CC</color>
<color name="holo_purple1">#AA66CC</color>
<color name="holo_purple2">#9933CC</color>
</resources>

View File

@ -19,11 +19,23 @@ add_library(Project64-core STATIC
N64System/Interpreter/InterpreterCPU.cpp
N64System/Interpreter/InterpreterOps.cpp
N64System/Interpreter/InterpreterOps32.cpp
N64System/Mips/Audio.cpp
N64System/MemoryHandler/AudioInterfaceHandler.cpp
N64System/MemoryHandler/CartridgeDomain1Address1Handler.cpp
N64System/MemoryHandler/CartridgeDomain1Address3Handler.cpp
N64System/MemoryHandler/CartridgeDomain2Address1Handler.cpp
N64System/MemoryHandler/CartridgeDomain2Address2Handler.cpp
N64System/MemoryHandler/DisplayControlRegHandler.cpp
N64System/MemoryHandler/MIPSInterfaceHandler.cpp
N64System/MemoryHandler/PeripheralInterfaceHandler.cpp
N64System/MemoryHandler/PifRamHandler.cpp
N64System/MemoryHandler/RDRAMInterfaceHandler.cpp
N64System/MemoryHandler/RDRAMRegistersHandler.cpp
N64System/MemoryHandler/RomMemoryHandler.cpp
N64System/MemoryHandler/SerialInterfaceHandler.cpp
N64System/MemoryHandler/SPRegistersHandler.cpp
N64System/MemoryHandler/VideoInterfaceHandler.cpp
N64System/Mips/Dma.cpp
N64System/Mips/Disk.cpp
N64System/Mips/Eeprom.cpp
N64System/Mips/FlashRam.cpp
N64System/Mips/GBCart.cpp
N64System/Mips/MemoryVirtualMem.cpp
N64System/Mips/Mempak.cpp
@ -32,7 +44,6 @@ add_library(Project64-core STATIC
N64System/Mips/Register.cpp
N64System/Mips/Rumblepak.cpp
N64System/Mips/Transferpak.cpp
N64System/Mips/Sram.cpp
N64System/Mips/SystemEvents.cpp
N64System/Mips/SystemTiming.cpp
N64System/Mips/TLB.cpp
@ -53,6 +64,9 @@ add_library(Project64-core STATIC
N64System/Recompiler/x86/x86ops.cpp
N64System/Recompiler/x86/x86RecompilerOps.cpp
N64System/Recompiler/x86/x86RegInfo.cpp
N64System/SaveType/Eeprom.cpp
N64System/SaveType/FlashRam.cpp
N64System/SaveType/Sram.cpp
N64System/FramePerSecond.cpp
N64System/N64System.cpp
N64System/N64Rom.cpp

View File

@ -6,6 +6,7 @@
#include <Project64-core/Version.h>
#include <Project64-core/TraceModulesProject64.h>
#include <Project64-core/Settings.h>
#include <Project64-core/Settings/SettingType/SettingsType-Application.h>
#include <Project64-core/N64System/N64System.h>
#include <Project64-core/N64System/SystemGlobals.h>
#include <Common/Trace.h>

View File

@ -516,7 +516,7 @@ bool CMipsMemoryVM::FilterArmException(uint32_t MemAddress, mcontext_t & context
return true;
}
if (OpCode32->uint16.opcode == ArmLDRH_W)
/*if (OpCode32->uint16.opcode == ArmLDRH_W)
{
// f833 c001 ldrh.w ip, [r3, r1]
g_MMU->LH_NonMemory((MemAddress | 0x80000000) ^ 2, ArmRegisters[OpCode32->uint16.rt]);
@ -539,7 +539,7 @@ bool CMipsMemoryVM::FilterArmException(uint32_t MemAddress, mcontext_t & context
!g_MMU->LH_NonMemory((MemAddress | 0x80000000) ^ 2, ArmRegisters[OpCode32->reg_cond.rt], false);
context.arm_pc = context.arm_pc + 4;
return true;
}
}*/
if (OpCode32->reg_cond_imm5.opcode == 3 && OpCode32->reg_cond_imm5.opcode1 == 0 && OpCode32->reg_cond_imm5.opcode2 == 1 && OpCode32->reg_cond_imm5.opcode3 == 0)
{

View File

@ -0,0 +1 @@
#include "../stdafx.h"

View File

@ -122,6 +122,7 @@ private:
friend class CSystemTimer;
friend class CRecompiler;
friend class CX86RecompilerOps;
friend class CArmRecompilerOps;
friend class CMipsMemoryVM;
friend class CInterpreterCPU;
friend class R4300iOp32;

View File

@ -24,7 +24,7 @@ CPU_Message("%s: %X t2: %X", __FUNCTION__,TestValue, g_Reg->m_GPR[10].UW[0]);
}*/
void CArmRecompilerOps::PreCompileOpcode(void)
{
if (m_PipelineStage != DELAY_SLOT_DONE)
if (m_PipelineStage != PIPELINE_STAGE_DELAY_SLOT_DONE)
{
CPU_Message(" %X %s", m_CompilePC, R4300iOpcodeName(m_Opcode.Hex, m_CompilePC));
}
@ -39,7 +39,7 @@ void CArmRecompilerOps::PreCompileOpcode(void)
CallFunction(AddressOf(&TestFunc), "TestFunc");
m_RegWorkingSet.AfterCallDirect();*/
/*if ((m_CompilePC == 0x8027F564 || m_CompilePC == 0x8027F574) && m_PipelineStage == NORMAL)
/*if ((m_CompilePC == 0x8027F564 || m_CompilePC == 0x8027F574) && m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
m_RegWorkingSet.BeforeCallDirect();
MoveConstToArmReg(Arm_R0,(uint32_t)&TestValue, "TestValue");
@ -64,7 +64,7 @@ void CArmRecompilerOps::PreCompileOpcode(void)
}
}*/
/*if (m_CompilePC == 0x8027F564 && m_PipelineStage == NORMAL)
/*if (m_CompilePC == 0x8027F564 && m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
m_RegWorkingSet.WriteBackRegisters();
UpdateCounters(m_RegWorkingSet,false,true);
@ -88,12 +88,17 @@ void CArmRecompilerOps::PostCompileOpcode(void)
m_RegWorkingSet.ResetRegProtection();
}
CArmRecompilerOps::CArmRecompilerOps() :
m_PipelineStage(NORMAL)
CArmRecompilerOps::CArmRecompilerOps(CMipsMemoryVM & MMU) :
m_MMU(MMU),
m_PipelineStage(PIPELINE_STAGE_NORMAL)
{
memset(&m_Opcode, 0, sizeof(m_Opcode));
}
CArmRecompilerOps::~CArmRecompilerOps()
{
}
bool DelaySlotEffectsCompare(uint32_t PC, uint32_t Reg1, uint32_t Reg2);
void CArmRecompilerOps::Compile_TrapCompare(TRAP_COMPARE CompareType)
@ -192,7 +197,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
static bool EffectDelaySlot;
OPCODE Command = { 0 };
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
if (CompareType == CompareTypeCOP1BCF || CompareType == CompareTypeCOP1BCT)
{
@ -322,7 +327,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
{
g_Notify->BreakPoint(__FILE__, __LINE__);
}
MoveConstToVariable(m_Section->m_Jump.TargetPC, &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable(m_Section->m_Jump.TargetPC, &g_System->m_JumpToLocation, "System::m_JumpToLocation");
}
else if (m_Section->m_Cont.FallThrough)
{
@ -330,7 +335,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
{
g_Notify->BreakPoint(__FILE__, __LINE__);
}
MoveConstToVariable(m_Section->m_Cont.TargetPC, &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable(m_Section->m_Cont.TargetPC, &g_System->m_JumpToLocation, "System::m_JumpToLocation");
}
if (m_Section->m_Jump.LinkLocation != nullptr || m_Section->m_Jump.LinkLocation2 != nullptr)
@ -342,7 +347,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
CPU_Message(" ");
CPU_Message(" %s:", m_Section->m_Jump.BranchLabel.c_str());
LinkJump(m_Section->m_Jump);
MoveConstToVariable(m_Section->m_Jump.TargetPC, &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable(m_Section->m_Jump.TargetPC, &g_System->m_JumpToLocation, "System::m_JumpToLocation");
}
if (m_Section->m_Cont.LinkLocation != nullptr || m_Section->m_Cont.LinkLocation2 != nullptr)
{
@ -353,7 +358,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
CPU_Message(" ");
CPU_Message(" %s:", m_Section->m_Cont.BranchLabel.c_str());
LinkJump(m_Section->m_Cont);
MoveConstToVariable(m_Section->m_Cont.TargetPC, &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable(m_Section->m_Cont.TargetPC, &g_System->m_JumpToLocation, "System::m_JumpToLocation");
}
if (DelayLinkLocation)
{
@ -370,7 +375,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
}
m_PipelineStage = PIPELINE_STAGE_DO_DELAY_SLOT;
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
if (EffectDelaySlot)
{
@ -461,7 +466,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
}
}
m_Section->GenerateSectionLinkage();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else
{
@ -474,7 +479,7 @@ void CArmRecompilerOps::Compile_Branch(BRANCH_COMPARE CompareType, BRANCH_TYPE B
void CArmRecompilerOps::Compile_BranchLikely(BRANCH_COMPARE CompareType, bool Link)
{
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
if (CompareType == CompareTypeCOP1BCF || CompareType == CompareTypeCOP1BCT)
{
@ -556,7 +561,7 @@ void CArmRecompilerOps::Compile_BranchLikely(BRANCH_COMPARE CompareType, bool Li
{
LinkJump(m_Section->m_Jump);
MoveConstToVariable(m_Section->m_Jump.TargetPC, &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable(m_Section->m_Jump.TargetPC, &g_System->m_JumpToLocation, "System::m_JumpToLocation");
OverflowDelaySlot(false);
CPU_Message(" ");
CPU_Message(" %s:", m_Section->m_Cont.BranchLabel.c_str());
@ -579,7 +584,7 @@ void CArmRecompilerOps::Compile_BranchLikely(BRANCH_COMPARE CompareType, bool Li
{
m_Section->m_Jump.RegSet = m_RegWorkingSet;
m_Section->GenerateSectionLinkage();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else
{
@ -590,16 +595,16 @@ void CArmRecompilerOps::Compile_BranchLikely(BRANCH_COMPARE CompareType, bool Li
g_Notify->BreakPoint(__FILE__, __LINE__);
}
m_Section->GenerateSectionLinkage();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
}
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
ResetRegProtection();
m_Section->m_Jump.RegSet = m_RegWorkingSet;
m_Section->GenerateSectionLinkage();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else if (HaveDebugger())
{
@ -1835,11 +1840,11 @@ void CArmRecompilerOps::COP1_BCT_Compare()
void CArmRecompilerOps::J()
{
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
if ((m_CompilePC & 0xFFC) == 0xFFC)
{
MoveConstToVariable((m_CompilePC & 0xF0000000) + (m_Opcode.target << 2), &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable((m_CompilePC & 0xF0000000) + (m_Opcode.target << 2), &g_System->m_JumpToLocation, "System::m_JumpToLocation");
OverflowDelaySlot(false);
return;
}
@ -1859,11 +1864,11 @@ void CArmRecompilerOps::J()
m_Section->m_Jump.LinkLocation2 = nullptr;
m_PipelineStage = PIPELINE_STAGE_DO_DELAY_SLOT;
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
m_Section->m_Jump.RegSet = m_RegWorkingSet;
m_Section->GenerateSectionLinkage();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else if (HaveDebugger())
{
@ -1873,7 +1878,7 @@ void CArmRecompilerOps::J()
void CArmRecompilerOps::JAL()
{
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
Map_GPR_32bit(31, true, -1);
MoveVariableToArmReg(_PROGRAM_COUNTER, "_PROGRAM_COUNTER", GetMipsRegMapLo(31));
@ -1886,7 +1891,7 @@ void CArmRecompilerOps::JAL()
if ((m_CompilePC & 0xFFC) == 0xFFC)
{
MoveConstToVariable((m_CompilePC & 0xF0000000) + (m_Opcode.target << 2), &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToVariable((m_CompilePC & 0xF0000000) + (m_Opcode.target << 2), &g_System->m_JumpToLocation, "System::m_JumpToLocation");
OverflowDelaySlot(false);
return;
}
@ -1905,7 +1910,7 @@ void CArmRecompilerOps::JAL()
m_Section->m_Jump.LinkLocation2 = nullptr;
m_PipelineStage = PIPELINE_STAGE_DO_DELAY_SLOT;
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
if (m_Section->m_JumpSection)
{
@ -1930,7 +1935,7 @@ void CArmRecompilerOps::JAL()
CompileExit((uint32_t)-1, (uint32_t)-1, m_RegWorkingSet, bCheck ? CExitInfo::Normal : CExitInfo::Normal_NoSysCheck);
}
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else
{
@ -2800,20 +2805,20 @@ void CArmRecompilerOps::SPECIAL_SRAV()
void CArmRecompilerOps::SPECIAL_JR()
{
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
if ((m_CompilePC & 0xFFC) == 0xFFC)
{
if (IsKnown(m_Opcode.rs) && IsMapped(m_Opcode.rs))
{
MoveArmRegToVariable(GetMipsRegMapLo(m_Opcode.rs), &R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveArmRegToVariable(GetMipsRegMapLo(m_Opcode.rs), &g_System->m_JumpToLocation, "System::m_JumpToLocation");
m_RegWorkingSet.WriteBackRegisters();
}
else
{
m_RegWorkingSet.WriteBackRegisters();
MoveVariableToArmReg(&_GPR[m_Opcode.rs].UW[0], CRegName::GPR_Lo[m_Opcode.rs], Arm_R0);
MoveConstToArmReg(Arm_R1, (uint32_t)&R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToArmReg(Arm_R1, (uint32_t)&g_System->m_JumpToLocation, "System::m_JumpToLocation");
StoreArmRegToArmRegPointer(Arm_R0, Arm_R1, 0);
}
OverflowDelaySlot(true);
@ -2849,7 +2854,7 @@ void CArmRecompilerOps::SPECIAL_JR()
}
m_PipelineStage = PIPELINE_STAGE_DO_DELAY_SLOT;
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
if (DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, 0))
{
@ -2884,7 +2889,7 @@ void CArmRecompilerOps::SPECIAL_JR()
m_Section->GenerateSectionLinkage();
}
}
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else if (HaveDebugger())
{
@ -2894,7 +2899,7 @@ void CArmRecompilerOps::SPECIAL_JR()
void CArmRecompilerOps::SPECIAL_JALR()
{
if (m_PipelineStage == NORMAL)
if (m_PipelineStage == PIPELINE_STAGE_NORMAL)
{
if (DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, 0) && (m_CompilePC & 0xFFC) != 0xFFC)
{
@ -2913,7 +2918,7 @@ void CArmRecompilerOps::SPECIAL_JALR()
if ((m_CompilePC & 0xFFC) == 0xFFC)
{
ArmReg TempRegVar = m_RegWorkingSet.Map_TempReg(Arm_Any, -1, false);
MoveConstToArmReg(TempRegVar, (uint32_t)&R4300iOp::m_JumpToLocation, "R4300iOp::m_JumpToLocation");
MoveConstToArmReg(TempRegVar, (uint32_t)&g_System->m_JumpToLocation, "System::m_JumpToLocation");
ArmReg TempRegRs = Arm_Unknown;
if (IsKnown(m_Opcode.rs) && IsMapped(m_Opcode.rs))
@ -2941,7 +2946,7 @@ void CArmRecompilerOps::SPECIAL_JALR()
m_PipelineStage = PIPELINE_STAGE_DO_DELAY_SLOT;
}
else if (m_PipelineStage == DELAY_SLOT_DONE)
else if (m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT_DONE)
{
if (DelaySlotEffectsCompare(m_CompilePC, m_Opcode.rs, 0))
{
@ -2963,7 +2968,7 @@ void CArmRecompilerOps::SPECIAL_JALR()
m_Section->GenerateSectionLinkage();
}
}
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
else if (HaveDebugger())
{
@ -2974,7 +2979,7 @@ void CArmRecompilerOps::SPECIAL_JALR()
void CArmRecompilerOps::SPECIAL_SYSCALL()
{
CompileExit(m_CompilePC, (uint32_t)-1, m_RegWorkingSet, CExitInfo::DoSysCall);
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
void CArmRecompilerOps::SPECIAL_MFLO()
@ -4000,7 +4005,7 @@ void CArmRecompilerOps::COP0_CO_ERET()
UpdateCounters(m_RegWorkingSet, true, true);
CompileExit(m_CompilePC, (uint32_t)-1, m_RegWorkingSet, CExitInfo::Normal);
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
// COP1 functions
@ -4693,7 +4698,7 @@ void CArmRecompilerOps::UnknownOpcode()
MoveConstToVariable(m_Opcode.Hex, &R4300iOp::m_Opcode.Hex, "R4300iOp::m_Opcode.Hex");
CallFunction((void *)R4300iOp::UnknownOpcode, "R4300iOp::UnknownOpcode");
ExitCodeBlock();
if (m_PipelineStage == NORMAL) { m_PipelineStage = END_BLOCK; }
if (m_PipelineStage == PIPELINE_STAGE_NORMAL) { m_PipelineStage = PIPELINE_STAGE_END_BLOCK; }
}
void CArmRecompilerOps::EnterCodeBlock()
@ -5276,14 +5281,14 @@ void CArmRecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
ExitCodeBlock();
break;
case CExitInfo::DoSysCall:
bDelay = m_PipelineStage == JUMP || m_PipelineStage == DELAY_SLOT;
bDelay = m_PipelineStage == PIPELINE_STAGE_JUMP || m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT;
MoveConstToArmReg(Arm_R1, (uint32_t)bDelay, bDelay ? "true" : "false");
MoveConstToArmReg(Arm_R0, (uint32_t)g_Reg);
CallFunction(AddressOf(&CRegisters::DoSysCallException), "CRegisters::DoSysCallException");
ExitCodeBlock();
break;
case CExitInfo::COP1_Unuseable:
bDelay = m_PipelineStage == JUMP || m_PipelineStage == DELAY_SLOT;
bDelay = m_PipelineStage == PIPELINE_STAGE_JUMP || m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT;
MoveConstToArmReg(Arm_R2, (uint32_t)1, "1");
MoveConstToArmReg(Arm_R1, (uint32_t)bDelay, bDelay ? "true" : "false");
MoveConstToArmReg(Arm_R0, (uint32_t)g_Reg);
@ -5291,7 +5296,7 @@ void CArmRecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
ExitCodeBlock();
break;
case CExitInfo::TLBReadMiss:
bDelay = m_PipelineStage == JUMP || m_PipelineStage == DELAY_SLOT;
bDelay = m_PipelineStage == PIPELINE_STAGE_JUMP || m_PipelineStage == PIPELINE_STAGE_DELAY_SLOT;
MoveVariableToArmReg(g_TLBLoadAddress, "g_TLBLoadAddress", Arm_R2);
MoveConstToArmReg(Arm_R1, (uint32_t)bDelay, bDelay ? "true" : "false");
MoveConstToArmReg(Arm_R0, (uint32_t)g_Reg);
@ -5868,12 +5873,12 @@ void CArmRecompilerOps::SetCurrentSection(CCodeSection * section)
m_Section = section;
}
void CArmRecompilerOps::SetNextStepType(STEP_TYPE StepType)
void CArmRecompilerOps::SetNextStepType(PIPELINE_STAGE StepType)
{
m_PipelineStage = StepType;
}
STEP_TYPE CArmRecompilerOps::GetNextStepType(void)
PIPELINE_STAGE CArmRecompilerOps::GetNextStepType(void)
{
return m_PipelineStage;
}
@ -5970,7 +5975,7 @@ void CArmRecompilerOps::OverflowDelaySlot(bool TestTimer)
CallFunction(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
}
MoveConstToVariable(JUMP, &R4300iOp::m_PipelineStage, "R4300iOp::m_PipelineStage");
MoveConstToVariable(PIPELINE_STAGE_JUMP, &g_System->m_PipelineStage, "g_System->m_PipelineStage");
if (TestTimer)
{
@ -5991,7 +5996,7 @@ void CArmRecompilerOps::OverflowDelaySlot(bool TestTimer)
}
ExitCodeBlock();
m_PipelineStage = END_BLOCK;
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
}
void CArmRecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
@ -6012,7 +6017,7 @@ void CArmRecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
}
uint32_t PAddr;
if (!g_TransVaddr->TranslateVaddr(VAddr, PAddr))
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
CPU_Message("%s\nFailed to translate address: %08X", __FUNCTION__, VAddr);
if (ShowUnhandledMemory())
@ -6073,9 +6078,10 @@ void CArmRecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
case 0x04040004: MoveConstToVariable(Value, &g_Reg->SP_DRAM_ADDR_REG, "SP_DRAM_ADDR_REG"); break;
case 0x04040008:
m_RegWorkingSet.BeforeCallDirect();
PushImm32(0xFFFFFFFF);
ArmBreakPoint(__FILE__, __LINE__);
/*PushImm32(0xFFFFFFFF);
PushImm32(Value);
PushImm32(PAddr & 0x1FFFFFFF);
PushImm32(PAddr & 0x1FFFFFFF);*/
MoveConstToArmReg(Arm_R0, (uint32_t)(MemoryHandler *)&g_MMU->m_SPRegistersHandler, "(MemoryHandler *)g_MMU->m_SPRegistersHandler");
CallFunction((void *)((long**)(MemoryHandler *)&g_MMU->m_SPRegistersHandler)[0][1], "SPRegistersHandler::Write32");
m_RegWorkingSet.AfterCallDirect();
@ -6323,8 +6329,8 @@ void CArmRecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
if (g_System->bFixedAudio())
{
ArmBreakPoint(__FILE__, __LINE__);
MoveConstToArmReg(Arm_R0, (uint32_t)g_Audio, "g_Audio");
CallFunction(AddressOf(&CAudio::LenChanged), "LenChanged");
//MoveConstToArmReg(Arm_R0, (uint32_t)g_Audio, "g_Audio");
//CallFunction(AddressOf(&CAudio::LenChanged), "LenChanged");
}
else
{
@ -6529,7 +6535,7 @@ void CArmRecompilerOps::SW_Register(ArmReg Reg, uint32_t VAddr)
}
uint32_t PAddr;
if (!g_TransVaddr->TranslateVaddr(VAddr, PAddr))
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
CPU_Message("%s\nFailed to translate address: %08X", __FUNCTION__, VAddr);
if (ShowUnhandledMemory())
@ -6576,9 +6582,10 @@ void CArmRecompilerOps::SW_Register(ArmReg Reg, uint32_t VAddr)
case 0x04040004: MoveArmRegToVariable(Reg, &g_Reg->SP_DRAM_ADDR_REG, "SP_DRAM_ADDR_REG"); break;
case 0x04040008:
m_RegWorkingSet.BeforeCallDirect();
PushImm32(0xFFFFFFFF);
ArmBreakPoint(__FILE__, __LINE__);
/*PushImm32(0xFFFFFFFF);
Push(Reg);
PushImm32(PAddr & 0x1FFFFFFF);
PushImm32(PAddr & 0x1FFFFFFF);*/
MoveConstToArmReg(Arm_R0, (uint32_t)(MemoryHandler *)&g_MMU->m_SPRegistersHandler, "(MemoryHandler *)g_MMU->m_SPRegistersHandler");
CallFunction((void *)((long**)(MemoryHandler *)&g_MMU->m_SPRegistersHandler)[0][1], "SPRegistersHandler::Write32");
m_RegWorkingSet.AfterCallDirect();
@ -6641,11 +6648,12 @@ void CArmRecompilerOps::SW_Register(ArmReg Reg, uint32_t VAddr)
switch (PAddr)
{
case 0x04300000:
MoveArmRegToVariable(Reg, &CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]");
ArmBreakPoint(__FILE__, __LINE__);
/*MoveArmRegToVariable(Reg, &CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]");
MoveConstToVariable(PAddr, &CMipsMemoryVM::m_MemLookupAddress, "m_MemLookupAddress");
m_RegWorkingSet.BeforeCallDirect();
CallFunction((void *)CMipsMemoryVM::Write32MIPSInterface, "CMipsMemoryVM::Write32MIPSInterface");
m_RegWorkingSet.AfterCallDirect();
m_RegWorkingSet.AfterCallDirect();*/
break;
case 0x0430000C:
MoveArmRegToVariable(Reg, &CMipsMemoryVM::RegModValue, "CMipsMemoryVM::RegModValue");
@ -6744,8 +6752,9 @@ void CArmRecompilerOps::SW_Register(ArmReg Reg, uint32_t VAddr)
m_RegWorkingSet.BeforeCallDirect();
if (g_System->bFixedAudio())
{
MoveConstToArmReg(Arm_R0, (uint32_t)g_Audio, "g_Audio");
CallFunction(AddressOf(&CAudio::LenChanged), "LenChanged");
ArmBreakPoint(__FILE__, __LINE__);
//MoveConstToArmReg(Arm_R0, (uint32_t)g_Audio, "g_Audio");
//CallFunction(AddressOf(&CAudio::LenChanged), "LenChanged");
}
else
{
@ -6982,7 +6991,7 @@ void CArmRecompilerOps::LB_KnownAddress(ArmReg Reg, uint32_t VAddr, bool SignExt
}
uint32_t PAddr;
if (!g_TransVaddr->TranslateVaddr(VAddr, PAddr))
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
g_Notify->BreakPoint(__FILE__, __LINE__);
return;
@ -7031,7 +7040,7 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
else
{
uint32_t PAddr;
if (!g_TransVaddr->TranslateVaddr(VAddr, PAddr))
if (!m_MMU.VAddrToPAddr(VAddr, PAddr))
{
g_Notify->BreakPoint(__FILE__, __LINE__);
}
@ -7078,13 +7087,14 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
}
break;
case 0x04100000:
m_RegWorkingSet.BeforeCallDirect();
ArmBreakPoint(__FILE__, __LINE__);
/*m_RegWorkingSet.BeforeCallDirect();
MoveConstToArmReg(Arm_R1, PAddr);
MoveConstToArmReg(Arm_R2, (uint32_t)&CMipsMemoryVM::m_MemLookupAddress, "m_MemLookupAddress");
StoreArmRegToArmRegPointer(Arm_R1, Arm_R2, 0);
CallFunction((void *)CMipsMemoryVM::Load32DPCommand, "CMipsMemoryVM::Load32DPCommand");
m_RegWorkingSet.AfterCallDirect();
MoveVariableToArmReg(&CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]", Reg);
MoveVariableToArmReg(&CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]", Reg);*/
break;
case 0x04300000:
switch (PAddr)
@ -7104,14 +7114,15 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
switch (PAddr)
{
case 0x04400010:
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
ArmBreakPoint(__FILE__, __LINE__);
/*m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
UpdateCounters(m_RegWorkingSet, false, true);
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_System->CountPerOp());
m_RegWorkingSet.BeforeCallDirect();
MoveConstToArmReg(Arm_R0, (uint32_t)g_MMU);
CallFunction(AddressOf(&CMipsMemoryVM::UpdateHalfLine), "CMipsMemoryVM::UpdateHalfLine");
m_RegWorkingSet.AfterCallDirect();
MoveVariableToArmReg((void *)&g_MMU->m_HalfLine, "MMU->m_HalfLine", Reg);
MoveVariableToArmReg((void *)&g_MMU->m_HalfLine, "MMU->m_HalfLine", Reg);*/
break;
default:
MoveConstToArmReg(Reg, (uint32_t)0);
@ -7126,7 +7137,8 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
case 0x04500004:
if (g_System->bFixedAudio())
{
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
ArmBreakPoint(__FILE__, __LINE__);
/*m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() - g_System->CountPerOp());
UpdateCounters(m_RegWorkingSet, false, true);
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_System->CountPerOp());
m_RegWorkingSet.BeforeCallDirect();
@ -7135,7 +7147,7 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
MoveConstToArmReg(Arm_R1, (uint32_t)&m_TempValue, "m_TempValue");
StoreArmRegToArmRegPointer(Arm_R0, Arm_R1, 0);
m_RegWorkingSet.AfterCallDirect();
MoveVariableToArmReg(&m_TempValue, "m_TempValue", Reg);
MoveVariableToArmReg(&m_TempValue, "m_TempValue", Reg);*/
}
else
{
@ -7157,13 +7169,14 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
case 0x0450000C:
if (g_System->bFixedAudio())
{
m_RegWorkingSet.BeforeCallDirect();
ArmBreakPoint(__FILE__, __LINE__);
/*m_RegWorkingSet.BeforeCallDirect();
MoveConstToArmReg(Arm_R0, (uint32_t)g_Audio, "g_Audio");
CallFunction(AddressOf(&CAudio::GetStatus), "CAudio::GetStatus");
MoveConstToArmReg(Arm_R1, (uint32_t)&m_TempValue, "m_TempValue");
StoreArmRegToArmRegPointer(Arm_R0, Arm_R1, 0);
m_RegWorkingSet.AfterCallDirect();
MoveVariableToArmReg(&m_TempValue, "m_TempValue", Reg);
MoveVariableToArmReg(&m_TempValue, "m_TempValue", Reg);*/
}
else
{
@ -7279,13 +7292,14 @@ void CArmRecompilerOps::LW_KnownAddress(ArmReg Reg, uint32_t VAddr)
}
break;
case 0x06000000:
m_RegWorkingSet.BeforeCallDirect();
ArmBreakPoint(__FILE__, __LINE__);
/*m_RegWorkingSet.BeforeCallDirect();
MoveConstToArmReg(Arm_R1, PAddr);
MoveConstToArmReg(Arm_R2, (uint32_t)&CMipsMemoryVM::m_MemLookupAddress, "m_MemLookupAddress");
StoreArmRegToArmRegPointer(Arm_R1, Arm_R2, 0);
CallFunction((void *)CMipsMemoryVM::Load32CartridgeDomain1Address1, "CMipsMemoryVM::Load32CartridgeDomain1Address1");
m_RegWorkingSet.AfterCallDirect();
MoveVariableToArmReg(&CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]", Reg);
MoveVariableToArmReg(&CMipsMemoryVM::m_MemLookupValue.UW[0], "CMipsMemoryVM::m_MemLookupValue.UW[0]", Reg);*/
break;
default:
if ((PAddr & 0xF0000000) == 0x10000000 && (PAddr - 0x10000000) < g_Rom->GetRomSize())

View File

@ -12,7 +12,8 @@ class CArmRecompilerOps :
private CGameSettings
{
public:
CArmRecompilerOps();
CArmRecompilerOps(CMipsMemoryVM & MMU);
~CArmRecompilerOps();
// Trap functions
void Compile_TrapCompare(TRAP_COMPARE CompareType);
@ -207,8 +208,8 @@ private:
void SetCurrentPC(uint32_t ProgramCounter);
uint32_t GetCurrentPC(void);
void SetCurrentSection(CCodeSection * section);
void SetNextStepType(STEP_TYPE StepType);
STEP_TYPE GetNextStepType( void );
void SetNextStepType(PIPELINE_STAGE StepType);
PIPELINE_STAGE GetNextStepType( void );
const OPCODE & GetOpcode ( void ) const;
void PreCompileOpcode(void);
void PostCompileOpcode ( void );
@ -268,7 +269,8 @@ private:
void OverflowDelaySlot(bool TestTimer);
EXIT_LIST m_ExitInfo;
STEP_TYPE m_PipelineStage;
CMipsMemoryVM & m_MMU;
PIPELINE_STAGE m_PipelineStage;
uint32_t m_CompilePC;
OPCODE m_Opcode;
CCodeSection * m_Section;

View File

@ -35,7 +35,7 @@ CCodeBlock::CCodeBlock(CMipsMemoryVM & MMU, uint32_t VAddrEnter, uint8_t * Compi
#if defined(__i386__) || defined(_M_IX86)
m_RecompilerOps = new CX86RecompilerOps(MMU);
#elif defined(__arm__) || defined(_M_ARM)
m_RecompilerOps = new CArmRecompilerOps;
m_RecompilerOps = new CArmRecompilerOps(MMU);
#endif
if (m_RecompilerOps == nullptr)
{

View File

@ -10463,7 +10463,7 @@ void CX86RecompilerOps::SW_Const(uint32_t Value, uint32_t VAddr)
Call_Direct((void *)((long**)(MemoryHandler *)&g_MMU->m_VideoInterfaceHandler)[0][1], "VideoInterfaceHandler::Write32");
#else
PushImm32((uint32_t)&g_MMU->m_VideoInterfaceHandler);
Call_Direct(AddressOf(&m_VideoInterfaceHandler::Write32), "m_VideoInterfaceHandler::Write32");
Call_Direct((void *)((long**)(MemoryHandler *)&g_MMU->m_VideoInterfaceHandler)[0][1], "VideoInterfaceHandler::Write32");
AddConstToX86Reg(x86_ESP, 16);
#endif
m_RegWorkingSet.AfterCallDirect();

View File

@ -0,0 +1 @@
#include "../stdafx.h"