mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-29 14:51:17 +00:00
scroll to item, multiple insns per line
This commit is contained in:
parent
fa0d0ac872
commit
4447d85008
14
index.html
14
index.html
@ -99,6 +99,16 @@ div.mem_info {
|
|||||||
font-family: "Andale Mono", "Menlo", "Lucida Console", monospace;
|
font-family: "Andale Mono", "Menlo", "Lucida Console", monospace;
|
||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
}
|
}
|
||||||
|
.btn_group {
|
||||||
|
border-radius:6px;
|
||||||
|
padding:6px;
|
||||||
|
margin-left:8px;
|
||||||
|
background-color: #666;
|
||||||
|
}
|
||||||
|
.btn_group.debug_group {
|
||||||
|
}
|
||||||
|
.btn_group.view_group {
|
||||||
|
}
|
||||||
.seg_code { color: #ff9966; }
|
.seg_code { color: #ff9966; }
|
||||||
.seg_data { color: #66ff66; }
|
.seg_data { color: #66ff66; }
|
||||||
.seg_stack { color: #ffff66; }
|
.seg_stack { color: #ffff66; }
|
||||||
@ -239,7 +249,7 @@ canvas.pixelated {
|
|||||||
<select id="preset_select" name="">
|
<select id="preset_select" name="">
|
||||||
</select>
|
</select>
|
||||||
<img id="compile_spinner" src="images/spinner.gif" height="20em" style="visibility:hidden;margin-left:8px;margin-right:8px">
|
<img id="compile_spinner" src="images/spinner.gif" height="20em" style="visibility:hidden;margin-left:8px;margin-right:8px">
|
||||||
<span class="debug_bar" id="debug_bar">
|
<span class="btn_group debug_group" id="debug_bar">
|
||||||
<button id="dbg_reset" type="submit" title="Reset and Break"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></button>
|
<button id="dbg_reset" type="submit" title="Reset and Break"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></button>
|
||||||
<button id="dbg_pause" type="button" title="Pause"><span class="glyphicon glyphicon-pause" aria-hidden="true"></span></button>
|
<button id="dbg_pause" type="button" title="Pause"><span class="glyphicon glyphicon-pause" aria-hidden="true"></span></button>
|
||||||
<button id="dbg_go" type="button" title="Run"><span class="glyphicon glyphicon-play" aria-hidden="true"></span></button>
|
<button id="dbg_go" type="button" title="Run"><span class="glyphicon glyphicon-play" aria-hidden="true"></span></button>
|
||||||
@ -248,7 +258,7 @@ canvas.pixelated {
|
|||||||
<button id="dbg_stepout" type="submit" title="Step Out of Subroutine"><span class="glyphicon glyphicon-hand-up" aria-hidden="true"></span></button>
|
<button id="dbg_stepout" type="submit" title="Step Out of Subroutine"><span class="glyphicon glyphicon-hand-up" aria-hidden="true"></span></button>
|
||||||
<button id="dbg_stepback" type="submit" title="Step Backwards"><span class="glyphicon glyphicon-step-backward" aria-hidden="true"></span></button>
|
<button id="dbg_stepback" type="submit" title="Step Backwards"><span class="glyphicon glyphicon-step-backward" aria-hidden="true"></span></button>
|
||||||
</span>
|
</span>
|
||||||
<span class="extra_bar" id="extra_bar">
|
<span class="btn_group view_group" id="extra_bar">
|
||||||
<button id="dbg_timing" type="submit" title="See Timing" style="display:none"><span class="glyphicon glyphicon-time" aria-hidden="true"></span></button>
|
<button id="dbg_timing" type="submit" title="See Timing" style="display:none"><span class="glyphicon glyphicon-time" aria-hidden="true"></span></button>
|
||||||
<button id="dbg_disasm" type="submit" title="Show Disassembly" style="display:none"><span class="glyphicon glyphicon-list" aria-hidden="true"></span></button>
|
<button id="dbg_disasm" type="submit" title="Show Disassembly" style="display:none"><span class="glyphicon glyphicon-list" aria-hidden="true"></span></button>
|
||||||
<button id="dbg_memory" type="submit" title="Show Memory" style="display:none"><span class="glyphicon glyphicon-sunglasses" aria-hidden="true"></span></button>
|
<button id="dbg_memory" type="submit" title="Show Memory" style="display:none"><span class="glyphicon glyphicon-sunglasses" aria-hidden="true"></span></button>
|
||||||
|
@ -193,8 +193,8 @@ var AtariColorVectorPlatform = function(mainElement) {
|
|||||||
cpuram = new RAM(0x800);
|
cpuram = new RAM(0x800);
|
||||||
dvgram = new RAM(0x2000);
|
dvgram = new RAM(0x2000);
|
||||||
earom = new RAM(0x40);
|
earom = new RAM(0x40);
|
||||||
rom = padBytes(new lzgmini().decode(GRAVITAR_ROM).slice(0), 0x7000+1);
|
//rom = padBytes(new lzgmini().decode(GRAVITAR_ROM).slice(0), 0x7000+1);
|
||||||
vecrom = padBytes(new lzgmini().decode(GRAVITAR_VECROM).slice(0), 0x6000-0x2800+1);
|
//vecrom = padBytes(new lzgmini().decode(GRAVITAR_VECROM).slice(0), 0x6000-0x2800+1);
|
||||||
switches[0] = 0x0;
|
switches[0] = 0x0;
|
||||||
switches[1] = 0xff;
|
switches[1] = 0xff;
|
||||||
switches[2] = 0x0;
|
switches[2] = 0x0;
|
||||||
@ -267,6 +267,7 @@ var AtariColorVectorPlatform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.loadROM = function(title, data) {
|
this.loadROM = function(title, data) {
|
||||||
|
rom = padBytes(data, 0x7000);
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
src/ui.js
30
src/ui.js
@ -255,7 +255,7 @@ function gotoPresetNamed(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _createNewFile(e) {
|
function _createNewFile(e) {
|
||||||
var filename = prompt("Create New File", "newfile.a");
|
var filename = prompt("Create New File", "newfile" + platform.getDefaultExtension());
|
||||||
if (filename && filename.length) {
|
if (filename && filename.length) {
|
||||||
if (filename.indexOf(".") < 0) {
|
if (filename.indexOf(".") < 0) {
|
||||||
filename += platform.getDefaultExtension();
|
filename += platform.getDefaultExtension();
|
||||||
@ -866,6 +866,12 @@ function getMemorySegment(a) {
|
|||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function findMemoryWindowLine(a) {
|
||||||
|
for (var i=0; i<dumplines.length; i++)
|
||||||
|
if (dumplines[i].a >= a)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
function showMemoryWindow() {
|
function showMemoryWindow() {
|
||||||
memoryview = new VirtualList({
|
memoryview = new VirtualList({
|
||||||
w:$("#emulator").width(),
|
w:$("#emulator").width(),
|
||||||
@ -885,7 +891,8 @@ function showMemoryWindow() {
|
|||||||
});
|
});
|
||||||
$("#memoryview").empty().append(memoryview.container);
|
$("#memoryview").empty().append(memoryview.container);
|
||||||
updateMemoryWindow();
|
updateMemoryWindow();
|
||||||
memoryview.scrollToItem(0); // TODO
|
if (compparams && dumplines)
|
||||||
|
memoryview.scrollToItem(findMemoryWindowLine(compparams.data_start));
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleMemoryWindow() {
|
function toggleMemoryWindow() {
|
||||||
@ -950,21 +957,26 @@ function profileWindowCallback(a,v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getProfileLine(line) {
|
function getProfileLine(line) {
|
||||||
var offset = getVisibleSourceFile().line2offset[line];
|
var srcfile = getVisibleSourceFile();
|
||||||
if (offset >= 0) {
|
var offset = srcfile.line2offset[line];
|
||||||
|
var offset2 = srcfile.line2offset[line+1];
|
||||||
|
if (!(offset2 > offset)) offset2 = offset+1;
|
||||||
|
var s = '';
|
||||||
|
var nv = 0;
|
||||||
|
while (offset < offset2) {
|
||||||
var pcd = pcdata[offset];
|
var pcd = pcdata[offset];
|
||||||
if (pcd) {
|
if (pcd) {
|
||||||
var s = pcd.nv+"";
|
nv += pcd.nv;
|
||||||
while (s.length < 8) { s = ' '+s; }
|
|
||||||
if (pcd.lastra >= 0) {
|
if (pcd.lastra >= 0) {
|
||||||
s += " read [" + hex(pcd.lastra,4) + "] == " + hex(pcd.lastrv,2);
|
s += " rd [" + hex(pcd.lastra,4) + "] == " + hex(pcd.lastrv,2);
|
||||||
}
|
}
|
||||||
if (pcd.lastwa >= 0) {
|
if (pcd.lastwa >= 0) {
|
||||||
s += " write " + hex(pcd.lastwv,2) + " -> [" + hex(pcd.lastwa,4) + "]";
|
s += " wr " + hex(pcd.lastwv,2) + " -> [" + hex(pcd.lastwa,4) + "]";
|
||||||
}
|
}
|
||||||
return s;
|
|
||||||
}
|
}
|
||||||
|
offset++;
|
||||||
}
|
}
|
||||||
|
return nv ? (lpad(nv+"",8) + s) : '.';
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleProfileWindow() {
|
function toggleProfileWindow() {
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
function lpad(s,n) { while(s.length<n) s=" "+s; return s; }
|
||||||
|
|
||||||
function hex(v, nd) {
|
function hex(v, nd) {
|
||||||
try {
|
try {
|
||||||
if (!nd) nd = 2;
|
if (!nd) nd = 2;
|
||||||
|
@ -92,26 +92,41 @@ function loadFilesystem(name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ATARI_CFG =
|
var ATARI_CFG =
|
||||||
"FEATURES {\nSTARTADDRESS: default = $9000;\n}\n"
|
"FEATURES {\nSTARTADDRESS: default = $9000;\n}\n"
|
||||||
+ "MEMORY {\n"
|
+ "MEMORY {\n"
|
||||||
+ " ZP: start = $82, size = $7E;\n"
|
+ " ZP: file = \"\", start = $82, size = $7E, type = rw, define = yes;\n"
|
||||||
+ " RAM: start = $0200, size = $1e00;\n"
|
+ " RAM: file = \"\", start = $0200, size = $1e00, define = yes;\n"
|
||||||
+ " ROM: start = $9000, size = $7000;\n"
|
+ " ROM: file = %O, start = $9000, size = $7000;\n"
|
||||||
+ " VEC: start = $FFFA, size = 6;\n"
|
+ " ROMV: file = %O, start = $FFFA, size = $0006, fill = yes;\n"
|
||||||
+ "}\n"
|
+ "}\n"
|
||||||
+ "SEGMENTS {\n"
|
+ "SEGMENTS {\n"
|
||||||
+ " CODE: load = ROM, type = ro, define = no;\n"
|
+ "ZEROPAGE: load = ZP, type = zp, define = yes;\n"
|
||||||
+ " DATA: load = RAM, type = rw, define = no;\n"
|
+ " STARTUP: load = ROM, type = ro, define = yes;\n"
|
||||||
+ "ZEROPAGE: load = ZP, type = zp, define = no;\n"
|
+ " ONCE: load = ROM, type = ro, define = yes;\n"
|
||||||
//+ " VECTORS: load = VEC, type = ro, define = yes;"
|
+ " CODE: load = ROM, type = ro, define = yes;\n"
|
||||||
|
+ " DATA: load = RAM, type = rw, define = yes, run = RAM;\n"
|
||||||
|
+ " INIT: load = RAM, type = rw, define = yes;\n"
|
||||||
|
+ " BSS: load = RAM, type = bss, define = yes;\n"
|
||||||
|
+ " HEAP: load = RAM, type = bss, optional = yes;\n"
|
||||||
|
+ " RODATA: load = ROM, type = ro;\n"
|
||||||
|
+ "}\n"
|
||||||
|
+ "FEATURES {\n"
|
||||||
|
+ " CONDES: segment = STARTUP,\n"
|
||||||
|
+ " type = constructor,\n"
|
||||||
|
+ " label = __CONSTRUCTOR_TABLE__,\n"
|
||||||
|
+ " count = __CONSTRUCTOR_COUNT__;\n"
|
||||||
|
+ " CONDES: segment = STARTUP,\n"
|
||||||
|
+ " type = destructor,\n"
|
||||||
|
+ " label = __DESTRUCTOR_TABLE__,\n"
|
||||||
|
+ " count = __DESTRUCTOR_COUNT__;\n"
|
||||||
|
+ "}\n"
|
||||||
|
+ "SYMBOLS {\n"
|
||||||
|
+ " __STACKSIZE__: type = weak, value = $0400;\n"
|
||||||
|
+ " __LC_LAST__: type = weak, value = $0400;\n"
|
||||||
|
+ " __LC_START__: type = weak, value = $0400;\n"
|
||||||
+ "}\n"
|
+ "}\n"
|
||||||
;
|
;
|
||||||
/*
|
/*
|
||||||
+ "SYMBOLS {\n"
|
|
||||||
+ " __STACKSIZE__: type = weak, value = $0800; # 2k stack\n"
|
|
||||||
+ " __RESERVED_MEMORY__: type = weak, value = $0000;\n"
|
|
||||||
+ " __STARTADDRESS__: type = export, value = %S;\n"
|
|
||||||
+ "}\n"
|
|
||||||
+ "MEMORY {\n"
|
+ "MEMORY {\n"
|
||||||
+ " ZP: file = \"\", define = yes, start = $0082, size = $007E;\n"
|
+ " ZP: file = \"\", define = yes, start = $0082, size = $007E;\n"
|
||||||
+ " MAIN: file = %O, define = yes, start = %S, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;\n"
|
+ " MAIN: file = %O, define = yes, start = %S, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;\n"
|
||||||
@ -486,6 +501,8 @@ function assemblelinkCA65(code, platform, warnings) {
|
|||||||
var aout = FS.readFile("main", {encoding:'binary'});
|
var aout = FS.readFile("main", {encoding:'binary'});
|
||||||
var mapout = FS.readFile("main.map", {encoding:'utf8'});
|
var mapout = FS.readFile("main.map", {encoding:'utf8'});
|
||||||
var listing = parseCA65Listing(lstout, mapout);
|
var listing = parseCA65Listing(lstout, mapout);
|
||||||
|
//console.log(lstout);
|
||||||
|
//console.log(mapout);
|
||||||
return {
|
return {
|
||||||
output:aout.slice(4),
|
output:aout.slice(4),
|
||||||
lines:listing.lines,
|
lines:listing.lines,
|
||||||
@ -524,6 +541,7 @@ function compileCC65(code, platform) {
|
|||||||
CC65.callMain(['-v', '-T', '-g', /*'-Cl',*/ '-Oirs', '-I', '/share/include', "main.c"]);
|
CC65.callMain(['-v', '-T', '-g', /*'-Cl',*/ '-Oirs', '-I', '/share/include', "main.c"]);
|
||||||
try {
|
try {
|
||||||
var asmout = FS.readFile("main.s", {encoding:'utf8'});
|
var asmout = FS.readFile("main.s", {encoding:'utf8'});
|
||||||
|
//console.log(asmout);
|
||||||
var result = assemblelinkCA65(asmout, platform, errors);
|
var result = assemblelinkCA65(asmout, platform, errors);
|
||||||
/*
|
/*
|
||||||
result.asmlines = result.lines;
|
result.asmlines = result.lines;
|
||||||
|
Loading…
Reference in New Issue
Block a user