0) {
// Script for converting a 32-bit Amiga Kickstart file to two .bin files
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// Config
$filepath = $_FILES['kickstart']['tmp_name'];
$filename = preg_replace('/.[^.]*$/', '', $_FILES['kickstart']['name']);
$type = $_POST['type'];
$byteswap = ($_POST['byteswap'] == 'on') ? TRUE : FALSE;
$multiply = $_POST['multiply'];
$folder = 'kickstarts/';
$delete_old = TRUE;
if ($delete_old) {
$old_files = glob($folder . '*');
foreach($old_files as $old_file) {
if (is_file($old_file) && time()-filemtime($old_file) > 15 * 60) {
unlink($old_file);
}
}
}
// AB CD EF GH -> BA FE (HI) + DC HG (LO)
$kick = fopen($filepath, "rb");
$contents = fread($kick, filesize($filepath));
$kick_wordsplit = str_split($contents, 2);
fclose($kick);
$even = FALSE; $single = ''; $hi = ''; $lo = ''; $i = 0;
foreach ($kick_wordsplit as $word) {
$word = ($byteswap) ? strrev($word) : $word;
if ($type == '32') {
if ($even) {
$lo .= $word;
} else {
$hi .= $word;
}
} else {
$single .= $word;
}
$even = !$even;
$i++;
}
// 27c400: 2^2, 27c800: 2^3
for ($x = 1; $x < $multiply; $x++) {
$hi .= $hi;
$lo .= $lo;
$single .= $single;
}
$swapped = ($byteswap) ? '-bsw' : '';
echo $i*2 . ' bytes processed
';
// 32-bit eproms
if ($type == '32') {
echo strlen($hi) . ' bytes written (x2)
';
$hi_filename = $filename . $swapped . '-HI' . '.bin';
$hi_file = fopen($folder . $hi_filename, 'w');
fwrite($hi_file, $hi);
fclose($hi_file);
$lo_filename = $filename . $swapped . '-LO' . '.bin';
$lo_file = fopen($folder . $lo_filename, 'w');
fwrite($lo_file, $lo);
fclose($lo_file);
echo 'HI →
' . $hi_filename . '';
echo 'LO →
' . $lo_filename . '';
// 16-bit eprom
} else {
echo strlen($single) . ' bytes written
';
$single_filename = $filename . $swapped . '.bin';
$single_file = fopen($folder . $single_filename, 'w');
fwrite($single_file, $single);
fclose($single_file);
echo 'FILE →
' . $single_filename . '';
}
echo '
✔ DONE!
';
}
?>