sf2000/tools/firmwareVersionChecker.htm

113 lines
5.4 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Data Frog SF2000 Firmware Version Checker</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="tools.css">
</head>
<body>
<h1>Data Frog SF2000 Firmware Version Checker</h1>
<p>This simple tool will just check an SF2000 firmware/BIOS file against a list of known versions, and tell you which version it is. You can <a href="https://vonmillhausen.github.io/sf2000/#firmwarebios-bisrvasd">learn more about firmware revisions for the SF2000 here</a>.</p>
<hr>
<div id="steps">
<section id="bisrvSection">
<h2>Select Your <code>bisrv.asd</code></h2>
<p>Select the <code>bisrv.asd</code> firmware file whose version you want to check. You can find the <code>bisrv.asd</code> file in the <code>bios</code> folder on your microSD card.</p>
<div id="bisrvMessages"></div>
<div class="controlContainer">
<label class="control">Open <code>bisrv.asd</code>: <input id="bisrvSelector" type="file" accept=".asd" onchange="bisrvLoad(event.target.files[0])"></label>
</div>
</section>
</div>
<script src="tools.js"></script>
<script type="text/javascript">
// Global variables...
var bisrvData; // Used to store the binary data from the bisrv.asd file
// This function is triggered when the person selects a file...
function bisrvLoad(file) {
// Read in the contents of the selected file as array buffer...
var frBisrv = new FileReader();
frBisrv.readAsArrayBuffer(file);
frBisrv.onload = function(event) {
// Clear any old messages...
document.getElementById("bisrvMessages").innerHTML = "";
// Read the provided file's data into an array...
bisrvData = new Uint8Array(event.target.result);
// We'll do a hash-check against it...
hashResult = getFirmwareHash(bisrvData);
// The result could be either a Promise if it had a bisrv.asd-like structure and we got
// a hash, or false otherwise... let's check!
if (hashResult instanceof Promise) {
// We got a Promise! Wait for it to finish so we get our bisrv.asd hash...
hashResult.then(function(dataHash) {
// Check the hash against all the known good ones...
switch (knownHash(dataHash)) {
// Mid-March BIOS...
case "03.15":
setMessage("warning", "bisrvMessages", "Mid-March <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break;
// April 20th BIOS...
case "04.20":
setMessage("warning", "bisrvMessages", "April 20th <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break;
// May 15th BIOS...
case "05.15":
setMessage("warning", "bisrvMessages", "May 15th <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break;
// May 22nd BIOS...
case "05.22":
setMessage("warning", "bisrvMessages", "Version 1.5 <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break;
// August 3rd BIOS...
case "08.03":
setMessage("warning", "bisrvMessages", "Version 1.6 <code>bisrv.asd</code> detected. Newer firmware is available, see the link above for more information.");
break;
// October 7th BIOS...
case "10.07":
setMessage("error", "bisrvMessages", "Version 1.7 <code>bisrv.asd</code> detected. This firmware version has a critical issue with SNES save states, and is not recommended for use. See the link above for more information.");
break;
// October 13th BIOS...
case "10.13":
setMessage("info", "bisrvMessages", "Version 1.71 <code>bisrv.asd</code> detected. This is the latest known official firmware version.");
break;
default:
// Huh... wasn't false so had bisrv.asd structure, but didn't return
// a known hash... a new BIOS version? Unknown anyway!
console.log(dataHash);
setMessage("error", "bisrvMessages", "While the file you've selected does appear to be generally structured like the SF2000's <code>bisrv.asd</code> firmware file, the specifics of your file don't match any known SF2000 firmware version.");
return;
}
});
}
else {
// We got false, so whatever it was, it wasn't a bisrv.asd...
setMessage("error", "bisrvMessages", "The file you've selected doesn't appear to have the same data structure as expected for a <code>bisrv.asd</code> file.");
return;
}
};
}
</script>
<hr>
<p><a rel="license" href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>: public domain. Version 1.2, 20231019.1</p>
</body>
</html>