TODO: - NaN in cycle count for macros - debugging of scan line overflow - confuse code/data in listing - show memory locations hovering over lines - don't check against ROM signatures - DASM - macro forward refs - labels start with . omit timing info (isCode) - spaces in filename don't parse code listing (DASM, maybe more) - 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? - online help - show self-modifying code insns left of editor - update Javatari version? (and others?) - sound mute? - $error updates source editor - online tools for music etc - text log debugging script - intro/help text for each platform - vscode/atom extension? - click to break on raster position - restructure src/ folders - debug bankswitching for funky formats - '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 - what if >1 file with same name? (local/nonlocal/directory) - what if .c and .s names collide? - maybe put stuff in examples/ dir? - error msg when #link doesn't work - warning when ROM too big - detect "libcv.h" and include library automagically? - sdcc: - can't link asm files before c files (e.g. acheader.s must be last) - figure out area names ordering - 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 - touch support - better undo/diff for mistakes? - ide bug/feature visualizer for sponsors - global undo/redo at checkpoints (when rom changes) - landscape mode for arcade ports - symmetric load/save state types - pixel editor - persist palette/tilemap selections - more tools for editing - map editor - arbitrary nametable editing - metasprites - throw errors when bad/no refs - per-View keyboard shortcuts - parse labels - parse .incbin directives? - can't replace in hex directives - should maybe use same single-canvas editor for map + char editor - undo doesn't refresh editor - editing sometimes messes up cursor movement (CURBS) - crt0.s compiled each time? - debug highlight doesn't go away when debugging -> running - show breakpoint of PC or highest address on stack - can we highlight line instead of select? - profiler - profiler restarts emulator when paused - running profiler while replaying? grand unified replay? - click on profiler to step to position - breakpoints stop profiler from running - single-screen profiler - hide labels that aren't available, like BIOS addrs - 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 - remove FPS and play controls when Verilog scope paused - when paused scope doesn't work - Safari: scope doesn't show while CRT in use (sometimes Firefox too) - verilog debugging/reloading makes it slow - why loadState() on verilog kill perf? - quantify verilog "graph iterations" - toolbar overlaps scope - CPU debugging - use $readmem for inline asm programs? - can't add control instructions b/c of split - bad error msg if >2 moduels and top module doesn't match filename - separate Scope View - single-stepping vector games makes screen fade - 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) - 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) - JSNES - doesn't support hiding >8 sprites - doesn't do sprite zero test right - doesn't do clip right - doesn't do b/w tint - vcs - sometimes still plays when paused on FF - vcs: INPTx needs to be added to control state - vcs: break on # of lines changed (maybe using getRasterPosition?) - chrome looks blurry on vcs - VCS asm game library - VCS skips step on lsr/lsr after run to line - better VCS single stepping, maybe also listings - upload multiple files/zip file to subdirectory - allow "include graphics.asm" instead of "include project/graphics.asm" - convert more stuff to Promises - target ES6 - don't have to include firebase always? - squelch error msgs? - test offline? (if window.firebase) - Github - platform_id/repo.platform mismatch (can't leave repository) - handle overwrite logic - what to do about included files? - can published files retain path? - what if import interrupted and partial files? - CORS for some blobs? - don't import useless files - support projects with subdirectories, file list? - switching platform of a repo? - make sure to flatten subdirs - 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 - alt-D doesn't work anymore - facade/kbd shortcuts for emulators, focus - cookie - list of stuff for policy - popup - convert binary to hex stmts - "suggestions" (vblank overrun, variable # scanlines, etc) - SMS - 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') https://8bitworkshop.com/v3.4.1/javatari.js/release/javatari/javatari.js (32:443651) Safari 12.1.2 - Safari: doesn't send good exception reasons ("undefined") WEB WORKER FORMAT {code,platform,tool,dependencies} {preload} new: {updates,buildsteps} [{filepath,platform,tool}] implicit rules - push/shift build steps - preprocessor, compile, assemble, link - access to intermediate files only build files that have changed build options BUILD PROJECT local/foo.project/*.* build all files in project send update for dependencies at startup (single file version) should be able to change file w/o reloading (Not platform tho) pulldown selects file in project, or goes back to parent gotta preserve editor windows for each one - window list make source/disasm window visible when debugging gutter info/errors in all files UI REFACTOR editor debugger disasm view memory profile errors separate into files window methods: - set - mode - get - changes - cursorActivity (inspect) - gutters (setCompileOutput) - current line / gutter marker (setCurrentLine / clearCurrentLine) - source map - global symbols - pixel editor / find comment (openBitmapEditorAtCursor) - update debug window (200 ms) - inspect variable file store mirrors that on worker worker result: { output: sources:{ :{lines, asmlines, listing} } } 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) <-> full tilemap <-> selected tile/sprite/metasprite need references panes: source code, metadata tree, graphics panes decoded info: - CHR tiles - palettes - maps/rooms - metasprites - metatiles - sprite data (williams etc) store in intermediate single file or embed in C/ASM? we'd then have to generate C/ASM probably automatically intermediate file could still be edited switch between hex/graphic editor? (palettes should edit via hex) final display types: number, color, sprite, etc CHR editor has palette selector, obj selector individual objects in single file or multiple files? RLE compression Types - byte - RGBA color - structured object - metasprite - metatile - level actor - bitmap - array of stuff, array can have a shape (width,height) like numpy Mappers can refer to multiple objs Slice (window) of array for selections AssetEditorView - scan files for assets - build hierarchical view of assets - expand/collapse - create editor upon expansion - double-click to source file Assets come from: - chr files - bitmap data in files - structured data (palette, sprites, metasprites, levels, etc) - think about new comment format, platform-specific types Programmatic Asset Language - load PNG, draw image, or generate bitmap font - split into images - paletteize - fit into tileset/spriteset - NES: 8x8 or 8x16 tiles - 7800: 256xN slice - VCS: 24xN playfield, 8xN sprite, 32xN big sprite - generate data file (asm/c/bin) - generate char mapping - tile generator (makechr-like) - metasprites too - RLE compression - check constraints --- Github Support Import Export Login Pull Push Git metadata kept in local storage Converting from NESASM to DASM - asl a -> asl - subroutine keyword on labels - [zp],y to (zp),y - LOW(x) and HIGH(x) to <() and >() - .db to .byte, .dw to .word - use NES_HEADER macros - no .bank Cross platform NES/SMS/GG library - use CHR RAM - create flipped tiles/sprites - create alternate palette tiles - metatiles - cross platform music/sound - scrolling - row/column mask - no nametable mirroring in SMS - 256x240 vs 256x192 Emulator Lib - move getPresets() (into presets/ dir?) - CPU interface - execCycle(), execInsn() - fix/unfix PC - interrupt - generic raster scanline platform - PlatformRunner - handles rewind, intra-frame breakpoint, debugging - profiling log, exec/read/write/intr (for each bus?) - expose video, audio, controller interfaces - new debugging info - memory map interface - "About" metadata - auto load/save state? - handle legacy - VCS - NES - MAME