From c6f2382f26f50cd4e154496b74b395a28374d9e6 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Fri, 7 Dec 2018 10:03:01 -0500 Subject: [PATCH] verilog: cpu16 updates; minor changes --- doc/notes.txt | 7 +++++ presets/verilog/cpu16.v | 7 ++--- src/pixed/pixeleditor.ts | 68 +++++++++++++++++++++------------------- src/platform/verilog.ts | 11 ++++--- 4 files changed, 52 insertions(+), 41 deletions(-) diff --git a/doc/notes.txt b/doc/notes.txt index 3a52f7a3..4349d922 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -159,3 +159,10 @@ add file to errors http://www.playvectrex.com/designit/chrissalo/vectordisplay.htm http://oldies.malban.de/secondvectrex/index.htm + + +PIXEL EDITOR + +everything is an editor +back/forward propogation +encoded <-> raw + spec + palette(s) <-> bitmap <-> tile/sprite preview(s) diff --git a/presets/verilog/cpu16.v b/presets/verilog/cpu16.v index 6adb962b..6dfbf995 100644 --- a/presets/verilog/cpu16.v +++ b/presets/verilog/cpu16.v @@ -1,4 +1,4 @@ - + `ifndef CPU16_H `define CPU16_H @@ -64,10 +64,9 @@ endmodule 00110aaa ######## store zero page 01001aaa #####bbb load [B+#] -> A 01010aaa #####bbb store A -> [B+#] -01101aaa 0++++000 operation A+[imm16] -> A -01110aaa 00cccbbb store A -> [B+#], C -> IP +01101aaa 0++++000 store A -> A+[imm16] +01110aaa 00cccbbb store A -> [B], C -> IP 1000tttt ######## conditional branch -11+++aaa ######## immediate binary operation */ module CPU16(clk, reset, hold, busy, diff --git a/src/pixed/pixeleditor.ts b/src/pixed/pixeleditor.ts index b41ab56a..8aeb393a 100644 --- a/src/pixed/pixeleditor.ts +++ b/src/pixed/pixeleditor.ts @@ -14,6 +14,7 @@ type PixelEditorImageFormat = { remap?:number[] brev?:boolean destfmt?:PixelEditorImageFormat + xform? }; type PixelEditorPaletteFormat = { @@ -28,8 +29,11 @@ type PixelEditorMessage = { palstr : string }; -export function PixelEditor(parentDiv:HTMLElement, fmt, palette, initialData, thumbnails?) { - var self = this; +export function PixelEditor(parentDiv:HTMLElement, + fmt:PixelEditorImageFormat, + palette:Uint32Array, + initialData:Uint32Array, + thumbnails?) { var width = fmt.w; var height = fmt.h; @@ -52,9 +56,9 @@ export function PixelEditor(parentDiv:HTMLElement, fmt, palette, initialData, th function commit() { if (!thumbnails) return; for (var i=0; i'); var rgb = palette[i] & 0xffffff; var color = "#" + hex(revrgb(rgb), 6); - btn.click(self.setCurrentColor.bind(this, i)); + btn.click(this.setCurrentColor.bind(this, i)); btn.attr('id', 'palcol_' + i); btn.css('backgroundColor', color).text(i.toString(16)); if ((rgb & 0x808080) != 0x808080) { btn.css('color', 'white'); } span.append(btn); } - self.setCurrentColor(1); + this.setCurrentColor(1); } function getPixelByOffset(ofs) { @@ -155,26 +159,26 @@ export function PixelEditor(parentDiv:HTMLElement, fmt, palette, initialData, th $("#palcol_" + col).addClass('selected'); } } - self.setCurrentColor = setCurrentColor; + this.setCurrentColor = setCurrentColor; var dragcol = 1; var dragging = false; var pxls = $(pixcanvas); - pxls.mousedown(function(e) { + pxls.mousedown( (e) => { var pos = getPositionFromEvent(e); dragcol = getPixel(pos.x, pos.y) == curpalcol ? 0 : curpalcol; setPixel(pos.x, pos.y, curpalcol); dragging = true; // TODO: pixcanvas.setCapture(); }) - .mousemove(function(e) { + .mousemove( (e) => { var pos = getPositionFromEvent(e); if (dragging) { setPixel(pos.x, pos.y, dragcol); } }) - .mouseup(function(e) { + .mouseup( (e) => { var pos = getPositionFromEvent(e); setPixel(pos.x, pos.y, dragcol); dragging = false; @@ -196,7 +200,7 @@ export function PixelEditor(parentDiv:HTMLElement, fmt, palette, initialData, th console.log("rotate " + deg); var s1 = Math.sin(deg * Math.PI / 180); var c1 = Math.cos(deg * Math.PI / 180); - var p = self.getImageColors(); + var p = this.getImageColors(); var i = 0; for (var y=0; y { var rtn = hexprefix + hexstr; rtn = rtn.replace(/0x/ig,'').replace(/,/ig,'') return rtn; @@ -303,7 +307,7 @@ export function replaceHexWords(s:string, words:number[]) { return result; } -function remapBits(x:number, arr:number[]) { +function remapBits(x:number, arr:number[]) : number { if (!arr) return x; var y = 0; for (var i=0; i= 0) - palette = convertPaletteBytes(palbytes, 0, rr, rr, gg, rr+gg, bb); + newpalette = convertPaletteBytes(palbytes, 0, rr, rr, gg, rr+gg, bb); else - palette = convertPaletteBytes(palbytes, rr+gg, bb, rr, gg, 0, rr); + newpalette = convertPaletteBytes(palbytes, rr+gg, bb, rr, gg, 0, rr); } else { var paltable = PREDEF_PALETTES[pal]; if (paltable) { - palette = palbytes.map(function(i) { return paltable[i]; }); + newpalette = palbytes.map((i) => { return paltable[i]; }); } else { alert("No palette named " + pal); } } if (currentPaletteFmt.n) { paletteSets = []; - for (var i=0; i { createEditorForImage(i) }); return thumb; } diff --git a/src/platform/verilog.ts b/src/platform/verilog.ts index 2fb37ea0..09a85524 100644 --- a/src/platform/verilog.ts +++ b/src/platform/verilog.ts @@ -318,8 +318,8 @@ var VerilogPlatform = function(mainElement, options) { var vcanvas = $(video.canvas); idata = video.getFrameData(); timerCallback = () => { - if (!this.isRunning()) - return; + if (!this.isRunning()) + return; gen.switches = switches[0]; this.updateFrame(); }; @@ -336,7 +336,8 @@ var VerilogPlatform = function(mainElement, options) { direction: 'vertical', gutterSize: 16, onDrag: () => { - if (this.waveview) this.waveview.recreate(); + this.resize(); + //if (this.waveview) this.waveview.recreate(); //vcanvas.css('position','relative'); //vcanvas.css('top', -this.wavediv.height()+'px'); }, @@ -358,7 +359,7 @@ var VerilogPlatform = function(mainElement, options) { } updateVideoFrame() { - this.topdiv.show(); //show crt + //this.topdiv.show(); //show crt this.setGenInputs(); var fps = this.getFrameRate(); // darken the previous frame? @@ -406,7 +407,7 @@ var VerilogPlatform = function(mainElement, options) { updateScopeFrame() { this.split.setSizes([0,100]); // ensure scope visible - this.topdiv.hide();// hide crt + //this.topdiv.hide();// hide crt var done = this.fillTraceBuffer(32 * trace_signals.length); // TODO: const if (done) this.pause(); // TODO?