update 0.9.0
This commit is contained in:
parent
2276cd4df8
commit
fbf36a4fa5
36 changed files with 65950 additions and 22044 deletions
202
disass.js
Normal file
202
disass.js
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
| SAE - Scripted Amiga Emulator
|
||||
| https://github.com/naTmeg/ScriptedAmigaEmulator
|
||||
|
|
||||
| Copyright (C) 2012-2016 Rupert Hausberger
|
||||
|
|
||||
| This program is free software; you can redistribute it and/or
|
||||
| modify it under the terms of the GNU General Public License
|
||||
| as published by the Free Software Foundation; either version 2
|
||||
| of the License, or (at your option) any later version.
|
||||
|
|
||||
| This program is distributed in the hope that it will be useful,
|
||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
| GNU General Public License for more details.
|
||||
|
|
||||
| Note: This file does not contain any emulator-code.
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
var sda = null; /* SDA instance */
|
||||
var cfg = null; /* reference to the config-object */
|
||||
|
||||
|
||||
var filesize = 0;
|
||||
|
||||
var showAddr = true;
|
||||
var showCode = true;
|
||||
var upperCase = false;
|
||||
|
||||
var result = [];
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function isHex(str) {
|
||||
var str_uc = str.toUpperCase();
|
||||
for (var i = 0; i < str_uc.length; i++) {
|
||||
var chr = str_uc.charCodeAt(i);
|
||||
if (!((chr >= 48 && chr <= 57) || (chr >= 65 && chr <= 70)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function getSelectValue(id) {
|
||||
var e = document.getElementById(id);
|
||||
for (var i = 0; i < e.length; i++) {
|
||||
if (e[i].selected) return e[i].value;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function loadFile(e, callback) {
|
||||
var reader = new FileReader();
|
||||
reader.onload = callback;
|
||||
reader.readAsBinaryString(e);
|
||||
}
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function result2text() {
|
||||
var i, j, text = "";
|
||||
for (i = 0; i < result.length; i++) {
|
||||
var addr = result[i][0];
|
||||
var code = result[i][1];
|
||||
var words = result[i][2];
|
||||
var inst = result[i][3];
|
||||
|
||||
if (showAddr)
|
||||
text += sprintf(upperCase ? "$%06X " : "$%06x ", addr);
|
||||
if (showCode) {
|
||||
for (j = 0; j < words; j++) text += sprintf(upperCase ? "%04X " : "%04x ", code[j]);
|
||||
//for (j = words; j < 5; j++) text += " ";
|
||||
for (j = words; j < 5; j++) text += " ";
|
||||
}
|
||||
text += upperCase ? inst.toUpperCase() : inst;
|
||||
//text += "<br/>";
|
||||
text += "\n";
|
||||
|
||||
if (addr + words*2 >= filesize) break;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function init() {
|
||||
try {
|
||||
sda = new ScriptedDisAssembler();
|
||||
cfg = sda.getConfig(); /* reference to config */
|
||||
//console.log(cfg);
|
||||
} catch(e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
function disass() {
|
||||
try {
|
||||
result = sda.disassemble();
|
||||
//console.log(result);
|
||||
|
||||
document.getElementById("disass_code").value = result2text();
|
||||
document.getElementById("disass_cfg").style.display = "table";
|
||||
document.getElementById("disass_code").style.display = "inline";
|
||||
} catch(e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------*/
|
||||
|
||||
function updFile() {
|
||||
var e = document.getElementById("cfg_file").files[0];
|
||||
if (!e) return;
|
||||
|
||||
loadFile(e, function (event) {
|
||||
cfg.code = event.target.result;
|
||||
cfg.offset = 0;
|
||||
|
||||
filesize = event.target.result.length;
|
||||
|
||||
var fn = document.getElementById("cfg_filename");
|
||||
fn.className = "";
|
||||
fn.innerHTML = e.name;
|
||||
document.getElementById("cfg_offset").value = "0";
|
||||
|
||||
disass();
|
||||
});
|
||||
}
|
||||
|
||||
function updOffset() {
|
||||
var offset = document.getElementById("cfg_offset");
|
||||
if (isHex(offset.value)) {
|
||||
var newoffset = parseInt(offset.value, 16);
|
||||
|
||||
if (newoffset < filesize) {
|
||||
cfg.offset = newoffset;
|
||||
disass();
|
||||
} else {
|
||||
alert(sprintf("The value at 'Offset' is behing the file-size. (max $%x)", filesize - 1));
|
||||
offset.focus();
|
||||
}
|
||||
} else {
|
||||
alert("The value at 'Offset' in not a hexadecimal number.");
|
||||
offset.focus();
|
||||
}
|
||||
}
|
||||
|
||||
function updLimit() {
|
||||
var limit = document.getElementById("cfg_limit");
|
||||
//if (isDec(limit.value)) {
|
||||
cfg.limit = parseInt(limit.value);
|
||||
disass();
|
||||
/*} else {
|
||||
alert("The value at "Limit" in not a decimal number.");
|
||||
limit.focus();
|
||||
}*/
|
||||
}
|
||||
|
||||
function updNext() {
|
||||
var addr = result[result.length - 1][0];
|
||||
var words = result[result.length - 1][2];
|
||||
|
||||
cfg.offset = addr + words*2;
|
||||
document.getElementById("cfg_offset").value = sprintf("%x", cfg.offset);
|
||||
disass();
|
||||
}
|
||||
|
||||
function updRadix() {
|
||||
cfg.radix = parseInt(getSelectValue("cfg_radix"));
|
||||
disass();
|
||||
}
|
||||
function updPrefx() {
|
||||
cfg.prefx = parseInt(getSelectValue("cfg_prefx")) == 1 ? "$" : "0x";
|
||||
disass();
|
||||
}
|
||||
function updWidth() {
|
||||
cfg.width = parseInt(getSelectValue("cfg_width"));
|
||||
disass();
|
||||
}
|
||||
|
||||
function updCase() {
|
||||
upperCase = document.getElementById("cfg_case").checked;
|
||||
disass();
|
||||
}
|
||||
|
||||
function updReloc() {
|
||||
cfg.reloc = document.getElementById("cfg_reloc").checked;
|
||||
disass();
|
||||
}
|
||||
|
||||
function updShowAddr() {
|
||||
showAddr = document.getElementById("cfg_showAddr").checked;
|
||||
disass();
|
||||
}
|
||||
function updShowCode() {
|
||||
showCode = document.getElementById("cfg_showCode").checked;
|
||||
disass();
|
||||
}
|
||||
Loading…
Reference in a new issue