8bitworkshop/doc/notes.txt

495 lines
13 KiB
Plaintext
Raw Normal View History

2016-12-16 01:21:51 +00:00
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
- MAME single step (?)
2018-12-05 13:33:40 +00:00
- step over (line, instruction)
- slowdown beam for all platforms?
- show errors in list (maybe window list?)
2019-06-07 20:26:57 +00:00
- click to go to error
- what if error in include file you can't edit b/c it never appears?
2018-06-30 14:26:41 +00:00
- 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
2019-03-14 15:20:50 +00:00
- intro/help text for each platform
2018-08-23 12:49:14 +00:00
- vscode/atom extension?
2018-08-29 17:43:46 +00:00
- 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
2018-10-02 13:44:34 +00:00
- allow download of JSASM output
- update bootstrap to 4.0
- batariBasic: proper line numbers, debugging
- builds:
2019-08-19 14:24:22 +00:00
- 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
2019-08-19 14:24:22 +00:00
- 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
2019-06-03 14:08:29 +00:00
- debug inline asm
2018-11-27 22:37:45 +00:00
- live coding URL
- resize memory browser, other windows when vertical div resize
2018-12-30 18:57:33 +00:00
- markdown, verilog: can't share
2018-12-17 22:52:26 +00:00
- https://www.crowdsupply.com/tinyfpga/tinyfpga-bx
2019-01-27 19:47:03 +00:00
- stego shareable images (http://pico-8.wikia.com/wiki/P8PNGFileFormat)
- https://makecode.com/language?
2019-02-09 15:26:45 +00:00
- open ROM from URL?
- game starts even if switched away before first load
2019-03-17 02:02:35 +00:00
- put globals into view/controller objects
- 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?
2019-03-21 00:45:03 +00:00
- ide bug/feature visualizer for sponsors
2019-03-22 14:51:41 +00:00
- global undo/redo at checkpoints (when rom changes)
- landscape mode for arcade ports
2020-07-09 02:57:55 +00:00
- symmetric load/save state types (like in Machine)
- pixel editor
- persist palette/tilemap selections
- more tools for editing
- map editor
2019-05-15 03:32:19 +00:00
- arbitrary nametable editing
- metasprites
- throw errors when bad/no refs
- per-View keyboard shortcuts
- parse labels
2019-04-24 17:46:19 +00:00
- parse .incbin directives?
- can't replace in hex directives
2019-05-15 03:32:19 +00:00
- should maybe use same single-canvas editor for map + char editor
2019-06-08 16:01:22 +00:00
- 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?
2019-06-07 20:26:57 +00:00
- profiler
- profiler restarts emulator when paused
2019-06-07 20:26:57 +00:00
- 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
- 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
2019-05-07 19:37:37 +00:00
- use $readmem for inline asm programs?
2019-05-21 17:06:48 +00:00
- can't add control instructions b/c of split
2019-08-29 01:02:41 +00:00
- bad error msg if >2 moduels and top module doesn't match filename
- separate Scope View
- single-stepping vector games makes screen fade
2019-06-07 20:26:57 +00:00
- break on stack overflow, illegal op, bad access, BRK, etc
- show in scope instead?
2019-05-11 13:54:09 +00:00
- nes
2020-07-09 02:57:55 +00:00
- replay doesn't work for nes (force background tile redraw, sprites
messed up)
2019-05-11 13:54:09 +00:00
- nes debug view toolbar
- support NES_HEADER_16K?
- NES crt should mark raster pos when debugging
- OAMDMA in profiler? (haltCycles)
2020-07-09 02:57:55 +00:00
- typed arrays don't serialize?
2019-07-20 01:50:53 +00:00
- 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
2019-08-22 16:20:47 +00:00
- 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
2019-06-07 20:26:57 +00:00
- 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
2019-05-07 19:37:37 +00:00
- don't have to include firebase always?
2019-06-02 02:09:45 +00:00
- squelch error msgs?
2019-06-03 14:08:29 +00:00
- test offline? (if window.firebase)
2019-05-07 19:37:37 +00:00
- Github
2019-08-15 16:18:16 +00:00
- platform_id/repo.platform mismatch (can't leave repository)
- handle overwrite logic
- what to do about included files?
2019-05-09 17:22:24 +00:00
- 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
2019-08-29 01:02:41 +00:00
- importing from subtree commits to root anyway
- publishing Markdown file loads default file?
2019-08-05 15:15:26 +00:00
- keyboard shortcuts
- ctrl+alt+l on ubuntu locks screen
- alt-D doesn't work anymore
- facade/kbd shortcuts for emulators, focus
2019-07-06 18:41:15 +00:00
- cookie
- list of stuff for policy
- popup
2019-07-13 18:31:10 +00:00
- convert binary to hex stmts
2019-08-07 13:26:53 +00:00
- "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)
2019-09-17 00:04:14 +00:00
- 6502
- KIL stops debugger
2019-08-25 14:45:36 +00:00
- 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")
2019-12-14 15:50:57 +00:00
- probably XMLHttpRequest.timeout (https://github.com/getsentry/sentry-javascript/issues/2210)
2020-04-19 14:32:21 +00:00
- C64
- debugging at reset
- gotoxy goes to $EA24 (KIL) from PLOT (kplot.s) missing UPDCRAMPTR
- emu doesn't reset properly (after gotoxy() BIOS call)
- disk image support
- https://github.com/cc65/cc65/issues/946
2020-06-07 20:23:31 +00:00
- sample buffer skips (need to sync w/ vsync)
2019-08-25 14:45:36 +00:00
- upgrade to ES2020?
- https://github.com/microsoft/TypeScript/issues/16577
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules
- need Edge 79+
- no import in workers
2020-06-07 20:23:31 +00:00
- copy to gen/ directory (allowJs is weird)
2020-07-06 04:50:11 +00:00
- can we debug first frame via replay?
- ca65 line numbers are not aligned with source code
- segments not read properly
2020-07-09 02:57:55 +00:00
- Debug Browser
- hex viewer
- show 16/32 typed arrays
2019-07-06 18:41:15 +00:00
WEB WORKER FORMAT
{code,platform,tool,dependencies}
{preload}
new:
2018-07-04 15:36:32 +00:00
{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
2018-06-25 23:47:40 +00:00
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:<rom>
sources:{
<path>:{lines, asmlines, listing}
}
}
add file to errors
http://www.playvectrex.com/designit/chrissalo/vectordisplay.htm
http://oldies.malban.de/secondvectrex/index.htm
2018-12-07 15:03:01 +00:00
PIXEL EDITOR
everything is an editor
back/forward propogation
encoded <-> raw + spec + palette(s) <-> full tilemap <-> selected tile/sprite/metasprite
2019-02-05 03:53:50 +00:00
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
2019-02-09 15:26:45 +00:00
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
2019-03-17 02:02:35 +00:00
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)
2019-03-18 18:39:02 +00:00
- think about new comment format, platform-specific types
2019-02-05 03:53:50 +00:00
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
2019-05-11 13:54:09 +00:00
Converting from NESASM to DASM
2019-08-20 12:28:59 +00:00
- asl a -> asl
2019-05-11 13:54:09 +00:00
- 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
2019-08-07 13:26:53 +00:00
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
2019-08-20 12:28:59 +00:00
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
2020-01-28 15:50:38 +00:00
Markdown (showdown) interface
- add code patches to files
- cursor shows current state/errors (must map markdown->src lines)
- show preview emulator at each step (play button? run when viewed?)
2020-05-25 18:04:04 +00:00
DOCUMENTATION
memory map
BIOS routines
cc65 standard libs
cc65 headers
example headers (presets/*/*.h)
libcv headers (src/worker/lib)
ASM includes
2020-06-13 13:47:10 +00:00
NETPLAY
runs alongside of emulator, doesn't modify controls (just state)
when controls change: player sends control inputs + frame#
add latency so clients more often are in sync
if miss latency window, client syncs state (moves forward a few frames?)
state checksum?
socket.io
X86
https://github.com/freebasic/fbc
GW-BASIC
http://www.grifo.com/SOFT/Pacific/uk_pacific.html
http://www.cpm.z80.de/small_c.html
https://github.com/open-watcom
Free Pascal
https://bellard.org/tcc/
https://wiki.osdev.org/Smaller_C
https://yasm.tortall.net/
https://wiki.osdev.org/Tool_Comparison
2020-07-05 17:36:41 +00:00
COMPONENT EMULATION
Emulate discrete chips
- verilog
- js
- wasm? (overhead?)
Block diagram level
Buses
Insn/cycle timing
Pos/neg clock edge
Timers
Polling vs. callbacks (https://github.com/floooh/chips)
- callbacks might only affect devices internally, until next cycle
CRT simulator
Move leaf nodes to workers (sound chips)
CPU opcode-step switch: https://floooh.github.io/2019/12/13/cycle-stepped-6502.html
- macros are cool!
Inspect bus edges and internal state
type Bits<N> = number;
interface Clocked { }
interface BusListener<N> {
recv(value : Bits<N>) : void;
}
class Bus<N> {
listeners : BusListener<N>;
send(value : Bits<N>) : void {
}
}
function bus(bits : number) {
return function(
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
//descriptor.configurable = value;
};
}
class M6502_T {
IR : Bits<16>; /* internal instruction register */
addr : Bus<16>;
data : Bus<8>;
@bus(16) address : Bus<16>;
}
2020-07-06 17:47:24 +00:00
STATE REWIND
in Platform:
advance?(novideo? : boolean) : number;
advanceFrameClock?(trap:DebugCondition, step:number) : number;
in devices:
advanceFrame(trap:TrapCondition) : number;
advanceClock() : void;
advanceInsn() : number;
Should call trap() every cycle or insn of frame, or exit when returns true?