diff --git a/css/ui.css b/css/ui.css index 8cae3bd0..621f3818 100644 --- a/css/ui.css +++ b/css/ui.css @@ -642,10 +642,10 @@ div.asset_toolbar { content: '\25bc'; } .tree-collapsed:hover, .tree-expanded:hover { - border-color: rgba(255,255,255,0.7); + border-color:#ccc; } .tree-header:hover { - background-color: rgba(255,255,255,0.3); + background-color: #666; } .tree-level-0 { display:none;} .tree-level-1 { background-color: #638283;} diff --git a/doc/notes.txt b/doc/notes.txt index b396ef1d..f7cc5a88 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -13,12 +13,9 @@ TODO: - asm: support macro expansion - multiple breakpoints, expression breakpoints - watchpoints -- debug inspector for variables - MAME single step (?) - step over (line, instruction) - slowdown beam for all platforms? -- PC x86 support - - https://bellard.org/tcc/ - show errors in list (maybe window list?) - click to go to error - what if error in include file you can't edit b/c it never appears? @@ -37,11 +34,9 @@ TODO: - 'undefined' for bitmap replacer - requestInterrupt needs to be disabled after breakpoint? - C/asm source formatter -- fix WebAudio (https://news.ycombinator.com/item?id=18066474) - allow download of JSASM output - update bootstrap to 4.0 - batariBasic: proper line numbers, debugging -- granular control over time scrubbing, show CPU state - builds: - compiler flags for final ROM build - workermain: split build functions, better msg types @@ -57,19 +52,13 @@ TODO: - debug inline asm - live coding URL - resize memory browser, other windows when vertical div resize -- preroll the Z80 emulator so optimizer does its thing before loading rom -- wasm dynamic linking of emulators (https://github.com/WebAssembly/tool-conventions/blob/master/DynamicLinking.md) -- https://github.com/jvilk/BrowserFS - markdown, verilog: can't share - https://www.crowdsupply.com/tinyfpga/tinyfpga-bx - stego shareable images (http://pico-8.wikia.com/wiki/P8PNGFileFormat) - https://makecode.com/language? - open ROM from URL? - game starts even if switched away before first load -- it's pretty easy to add a new file named like a library file (bcd.c) - - or have neslib.h in a subdirectory... - put globals into view/controller objects -- upload binary files doesn't do what's expected, changing pulldown and whatnot - autostart audio - chrome: https://github.com/processing/p5.js-sound/issues/249 - firefox: https://support.mozilla.org/en-US/kb/block-autoplay @@ -78,7 +67,7 @@ TODO: - ide bug/feature visualizer for sponsors - global undo/redo at checkpoints (when rom changes) - landscape mode for arcade ports -- symmetric load/save state types +- symmetric load/save state types (like in Machine) - pixel editor - persist palette/tilemap selections - more tools for editing @@ -107,7 +96,6 @@ TODO: - show interrupts, other events - sometimes interleaves two different PCs? like two profilers running simultaneously? - ah, symbols persist across builds -- https://remotestoragejs.readthedocs.io/en/latest/getting-started/how-to-add.html ? - Verilog - larger scope range, better scrolling - make scope data wrap around range @@ -127,13 +115,13 @@ TODO: - break on stack overflow, illegal op, bad access, BRK, etc - show in scope instead? - nes - - replay doesn't work for nes (force background tile redraw) + - replay doesn't work for nes (force background tile redraw, sprites + messed up) - nes debug view toolbar - support NES_HEADER_16K? - - PPU/TIA register write visualization - - show cur/tmp vram addresses - NES crt should mark raster pos when debugging - OAMDMA in profiler? (haltCycles) + - typed arrays don't serialize? - JSNES - doesn't support hiding >8 sprites - doesn't do sprite zero test right @@ -168,7 +156,6 @@ TODO: - allow text/binary change - importing from subtree commits to root anyway - publishing Markdown file loads default file? -- astrocade - keyboard shortcuts - ctrl+alt+l on ubuntu locks screen - alt-D doesn't work anymore @@ -182,7 +169,6 @@ TODO: - can't step back twice? - compiler bug in chase - "shared" in URL doesn't work, leave in URL? (also importURL) -- segments disappear in memory map when binary unchanged - 6502 - KIL stops debugger - TypeError: null is not an object (evaluating 'n.destination') @@ -206,6 +192,9 @@ TODO: - copy to gen/ directory (allowJs is weird) - can we debug first frame via replay? - ca65 line numbers are not aligned with source code +- Debug Browser + - hex viewer + - show 16/32 typed arrays WEB WORKER FORMAT diff --git a/src/ide/project.ts b/src/ide/project.ts index e6fe7d65..19692c74 100644 --- a/src/ide/project.ts +++ b/src/ide/project.ts @@ -308,7 +308,7 @@ export class CodeProject { } // save and sort segment list var segs = (this.platform.getMemoryMap && this.platform.getMemoryMap()["main"]) || []; - segs = segs.concat(data.segments || []); + if (data.segments) { segs = segs.concat(data.segments || []); } segs.sort((a,b) => {return a.start-b.start}); this.segments = segs; } diff --git a/src/ide/views.ts b/src/ide/views.ts index 3be27e22..c1bb26c7 100644 --- a/src/ide/views.ts +++ b/src/ide/views.ts @@ -1421,29 +1421,40 @@ class TreeNode { } // get object keys let names = obj instanceof Array ? Array.from(obj.keys()) : Object.getOwnPropertyNames(obj); - if (names.length <= MAX_CHILDREN) { // max # of child objects - let orphans = new Set(this.children.keys()); - // visit all children - names.forEach((name) => { - let childnode = this.children.get(name); - if (childnode == null) { - childnode = new TreeNode(this, name); - this.children.set(name, childnode); - } - childnode.update(obj[name]); - orphans.delete(name); - }); - // remove orphans - orphans.forEach((delname) => { - let childnode = this.children.get(delname); - childnode.remove(); - this.children.delete(delname); - }); - this._header.classList.add("tree-expanded"); - this._header.classList.remove("tree-collapsed"); - } else { - text = names.length + " items"; // too many children + if (names.length > MAX_CHILDREN) { // max # of child objects + let newobj = {}; + let oldobj = obj; + var slicelen = 100; + while (names.length / slicelen > 100) slicelen *= 2; + for (let ofs=0; ofs { + let childnode = this.children.get(name); + if (childnode == null) { + childnode = new TreeNode(this, name); + this.children.set(name, childnode); + } + childnode.update(obj[name]); + orphans.delete(name); + }); + // remove orphans + orphans.forEach((delname) => { + let childnode = this.children.get(delname); + childnode.remove(); + this.children.delete(delname); + }); + this._header.classList.add("tree-expanded"); + this._header.classList.remove("tree-collapsed"); } else { this._header.classList.add("tree-collapsed"); this._header.classList.remove("tree-expanded"); diff --git a/src/platform/vectrex.ts b/src/platform/vectrex.ts index afc6bb6c..2e097b79 100644 --- a/src/platform/vectrex.ts +++ b/src/platform/vectrex.ts @@ -515,6 +515,7 @@ class VectrexAnalog { constructor(vectrex) { this.vectrex = vectrex; } + videoEnabled = true; //static unsigned rsh; /* zero ref sample and hold */ rsh = 0; //static unsigned xsh; /* x sample and hold */ @@ -743,6 +744,7 @@ class VectrexAnalog { } addline(x0, y0, x1, y1, color) { + if (!this.videoEnabled) return; // TODO //console.log(x0, y0, x1, y1, color); x0 = (x0 - Globals.BOUNDS_MIN_X) / (Globals.BOUNDS_MAX_X - Globals.BOUNDS_MIN_X) * Globals.SCREEN_X_DEFAULT; @@ -841,6 +843,7 @@ class VectrexPlatform extends Base6809Platform { advance(novideo:boolean) : number { if (!novideo) this.video.clear(); + this.alg.videoEnabled = !novideo; this.updateControls(); this.probe.logNewFrame(); var frameCycles = 1500000 / 60;