mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-03-10 11:31:52 +00:00
verilog: change input value by clicking
This commit is contained in:
parent
c654c758ea
commit
add8ce7b8c
@ -278,7 +278,9 @@ div.emuoverlay {
|
|||||||
}
|
}
|
||||||
div.emuscope {
|
div.emuscope {
|
||||||
background-color:#333;
|
background-color:#333;
|
||||||
|
color:#ccc;
|
||||||
z-index:1;
|
z-index:1;
|
||||||
|
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
|
||||||
}
|
}
|
||||||
div.emuspacer {
|
div.emuspacer {
|
||||||
width:100%;
|
width:100%;
|
||||||
@ -757,3 +759,9 @@ div.asset_toolbar {
|
|||||||
.tree-level-8 { background-color: #837163;}
|
.tree-level-8 { background-color: #837163;}
|
||||||
.tree-level-9 { background-color: #7b8363;}
|
.tree-level-9 { background-color: #7b8363;}
|
||||||
.tree-level-10 { background-color: #738363;}
|
.tree-level-10 { background-color: #738363;}
|
||||||
|
|
||||||
|
.waverow {
|
||||||
|
}
|
||||||
|
.waverow.editable:hover {
|
||||||
|
background-color: #336633;
|
||||||
|
}
|
@ -106,6 +106,7 @@ TODO:
|
|||||||
- bad error msg if >2 moduels and top module doesn't match filename
|
- bad error msg if >2 moduels and top module doesn't match filename
|
||||||
- separate Scope View
|
- separate Scope View
|
||||||
- Audio doesn't work if clock != default
|
- Audio doesn't work if clock != default
|
||||||
|
- change the input values for a module?
|
||||||
- single-stepping vector games makes screen fade
|
- single-stepping vector games makes screen fade
|
||||||
- break on stack overflow, illegal op, bad access, BRK, etc
|
- break on stack overflow, illegal op, bad access, BRK, etc
|
||||||
- show in scope instead?
|
- show in scope instead?
|
||||||
|
BIN
favicon.ico
BIN
favicon.ico
Binary file not shown.
Before Width: | Height: | Size: 17 KiB |
@ -36,7 +36,6 @@ if (window.location.host.endsWith('8bitworkshop.com')) {
|
|||||||
<!-- firebase libs -->
|
<!-- firebase libs -->
|
||||||
<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-app.js"></script>
|
<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-app.js"></script>
|
||||||
<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-auth.js"></script>
|
<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-auth.js"></script>
|
||||||
<!--<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-database.js"></script>-->
|
|
||||||
<script defer src="config.js"></script>
|
<script defer src="config.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
@ -35,8 +35,8 @@
|
|||||||
-<script async src='https://www.google-analytics.com/analytics.js'></script>
|
-<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||||
-
|
-
|
||||||
-<!-- firebase libs -->
|
-<!-- firebase libs -->
|
||||||
-<script defer src="https://www.gstatic.com/firebasejs/5.11.1/firebase-app.js"></script>
|
-<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-app.js"></script>
|
||||||
-<script defer src="https://www.gstatic.com/firebasejs/5.11.1/firebase-auth.js"></script>
|
-<script defer src="https://www.gstatic.com/firebasejs/8.3.2/firebase-auth.js"></script>
|
||||||
-<script defer src="config.js"></script>
|
-<script defer src="config.js"></script>
|
||||||
-
|
-
|
||||||
</head>
|
</head>
|
||||||
|
5534
package-lock.json
generated
5534
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,7 @@
|
|||||||
"update-electron-app": "^1.5.0"
|
"update-electron-app": "^1.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bootbox": "^4.4.36",
|
"@types/bootbox": "^5.1.3",
|
||||||
"@types/bootstrap": "^3.4.0",
|
"@types/bootstrap": "^3.4.0",
|
||||||
"@types/file-saver": "^2.0.1",
|
"@types/file-saver": "^2.0.1",
|
||||||
"@types/jquery": "^3.5.5",
|
"@types/jquery": "^3.5.5",
|
||||||
|
12
res/README
Normal file
12
res/README
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
# C64
|
||||||
|
|
||||||
|
How to build the ROM:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
git clone https://github.com/MEGA65/open-roms
|
||||||
|
cd open-roms
|
||||||
|
make
|
||||||
|
cd build
|
||||||
|
cat basic_generic.rom chargen_openroms.rom kernal_generic.rom > c64.bios
|
||||||
|
~~~
|
BIN
res/c64.bios
BIN
res/c64.bios
Binary file not shown.
@ -3,14 +3,24 @@ import { Toolbar } from "../common/emu";
|
|||||||
|
|
||||||
declare var VirtualList;
|
declare var VirtualList;
|
||||||
|
|
||||||
|
const BUILTIN_INPUT_PORTS = [
|
||||||
|
'clk', 'reset',
|
||||||
|
];
|
||||||
|
|
||||||
export interface WaveformMeta {
|
export interface WaveformMeta {
|
||||||
label : string;
|
label : string;
|
||||||
len : number;
|
len : number;
|
||||||
|
//name : string;
|
||||||
|
//ofs : number;
|
||||||
|
//wordlen : number;
|
||||||
|
input : boolean;
|
||||||
|
output : boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WaveformProvider {
|
export interface WaveformProvider {
|
||||||
getSignalMetadata() : WaveformMeta[];
|
getSignalMetadata() : WaveformMeta[];
|
||||||
getSignalData(index:number, start:number, len:number) : number[];
|
getSignalData(index:number, start:number, len:number) : number[];
|
||||||
|
setSignalValue(index:number, value:number);
|
||||||
}
|
}
|
||||||
|
|
||||||
export class WaveformView {
|
export class WaveformView {
|
||||||
@ -70,15 +80,25 @@ export class WaveformView {
|
|||||||
totalRows: this.meta.length+1,
|
totalRows: this.meta.length+1,
|
||||||
generatorFn: (row : number) => {
|
generatorFn: (row : number) => {
|
||||||
var metarow = this.meta[row]; // TODO: why null?
|
var metarow = this.meta[row]; // TODO: why null?
|
||||||
var s = metarow != null ? metarow.label : "";
|
//var s = metarow != null ? metarow.label : "";
|
||||||
var linediv = document.createElement("div");
|
let linediv = document.createElement("div");
|
||||||
var canvas = document.createElement("canvas");
|
let canvas = document.createElement("canvas");
|
||||||
canvas.width = width - 12;
|
canvas.width = width - 12;
|
||||||
canvas.height = rowHeight;
|
canvas.height = rowHeight;
|
||||||
linediv.appendChild(canvas); //document.createTextNode(s));
|
linediv.appendChild(canvas); //document.createTextNode(s));
|
||||||
linediv.classList.add('waverow');
|
linediv.classList.add('waverow');
|
||||||
this.lines[row] = canvas;
|
this.lines[row] = canvas;
|
||||||
this.refreshRow(row);
|
this.refreshRow(row);
|
||||||
|
// click to change input
|
||||||
|
if (metarow && metarow.input && BUILTIN_INPUT_PORTS.indexOf(metarow.label) < 0) {
|
||||||
|
linediv.onmousedown = (e) => {
|
||||||
|
var meta = this.meta[row];
|
||||||
|
if (meta && meta.input) {
|
||||||
|
this.changeInputValue(row);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
linediv.classList.add('editable');
|
||||||
|
}
|
||||||
return linediv;
|
return linediv;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -87,7 +107,12 @@ export class WaveformView {
|
|||||||
//wlc.style = "overflow-x: hidden"; // TODO?
|
//wlc.style = "overflow-x: hidden"; // TODO?
|
||||||
this.toolbar = new Toolbar(this.parent, this.parent);
|
this.toolbar = new Toolbar(this.parent, this.parent);
|
||||||
this.toolbar.span.css('display','inline-block');
|
this.toolbar.span.css('display','inline-block');
|
||||||
|
//var clklabel = document.createElement('span');
|
||||||
|
//clklabel.style.display = 'inline-block';
|
||||||
|
//clklabel.innerHTML = "TEST";
|
||||||
|
//$(this.parent).append(clklabel);
|
||||||
$(this.parent).append(wlc);
|
$(this.parent).append(wlc);
|
||||||
|
|
||||||
var down = false;
|
var down = false;
|
||||||
var selfn = (e) => {
|
var selfn = (e) => {
|
||||||
this.setSelTime(e.offsetX / this.zoom + this.t0 - 0.5);
|
this.setSelTime(e.offsetX / this.zoom + this.t0 - 0.5);
|
||||||
@ -189,6 +214,10 @@ export class WaveformView {
|
|||||||
ctx.font = "14px Andale Mono, Lucida Console, monospace";
|
ctx.font = "14px Andale Mono, Lucida Console, monospace";
|
||||||
// clear to black
|
// clear to black
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
// highlighted?
|
||||||
|
var tags = [];
|
||||||
|
if (meta.input && BUILTIN_INPUT_PORTS.indexOf(meta.label) < 0) tags.push('input');
|
||||||
|
//if (meta.output) tags.push('output');
|
||||||
// draw waveform
|
// draw waveform
|
||||||
var fh = 12;
|
var fh = 12;
|
||||||
var b1 = fh+4;
|
var b1 = fh+4;
|
||||||
@ -252,7 +281,39 @@ export class WaveformView {
|
|||||||
// draw labels
|
// draw labels
|
||||||
ctx.fillStyle = "white";
|
ctx.fillStyle = "white";
|
||||||
ctx.textAlign = "left";
|
ctx.textAlign = "left";
|
||||||
ctx.fillText(meta.label, 5, fh);
|
var lbl = meta.label;
|
||||||
|
if (tags.length > 0) { lbl += " (" + tags.join(', ') + ")"; }
|
||||||
|
ctx.fillText(lbl, 5, fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
changeInputValue(row : number) {
|
||||||
|
var meta = this.meta[row];
|
||||||
|
if (!meta) return;
|
||||||
|
var data = this.wfp.getSignalData(row, this.t0, 1);
|
||||||
|
var oldValue = data[0] || 0;
|
||||||
|
var min = 0;
|
||||||
|
var max = (1 << meta.len) - 1;
|
||||||
|
if (max == 1) {
|
||||||
|
this.wfp.setSignalValue(row, oldValue > 0 ? 0 : 1);
|
||||||
|
} else {
|
||||||
|
var rangestr = `${min} to ${max}`;
|
||||||
|
bootbox.prompt({
|
||||||
|
value: oldValue+"",
|
||||||
|
inputType: "number",
|
||||||
|
//min: 0,
|
||||||
|
//max: meta.len-1,
|
||||||
|
//placeholder: rangestr,
|
||||||
|
title: `Enter new value for "${meta.label}" (${rangestr}):`,
|
||||||
|
callback: (result) => {
|
||||||
|
if (result != null) {
|
||||||
|
var value = parseInt(result);
|
||||||
|
if (value >= min && value <= max) {
|
||||||
|
this.wfp.setSignalValue(row, parseInt(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,6 +614,12 @@ var VerilogPlatform = function(mainElement, options) {
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSignalValue(index:number, value:number) {
|
||||||
|
var meta = this.getSignalMetadata()[index];
|
||||||
|
gen[meta.label] = value;
|
||||||
|
this.reset();
|
||||||
|
}
|
||||||
|
|
||||||
printErrorCodeContext(e, code) {
|
printErrorCodeContext(e, code) {
|
||||||
if (e.lineNumber && e.message) {
|
if (e.lineNumber && e.message) {
|
||||||
var lines = code.split('\n');
|
var lines = code.split('\n');
|
||||||
|
@ -4,7 +4,9 @@ type V2JS_Var = {
|
|||||||
name:string,
|
name:string,
|
||||||
len:number,
|
len:number,
|
||||||
ofs:number,
|
ofs:number,
|
||||||
arrdim?:number[]
|
arrdim?:number[],
|
||||||
|
input:boolean,
|
||||||
|
output:boolean,
|
||||||
}
|
}
|
||||||
|
|
||||||
type V2JS_Code = {
|
type V2JS_Code = {
|
||||||
@ -37,6 +39,8 @@ function parseDecls(text:string, arr:V2JS_Var[], name:string, bin?:boolean, bout
|
|||||||
name:m[2],
|
name:m[2],
|
||||||
len:parseInt(m[3])+1,
|
len:parseInt(m[3])+1,
|
||||||
ofs:parseInt(m[4]),
|
ofs:parseInt(m[4]),
|
||||||
|
input:bin,
|
||||||
|
output:bout,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
re = new RegExp(name + "(\\d*)[(](\\w+)\\[(\\d+)\\],(\\d+),(\\d+)[)]", 'gm');
|
re = new RegExp(name + "(\\d*)[(](\\w+)\\[(\\d+)\\],(\\d+),(\\d+)[)]", 'gm');
|
||||||
@ -48,6 +52,8 @@ function parseDecls(text:string, arr:V2JS_Var[], name:string, bin?:boolean, bout
|
|||||||
arrdim:[parseInt(m[3])],
|
arrdim:[parseInt(m[3])],
|
||||||
len:parseInt(m[4])+1,
|
len:parseInt(m[4])+1,
|
||||||
ofs:parseInt(m[5]),
|
ofs:parseInt(m[5]),
|
||||||
|
input:bin,
|
||||||
|
output:bout,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
re = new RegExp(name + "(\\d*)[(](\\w+)\\[(\\d+)\\]\\[(\\d+)\\],(\\d+),(\\d+)[)]", 'gm');
|
re = new RegExp(name + "(\\d*)[(](\\w+)\\[(\\d+)\\]\\[(\\d+)\\],(\\d+),(\\d+)[)]", 'gm');
|
||||||
@ -59,6 +65,8 @@ function parseDecls(text:string, arr:V2JS_Var[], name:string, bin?:boolean, bout
|
|||||||
arrdim:[parseInt(m[3]), parseInt(m[4])],
|
arrdim:[parseInt(m[3]), parseInt(m[4])],
|
||||||
len:parseInt(m[5])+1,
|
len:parseInt(m[5])+1,
|
||||||
ofs:parseInt(m[6]),
|
ofs:parseInt(m[6]),
|
||||||
|
input:bin,
|
||||||
|
output:bout,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user