Menu navigation: H to show code history I to import a rom. L to load a program from the program list. M to show memory. O to show options. P to show/hide the program list. Space to pause/unpause the interpreter. 0 to reset the interpreter. 9 to change pixel colors (Render mode 1 only). 8 to change input configuration. Options navigation: Render mode: 1 = Pen (Faster, looks worse.), 2 = Stamp (Slower, looks better.) Compatibility mode: 1 = COSMAC VIP, 2 = Modern Input (default): keyboard CHIP-8 1234 123C QWER 456D ASDF 789E ZXCV A0BF This project contains 1,773 blocks, 5 less than the previous version. Log: 6/15/2024 (V0.1.0): Finally, the draw instruction works (so I thought). 6/16/2024 (V0.1.1): Removed a single unnecessary if block. 6/16/2024 (V0.1.2): Added overflow prevention. 6/17/2024 (V0.1.3): Fixed instruction 7xkk, added screen wrapping to draw instruction. 6/19/2024 (V0.2.0): Added program list. 6/21/2024 (V0.2.1): Fixed some instructions, added compatibility settings. 6/21/2024 (V0.2.2): Fixed screen wrapping. 6/22/2024 (V1.0.0): Draw instruction finally works (for real this time). 6/22/2024 (V1.0.1): Renderer is no longer triggered by broadcasts (@oxiti8 said that can cause problems). 6/23/2024 (V1.0.2): Changing the cycles per frame now works, added pause and restart features. 11/4/2024 (V1.0.3): Added option to add custom pixel colors (Render mode 1 only). 11/27/2024 (V1.0.4): Fixed changing pixel colors being mapped to the same key as B on the keypad. 3/11/2025 (V1.1.0): Switched to broadcast based interpreter instead of using if statements, added Fx33 instruction. 3/13/2025 (V1.1.1): Fixed Cycles per frame implementation, fixed clear screen instruction (it would take multiple frames to finish erasing (no "run without screen refresh"), causing future frames to partially disappear), programs list now appears by default. 8/22/2025 (V1.1.2) Fixed some instructions. (I've got my eyes on you, 7xnn.) 8/23/2025 (V1.1.3) Fixed a few more instructions (I'm not stopping until it fully passes corax+), changed font loading method. 8/24/2025 (V1.1.4) Revised bitwise operations, fixed Fx55 and Fx65, removed old dec/hex/bin converter. 9/26/2025 (V1.1.5) Revised overflow detection. 3/25/2026 (V1.1.6) Fixed 8xy1, 8xy2, and 8xy3. (It seems I forgot to make a log for V1.1.7, no idea what I did there.) 7/8/2026 (V2.0.0) Converted interpreter to a Binary Search Tree (~3-4x faster than broadcasts), Optimized the implementation of input detection, Optimized the implementation of many instructions, Made input configuration customizable, Renamed the interpreter from "Cool CHIP-8" to "CoolCHIP-8" (removed the space), re-revised overflow detection (no longer uses a custom block that mod-256's every register, instead having them be moded when they're set instead), code history list now renders from bottom to top, fixed Dxyn not setting VF to 0 (actually it might have already done that). 7/19/2026 (V2.0.1) Fixed lag when running the Clear Screen instruction.
Once I discovered that BST's are ~3-4x faster than the broadcast interpreter I was using (thanks to https://scratch.mit.edu/projects/1005251504 ), I decided to release a new version of CoolCHIP-8 with a proper BST as it's interpreter, aswell as many other optimizations and bugfixes. (update log at bottom of Instructions) Credits: http://devernay.free.fr/hacks/chip8/C8TECH10.HTM https://tobiasvl.github.io/blog/write-a-chip-8-emulator/