diff --git a/doc/notes.txt b/doc/notes.txt index f4e0d3b6..bb4b8845 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -168,6 +168,7 @@ TODO: - re-publish repo (bug: doesn't put all files in local repo after publishing) - 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 diff --git a/index.html b/index.html index e23a9b66..44ab85a2 100644 --- a/index.html +++ b/index.html @@ -162,7 +162,6 @@ if (window.location.host.endsWith('8bitworkshop.com')) { Computers diff --git a/src/ui.ts b/src/ui.ts index 4d910494..ff9c02c6 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -214,11 +214,13 @@ function refreshWindowList() { } function addEditorItem(id:string) { - var data = current_project.getFile(id); - if (typeof data === 'string') - addWindowItem(id, getFilenameForPath(id), loadEditor); - else if (data instanceof Uint8Array) - addWindowItem(id, getFilenameForPath(id), () => { return new Views.BinaryFileView(id, data as Uint8Array); }); + addWindowItem(id, getFilenameForPath(id), () => { + var data = current_project.getFile(id); + if (typeof data === 'string') + return loadEditor(id); + else if (data instanceof Uint8Array) + return new Views.BinaryFileView(id, data as Uint8Array); + }); } // add main file editor @@ -231,7 +233,6 @@ function refreshWindowList() { }); // add listings - // TODO: update listing when recompiling separate = true; var listings = current_project.getListings(); if (listings) { @@ -276,9 +277,11 @@ function refreshWindowList() { addWindowItem("#crtheatmap", "CRT Probe", () => { return new Views.RasterPCHeatMapView(); }); + /* addWindowItem("#spheatmap", "Stack Probe", () => { return new Views.RasterStackMapView(); }); + */ } addWindowItem('#asseteditor', 'Asset Editor', () => { return new Views.AssetEditorView(); @@ -391,7 +394,7 @@ function handleFileUpload(files: File[]) { if (confirm("Open '" + qs['file'] + "' as project?")) { gotoNewLocation(); } else { - updateSelector(); + setTimeout(updateSelector, 1000); // TODO: wait for files to upload } } gaEvent('workspace', 'file', 'upload'); @@ -688,7 +691,7 @@ function deleteRepository() { } function _shareEmbedLink(e) { - if (current_output == null) { // TODO + if (current_output == null) { alertError("Please fix errors before sharing."); return true; } @@ -1011,7 +1014,7 @@ function setCompileOutput(data: WorkerResult) { compparams = data.params; // load ROM var rom = data.output; - if (rom) { // TODO instanceof Uint8Array) { + if (rom) { try { clearBreakpoint(); // so we can replace memory (TODO: change toolbar btn) _resetRecording(); @@ -1019,7 +1022,6 @@ function setCompileOutput(data: WorkerResult) { current_output = rom; if (!userPaused) _resume(); measureBuildTime(); - // TODO: reset profiler etc? (Tell views?) } catch (e) { console.log(e); toolbar.addClass("has-errors"); @@ -1860,7 +1862,6 @@ function startPlatform() { // start platform and load file replaceURLState(); platform.start(); - // TODO: ordering of loads? installGAHooks(); loadBIOSFromProject(); initProject(); @@ -1907,8 +1908,7 @@ function loadImportedURL(url : string) { setWaitDialog(true); getWithBinary(url, (data) => { if (data) { - var path = 'shared/' + getFilenameForPath(url); // TODO: shared prefix? - // TODO: progress dialog + var path = 'shared/' + getFilenameForPath(url); console.log("Importing " + data.length + " bytes as " + path); store.getItem(path, (err, olddata) => { setWaitDialog(false); diff --git a/src/views.ts b/src/views.ts index 55d9e941..2cfab569 100644 --- a/src/views.ts +++ b/src/views.ts @@ -11,7 +11,7 @@ import * as pixed from "./pixed/pixeleditor"; declare var Mousetrap; export interface ProjectView { - createDiv(parent:HTMLElement, text:string) : HTMLElement; + createDiv(parent:HTMLElement) : HTMLElement; setVisible?(showing : boolean) : void; refresh(moveCursor:boolean) : void; tick?() : void; @@ -77,10 +77,11 @@ export class SourceEditor implements ProjectView { errorwidgets = []; inspectWidget; - createDiv(parent:HTMLElement, text:string) { + createDiv(parent:HTMLElement) { var div = document.createElement('div'); div.setAttribute("class", "editor"); parent.appendChild(div); + var text = current_project.getFile(this.path) as string; var asmOverride = text && this.mode=='verilog' && /__asm\b([\s\S]+?)\b__endasm\b/.test(text); this.newEditor(div, asmOverride); if (text) { diff --git a/src/windows.ts b/src/windows.ts index fa6d0c20..b42afedd 100644 --- a/src/windows.ts +++ b/src/windows.ts @@ -44,8 +44,7 @@ export class ProjectWindows { } var div = this.id2div[id]; if (!div) { - var data = this.project.getFile(id)+""; // TODO: binary files - div = this.id2div[id] = wnd.createDiv(this.containerdiv, data); + div = this.id2div[id] = wnd.createDiv(this.containerdiv); $(div).hide(); } return wnd; diff --git a/test/cli/6502/test6502sim.js b/test/cli/6502/test6502sim.js index 99744bf1..aed6d912 100644 --- a/test/cli/6502/test6502sim.js +++ b/test/cli/6502/test6502sim.js @@ -45,25 +45,6 @@ describe('MOS6502', function() { logRead: function(a) { pcs.push(a); }, logWrite: function(a) { pcs.push(a); }, }; - // test hooks - var chook = new emu.CPUClockHook(cpu, profiler); - for (var i=0; i<10000; i++) { - cpu.advanceClock(); - } - chook.unhook(); - for (var i=0; i<100000; i++) { - cpu.advanceClock(); - } - console.log(pcs.slice(pcs.length-10)); - assert.equal(10000, pcs.length); - // bus hook - var bhook = new emu.BusHook(bus, profiler); - for (var i=0; i<10000; i++) { - cpu.advanceClock(); - } - bhook.unhook(); - console.log(pcs.slice(pcs.length-10)); - assert.equal(20000, pcs.length); }); }); diff --git a/test/cli/testpixelconvert.js b/test/cli/testpixelconvert.js index b593ee83..5ec1bb77 100644 --- a/test/cli/testpixelconvert.js +++ b/test/cli/testpixelconvert.js @@ -1,11 +1,14 @@ -var vm = require('vm'); -var fs = require('fs'); var assert = require('assert'); - -var util = require("gen/util.js"); var pixed = require("gen/pixed/pixeleditor.js"); +function dumbEqual(a,b) { + if (a instanceof Uint32Array || a instanceof Uint8Array) { + a = Array.from(a); + } + return assert.deepEqual(a,b); +} + describe('Pixel editor', function() { it('Should decode', function() { @@ -36,7 +39,7 @@ describe('Pixel editor', function() { 0xff40e0e0, 0xff40e0e1, ]; - assert.deepEqual(node5.palette, expectedPalette); + dumbEqual(node5.palette, expectedPalette); var ctx = { getPalettes: function(ncolors) { @@ -53,29 +56,29 @@ describe('Pixel editor', function() { var node3 = new pixed.Palettizer(ctx, fmt); node2.addRight(node3); node1.refreshRight(); - assert.deepEqual(node3.palette, expectedPalette); + dumbEqual(node3.palette, expectedPalette); - assert.deepEqual(node2.images, [[0,0,0,0,14,15,14,15,14,0,0,0,0,0,0,0,14,14,14,14,15,14,14,14,14,0,0,0,0,14,14,13,14,15,14,15,14,13,14,14,0,0,0,14,14,14,13,13,13,13,13,14,14,14,0,0,0,14,14,14,14,13,13,14,14,14,14,14,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,0,0,14,13,13,13,14,0,0,0,0,13,13,13,13,13,14,14,14,14,14,13,13,13,13,0,0,13,14,14,14,14,14,14,14,14,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,13,13,13,13,13,0,13,14,0,0,0,13,0,0,14,14,0,14,14,0,0,13,0,0,0,0,0,0,14,13,0,14,14,0,0,0,0,0,0,0,0,13,13,13,0,13,13,13,0,0,1,8]]); + dumbEqual(node2.images[0], [0,0,0,0,14,15,14,15,14,0,0,0,0,0,0,0,14,14,14,14,15,14,14,14,14,0,0,0,0,14,14,13,14,15,14,15,14,13,14,14,0,0,0,14,14,14,13,13,13,13,13,14,14,14,0,0,0,14,14,14,14,13,13,14,14,14,14,14,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,0,0,14,13,13,13,14,0,0,0,0,13,13,13,13,13,14,14,14,14,14,13,13,13,13,0,0,13,14,14,14,14,14,14,14,14,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,13,13,13,13,13,0,13,14,0,0,0,13,0,0,14,14,0,14,14,0,0,13,0,0,0,0,0,0,14,13,0,14,14,0,0,0,0,0,0,0,0,13,13,13,0,13,13,13,0,0,1,8]); assert.equal(" 0x00, 0x03, 0x19, 0x50, 0x52, 0x07, 0x1F, 0x37, 0xE0, 0xA4, 0xFD, 0xFF, 0x38, 0x70, 0x7F, 0x7F, ", pixed.replaceHexWords(paldatastr, pixed.parseHexWords(paldatastr))); node3.refreshLeft(); - assert.deepEqual(node2.images, [[0,0,0,0,14,15,14,15,14,0,0,0,0,0,0,0,14,14,14,14,15,14,14,14,14,0,0,0,0,14,14,13,14,15,14,15,14,13,14,14,0,0,0,14,14,14,13,13,13,13,13,14,14,14,0,0,0,14,14,14,14,13,13,14,14,14,14,14,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,0,0,14,13,13,13,14,0,0,0,0,13,13,13,13,13,14,14,14,14,14,13,13,13,13,0,0,13,14,14,14,14,14,14,14,14,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,13,13,13,13,13,0,13,14,0,0,0,13,0,0,14,14,0,14,14,0,0,13,0,0,0,0,0,0,14,13,0,14,14,0,0,0,0,0,0,0,0,13,13,13,0,13,13,13,0,0,1,8]]); + dumbEqual(node2.images[0], [0,0,0,0,14,15,14,15,14,0,0,0,0,0,0,0,14,14,14,14,15,14,14,14,14,0,0,0,0,14,14,13,14,15,14,15,14,13,14,14,0,0,0,14,14,14,13,13,13,13,13,14,14,14,0,0,0,14,14,14,14,13,13,14,14,14,14,14,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,0,0,14,13,13,13,14,0,0,0,0,13,13,13,13,13,14,14,14,14,14,13,13,13,13,0,0,13,14,14,14,14,14,14,14,14,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,13,13,13,13,13,0,13,14,0,0,0,13,0,0,14,14,0,14,14,0,0,13,0,0,0,0,0,0,14,13,0,14,14,0,0,0,0,0,0,0,0,13,13,13,0,13,13,13,0,0,1,8]); var datastr2 = "const char PALETTE[32] = { \n 0x03, // screen color\n\n 0x11,0x30,0x27,0x0, // background palette 0\n 0x1c,0x20,0x2c,0x0, // background palette 1\n};"; var words2 = pixed.parseHexWords(datastr2); - assert.deepEqual(words2, [0x03,0x11,0x30,0x27,0x00,0x1c,0x20,0x2c,0x00]); + dumbEqual(words2, [0x03,0x11,0x30,0x27,0x00,0x1c,0x20,0x2c,0x00]); // test verilog var datastr3 = " 7'o00: bits = 5'b11111; "; var words3 = pixed.parseHexWords(datastr3); - assert.deepEqual(words3, [31]); + dumbEqual(words3, [31]); assert.equal(datastr3, pixed.replaceHexWords(datastr3, pixed.parseHexWords(datastr3))); // TODO: test (nplanes > 0 && fmt.sl) // test comments var datastr4 = " .byte #%01111110;$7E \n .byte #%01111111;$7F"; var words4 = pixed.parseHexWords(datastr4); - assert.deepEqual(words4, [0x7E,0x7F]); + dumbEqual(words4, [0x7E,0x7F]); assert.notEqual(datastr4, pixed.replaceHexWords(datastr4, pixed.parseHexWords(datastr4))); // removed comment }); });