Upload
This commit is contained in:
commit
08fddcd73e
364 changed files with 111462 additions and 0 deletions
|
@ -0,0 +1,57 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public class Block
|
||||
{
|
||||
private const int BLOCK_SIZE = 256;
|
||||
|
||||
private uint mAddress;
|
||||
private byte[] mBlockBytes = new byte[BLOCK_SIZE];
|
||||
|
||||
public int BlockSize { get; } = BLOCK_SIZE;
|
||||
|
||||
public Block(uint address)
|
||||
{
|
||||
mAddress = address;
|
||||
}
|
||||
|
||||
public void SetBlockBytes(byte[] bytes)
|
||||
{
|
||||
Array.Clear(mBlockBytes, 0, BLOCK_SIZE);
|
||||
Array.Copy(bytes, mBlockBytes, bytes.Length);
|
||||
}
|
||||
|
||||
public byte[] Encode(int blockno, int numblocks, uint familyId)
|
||||
{
|
||||
const uint UF2_MAGIC_START0 = 0x0A324655;
|
||||
const uint UF2_MAGIC_START1 = 0x9E5D5157;
|
||||
const uint UF2_MAGIC_END = 0x0AB16F30;
|
||||
const uint flags = 0x2000; // withFamilyId flag
|
||||
|
||||
using var memoryStream = new MemoryStream();
|
||||
using var binaryWriter = new BinaryWriter(memoryStream);
|
||||
|
||||
binaryWriter.Write(UF2_MAGIC_START0);
|
||||
binaryWriter.Write(UF2_MAGIC_START1);
|
||||
binaryWriter.Write(flags);
|
||||
binaryWriter.Write(mAddress);
|
||||
binaryWriter.Write(BlockSize);
|
||||
binaryWriter.Write(blockno);
|
||||
binaryWriter.Write(numblocks);
|
||||
binaryWriter.Write(familyId);
|
||||
binaryWriter.Write(mBlockBytes);
|
||||
|
||||
// Pad with zeros
|
||||
while (memoryStream.Position < (512 - sizeof(uint)))
|
||||
{
|
||||
binaryWriter.Write((byte)0);
|
||||
}
|
||||
|
||||
binaryWriter.Write(UF2_MAGIC_END);
|
||||
return memoryStream.ToArray();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
public static class FlashBin
|
||||
{
|
||||
private static uint GetFlashAddressMask(uint biosSize)
|
||||
{
|
||||
var maskBits = 0u;
|
||||
|
||||
biosSize -= 1;
|
||||
while (biosSize > 0)
|
||||
{
|
||||
biosSize >>= 1;
|
||||
maskBits++;
|
||||
}
|
||||
|
||||
var memCapacity = (uint)(1 << (int)maskBits);
|
||||
var addressMask = memCapacity - 1;
|
||||
return addressMask;
|
||||
}
|
||||
|
||||
private static List<Block> GetUF2BlocksFromData(byte[] data, uint flashRomAddress)
|
||||
{
|
||||
var blocks = new List<Block>();
|
||||
|
||||
var blockAddress = flashRomAddress;
|
||||
|
||||
using var ms = new MemoryStream(data);
|
||||
while (true)
|
||||
{
|
||||
var currentBlock = new Block(blockAddress);
|
||||
var buffer = new byte[currentBlock.BlockSize];
|
||||
var bytesRead = ms.Read(buffer, 0, currentBlock.BlockSize);
|
||||
if (bytesRead == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
currentBlock.SetBlockBytes(buffer);
|
||||
blocks.Add(currentBlock);
|
||||
blockAddress += (uint)currentBlock.BlockSize;
|
||||
}
|
||||
return blocks;
|
||||
}
|
||||
|
||||
private static List<Block> GetUF2RomaddrMaskBlock(uint maskAddress, uint romaddrMask)
|
||||
{
|
||||
var blocks = new List<Block>();
|
||||
var currentBlock = new Block(maskAddress);
|
||||
currentBlock.SetBlockBytes(BitConverter.GetBytes(romaddrMask));
|
||||
|
||||
// Copy 16 times a 256 block to fill a 4096 byte sector
|
||||
for (var i = 0; i < 16; i++)
|
||||
{
|
||||
blocks.Add(currentBlock);
|
||||
}
|
||||
|
||||
return blocks;
|
||||
}
|
||||
|
||||
private static byte[] CombineByteArrays(byte[] first, byte[] second)
|
||||
{
|
||||
byte[] combined = new byte[first.Length + second.Length];
|
||||
Buffer.BlockCopy(first, 0, combined, 0, first.Length);
|
||||
Buffer.BlockCopy(second, 0, combined, first.Length, second.Length);
|
||||
return combined;
|
||||
}
|
||||
|
||||
public static byte[] ProcessUf2(byte[] data, uint baseAddress, uint maskAddress, uint familyId)
|
||||
{
|
||||
var uf2Blocks = new List<Block>();
|
||||
var byteStream = Array.Empty<byte>();
|
||||
|
||||
uint romaddrMask = GetFlashAddressMask(256 * 1024);
|
||||
if (maskAddress != 0xffffffff)
|
||||
{
|
||||
uf2Blocks.AddRange(GetUF2RomaddrMaskBlock(maskAddress, romaddrMask));
|
||||
}
|
||||
|
||||
uf2Blocks.AddRange(GetUF2BlocksFromData(data, baseAddress));
|
||||
|
||||
int totalBlocks = uf2Blocks.Count;
|
||||
int currentBlock = 0;
|
||||
|
||||
foreach (var block in uf2Blocks)
|
||||
{
|
||||
byteStream = CombineByteArrays(byteStream, block.Encode(currentBlock, totalBlocks, familyId));
|
||||
currentBlock++;
|
||||
}
|
||||
|
||||
Console.WriteLine("Total blocks written: " + totalBlocks);
|
||||
|
||||
return byteStream;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
using BundlerMinifier;
|
||||
using System.Text;
|
||||
|
||||
namespace PrometheOSPacker.Helpers
|
||||
{
|
||||
internal static class Minify
|
||||
{
|
||||
private static void BundleFile(string sourceFolder, string destFolder, string filename)
|
||||
{
|
||||
var sourceFile = Path.Combine(sourceFolder, filename);
|
||||
var destFile = Path.Combine(destFolder, filename);
|
||||
|
||||
if (Path.GetExtension(filename).Equals(".ico", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
File.Copy(sourceFile, destFile, true);
|
||||
return;
|
||||
}
|
||||
|
||||
var bundleJson = Path.Combine(Utility.GetAppFolder(), "bundle.json");
|
||||
if (File.Exists(bundleJson))
|
||||
{
|
||||
File.Delete(bundleJson);
|
||||
}
|
||||
|
||||
var bundle = new Bundle
|
||||
{
|
||||
IncludeInProject = false,
|
||||
OutputFileName = destFile
|
||||
};
|
||||
bundle.InputFiles.Add(sourceFile);
|
||||
|
||||
BundleHandler.AddBundle(bundleJson, bundle);
|
||||
|
||||
var bundleProcessor = new BundleFileProcessor();
|
||||
var bundles = BundleHandler.GetBundles(bundleJson);
|
||||
bundleProcessor.Process(bundleJson, bundles);
|
||||
|
||||
var minFile = Path.Combine(destFolder, $"{Path.GetFileNameWithoutExtension(filename)}.min{Path.GetExtension(filename)}");
|
||||
if (File.Exists(minFile) == true && File.Exists(destFile))
|
||||
{
|
||||
File.Move(minFile, destFile, true);
|
||||
}
|
||||
|
||||
File.Delete(bundleJson);
|
||||
}
|
||||
|
||||
private static void IncludeFile(string ipToReplace, string sourceFolder, string destFolder, string filename)
|
||||
{
|
||||
var includeName = filename.Replace(".", "_");
|
||||
var headerName = $"{includeName}.h";
|
||||
|
||||
var sourceFile = Path.Combine(sourceFolder, filename);
|
||||
var destFile = Path.Combine(destFolder, headerName);
|
||||
|
||||
byte[] sourceData;
|
||||
if (Path.GetExtension(sourceFile).Equals(".ico", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
sourceData = File.ReadAllBytes(sourceFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sourceText = File.ReadAllText(sourceFile);
|
||||
sourceText = sourceText.Replace($"http://{ipToReplace}", "");
|
||||
sourceData = Encoding.UTF8.GetBytes(sourceText);
|
||||
}
|
||||
|
||||
var resultBuilder = new StringBuilder();
|
||||
resultBuilder.AppendLine("#pragma once");
|
||||
resultBuilder.AppendLine("");
|
||||
resultBuilder.AppendLine($"const uint8_t {includeName}[] = {{");
|
||||
|
||||
for (var i = 0; i < sourceData.Length; i++)
|
||||
{
|
||||
if (i % 16 == 0)
|
||||
{
|
||||
resultBuilder.Append(" ");
|
||||
}
|
||||
resultBuilder.Append("0x");
|
||||
resultBuilder.Append(sourceData[i].ToString("x2"));
|
||||
if (i < sourceData.Length - 1)
|
||||
{
|
||||
resultBuilder.Append(',');
|
||||
if (i % 16 != 15)
|
||||
{
|
||||
resultBuilder.Append(' ');
|
||||
}
|
||||
}
|
||||
if (i % 16 == 15)
|
||||
{
|
||||
resultBuilder.AppendLine();
|
||||
}
|
||||
}
|
||||
resultBuilder.AppendLine();
|
||||
resultBuilder.AppendLine("};");
|
||||
|
||||
var result = resultBuilder.ToString();
|
||||
File.WriteAllText(destFile, result);
|
||||
}
|
||||
|
||||
public static void Process(string ipToReplace)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
|
||||
var webFolder = Path.Combine(slnFolder, "PrometheOSWeb", "wwwroot");
|
||||
var bundleFolder = Path.Combine(slnFolder, "PrometheOSPacker", "bundle");
|
||||
Directory.CreateDirectory(bundleFolder);
|
||||
|
||||
var webFiles = Directory.GetFiles(webFolder);
|
||||
foreach (var webFile in webFiles)
|
||||
{
|
||||
BundleFile(webFolder, bundleFolder, Path.GetFileName(webFile));
|
||||
}
|
||||
|
||||
var includeFolder = Path.GetFullPath("..\\PrometheOSXbe\\PrometheOSXbe\\Assets\\Web", slnFolder);
|
||||
|
||||
var bundleFiles = Directory.GetFiles(bundleFolder);
|
||||
foreach (var bundleFile in bundleFiles)
|
||||
{
|
||||
IncludeFile(ipToReplace, bundleFolder, includeFolder, Path.GetFileName(bundleFile));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,318 @@
|
|||
using FluentFTP;
|
||||
using SixLabors.ImageSharp.PixelFormats;
|
||||
using SixLabors.ImageSharp.Processing;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
|
||||
namespace PrometheOSPacker.Helpers
|
||||
{
|
||||
//Bank1_256k = 3 0x000000 - 0x03ffff Sector Size 65536 Total 262144
|
||||
//Bank2_256k = 4 0x040000 - 0x07ffff Sector Size 65536 Total 262144
|
||||
//Bank3_256k = 5 0x080000 - 0x0bffff Sector Size 65536 Total 262144
|
||||
//Bank4_256k = 6 0x0c0000 - 0x0fffff Sector Size 65536 Total 262144
|
||||
//Bank1_512k = 7 0x000000 - 0x07ffff Sector Size 65536 Total 524288
|
||||
//Bank2_512k = 8 0x080000 - 0x0fffff Sector Size 65536 Total 524288
|
||||
//Bank1_1024k = 9 0x000000 - 0x0fffff Sector Size 65536 Total 1048576
|
||||
//Bank_PrometheOS = 2 0x100000 - 0x17ffff Sector Size 65536 Total 524288
|
||||
//Bank_Bootloader = 1 0x180000 - 0x1bffff Sector Size 65536 Total 262144
|
||||
//Bank_Recovery = 10 0x1c0000 - 0x1fffff See Below Total 262144
|
||||
|
||||
//0x1c0000 - 0x1effff Sector Size 65536 Total 196608 (PrometheOS Continued)
|
||||
//0x1f0000 - 0x1f7fff Sector Size 32768 Total 32768 (Installer Logo)
|
||||
//0x1f8000 - 0x1f9fff Sector Size 8192 Total 8192 (Settings)
|
||||
//0x1fa000 - 0x1fbfff Sector Size 8192 Total 8192 (Spare)
|
||||
//0x1fc000 - 0x1fffff Sector Size 16384 Total 16384 (Spare)
|
||||
|
||||
//Suggested byes for PrometheOS = 720896 (524288 bytes Bank_PrometheOS + First 196608 bytes of Bank_Recovery)
|
||||
|
||||
internal class Package
|
||||
{
|
||||
public static byte[] CompressBank(string filePath, int size)
|
||||
{
|
||||
var fileData = File.ReadAllBytes(filePath);
|
||||
var compressedData = new byte[fileData.Length];
|
||||
var compressedSize = K4os.Compression.LZ4.LZ4Codec.Encode(fileData, compressedData, K4os.Compression.LZ4.LZ4Level.L12_MAX);
|
||||
if (compressedSize <= 0)
|
||||
{
|
||||
throw new Exception("Compress failed.");
|
||||
}
|
||||
byte[] promethosLengthBytes = BitConverter.GetBytes(fileData.Length);
|
||||
byte[] compressedLengthBytes = BitConverter.GetBytes(compressedSize);
|
||||
|
||||
var bank = new byte[size];
|
||||
Array.Copy(promethosLengthBytes, 0, bank, 0, promethosLengthBytes.Length);
|
||||
Array.Copy(compressedLengthBytes, 0, bank, 4, compressedLengthBytes.Length);
|
||||
Array.Copy(compressedData, 0, bank, 8, compressedSize);
|
||||
|
||||
var checksum = 0;
|
||||
for (int i = 0; i < bank.Length; i++)
|
||||
{
|
||||
checksum = checksum + bank[i] & 0xffff;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Compressed Size = {compressedSize + 8} of {size} - Checksum {checksum}");
|
||||
|
||||
return bank;
|
||||
}
|
||||
|
||||
public static byte[] ExtractPrometheOS(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheosSourcePath = Path.GetFullPath($"..\\Input\\prometheos-{modchip}.bin", slnFolder);
|
||||
if (File.Exists(prometheosSourcePath) == false)
|
||||
{
|
||||
Console.WriteLine($"Error: Looks like you didnt suppliy prometheos-{modchip}.bin in input folder.");
|
||||
throw new Exception("Failed: ExtractPrometheOS");
|
||||
}
|
||||
|
||||
var prometheosSource = File.ReadAllBytes(prometheosSourcePath);
|
||||
var firmware = new byte[256 * 1024];
|
||||
|
||||
if (modchip.Equals("Xenium", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x180000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
if (modchip.Equals("Xecuter", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x000000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
if (modchip.Equals("Xchanger", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x0C0000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
if (modchip.Equals("Aladdin1mb", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x0C0000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
if (modchip.Equals("Aladdin2mb", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x100000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
if (modchip.StartsWith("Modxo", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Array.Copy(prometheosSource, 0x040000, firmware, 0, 256 * 1024);
|
||||
return firmware;
|
||||
}
|
||||
|
||||
throw new Exception($"Failed: Unrecognized modchip {modchip}.");
|
||||
}
|
||||
|
||||
public static void PackageTools()
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var promethosToolsXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-Tools\\PrometheOS-Tools.xbe", slnFolder);
|
||||
var tools = File.ReadAllBytes(promethosToolsXbePath);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-tools.xbe"), tools);
|
||||
}
|
||||
|
||||
public static void PackageXenium(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, (512 + 96) * 1024);
|
||||
|
||||
var firmware = new byte[2048 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x100000, 512 * 1024);
|
||||
Array.Copy(promethosxbeBank, 512 * 1024, firmware, 0x1e0000, 96 * 1024);
|
||||
Array.Copy(prometheos, 0, firmware, 0x180000, prometheos.Length);
|
||||
|
||||
//var logo = GetInstallerLogo();
|
||||
//Array.Copy(logo, 0, firmware, 0x1F0000 , logo.Length);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}.bin"), firmware);
|
||||
}
|
||||
|
||||
public static void PackageXecuter(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, 655360);
|
||||
|
||||
var firmware = new byte[2048 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x040000, promethosxbeBank.Length);
|
||||
Array.Copy(prometheos, 0, firmware, 0x000000, prometheos.Length);
|
||||
|
||||
//var logo = GetInstallerLogo();
|
||||
//Array.Copy(logo, 0, firmware, 0x0e0000 , logo.Length);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}.bin"), firmware);
|
||||
}
|
||||
|
||||
public static void PackageXchanger(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, 508 * 1024);
|
||||
|
||||
var firmware = new byte[1024 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x000000, 508 * 1024);
|
||||
Array.Copy(prometheos, 0, firmware, 0x0C0000, prometheos.Length);
|
||||
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}.bin"), firmware);
|
||||
}
|
||||
|
||||
private static void PackageModxoVariant(byte[] prometheos, string variant, string modchip, uint familyId)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, 0x080000 - 0x1000);
|
||||
|
||||
var firmware = new byte[1 * 1024 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x080000, promethosxbeBank.Length);
|
||||
Array.Copy(prometheos, 0, firmware, 0x040000, prometheos.Length);
|
||||
|
||||
var modxo = File.ReadAllBytes($"modxo-{variant}.bin");
|
||||
Array.Copy(modxo, 0, firmware, 0x000000, modxo.Length);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}-{variant.ToLower()}.bin"), firmware);
|
||||
|
||||
var uf2 = FlashBin.ProcessUf2(firmware, 0x10000000, 0xffffffff, familyId);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}-{variant.ToLower()}.uf2"), uf2);
|
||||
}
|
||||
|
||||
public static void PackageModxo(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
uint defaultFamilyId = 0xE48BFF56;
|
||||
|
||||
PackageModxoVariant(prometheos, "official-pico", modchip, defaultFamilyId);
|
||||
PackageModxoVariant(prometheos, "official-pico2", modchip, 0xE48BFF59);
|
||||
PackageModxoVariant(prometheos, "rp2040-zero-tiny", modchip, defaultFamilyId);
|
||||
PackageModxoVariant(prometheos, "yd-rp2040", modchip, defaultFamilyId);
|
||||
PackageModxoVariant(prometheos, "xiao-rp2040", modchip, defaultFamilyId);
|
||||
PackageModxoVariant(prometheos, "ultra", modchip, defaultFamilyId);
|
||||
|
||||
if (File.Exists("modxo-custom.bin"))
|
||||
{
|
||||
PackageModxoVariant(prometheos, "custom", modchip, defaultFamilyId);
|
||||
}
|
||||
}
|
||||
|
||||
public static void PackageAladdin1mb(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, 508 * 1024);
|
||||
|
||||
var firmware = new byte[1024 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x000000, 508 * 1024);
|
||||
Array.Copy(prometheos, 0, firmware, 0x0C0000, prometheos.Length);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}.bin"), firmware);
|
||||
}
|
||||
|
||||
public static void PackageAladdin2mb(string modchip)
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var prometheos = ExtractPrometheOS(modchip);
|
||||
|
||||
var promethosXbePath = Path.GetFullPath($"..\\PrometheOSXbe\\PrometheOSXbe\\Release-{modchip}\\PrometheOS.xbe", slnFolder);
|
||||
if (File.Exists(promethosXbePath) == false)
|
||||
{
|
||||
Console.WriteLine("Error: Looks like you didnt build PrometheOSXbe.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Packing PrometheOS Xbe...");
|
||||
var promethosxbeBank = CompressBank(promethosXbePath, (768 - 36) * 1024);
|
||||
|
||||
var firmware = new byte[2 * 1024 * 1024];
|
||||
Array.Copy(promethosxbeBank, 0, firmware, 0x140000, (768 - 36) * 1024);
|
||||
Array.Copy(prometheos, 0, firmware, 0x100000, prometheos.Length);
|
||||
|
||||
var buildPath = Path.Combine(slnFolder, "..\\Build");
|
||||
Directory.CreateDirectory(buildPath);
|
||||
File.WriteAllBytes(Path.Combine(buildPath, $"prometheos-{modchip.ToLower()}.bin"), firmware);
|
||||
}
|
||||
|
||||
public static void FtpXeniumOS()
|
||||
{
|
||||
var slnFolder = Utility.GetSlnFolder();
|
||||
var buildPath = Path.Combine(slnFolder, "Build");
|
||||
|
||||
try
|
||||
{
|
||||
using (FtpClient ftpClient = new FtpClient("ftp://xenium.local", "admin", "Blu3P3t3r!"))
|
||||
{
|
||||
ftpClient.Connect();
|
||||
ftpClient.UploadFile(Path.Combine(buildPath, "xeniumos.bin"), "/home/admin/xenium-programmer/xenium-bin/xeniumos.bin");
|
||||
Console.WriteLine($"File uploaded successfully");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error uploading file: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
namespace PrometheOSPacker.Helpers
|
||||
{
|
||||
internal static class Utility
|
||||
{
|
||||
public static string GetAppFolder()
|
||||
{
|
||||
return AppDomain.CurrentDomain.BaseDirectory;
|
||||
}
|
||||
|
||||
public static string GetSlnFolder()
|
||||
{
|
||||
var directory = GetAppFolder();
|
||||
var files = Directory.GetFiles(directory, "*.sln");
|
||||
while (files.Length == 0)
|
||||
{
|
||||
var parentDirectoryInfo = Directory.GetParent(directory);
|
||||
if (parentDirectoryInfo == null)
|
||||
{
|
||||
throw new Exception("Unable to get parent directory.");
|
||||
}
|
||||
directory = parentDirectoryInfo.FullName;
|
||||
files = Directory.GetFiles(directory, "*.sln");
|
||||
}
|
||||
return directory;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue