From 51bf1226d0b5e2bb3bf8c1ba95e1fd8d906d7a37 Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sun, 16 Sep 2018 19:45:32 -0400 Subject: [PATCH] moved declare vars to ui module imports --- doc/notes.txt | 3 +++ package-lock.json | 6 ++++++ package.json | 1 + presets/verilog/sprite_renderer.v | 29 ++++++++++++++++++++--------- src/platform/astrocade.ts | 2 +- src/platform/vcs.ts | 6 +----- src/ui.ts | 20 +++++++++++--------- src/views.ts | 10 ++-------- 8 files changed, 45 insertions(+), 32 deletions(-) diff --git a/doc/notes.txt b/doc/notes.txt index 4d0480d0..b79246e2 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -64,6 +64,9 @@ TODO: - 'undefined' for bitmap replacer - astrocade: run to cursor in hello world messes up emulation - requestInterrupt needs to be disabled after breakpoint? +- verilog resets randomly (lfsr enable bit) +- verilog: when paused scope doesn't work +- verilog: don't need fps controls when no video WEB WORKER FORMAT diff --git a/package-lock.json b/package-lock.json index c3c3f508..09f3130f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -524,6 +524,12 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=", + "dev": true + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", diff --git a/package.json b/package.json index 15825746..dd86f43e 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "btoa": "^1.2.1", "clipboard": "^2.0.1", "heapdump": "^0.3.9", + "jquery": "^2.x", "jsdom": "^12.0.0", "lzg": "^1.0.0", "mocha": "^5.2.0", diff --git a/presets/verilog/sprite_renderer.v b/presets/verilog/sprite_renderer.v index 4ef09498..9a1d702d 100644 --- a/presets/verilog/sprite_renderer.v +++ b/presets/verilog/sprite_renderer.v @@ -1,4 +1,4 @@ - + `ifndef SPRITE_RENDERER_H `define SPRITE_RENDERER_H @@ -17,22 +17,23 @@ module sprite_renderer(clk, vstart, load, hstart, rom_addr, rom_bits, output gfx; // output pixel output in_progress; // 0 if waiting for vstart - assign in_progress = state != WAIT_FOR_VSTART; - reg [2:0] state; // current state # reg [3:0] ycount; // number of scanlines drawn so far reg [3:0] xcount; // number of horiz. pixels in this line reg [7:0] outbits; // register to store bits from ROM - // states + // states for state machine localparam WAIT_FOR_VSTART = 0; localparam WAIT_FOR_LOAD = 1; localparam LOAD1_SETUP = 2; localparam LOAD1_FETCH = 3; localparam WAIT_FOR_HSTART = 4; localparam DRAW = 5; - + + // assign in_progress output bit + assign in_progress = state != WAIT_FOR_VSTART; + always @(posedge clk) begin case (state) @@ -86,6 +87,7 @@ module sprite_renderer(clk, vstart, load, hstart, rom_addr, rom_bits, endmodule +/// TEST MODULE module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); @@ -97,12 +99,15 @@ module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); wire [8:0] hpos; wire [8:0] vpos; + // player position reg [7:0] player_x; reg [7:0] player_y; + // paddle position reg [7:0] paddle_x; reg [7:0] paddle_y; + // video sync generator hvsync_generator hvsync_gen( .clk(clk), .reset(0), @@ -113,6 +118,7 @@ module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); .vpos(vpos) ); + // car bitmap ROM and associated wires wire [3:0] car_sprite_addr; wire [7:0] car_sprite_bits; @@ -120,11 +126,14 @@ module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); .yofs(car_sprite_addr), .bits(car_sprite_bits)); - wire vstart = {1'd0,player_y} == vpos; - wire hstart = {1'd0,player_x} == hpos; - wire car_gfx; - wire in_progress; + // convert player X/Y to 9 bits and compare to CRT hpos/vpos + wire vstart = {1'b0,player_y} == vpos; + wire hstart = {1'b0,player_x} == hpos; + wire car_gfx; // car sprite video signal + wire in_progress; // 1 = rendering taking place on scanline + + // sprite renderer module sprite_renderer renderer( .clk(clk), .vstart(vstart), @@ -135,6 +144,7 @@ module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); .gfx(car_gfx), .in_progress(in_progress)); + // measure paddle position always @(posedge hpaddle) paddle_x <= vpos[7:0]; @@ -147,6 +157,7 @@ module sprite_render_test_top(clk, hsync, vsync, rgb, hpaddle, vpaddle); player_y <= paddle_y; end + // video RGB output wire r = display_on && car_gfx; wire g = display_on && car_gfx; wire b = display_on && in_progress; diff --git a/src/platform/astrocade.ts b/src/platform/astrocade.ts index dd88d4e9..b4921608 100644 --- a/src/platform/astrocade.ts +++ b/src/platform/astrocade.ts @@ -61,7 +61,7 @@ const _BallyAstrocadePlatform = function(mainElement, arcade) { const sheight = arcade ? 204 : 102; const swbytes = Math.floor(swidth / 4); const cpuFrequency = 1789000; - const cpuCyclesPerLine = cpuFrequency/(60*sheight); + const cpuCyclesPerLine = cpuFrequency/(60*sheight); // TODO: wait states? const INITIAL_WATCHDOG = 256; const PIXEL_ON = 0xffeeeeee; const PIXEL_OFF = 0xff000000; diff --git a/src/platform/vcs.ts b/src/platform/vcs.ts index 0aed75dd..4ada13f4 100644 --- a/src/platform/vcs.ts +++ b/src/platform/vcs.ts @@ -5,15 +5,11 @@ import { PLATFORMS, RAM, newAddressDecoder, dumpRAM } from "../emu"; import { hex, lpad, tobin, byte2signed } from "../util"; import { CodeAnalyzer_vcs } from "../analysis"; import { disassemble6502 } from "../cpu/disasm6502"; +import { platform, symbolmap, addr2symbol } from "../ui"; -declare var platform : Platform; // global platform object declare var Javatari : any; declare var jt : any; // 6502 -// TODO: import or put in platform -declare var symbolmap : {[ident:string]:number}; -declare var addr2symbol : {[addr:number]:string}; - const VCS_PRESETS = [ {id:'examples/hello', chapter:4, name:'Hello 6502 and TIA'}, {id:'examples/vsync', chapter:5, name:'Painting on the CRT', title:'Color Bars'}, diff --git a/src/ui.ts b/src/ui.ts index 1a2681db..d99ae3c2 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -23,12 +23,13 @@ declare var exports; if (window['Javatari']) window['Javatari'].AUTO_START = false; var PRESETS : Preset[]; // presets array -var platform_id : string; // platform ID string -var platform : Platform; // platform object + +export var platform_id : string; // platform ID string +export var platform : Platform; // platform object var toolbar = $("#controls_top"); -var current_project : CodeProject; // current CodeProject object +export var current_project : CodeProject; // current CodeProject object var projectWindows : ProjectWindows; // window manager @@ -57,13 +58,14 @@ var userPaused : boolean; // did user explicitly pause? var current_output; // current ROM var current_preset_entry : Preset; // current preset object (if selected) var main_file_id : string; // main file ID -var symbolmap; // symbol map -declare var addr2symbol; // address to symbol name map -var compparams; // received build params from worker var store; // persistent store +export var symbolmap; // symbol map +export var addr2symbol; // address to symbol name map +export var compparams; // received build params from worker +export var lastDebugState; // last debug state (object) + var lastDebugInfo; // last debug info (CPU text) -var lastDebugState; // last debug state (object) var debugCategory; // current debug category function getCurrentPresetTitle() : string { @@ -563,7 +565,7 @@ function setDebugButtonState(btnid:string, btnstate:string) { } function setupDebugCallback(btnid? : string) { - platform.setupDebug(function(state) { + if (platform.setupDebug) platform.setupDebug((state) => { lastDebugState = state; showDebugInfo(state); projectWindows.refresh(true); @@ -1130,7 +1132,7 @@ function loadScript(scriptfn, onload) { } // start -function startUI(loadplatform : boolean) { +export function startUI(loadplatform : boolean) { installErrorHandler(); // add default platform? platform_id = qs['platform'] || localStorage.getItem("__lastplatform"); diff --git a/src/views.ts b/src/views.ts index d6eabccc..1d5fa7cd 100644 --- a/src/views.ts +++ b/src/views.ts @@ -4,9 +4,10 @@ import $ = require("jquery"); //import CodeMirror = require("codemirror"); import { CodeProject } from "./project"; import { SourceFile, WorkerError } from "./workertypes"; -import { Platform } from "./baseplatform"; +import { Platform, EmuState } from "./baseplatform"; import { hex, lpad, rpad } from "./util"; import { CodeAnalyzer } from "./analysis"; +import { platform, platform_id, compparams, symbolmap, addr2symbol, current_project, lastDebugState } from "./ui"; export interface ProjectView { createDiv(parent:HTMLElement, text:string) : HTMLElement; @@ -25,14 +26,7 @@ export interface ProjectView { // TODO: move to different namespace declare var CodeMirror; -declare var platform : Platform; -declare var platform_id : string; -declare var compparams; -declare var symbolmap : {[ident:string]:number}; -declare var addr2symbol : {[addr:number]:string}; -declare var current_project : CodeProject; declare var VirtualList; -declare var lastDebugState; // helper function for editor function jumpToLine(ed, i:number) {