# To do ## Research - [ ] Learn how the C64's PC gets initialized (what is the initial value? how is it set?) - [ ] Review CHIP-8 - read about the spec / ISA - read these, and add them to the bibliography: - Steve Losh: https://stevelosh.com/blog/2016/12/chip8-input/ - https://tonisagrista.com/blog/2021/chip8-spec/ ## Documentation - [ ] Improve docs for flags register - [ ] Play with JSDoc ## Design - [ ] Add a flag for bank-switching to the ~zero-page - [ ] Move the initial IP value, to eliminate the gap between it and the keypad pointer - [ ] Consider adding a VIP-style keypad-based machine code monitor ### For consideration - [ ] Subroutine stack - [ ] [Extended system (secret bonus operations)](2023-08-07--dev-notes.md) ## Programming - [ ] Write some more complex test programs - [ ] Display (hex) numbers - [ ] Greater than - [ ] Minimal LOGO-ish interpreter for turtle graphics ## Run-scripts - [ ] Replace with running `./cpu.js` and `./assembler.js` diretly ## Simulator ### Assembler - [ ] Validate labels - [ ] Return pure machine code when printing to stdout (and not in debug mode) ### CPU - [ ] Add a mode that prints the display as text, but still animates - [ ] Make single-stepping work with simulated keypad - [ ] Allow running pre-compiled machine code I'm thinking of an interface like this... $ ./cpu.js -mc code.bin $ ./cpu.js code.asm $ ./cpu.js --debug code.asm Full list of flags I want: -d --debug -s --singlestep -p --prettydisplay -mc --machinecode ### Possible under-the-hood improvements - [ ] Do a proper binary version... (or lose the typed arrays?) - [ ] Extract debugging to its own module - [ ] DRY out addition and subtraction