From a6f599e263351e21b7d165929ab2a6598de283c4 Mon Sep 17 00:00:00 2001 From: dgis Date: Mon, 17 Dec 2018 21:24:16 +0000 Subject: [PATCH] --- ReadMe.txt | 1 + app/src/main/cpp/emu48-jni.c | 399 ++++++++++++------ app/src/main/cpp/win32-layer.c | 6 + .../com/regis/cosnier/emu48/MainActivity.java | 66 +-- .../com/regis/cosnier/emu48/NativeLib.java | 6 +- .../regis/cosnier/emu48/SettingsActivity.java | 6 + 6 files changed, 327 insertions(+), 157 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index 2e110a1..4967695 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -13,6 +13,7 @@ NOT WORKING - Serial Ports (Wire or Ir) TODO +- Permission issues when reopening document after an OS restart - Change settings per settings - Support 8bits images - Put the KML title in the header of the menu in the drawer diff --git a/app/src/main/cpp/emu48-jni.c b/app/src/main/cpp/emu48-jni.c index 4e96f95..1ed16b0 100644 --- a/app/src/main/cpp/emu48-jni.c +++ b/app/src/main/cpp/emu48-jni.c @@ -106,135 +106,6 @@ int openFileFromContentResolver(const TCHAR * url, int writeAccess) { return result; } -JNIEXPORT void JNICALL Java_com_regis_cosnier_emu48_NativeLib_setConfiguration(JNIEnv *env, jobject thisz, - jint settingsRealspeed, jint settingsGrayscale, jint settingsAutosave, - jint settingsAutosaveonexit, jint settingsObjectloadwarning, jint settingsAlwaysdisplog, - jint settingsPort1en, jint settingsPort1wr, - jint settingsPort2len, jint settingsPort2wr, jstring settingsPort2load) { - - bRealSpeed = settingsRealspeed; - bAutoSave = settingsAutosave; - bAutoSaveOnExit = settingsAutosaveonexit; - bLoadObjectWarning = settingsObjectloadwarning; - bAlwaysDisplayLog = settingsAlwaysdisplog; - - SetSpeed(bRealSpeed); // set speed - - // LCD grayscale checkbox has been changed - if (bGrayscale != (BOOL)settingsGrayscale) { - UINT nOldState = SwitchToState(SM_INVALID); - SetLcdMode(!bGrayscale); // set new display mode - SwitchToState(nOldState); - } - - //SettingsMemoryProc - LPCTSTR szActPort2Filename = _T(""); - - BOOL bPort2CfgChange = FALSE; - BOOL bPort2AttChange = FALSE; - - // port1 - if (Chipset.Port1Size && (cCurrentRomType!='X' || cCurrentRomType!='2' || cCurrentRomType!='Q')) // CdB for HP: add apples - { - UINT nOldState = SwitchToState(SM_SLEEP); - // save old card status - BYTE byCardsStatus = Chipset.cards_status; - - // port1 disabled? - Chipset.cards_status &= ~(PORT1_PRESENT | PORT1_WRITE); - if (settingsPort1en) - { - Chipset.cards_status |= PORT1_PRESENT; - if (settingsPort1wr) - Chipset.cards_status |= PORT1_WRITE; - } - - // changed card status in slot1? - if ( ((byCardsStatus ^ Chipset.cards_status) & (PORT1_PRESENT | PORT1_WRITE)) != 0 - && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 - ) - { - Chipset.HST |= MP; // set Module Pulled - IOBit(SRQ2,NINT,FALSE); // set NINT to low - Chipset.SoftInt = TRUE; // set interrupt - bInterrupt = TRUE; - } - SwitchToState(nOldState); - } - // HP48SX/GX port2 change settings detection - if (cCurrentRomType=='S' || cCurrentRomType=='G' || cCurrentRomType==0) - { - //bPort2IsShared = settingsPort2isshared; - const char * szNewPort2Filename = NULL; - const char *settingsPort2loadUTF8 = NULL; - if(settingsPort2load) { - settingsPort2loadUTF8 = (*env)->GetStringUTFChars(env, settingsPort2load , NULL); - szNewPort2Filename = settingsPort2loadUTF8; - } else - szNewPort2Filename = _T("SHARED.BIN"); - - if(_tcscmp(szPort2Filename, szNewPort2Filename) != 0) { - _tcscpy(szPort2Filename, szNewPort2Filename); - szActPort2Filename = szPort2Filename; - bPort2CfgChange = TRUE; // slot2 configuration changed - - // R/W port - if ( *szActPort2Filename != 0 - && (BOOL) settingsAlwaysdisplog != bPort2Writeable) - { - bPort2AttChange = TRUE; // slot2 file R/W attribute changed - bPort2CfgChange = TRUE; // slot2 configuration changed - } - } - if(settingsPort2loadUTF8) - (*env)->ReleaseStringUTFChars(env, settingsPort2load, settingsPort2loadUTF8); - } - - if (bPort2CfgChange) // slot2 configuration changed - { - UINT nOldState = SwitchToState(SM_INVALID); - - UnmapPort2(); // unmap port2 - -// if (bPort2AttChange) // slot2 R/W mode changed -// { -// DWORD dwFileAtt; -// -// SetCurrentDirectory(szEmuDirectory); -// dwFileAtt = GetFileAttributes(szActPort2Filename); -// if (dwFileAtt != 0xFFFFFFFF) -// { -// if (IsDlgButtonChecked(hDlg,IDC_PORT2WR)) -// dwFileAtt &= ~FILE_ATTRIBUTE_READONLY; -// else -// dwFileAtt |= FILE_ATTRIBUTE_READONLY; -// -// SetFileAttributes(szActPort2Filename,dwFileAtt); -// } -// SetCurrentDirectory(szCurrentDirectory); -// } - - if (cCurrentRomType) // ROM defined - { - MapPort2(szActPort2Filename); - - // port2 changed and card detection enabled - if ( (bPort2AttChange || Chipset.wPort2Crc != wPort2Crc) - && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 - ) - { - Chipset.HST |= MP; // set Module Pulled - IOBit(SRQ2,NINT,FALSE); // set NINT to low - Chipset.SoftInt = TRUE; // set interrupt - bInterrupt = TRUE; - } - // save fingerprint of port2 - Chipset.wPort2Crc = wPort2Crc; - } - SwitchToState(nOldState); - } -} - JNIEXPORT void JNICALL Java_com_regis_cosnier_emu48_NativeLib_start(JNIEnv *env, jobject thisz, jobject assetMgr, jobject bitmapMainScreen0, jobject activity, jobject view) { @@ -590,6 +461,276 @@ JNIEXPORT void JNICALL Java_com_regis_cosnier_emu48_NativeLib_onBackupDelete(JNI OnBackupDelete(); } +//JNIEXPORT void JNICALL Java_com_regis_cosnier_emu48_NativeLib_setConfiguration(JNIEnv *env, jobject thisz, +// jint settingsRealspeed, jint settingsGrayscale, jint settingsAutosave, +// jint settingsAutosaveonexit, jint settingsObjectloadwarning, jint settingsAlwaysdisplog, +// jint settingsPort1en, jint settingsPort1wr, +// jint settingsPort2len, jint settingsPort2wr, jstring settingsPort2load) { +// +// bRealSpeed = settingsRealspeed; +// bAutoSave = settingsAutosave; +// bAutoSaveOnExit = settingsAutosaveonexit; +// bLoadObjectWarning = settingsObjectloadwarning; +// bAlwaysDisplayLog = settingsAlwaysdisplog; +// +// SetSpeed(bRealSpeed); // set speed +// +// // LCD grayscale checkbox has been changed +// if (bGrayscale != (BOOL)settingsGrayscale) { +// UINT nOldState = SwitchToState(SM_INVALID); +// SetLcdMode(!bGrayscale); // set new display mode +// SwitchToState(nOldState); +// } +// +// //SettingsMemoryProc +// LPCTSTR szActPort2Filename = _T(""); +// +// BOOL bPort2CfgChange = FALSE; +// BOOL bPort2AttChange = FALSE; +// +// // port1 +// if (Chipset.Port1Size && (cCurrentRomType!='X' || cCurrentRomType!='2' || cCurrentRomType!='Q')) // CdB for HP: add apples +// { +// UINT nOldState = SwitchToState(SM_SLEEP); +// // save old card status +// BYTE byCardsStatus = Chipset.cards_status; +// +// // port1 disabled? +// Chipset.cards_status &= ~(PORT1_PRESENT | PORT1_WRITE); +// if (settingsPort1en) +// { +// Chipset.cards_status |= PORT1_PRESENT; +// if (settingsPort1wr) +// Chipset.cards_status |= PORT1_WRITE; +// } +// +// // changed card status in slot1? +// if ( ((byCardsStatus ^ Chipset.cards_status) & (PORT1_PRESENT | PORT1_WRITE)) != 0 +// && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 +// ) +// { +// Chipset.HST |= MP; // set Module Pulled +// IOBit(SRQ2,NINT,FALSE); // set NINT to low +// Chipset.SoftInt = TRUE; // set interrupt +// bInterrupt = TRUE; +// } +// SwitchToState(nOldState); +// } +// // HP48SX/GX port2 change settings detection +// if (cCurrentRomType=='S' || cCurrentRomType=='G' || cCurrentRomType==0) +// { +// //bPort2IsShared = settingsPort2isshared; +// const char * szNewPort2Filename = NULL; +// const char *settingsPort2loadUTF8 = NULL; +// if(settingsPort2load) { +// settingsPort2loadUTF8 = (*env)->GetStringUTFChars(env, settingsPort2load , NULL); +// szNewPort2Filename = settingsPort2loadUTF8; +// } else +// szNewPort2Filename = _T("SHARED.BIN"); +// +// if(_tcscmp(szPort2Filename, szNewPort2Filename) != 0) { +// _tcscpy(szPort2Filename, szNewPort2Filename); +// szActPort2Filename = szPort2Filename; +// bPort2CfgChange = TRUE; // slot2 configuration changed +// +// // R/W port +// if ( *szActPort2Filename != 0 +// && (BOOL) settingsAlwaysdisplog != bPort2Writeable) +// { +// bPort2AttChange = TRUE; // slot2 file R/W attribute changed +// bPort2CfgChange = TRUE; // slot2 configuration changed +// } +// } +// if(settingsPort2loadUTF8) +// (*env)->ReleaseStringUTFChars(env, settingsPort2load, settingsPort2loadUTF8); +// } +// +// if (bPort2CfgChange) // slot2 configuration changed +// { +// UINT nOldState = SwitchToState(SM_INVALID); +// +// UnmapPort2(); // unmap port2 +// +//// if (bPort2AttChange) // slot2 R/W mode changed +//// { +//// DWORD dwFileAtt; +//// +//// SetCurrentDirectory(szEmuDirectory); +//// dwFileAtt = GetFileAttributes(szActPort2Filename); +//// if (dwFileAtt != 0xFFFFFFFF) +//// { +//// if (IsDlgButtonChecked(hDlg,IDC_PORT2WR)) +//// dwFileAtt &= ~FILE_ATTRIBUTE_READONLY; +//// else +//// dwFileAtt |= FILE_ATTRIBUTE_READONLY; +//// +//// SetFileAttributes(szActPort2Filename,dwFileAtt); +//// } +//// SetCurrentDirectory(szCurrentDirectory); +//// } +// +// if (cCurrentRomType) // ROM defined +// { +// MapPort2(szActPort2Filename); +// +// // port2 changed and card detection enabled +// if ( (bPort2AttChange || Chipset.wPort2Crc != wPort2Crc) +// && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 +// ) +// { +// Chipset.HST |= MP; // set Module Pulled +// IOBit(SRQ2,NINT,FALSE); // set NINT to low +// Chipset.SoftInt = TRUE; // set interrupt +// bInterrupt = TRUE; +// } +// // save fingerprint of port2 +// Chipset.wPort2Crc = wPort2Crc; +// } +// SwitchToState(nOldState); +// } +//} + +JNIEXPORT void JNICALL Java_com_regis_cosnier_emu48_NativeLib_setConfiguration(JNIEnv *env, jobject thisz, jstring key, jint isDynamic, jint intValue1, jint intValue2, jstring stringValue) { + const char *configKey = (*env)->GetStringUTFChars(env, key, NULL) ; + const char *configStringValue = stringValue ? (*env)->GetStringUTFChars(env, stringValue, NULL) : NULL; + + bAutoSave = FALSE; //settingsAutosave; + bAutoSaveOnExit = FALSE; //settingsAutosaveonexit; + bLoadObjectWarning = FALSE; //settingsObjectloadwarning; + + if(_tcscmp(_T("settings_realspeed"), configKey) == 0) { + bRealSpeed = intValue1; + if(isDynamic) + SetSpeed(bRealSpeed); // set speed + } else if(_tcscmp(_T("settings_grayscale"), configKey) == 0) { + // LCD grayscale checkbox has been changed + if (bGrayscale != (BOOL)intValue1) { + UINT nOldState = SwitchToState(SM_INVALID); + SetLcdMode(!bGrayscale); // set new display mode + SwitchToState(nOldState); + } + } else if(_tcscmp(_T("settings_alwaysdisplog"), configKey) == 0) { + bAlwaysDisplayLog = intValue1; + } else if(_tcscmp(_T("settings_port1"), configKey) == 0) { + BOOL settingsPort1en = intValue1; + BOOL settingsPort1wr = intValue2; + // port1 + if (Chipset.Port1Size && (cCurrentRomType!='X' || cCurrentRomType!='2' || cCurrentRomType!='Q')) // CdB for HP: add apples + { + UINT nOldState = SwitchToState(SM_SLEEP); + // save old card status + BYTE byCardsStatus = Chipset.cards_status; + + // port1 disabled? + Chipset.cards_status &= ~(PORT1_PRESENT | PORT1_WRITE); + if (settingsPort1en) + { + Chipset.cards_status |= PORT1_PRESENT; + if (settingsPort1wr) + Chipset.cards_status |= PORT1_WRITE; + } + + // changed card status in slot1? + if ( ((byCardsStatus ^ Chipset.cards_status) & (PORT1_PRESENT | PORT1_WRITE)) != 0 + && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 + ) + { + Chipset.HST |= MP; // set Module Pulled + IOBit(SRQ2,NINT,FALSE); // set NINT to low + Chipset.SoftInt = TRUE; // set interrupt + bInterrupt = TRUE; + } + SwitchToState(nOldState); + } + } else if(_tcscmp(_T("settings_port2"), configKey) == 0) { + BOOL settingsPort2en = (BOOL)intValue1; + BOOL settingsPort2wr = (BOOL)intValue2; + const char * settingsPort2load = settingsPort2en ? configStringValue : NULL; + + LPCTSTR szActPort2Filename = _T(""); + BOOL bPort2CfgChange = FALSE; + BOOL bPort2AttChange = FALSE; + + // HP48SX/GX port2 change settings detection + if (cCurrentRomType=='S' || cCurrentRomType=='G' || cCurrentRomType==0) + { + //bPort2IsShared = settingsPort2isshared; + const char * szNewPort2Filename = NULL; + if(settingsPort2load) { + szNewPort2Filename = settingsPort2load; + } +// else +// szNewPort2Filename = _T("SHARED.BIN"); + + if(szNewPort2Filename && _tcscmp(szPort2Filename, szNewPort2Filename) != 0) { + _tcscpy(szPort2Filename, szNewPort2Filename); + szActPort2Filename = szPort2Filename; + bPort2CfgChange = TRUE; // slot2 configuration changed + + // R/W port + if (*szActPort2Filename != 0 && (BOOL)settingsPort2wr != bPort2Writeable) + { + bPort2AttChange = TRUE; // slot2 file R/W attribute changed + bPort2CfgChange = TRUE; // slot2 configuration changed + } + } + } + + if (bPort2CfgChange) // slot2 configuration changed + { + UINT nOldState = SwitchToState(SM_INVALID); + + UnmapPort2(); // unmap port2 + +// if (bPort2AttChange) // slot2 R/W mode changed +// { +// DWORD dwFileAtt; +// +// SetCurrentDirectory(szEmuDirectory); +// dwFileAtt = GetFileAttributes(szActPort2Filename); +// if (dwFileAtt != 0xFFFFFFFF) +// { +// if (IsDlgButtonChecked(hDlg,IDC_PORT2WR)) +// dwFileAtt &= ~FILE_ATTRIBUTE_READONLY; +// else +// dwFileAtt |= FILE_ATTRIBUTE_READONLY; +// +// SetFileAttributes(szActPort2Filename,dwFileAtt); +// } +// SetCurrentDirectory(szCurrentDirectory); +// } + + if (cCurrentRomType) // ROM defined + { + MapPort2(szActPort2Filename); + + // port2 changed and card detection enabled + if ( (bPort2AttChange || Chipset.wPort2Crc != wPort2Crc) + && (Chipset.IORam[CARDCTL] & ECDT) != 0 && (Chipset.IORam[TIMER2_CTRL] & RUN) != 0 + ) + { + Chipset.HST |= MP; // set Module Pulled + IOBit(SRQ2,NINT,FALSE); // set NINT to low + Chipset.SoftInt = TRUE; // set interrupt + bInterrupt = TRUE; + } + // save fingerprint of port2 + Chipset.wPort2Crc = wPort2Crc; + } + SwitchToState(nOldState); + } + } + + if(configKey) + (*env)->ReleaseStringUTFChars(env, key, configKey); + if(configStringValue) + (*env)->ReleaseStringUTFChars(env, stringValue, configStringValue); +} + +JNIEXPORT jint JNICALL Java_com_regis_cosnier_emu48_NativeLib_getIsPortExtensionPossible(JNIEnv *env, jobject thisz) { + return (cCurrentRomType=='S' || cCurrentRomType=='G' || cCurrentRomType==0); +} + //p Read5(0x7050E) // -> $1 = 461076 //p Read5(0x70914) diff --git a/app/src/main/cpp/win32-layer.c b/app/src/main/cpp/win32-layer.c index 4d4b887..6b9c021 100644 --- a/app/src/main/cpp/win32-layer.c +++ b/app/src/main/cpp/win32-layer.c @@ -7,6 +7,7 @@ #include #include "core/resource.h" #include "win32-layer.h" +#include "core/Emu48.h" extern JavaVM *java_machine; extern jobject bitmapMainScreen; @@ -64,6 +65,11 @@ BOOL SetCurrentDirectory(LPCTSTR path) HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPVOID lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, LPVOID hTemplateFile) { + if(_tcscmp(lpFileName, szPort2Filename) == 0) { + // Special case for Port2 filename + //TODO + } + if(szCurrentDirectorySet || _tcsncmp(lpFileName, assetsPrefix, assetsPrefixLength / sizeof(TCHAR)) == 0) { TCHAR szFileName[MAX_PATH]; AAsset * asset = NULL; diff --git a/app/src/main/java/com/regis/cosnier/emu48/MainActivity.java b/app/src/main/java/com/regis/cosnier/emu48/MainActivity.java index d63d3ca..fdadeeb 100644 --- a/app/src/main/java/com/regis/cosnier/emu48/MainActivity.java +++ b/app/src/main/java/com/regis/cosnier/emu48/MainActivity.java @@ -102,11 +102,11 @@ public class MainActivity extends AppCompatActivity mainScreenContainer.addView(mainScreenView, 0); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - updateFromPreferences(); + updateFromPreferences(null, false); sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - updateFromPreferences(); + updateFromPreferences(key, true); } }; sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); @@ -549,27 +549,45 @@ public class MainActivity extends AppCompatActivity return fd; } - private void updateFromPreferences() { - //int settingsInput = Integer.parseInt(sharedPreferences.getString("settings_input", "0")); - - boolean settingsRealspeed = sharedPreferences.getBoolean("settings_realspeed", false); - boolean settingsGrayscale = sharedPreferences.getBoolean("settings_grayscale", false); -// boolean settingsAlwaysontopt = sharedPreferences.getBoolean("settings_alwaysontop", false); -// boolean settingsActfollowsmouset = sharedPreferences.getBoolean("settings_actfollowsmouse", false); -// boolean settingsSingleinstancet = sharedPreferences.getBoolean("settings_singleinstance", false); - boolean settingsAutosave = sharedPreferences.getBoolean("settings_autosave", false); - boolean settingsAutosaveonexit = sharedPreferences.getBoolean("settings_autosaveonexit", false); - boolean settingsObjectloadwarning = sharedPreferences.getBoolean("settings_objectloadwarning", false); - boolean settingsAlwaysdisplog = sharedPreferences.getBoolean("settings_alwaysdisplog", true); - boolean settingsPort1en = sharedPreferences.getBoolean("settings_port1en", false); - boolean settingsPort1wr = sharedPreferences.getBoolean("settings_port1wr", false); - boolean settingsPort2en = sharedPreferences.getBoolean("settings_port2en", false); - boolean settingsPort2wr = sharedPreferences.getBoolean("settings_port2wr", false); - String settingsPort2load = sharedPreferences.getString("settings_port2load", ""); - - NativeLib.setConfiguration(settingsRealspeed ? 1 : 0, settingsGrayscale ? 1 : 0, settingsAutosave ? 1 : 0, - settingsAutosaveonexit ? 1 : 0, settingsObjectloadwarning ? 1 : 0, settingsAlwaysdisplog ? 1 : 0, - settingsPort1en ? 1 : 0, settingsPort1wr ? 1 : 0, - settingsPort2en ? 1 : 0, settingsPort2wr ? 1 : 0, settingsPort2load); + private void updateFromPreferences(String key, boolean isDynamic) { + int isDynamicValue = isDynamic ? 1 : 0; + if(key == null) { +// boolean settingsAutosave = sharedPreferences.getBoolean("settings_autosave", false); +// boolean settingsAutosaveonexit = sharedPreferences.getBoolean("settings_autosaveonexit", false); +// boolean settingsObjectloadwarning = sharedPreferences.getBoolean("settings_objectloadwarning", false); + String[] settingKeys = { "settings_realspeed", "settings_grayscale", "settings_alwaysdisplog", "settings_port1", "settings_port2" }; + for (String settingKey : settingKeys) { + updateFromPreferences(settingKey, false); + } + } else { + switch (key) { + case "settings_realspeed": + NativeLib.setConfiguration(key, isDynamicValue, sharedPreferences.getBoolean(key, false) ? 1 : 0, 0, null); + break; + case "settings_grayscale": + NativeLib.setConfiguration(key, isDynamicValue, sharedPreferences.getBoolean(key, false) ? 1 : 0, 0, null); + break; + case "settings_alwaysdisplog": + NativeLib.setConfiguration(key, isDynamicValue, sharedPreferences.getBoolean(key, true) ? 1 : 0, 0, null); + break; + case "settings_port1": + case "settings_port1en": + case "settings_port1wr": + NativeLib.setConfiguration("settings_port1", isDynamicValue, + sharedPreferences.getBoolean("settings_port1en", false) ? 1 : 0, + sharedPreferences.getBoolean("settings_port1wr", false) ? 1 : 0, + null); + break; + case "settings_port2": + case "settings_port2en": + case "settings_port2wr": + case "settings_port2load": + NativeLib.setConfiguration("settings_port2", isDynamicValue, + sharedPreferences.getBoolean("settings_port2en", false) ? 1 : 0, + sharedPreferences.getBoolean("settings_port2wr", false) ? 1 : 0, + sharedPreferences.getString("settings_port2load", "")); + break; + } + } } } diff --git a/app/src/main/java/com/regis/cosnier/emu48/NativeLib.java b/app/src/main/java/com/regis/cosnier/emu48/NativeLib.java index 602ce69..82eefb8 100644 --- a/app/src/main/java/com/regis/cosnier/emu48/NativeLib.java +++ b/app/src/main/java/com/regis/cosnier/emu48/NativeLib.java @@ -41,8 +41,6 @@ public class NativeLib { public static native void onBackupRestore(); public static native void onBackupDelete(); - public static native void setConfiguration(int settingsRealspeed, int settingsGrayscale, int settingsAutosave, - int settingsAutosaveonexit, int settingsObjectloadwarning, int settingsAlwaysdisplog, - int settingsPort1en, int settingsPort1wr, - int settingsPort2en, int settingsPort2wr, String settingsPort2load); + public static native void setConfiguration(String key, int isDynamic, int intValue1, int intValue2, String stringValue); + public static native int getIsPortExtensionPossible(); } diff --git a/app/src/main/java/com/regis/cosnier/emu48/SettingsActivity.java b/app/src/main/java/com/regis/cosnier/emu48/SettingsActivity.java index 93d7d14..b4eead7 100644 --- a/app/src/main/java/com/regis/cosnier/emu48/SettingsActivity.java +++ b/app/src/main/java/com/regis/cosnier/emu48/SettingsActivity.java @@ -217,6 +217,12 @@ public class SettingsActivity extends AppCompatPreferenceActivity { bindPreferenceSummaryToBoolValue(findPreference("settings_port2en")); bindPreferenceSummaryToBoolValue(findPreference("settings_port2wr")); + boolean disablePortPreferences = (NativeLib.getIsPortExtensionPossible() == 0); + //TODO not working + findPreference("settings_port1en").setShouldDisableView(disablePortPreferences); + findPreference("settings_port1wr").setShouldDisableView(disablePortPreferences); + findPreference("settings_port2en").setShouldDisableView(disablePortPreferences); + findPreference("settings_port2wr").setShouldDisableView(disablePortPreferences); } @Override