A virtual machine for ESP32, allowing dynamic program updates.
Based on my implementation of CHIP-8, where the gaming related instructions are removed, and instead instructions for IO pin controlling are added.
The following instructions that are related to games (drawing, etc.) are removed:
00E0
DXYN
EX9E
EXA1
FX0A
FX18
FX29
The following instructions that are related to IO control are added:
E0A0
- sleep for second register's value millisecondsEXA1
- sets the pin mode X to the pin (value in first register)E0A2
- doesanalogRead
to the first register and stores the result in the second registerE0A3
- doesanalogWrite
to the first register using the value from the second register
Registers are changed from 8 bit to 16 bit.
In order to reload a program, use the 0000
instruction to halt the VM and restart.
Tested on ESP32 Arduino (WROOM32).
Prerequisites:
- Install analogWrite polyfill
References:
- http://en.wikipedia.org/wiki/CHIP-8
- https://github.com/bor0/chip-8
- https://ieeexplore.ieee.org/document/9828788
- https://hackaday.com/2022/02/27/esp32-virtual-machine-lets-you-change-programs-on-the-fly/
Boro Sitnikovski