Skip to content
Open
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
594f833
Limbo Emulator v6.0.0 (QEMU v2.9.1)
Sep 21, 2021
3ba02c7
instruction added for QEMU 2.9.1
Sep 21, 2021
90bd17c
instructions
Sep 21, 2021
3bfb6e9
Limbo Emulator v6.0.1 (QEMU 2.9.1)
Sep 21, 2021
110c5fd
fix log file for arm
Sep 21, 2021
b889ec9
centralized package info
Sep 21, 2021
77a1c22
fixed setting append
Sep 21, 2021
ef5fb7c
use merged manifest
Sep 21, 2021
90394a7
Limbo v6.0.0 release
Sep 22, 2021
9e3f2e3
Limbo v6.0.0 release
Sep 22, 2021
43e52a1
Limbo v6.0.0 release
Sep 22, 2021
8ac6151
Limbo version 6.0.0
Sep 22, 2021
7311976
Limbo v6.0.1
Sep 22, 2021
a374f53
support for older devices
Sep 23, 2021
e9e010e
support for aaudio without breaking support for older devices
Sep 23, 2021
0c5e375
fix keymapper restore orientation when desktop mode
Sep 23, 2021
1d566bc
fix crash when mouse is outside of window
Sep 23, 2021
74e7d8a
fix mouse crash for 5.1.0
Sep 23, 2021
77474ec
install qemu version file
Sep 24, 2021
f28056c
qemu version
Sep 24, 2021
99a5bfb
one internal version only with build variants
Sep 24, 2021
ecb2ee0
one version only with variants
Sep 24, 2021
1caf270
revert to previous
Sep 24, 2021
6030e29
Limbo ver 6.0.0
Sep 25, 2021
7659250
Update README.md
limboemu Sep 26, 2021
e73d191
Disk enhancements
Sep 30, 2021
256129d
enhancements for booting
Sep 30, 2021
1bc4229
moved accel options after extra params
Dec 25, 2021
496e3a1
fixed dialog software updates option
Dec 25, 2021
1ba5235
added default for disk cache
Dec 25, 2021
b706773
fixed crash when no machine loaded
Dec 25, 2021
77a1a3b
support for import custom bios
Dec 25, 2021
5e0641e
manifest 6.0.1
Feb 27, 2022
78f70c2
trigger saving edit text before start vm
Feb 27, 2022
587d2fc
clean up
Feb 27, 2022
d79bfd3
file manager changes
Feb 28, 2022
c8c51b0
fix gcc support
Mar 3, 2022
895f865
fixed instructions
Mar 3, 2022
e3afe0b
fixed patches
Mar 3, 2022
5232ffe
ignore qemu versions
Mar 3, 2022
0966f6d
refactor executor to c
Mar 3, 2022
1159aa4
Merge branch '6.0.1-native' into Branch_Branch_6.0.1
Mar 5, 2022
3442a71
changelog
Mar 5, 2022
4635d01
check for undefined symbols
Mar 5, 2022
62d4aa6
convert to c
Mar 5, 2022
cb29b69
fixed breakpoint tb invalidation
Mar 5, 2022
69236c1
updated defaults
Mar 5, 2022
887c6a6
software update checker by default is false
Mar 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ gradle
/gradlew.bat
obj/
jniLibs/
QEMU_VERSION

jnilibs
limbotest
Expand Down
6 changes: 6 additions & 0 deletions README.developers
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ https://github.com/limboemu/limbo
wget http://download.qemu-project.org/qemu-5.1.0.tar.xz -P /tmp/
tar -xJf /tmp/qemu-5.1.0.tar.xz
mv qemu-5.1.0 qemu
# For QEMU version 2.9.1:
wget http://download.qemu-project.org/qemu-2.9.1.tar.xz -P /tmp/
tar -xJf /tmp/qemu-2.9.1.tar.xz
mv qemu-2.9.1 qemu

##### GET glib
wget https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz -P /tmp/
Expand Down Expand Up @@ -97,6 +101,8 @@ https://github.com/limboemu/limbo
# example for 5.1.0:
cd ./limbo-android-lib/src/main/jni/qemu/
patch -p1 < ../patches/qemu-5.1.0.patch
# for 2.9.1:
patch -p1 < ../patches/qemu-2.9.1.patch

### Apply glib patch for Limbo:
cd ./limbo-android-lib/src/main/jni/glib/
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Limbo Emulator (QEMU) for Android
#
# For APK Downloads, Guides, and Help visit the Limbo Wiki:
# https://github.com/limboemu/limbo/wiki
# For APK Downloads, Guides, and Help visit:
# https://virtualmachinery.weebly.com

Limbo is a QEMU-based emulator for Android supports emulation for these architectures:
x86/x86_64
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
501.00
600.00
2 changes: 1 addition & 1 deletion limbo-android-arm/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ android {

defaultConfig {
applicationId "com.limbo.emu.main.arm"
minSdkVersion 26
minSdkVersion 21
targetSdkVersion 29
ndk { abiFilters "armeabi-v7a","arm64-v8a", "x86", "x86_64" }
}
Expand Down
65 changes: 7 additions & 58 deletions limbo-android-arm/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,75 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.limbo.emu.main.arm"
android:installLocation="auto"
android:versionCode="60000"
android:versionName="6.0.0-arm" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:glEsVersion="0x00020000" />
android:versionName="6.0.0-arm">

<application
android:name="com.max2idea.android.limbo.main.LimboApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/limbo"
tools:replace="android:label"
android:label="Limbo ARM Emulator"
android:requestLegacyExternalStorage="true"
android:largeHeap="true" >
>
<activity
android:name=".LimboEmuActivity"
android:name="LimboEmuActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Limbo ARM"
android:launchMode="singleTask"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboFileManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="File Manager" >
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboSDLActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.NoActionBar" >
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboSettingsManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Settings" >
</activity>
<activity
android:name="com.max2idea.android.limbo.links.LinksManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:label="Downloads" >
</activity>
<service
android:name="com.max2idea.android.limbo.machine.MachineService"
android:enabled="true"
android:exported="false"
android:label="Limbo Service" >
<intent-filter>
<action android:name="com.max2idea.android.limbo.action.STARTVM" />
</intent-filter>
</service>

</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void onCreate(Bundle bundle){
super.onCreate(bundle);
//TODO: change location to something that the user will have access outside of limbo
// like internal storage
Logger.setupLogFile(LimboApplication.getInstance().getCacheDir() + "/limbo/limbo-arm-log.txt");
Logger.setupLogFile("/limbo/limbo-arm-log.txt");
}

protected void loadQEMULib(){
Expand Down
2 changes: 1 addition & 1 deletion limbo-android-lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ android {
buildToolsVersion '29.0.3'

defaultConfig{
minSdkVersion 26
minSdkVersion 21
targetSdkVersion 29
}
buildTypes {
Expand Down
40 changes: 36 additions & 4 deletions limbo-android-lib/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.limbo.emu.lib"
android:installLocation="auto"
android:versionCode="1"
android:versionName="1" >
>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Expand All @@ -16,6 +16,38 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:glEsVersion="0x00020000" />


</manifest>
<application
android:name="com.max2idea.android.limbo.main.LimboApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/limbo"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/Theme.AppCompat">

<activity
android:name="com.max2idea.android.limbo.main.LimboFileManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="File Manager" />
<activity
android:name="com.max2idea.android.limbo.main.LimboSDLActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity
android:name="com.max2idea.android.limbo.main.LimboSettingsManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Settings" />
<service
android:name="com.max2idea.android.limbo.machine.MachineService"
android:enabled="true"
android:exported="false"
android:label="Limbo Service">
<intent-filter>
<action android:name="com.max2idea.android.limbo.action.STARTVM" />
</intent-filter>
</service>
</application>
</manifest>
33 changes: 14 additions & 19 deletions limbo-android-lib/src/main/assets/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,33 +1,28 @@
* Limbo Legacy v6.0.0
Using QEMU 2.9.1 for better performance!
WARNING:
This is version much faster than 5.x but very old and behind many security patches!
Make sure you trust the virtual images and any software you install within the vm!
Changed minimum SDK version to 26 (Oreo and above).
You can still build with Android API 21 without Aaudio option.
Added Android Aaudio native audio interface for lower latency, see settings.
Using 22050 sample rate instead of 44199 for better audio with lesser clicking.
Fixed crashing when resuming due to audio buffer writing.
Fixed android notification not dismissing.
Removed internal VNC client you should check the Wiki for alternative VNC clients.
Built both variants for QEMU 5.1.0 for stability and 2.9.1 for better performance.
WARNING: QEMU 2.9.1 version is much faster than 5.1.0 but very old and
behind many security patches! Install only virtual images and software you trust!
Fixed SDL resizing after rotating and resuming application.
SDL user interface can now disconnect and resume.
VNC Password and Allow External VNC clients are now under settings.
Moved Screen options to settings.
New Pause button for pausing when started VNC user interface.
Machine architecture was not needed so it is now removed, use cpu instead.
Added support for changin idle refresh rate for SDL.
Created KeyMapper for mapping keys and mouse buttons for gaming, see Wiki for info.
Removed internal VNC client you should check the Wiki for alternative VNC clients.
VNC Password and Allow External VNC clients are now under settings.
New Pause button for pausing when started VNC user interface.
Mouse enhancements for Touchscreen and External Mouse.
Absolute mouse devices support only guests that have usb-tablet drivers installed.
Added new out of bounds prevention option for mouse.
Added new Key and Mouse delay options.
Global screen options are now moved to Menu Settings.
Machine architecture was not needed so it is now removed.
Removed Shared Folder because it is buggy.
Internal redesign of the ui dispatching and interface with native code.
Added Android Aaudio native audio interface for lower latency (Oreo and above only).
Using 22050 sample rate instead of 44199 for better audio with lesser clicking.
Fixed crashing when resuming due to audio buffer writing.
Internal redesign of the Android user interface.
Better build environment for development.
Fixed clang support with ndk r23
Upgraded libraries to ffi ver 3.3 and pixman ver 0.40.0
Removed patch for QEMU 4.0.0 the only versions currently support are 2.9.1 and 5.1.0.
Building with ndk r23 clang by default, r14b gcc is also supported.
Upgraded libraries: ffi 3.3 and pixman 0.40.0


* Limbo v5.1.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -370,18 +370,18 @@ public void run() {
t.start();
}

public static String LoadFile(Activity activity, String fileName, boolean loadFromRawFolder) throws IOException {
public static String LoadFile(Context context, String fileName, boolean loadFromRawFolder) throws IOException {
// Create a InputStream to read the file into
InputStream iS;
if (loadFromRawFolder) {
// get the resource id from the file name
int rID = activity.getResources().getIdentifier(activity.getClass().getPackage().getName() + ":raw/" + fileName,
int rID = context.getResources().getIdentifier(LimboApplication.getInstance().getClass().getPackage().getName() + ":raw/" + fileName,
null, null);
// get the file as a stream
iS = activity.getResources().openRawResource(rID);
iS = context.getResources().openRawResource(rID);
} else {
// get the file as a stream
iS = activity.getResources().getAssets().open(fileName);
iS = context.getResources().getAssets().open(fileName);
}

ByteArrayOutputStream oS = new ByteArrayOutputStream();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,10 @@ public class Help {
private static final String TAG = "Help";

public static void showHelp(final Activity activity) {
PackageInfo pInfo = LimboApplication.getPackageInfo();

final AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle(Config.APP_NAME + " v" + pInfo.versionName + " (" + Config.emuVersion.name().replace("_", ".") + ")");
alertDialog.setTitle(Config.APP_NAME + " " + LimboApplication.getLimboVersionString()
+ " " + "QEMU" + " " + LimboApplication.getQemuVersionString() );

LinearLayout mLayout = new LinearLayout(activity);
mLayout.setOrientation(LinearLayout.VERTICAL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private native String start(String storage_dir, String base_dir,

public native void nativeRefreshScreen(int value);

public native void nativeEnableAaudio(int value);
public native void nativeEnableAaudio(int value, String aaudioLibName, String aaudioLibPath);

/**
* Prints parameters in qemu format
Expand Down Expand Up @@ -284,7 +284,7 @@ private void addGenericOptions(Context context, ArrayList<String> paramsList) {
paramsList.add(Config.tbSize); //Don't increase it crashes
}

if (Config.emuVersion.ordinal() <= Config.EMU_VERSION.QEMUv2_9_1.ordinal()) {
if (LimboApplication.getQemuVersion() == 20901) {
paramsList.add("-realtime");
paramsList.add("mlock=off");
} else {
Expand Down Expand Up @@ -861,7 +861,9 @@ public void setFullscreen() {

@Override
public void enableAaudio(int value) {
nativeEnableAaudio(value);
nativeEnableAaudio(value, Config.aaudioLibName,
FileUtils.getNativeLibDir(LimboApplication.getInstance())
+ "/" + Config.aaudioLibName);
}

//TODO: re-enable getting status from the vm
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public class KeyMapManager {
private SimpleAdapter keyMapperAdapter;
private EditText mKeyMapperName;
private HashMap<String, Object> selectedMap;
private int lastOrientation = -1;

public KeyMapManager(Activity activity, View view, int rows, int cols) throws Exception {
this.activity = activity;
Expand Down Expand Up @@ -125,10 +126,12 @@ public boolean toggleKeyMapper() {
mapperEditLayout.setVisibility(View.GONE);
mapperButtons.setVisibility(View.GONE);
clearKeyMapper();
ScreenUtils.updateOrientation(activity, lastOrientation);
shown = false;
} else {
mapperEditLayout.setVisibility(View.VISIBLE);
mapperButtons.setVisibility(View.VISIBLE);
lastOrientation = activity.getResources().getConfiguration().orientation;
shown = true;
}
return shown;
Expand Down Expand Up @@ -481,7 +484,7 @@ public void useKeyMapper() {
KeyboardUtils.hideKeyboard(activity, view);
mapperEditLayout.setVisibility(View.GONE);
mapperButtons.setVisibility(View.VISIBLE);
ScreenUtils.updateOrientation(activity);
ScreenUtils.updateOrientation(activity, lastOrientation);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ private void requestFieldChange(MachineProperty property, Object value) {
case INITRD:
getMachine().setInitRd(convertString(property, value));
break;
case APPEND:
getMachine().setAppend(convertString(property, value));
break;
case BOOT_CONFIG:
getMachine().setBootDevice(convertString(property, value));
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ public enum EMU_VERSION {

// stack size to remove an issue with SDL Audio
public static long stackSize = 10 * 1024 * 1024;
// native alternative to audio track
public static String aaudioLibName = "libcompat-SDL2-addons.so";

// if you don't want to enable software updates set to false
public static boolean enableSoftwareUpdates = true;
Expand Down
Loading