1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-11-22 14:33:51 +00:00
8bitworkshop/doc/notes.txt

558 lines
16 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
2018-12-05 13:33:40 +00:00
- step over (line, instruction)
- slowdown beam for all platforms?
- intro/help text for each platform
- 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
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
- 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"
- 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
2020-07-27 13:04:48 +00:00
- Audio doesn't work if clock != default
- Verilog WASM not yet supported:
- wide numbers > 64 bits (and in scope view)
- multiple modules instances
- structs
- other $funcs
- multidim arrays
- optimize trace log w/ wasm buffer
- yosys compatibility
- randomize on reset? (https://www.xilinx.com/support/documentation/white_papers/wp272.pdf)
2021-07-11 18:41:20 +00:00
- XML should tell us which values are supposed to reset
- 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
- upgrade to 4.1 for Supercharger format
- 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?
- better text/binary detection (e.g. 0xa9 copyright)
2020-07-27 13:04:48 +00:00
- going into repo chooses wrong file if republished with different main
- renaming main file doesn't change repo def.
2021-06-01 20:27:43 +00:00
- can't edit or push files until successful compile
- changing platform of repo makes one platform redirect to another platform
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
- maybe eat key events? ("'" messes things up)
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
- disk image support
- https://github.com/cc65/cc65/issues/946
- player 2 joystick and keyboard conflict
- problems with cgetc()
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
- ca65 line numbers are not aligned with source code
- neither are DASM when you change comments
- segments not read properly
2020-07-09 02:57:55 +00:00
- Debug Browser
2020-07-09 18:27:56 +00:00
- more stuff like 7800 display lists
2020-07-12 01:21:31 +00:00
- don't include start/end line on platforms w/o raster timing
2020-07-27 13:04:48 +00:00
- BIOS symbols
2020-07-28 20:06:49 +00:00
- show current tool for file
- download non-text incbin source file
- show hidden header files that only exist in Emscripten FS
- WASI modules: https://docs.wasmer.io/integrations/js/wasi/browser
- FS Access: https://web.dev/file-system-access/
- https://wicg.github.io/file-system-access/#api-showdirectorypicker
2020-07-27 13:04:48 +00:00
Probing
- probe log doesn't start @ reset
- scroll to current probe log location
Debug, play then halt cpu doesn't highlight final line
- illegal instruction should show debug info + jump to line
- halt cpu should show video too
vcs: input not preserved when replaying frames?
2021-06-19 02:14:26 +00:00
compile errors disappear when focus returns
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
- MAME
- debugging?
- kbd instructions don't work
- https://emscripten.org/docs/porting/asyncify.html
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-28 20:06:49 +00:00
Optimizations
- ordered/delayed assignments
- skip unused exprs
- opcode -> fn table
- bus protocols -> functions
- state -> lookup tables or switch statements
- vec[] -> bitmask
- multiclock execution?
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?
BETTER DEBUGGING
Need to mark start/end columns, not just line number
Know if we are actively debugging or trap occurred
isRunning() = stopped, running, waiting, debugging...
Showing running PC may be distracting, maybe lines visited?
Don't grab cursor focus when trap occurs (how do we know?)
Use tick() and refresh(), not callbacks
Show current datum when using READ
Use https://codemirror.net/doc/manual.html#markText
2020-08-09 01:03:48 +00:00
Reset doesn't break @ start unless debugging tools expanded
2021-06-01 20:27:43 +00:00
PORTING CC65 TO IDE
flat directory for .c files
#include "file.h" vs <file.h>
//#link "foo.c" for each C file
preprocessor differences (#define FOO 1 so #if works)
extern void do_func(void)
#pragma warnings
CFG files