From 65e59d350dea250dd2dd04320131087855b7ca19 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sun, 8 Jan 2017 10:51:19 -0500 Subject: [PATCH] nicer disassembly window --- index.html | 2 ++ src/disasm.js | 2 +- src/ui.js | 56 ++++++++++++++++++++++++++++++++++------ src/worker/workermain.js | 3 ++- 4 files changed, 53 insertions(+), 10 deletions(-) diff --git a/index.html b/index.html index e11ca010..9d2484cd 100644 --- a/index.html +++ b/index.html @@ -252,10 +252,12 @@ a.dropdown-toggle { + + diff --git a/src/disasm.js b/src/disasm.js index 6f57bebc..f50a6d8c 100644 --- a/src/disasm.js +++ b/src/disasm.js @@ -68,7 +68,7 @@ function formatAbsoluteIndexedY (args) { } function formatIndirect (args) { - return this.name + " ($" + formatHex(args[0], 2) + ")"; + return this.name + " ($" + formatHex(args[1], 2) + formatHex(args[0], 2) + ")"; } function formatIndirectIndexedX (args) { diff --git a/src/ui.js b/src/ui.js index ba9fe74c..eaa96bc3 100644 --- a/src/ui.js +++ b/src/ui.js @@ -51,7 +51,15 @@ var editor = CodeMirror(document.getElementById('editor'), { tabSize: 8, gutters: ["CodeMirror-linenumbers", "gutter-offset", "gutter-bytes", "gutter-clock", "gutter-info"], }); -//editor.setSize("100%", "95%"); // TODO +var disasmview = CodeMirror(document.getElementById('disassembly'), { + mode: '6502', + theme: 'cobalt', + tabSize: 8, + readOnly: true, + styleActiveLine: true, + gutters: ["gutter-offset", "gutter-bytes", "gutter-clock", "gutter-info"], +}); + editor.on('changes', function(ed, changeobj) { var text = editor.getValue() || ""; setCode(text); @@ -705,17 +713,49 @@ function showLoopTimingForCurrentLine() { function updateDisassembly() { var div = $("#disassembly"); if (div.is(':visible')) { - div.empty(); + disasmview.clearGutter("gutter-info"); + disasmview.clearGutter("gutter-bytes"); + disasmview.clearGutter("gutter-offset"); + disasmview.clearGutter("gutter-clock"); var state = lastDebugState || platform.saveState(); var mem = state.b; var pc = state.c.PC; - var disasm = new Disassembler6502().disassemble(mem, pc, pc+128, pcvisits); - var s = ""; - for (a in disasm) { - var line = hex(parseInt(a)) + " " + disasm[a] + "\n"; - s += line; + var gutters = []; + var selline = 0; + // TODO: not perfect disassembler + function disassemble(start, end) { + if (start < 0) start = 0; + if (end > mem.length) end = mem.length; + var disasm = new Disassembler6502().disassemble(mem, start, end, pcvisits); + var s = ""; + for (a in disasm) { + var srclinenum = offset2line[a]; + if (srclinenum) { + var srcline = editor.getLine(srclinenum-1); + if (srcline && srcline.trim().length) { + s += "; " + srclinenum + ":\t" + srcline + "\n"; + gutters.push([a]); + } + } + var dline = hex(parseInt(a)) + "\t" + disasm[a] + "\n"; + s += dline; + if (a == pc) selline = gutters.length; + gutters.push([]); + } + return s; } - $("
").appendTo(div).text(s);
+    var text = disassemble(pc-96, pc) + disassemble(pc, pc+96);
+    disasmview.setValue(text);
+    /*
+    for (var i=0; i", outstr.length);
+  console.log(outstr);
   return assembleACME(outstr);
 }
 
@@ -260,7 +261,7 @@ function compileCC65(code, platform) {
   var FS = CC65['FS'];
   setupFS(FS);
   FS.writeFile("main.c", code, {encoding:'utf8'});
-  CC65.callMain(['-v', '-T', '-g', '-Oirs', '-I', '/share/include', '-t', platform, "main.c"]);
+  CC65.callMain(['-v', '-T', '-g', '-Cl', '-Oirs', '-I', '/share/include', '-t', platform, "main.c"]);
   var asmout = FS.readFile("main.s", {encoding:'utf8'});
   return assemblelinkCA65(asmout, platform);
 }