(2023-05-09) CHIP-8 revisited ----------------------------- The first human-scale VM for home computers in history, CHIP-8, is something I am a bit familiar with. To the extent of development of my own CHIP-8 emulation engine for KaiOS, which I obviously had called DALE-8. I have always been sticking to the original specs and not quite liking all those extensions like SuperCHIP, XO-CHIP and so on. The most basic original specs - 4096 bytes of RAM, purely monochrome 64x32 bitmap graphics with 8xN sprites, 35 opcodes, 16 keys and a beeper - are perfect for implementing it on the most exotic hardware available. No wonder that even a Rockbox version for Sansa Clip players has a built-in CHIP-8 emulator (although, obviously, not all 16 keys are supported there). It is remarkable how CHIP-8 was initially called not a VM, not an emulation engine, but an interpreter. Even Wikipedia refers to it as an "interpreted programming language". Well, in 1977 when it was first introduced on a COSMAC VIP that had nothing but a 16-key keypad and a reset switch, it was your pretty much only alternative to direct machine language programmming, and yes, it was much simpler than the RCA 1802 machine language despite also being fully binary. Especially if you understand how expensive in 1977 were any expansions (pun intended) that would allow to run any Tiny BASIC or Forth or other "real" interpreters, and these expansions would at least include more RAM and, obviously, a full-size alphanumeric keyboard. What's even more interesting (and what I didn't know until this very day) is that RCA Studio II cartridges also contained games created for a VM with an instruction set similar (although not identical) to CHIP-8 as opposed to the machine language. Sic! So, what's so remarkable about this VM, besides being the first of its kind? Well, at least two things. First, every single VM instruction is exactly two bytes long. No more, no less. This makes decoding them as easy as possible. Second, with sprites being first-class citizens in CHIP-8 graphics, XORing them on top of each other is a very clever trick one can pull off to interact with so little memory, considering the VF register is also set automatically on any collision of the active pixels. So, CHIP-8 architecturally has collision detection out of the box, which is just great in my opinion. When it comes to the original CHIP-8 variant support, I guess I have a lot to improve and reimplement. Of course, it's going to be done in POSIX AWK. If my algos work fine there, they will work fine everywhere else. So, as always, stay tuned! --- Luxferre ---