Skip to content

Commit

Permalink
MIPS...
Browse files Browse the repository at this point in the history
  • Loading branch information
lemon32767 committed May 24, 2021
1 parent b5b0330 commit d645f18
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
node_modules/
package-lock.json
*.xcf
6 changes: 4 additions & 2 deletions mips.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<style>
textarea {
resize: none;
width: 40%;
width: 45%;
font-size: 120%;
font-family: monospace;
}
Expand All @@ -17,7 +17,7 @@
</head>

<body>
<div style="width: 90%; margin: 0 auto; padding-left: 12%;">
<div style="width: 85%; margin: 0 auto; padding-left: 10%;">
<h2>MIPS Assembler</h2>
<p>Input MIPS assembly code below. Labels, .org and simple .word directives are also recognized. Comments start with ';' and extend to the end of the line.</p>
<textarea wrap='off' rows="15" id="assembler-input" placeholder="MIPS assembly input" spellcheck="false"></textarea>
Expand All @@ -31,6 +31,8 @@ <h2>MIPS Disassembler</h2>
<textarea wrap='off' rows="15" id="disassembler-input" placeholder="MIPS machine code in hex" spellcheck="false"></textarea>
<textarea wrap='off' rows="15" readonly id="disassembler-output" placeholder="Disassembler output"></textarea>
<br>
<label>.org (Start Address) </label><input style="font-family: monospace;" type='text' id="disassembler-org" size="8" placeholder="00000000" spellcheck="false">
<br>
<button onclick="disassembleAndPresent();">disassemble</button>
</div>

Expand Down
20 changes: 19 additions & 1 deletion mips.js
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,13 @@ function assembleAndPresent() {
function disassembleAndPresent() {
let out = $('disassembler-output');
try {
let insns = disassembleListing($('disassembler-input').value, 0);
const org = parseInt($('disassembler-org').value, 16) || 0;
if (org > 0xFFFFFFFF || org < 0)
throw "! Invalid starting address (out of range) " + rightpad(org.toString(16), 8, "0");
else if ((org & 3) != 0)
throw "! Invalid starting address (unaligned) " + rightpad(org.toString(16), 8, "0");

let insns = disassembleListing($('disassembler-input').value, org);
out.value = '';
for (const insn of insns) {
out.value += int2hex(insn[0]) + ': ' + int2hex(insn[1]) + ' '
Expand All @@ -504,3 +510,15 @@ function disassembleAndPresent() {
out.value = "! Error!!\n" + e;
}
}

window.onload = () => {
let disasmOrgPrevVal = $('disassembler-org').value || 0;
$('disassembler-org').oninput = (e) => {
// revert edit if not a valid hex address
const newval = e.target.value;
if (newval.length && !newval.match(/^[0-9A-Fa-f]+$/))
e.target.value = disasmOrgPrevVal;
else
disasmOrgPrevVal = e.target.value;
};
};

0 comments on commit d645f18

Please sign in to comment.