Skip to content

Commit

Permalink
WIP - ARM (#1120)
Browse files Browse the repository at this point in the history
* - WIP

* - Updated QEMU (8.1.0-rc3) + Add ARM64

* - Adding ARM launch codes

* - Adding ARM launch codes
  • Loading branch information
tgiphil committed Aug 13, 2023
1 parent ba2e8bd commit 4ebf0ad
Show file tree
Hide file tree
Showing 74 changed files with 724 additions and 141 deletions.
5 changes: 4 additions & 1 deletion Source/Docs/settings-options.rst
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,10 @@ Application Location Settings
:widths: 50, 200

AppLocation.Bochs,Location of the BOCHS application
AppLocation.Qemu,Location of the QEMU application
AppLocation.QemuX86,Location of the QEMU application for x86 (i386)
AppLocation.QemuX64,Location of the QEMU application for x64
AppLocation.QemuARM32,Location of the QEMU application for ARM32
AppLocation.QemuARM64,Location of the QEMU application for ARM64
AppLocation.QemuBIOS,Location of the QEMU BIOS
AppLocation.QemuImg,Location of the QEMUImg application
AppLocation.VmwareWorkstation, Location of the VMWorkstation application
Expand Down
8 changes: 4 additions & 4 deletions Source/Mosa.Tool.Debugger/DebugAppLocationsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ public DebugAppLocationsWindow(MainForm mainForm)

private void DebugQemuWindow_Load(object sender, EventArgs e)
{
tbQEMU.Text = MainForm.MosaSettings.QEMUApp;
tbBIOSDirectory.Text = MainForm.MosaSettings.QEMUBios;
tbQEMU.Text = MainForm.MosaSettings.QemuX86App;
tbBIOSDirectory.Text = MainForm.MosaSettings.QemuBIOS;
}

private void btnDebug_Click(object sender, EventArgs e)
{
MainForm.MosaSettings.QEMUApp = tbQEMU.Text;
MainForm.MosaSettings.QEMUBios = tbBIOSDirectory.Text;
MainForm.MosaSettings.QemuX86App = tbQEMU.Text;
MainForm.MosaSettings.QemuBIOS = tbBIOSDirectory.Text;

Close();
}
Expand Down
10 changes: 5 additions & 5 deletions Source/Mosa.Tool.Launcher/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,11 +199,11 @@ private void UpdateInterfaceAppLocations()
bochsPathLbl.Content = MosaSettings.BochsApp;
ndiasmPathLbl.Content = MosaSettings.NdisasmApp;

qemuPathLbl.Content = MosaSettings.QEMUApp;
qemuBiosPathLbl.Content = MosaSettings.QEMUBios;
qemuEdk2X86PathLbl.Content = MosaSettings.QEMUEdk2X86;
qemuEdk2X64PathLbl.Content = MosaSettings.QEMUEdk2X64;
qemuEdk2ARMPathLbl.Content = MosaSettings.QEMUEdk2ARM;
qemuPathLbl.Content = MosaSettings.QemuX86App;
qemuBiosPathLbl.Content = MosaSettings.QemuBIOS;
qemuEdk2X86PathLbl.Content = MosaSettings.QemuEdk2X86;
qemuEdk2X64PathLbl.Content = MosaSettings.QemuEdk2X64;
qemuEdk2ARMPathLbl.Content = MosaSettings.QemuEdk2ARM32;
qemuImgPathLbl.Content = MosaSettings.QemuImgApp;
vboxPathLbl.Content = MosaSettings.VirtualBoxApp;
mkisofsPathLbl.Content = MosaSettings.MkisofsApp;
Expand Down
105 changes: 96 additions & 9 deletions Source/Mosa.Utility.Configuration/AppLocationsSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ public static class AppLocationsSettings

public static void GetAppLocations(MosaSettings mosaSettings)
{
mosaSettings.QEMUApp = FindQemu();
mosaSettings.QEMUBios = FindQemuBIOS();
mosaSettings.QEMUEdk2X86 = FindQemuEDK2X86();
mosaSettings.QEMUEdk2X64 = FindQemuEDK2X64();
mosaSettings.QEMUEdk2ARM = FindQemuEDK2ARM();
mosaSettings.QemuX86App = FindQemuX86();
mosaSettings.QemuX64App = FindQemuX64();
mosaSettings.QemuARM32App = FindQemuARM32();
mosaSettings.QemuARM64App = FindQemuARM64();
mosaSettings.QemuBIOS = FindQemuBIOS();
mosaSettings.QemuEdk2X86 = FindQemuEDK2X86();
mosaSettings.QemuEdk2X64 = FindQemuEDK2X64();
mosaSettings.QemuEdk2ARM32 = FindQemuEDK2ARM32();
mosaSettings.QemuEdk2ARM64 = FindQemuEDK2ARM64();
mosaSettings.QemuImgApp = FindQemuImg();
mosaSettings.BochsApp = FindBochs();
mosaSettings.VmwarePlayerApp = FindVmwarePlayer();
Expand All @@ -39,7 +43,7 @@ public static void GetAppLocations(MosaSettings mosaSettings)
mosaSettings.GraphwizApp = FindGraphwiz();
}

private static string FindQemu()
private static string FindQemuX86()
{
return
IsWindows ? TryFind("qemu-system-i386.exe",
Expand All @@ -58,6 +62,63 @@ private static string FindQemu()
: TryFind("qemu-system-i386", LinuxDirectories);
}

private static string FindQemuX64()
{
return
IsWindows ? TryFind("qemu-system-x86_64.exe",
new string[] {
@"%CURRENT%\qemu",
@"%CURRENT%\..\Tools\qemu",
@"%CURRENT%\Tools\qemu",

@"%APPDIR%\qemu",
@"%APPDIR%\Tools\qemu",
@"%APPDIR%\..\Tools\qemu",

@"%ProgramFiles%\qemu",
@"%ProgramFiles(x86)%\qemu",
})
: TryFind("qemu-system-x86_64", LinuxDirectories);
}

private static string FindQemuARM32()
{
return
IsWindows ? TryFind("qemu-system-arm.exe",
new string[] {
@"%CURRENT%\qemu",
@"%CURRENT%\..\Tools\qemu",
@"%CURRENT%\Tools\qemu",

@"%APPDIR%\qemu",
@"%APPDIR%\Tools\qemu",
@"%APPDIR%\..\Tools\qemu",

@"%ProgramFiles%\qemu",
@"%ProgramFiles(x86)%\qemu",
})
: TryFind("qemu-system-arm", LinuxDirectories);
}

private static string FindQemuARM64()
{
return
IsWindows ? TryFind("qemu-system-aarch64.exe",
new string[] {
@"%CURRENT%\qemu",
@"%CURRENT%\..\Tools\qemu",
@"%CURRENT%\Tools\qemu",

@"%APPDIR%\qemu",
@"%APPDIR%\Tools\qemu",
@"%APPDIR%\..\Tools\qemu",

@"%ProgramFiles%\qemu",
@"%ProgramFiles(x86)%\qemu",
})
: TryFind("qemu-system-aarch64", LinuxDirectories);
}

private static string FindGDB()
{
return
Expand Down Expand Up @@ -263,7 +324,7 @@ private static string FindQemuEDK2X64()
});
}

private static string FindQemuEDK2ARM()
private static string FindQemuEDK2ARM32()
{
return
IsWindows ? TryFind("edk2-arm-code.fd",
Expand All @@ -279,8 +340,34 @@ private static string FindQemuEDK2ARM()
@"%ProgramFiles(x86)%\qemu",
@"%ProgramFiles(x86)%\qemu\share"
})
: IsOSX ? TryFind("edk2-x86_64-code.fd", "/opt/homebrew/bin/qemu-system-i386")
: TryFind("edk2-x86_64-code.fd",
: IsOSX ? TryFind("edk2-arm-code.fd", "/opt/homebrew/bin/qemu-system-arm32")
: TryFind("edk2-arm-code.fd",
new string[] {
"/usr/share/qemu",
"/usr/share/ovmf",
"/usr/share/OVMF",
"/opt/homebrew/share/qemu/"
});
}

private static string FindQemuEDK2ARM64()
{
return
IsWindows ? TryFind("edk2-aarch64-code.fd",
new string[] {
@"%CURRENT%\..\Tools\qemu\share",
@"%CURRENT%\Tools\qemu\share",

@"%APPDIR%\Tools\qemu\share",
@"%APPDIR%\..\Tools\qemu\share",

@"%ProgramFiles%\qemu",
@"%ProgramFiles%\qemu\share",
@"%ProgramFiles(x86)%\qemu",
@"%ProgramFiles(x86)%\qemu\share"
})
: IsOSX ? TryFind("edk2-aarch64-code.fd", "/opt/homebrew/bin/qemu-system-aarch64")
: TryFind("edk2-aarch64-code.fd",
new string[] {
"/usr/share/qemu",
"/usr/share/ovmf",
Expand Down
42 changes: 33 additions & 9 deletions Source/Mosa.Utility.Configuration/MOSASettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,34 +312,58 @@ public string PreLinkHashFile
set => Settings.SetValue(Name.CompilerDebug_PreLinkHashFile, value);
}

public string QEMUApp
public string QemuX86App
{
get => Settings.GetValue(Name.AppLocation_Qemu, null);
set => Settings.SetValue(Name.AppLocation_Qemu, value);
get => Settings.GetValue(Name.AppLocation_QemuX86, null);
set => Settings.SetValue(Name.AppLocation_QemuX86, value);
}

public string QEMUBios
public string QemuX64App
{
get => Settings.GetValue(Name.AppLocation_QemuX64, null);
set => Settings.SetValue(Name.AppLocation_QemuX64, value);
}

public string QemuARM32App
{
get => Settings.GetValue(Name.AppLocation_QemuARM32, null);
set => Settings.SetValue(Name.AppLocation_QemuARM32, value);
}

public string QemuARM64App
{
get => Settings.GetValue(Name.AppLocation_QemuARM64, null);
set => Settings.SetValue(Name.AppLocation_QemuARM64, value);
}

public string QemuBIOS
{
get => Settings.GetValue(Name.AppLocation_QemuBIOS, null);
set => Settings.SetValue(Name.AppLocation_QemuBIOS, value);
}

public string QEMUEdk2X86
public string QemuEdk2X86
{
get => Settings.GetValue(Name.AppLocation_QemuEDK2X86, null);
set => Settings.SetValue(Name.AppLocation_QemuEDK2X86, value);
}

public string QEMUEdk2X64
public string QemuEdk2X64
{
get => Settings.GetValue(Name.AppLocation_QemuEDK2X64, null);
set => Settings.SetValue(Name.AppLocation_QemuEDK2X64, value);
}

public string QEMUEdk2ARM
public string QemuEdk2ARM32
{
get => Settings.GetValue(Name.AppLocation_QemuEDK2ARM32, null);
set => Settings.SetValue(Name.AppLocation_QemuEDK2ARM32, value);
}

public string QemuEdk2ARM64
{
get => Settings.GetValue(Name.AppLocation_QemuEDK2ARM, null);
set => Settings.SetValue(Name.AppLocation_QemuEDK2ARM, value);
get => Settings.GetValue(Name.AppLocation_QemuEDK2ARM64, null);
set => Settings.SetValue(Name.AppLocation_QemuEDK2ARM64, value);
}

public string QemuImgApp
Expand Down
8 changes: 6 additions & 2 deletions Source/Mosa.Utility.Configuration/Name.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ public static class Name
public const string AppLocation_GDB = "AppLocation.GDB";
public const string AppLocation_Mkisofs = "AppLocation.Mkisofs";
public const string AppLocation_Ndisasm = "AppLocation.Ndisasm";
public const string AppLocation_Qemu = "AppLocation.Qemu";
public const string AppLocation_QemuX86 = "AppLocation.QemuX86";
public const string AppLocation_QemuX64 = "AppLocation.QemuX64";
public const string AppLocation_QemuARM32 = "AppLocation.QemuARM32";
public const string AppLocation_QemuARM64 = "AppLocation.QemuARM64";
public const string AppLocation_QemuBIOS = "AppLocation.QemuBIOS";
public const string AppLocation_QemuImg = "AppLocation.QemuImg";
public const string AppLocation_VmwarePlayer = "AppLocation.VmwarePlayer";
Expand All @@ -17,7 +20,8 @@ public static class Name

public const string AppLocation_QemuEDK2X86 = "AppLocation.QemuEDK2X86";
public const string AppLocation_QemuEDK2X64 = "AppLocation.QemuEDK2X64";
public const string AppLocation_QemuEDK2ARM = "AppLocation.QemuEDK2ARM";
public const string AppLocation_QemuEDK2ARM32 = "AppLocation.QemuEDK2ARM32";
public const string AppLocation_QemuEDK2ARM64 = "AppLocation.QemuEDK2ARM64";
public const string AppLocation_VirtualBox = "AppLocation.VirtualBox";

public const string Compiler_BaseAddress = "Compiler.BaseAddress";
Expand Down
1 change: 1 addition & 0 deletions Source/Mosa.Utility.Disassembler/Disassembler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public Disassembler(string platform)
arch = platform.ToLowerInvariant() switch
{
"armv8a32" => new Arm32Architecture(services, "arm32", options),
"arm64" => new Arm64Architecture(services, "arm64", options),
"x86" => new X86ArchitectureFlat32(services, "x86-protected-32", options),
"x64" => new X86ArchitectureFlat64(services, "x86-protected-64", options),
_ => arch
Expand Down

0 comments on commit 4ebf0ad

Please sign in to comment.