We are delighted to announce the successful completion of a tiny footprint high-level computing language for high-speed, low-power, embedded computing on bare silicon (no BIOS, no OS). In terms of size, cost, and carbon footprint, the kernel clocks in at 730 bytes which includes a fully extensible runtime kernel providing DSL (domain specific language) capability for application specific computing.
What has been achieved:
- 372 byte machine coded kernel (bytes, not KB). This is small enough to fit into the smallest ROMs, while still leaving plenty of space for application RAM.1
- A further 358 bytes comprise bootstrapped runtime instructions written in the language itself, and data organized in jump-tables for efficient threaded execution.
- 40 kernel level instructions provide the granular control of C for application code (bit-level, structured conditionals).
- Compressed application code runs through a threaded design providing high speed code execution (as fast or faster than C) using native code.
- The core kernel provides a codestream reader that provides Domain specific language (DSL) capability to allow first class language expansion with the full capability of a Forth or a Lisp. This means expanded instructions have the same first-class attributes as the core kernel instructions.
- Language is based on a simple stack-based virtual machine universal architecture onto which any chip can be mapped.
- Portability between chips is achieved through a light-weight mapping layer to kernel instructions without requiring any other layer. Mapping kernel instructions between chips and adapting the kernel code is all that is required to port to a new chip.
- Any machine specific capabilities in a new chip can easily wrapped as a language extension, providing first class native code for high speed integration of full chip capabilities.
- Lightweight development stack (open source) with compiler/assembler/debugger for cross-compilation.
- Proof of concept designs with Arduino (Atmel 328), ATTiny85, and x86 chips.
- User/Programmer interface is via live serial link, via keyboard/screen, or via binary ROM/RAM load.
More details to follow.
Recommended Reading:
- The sacred and the profane: low-level software engineering and the search for simplicity in the hardware-software combination
- TinyPhoto: Embedded Graphics and Low-Fat Computing – using the Atmel ATtiny85 and an early version of the tiny toolchain above.
- Knowledge Engineering & Emerging Technologies (2005-2015)*
- Sensors and Systems: Integrating Sensors into the Ubiquitous Computing Stack
- Programming in a ‘Problem-Oriented (Domain Specific) Language’: Forth, Lisp, and Ruby.
- Demystifying the Assembly Language Toolchain: DOS-DEBUG, NASM (Netwide Assembler), TCC (Tiny C Compiler), and Forth
- Microcontrollers, Sensors, and Embedded Systems: Low-Cost Experimenting with Arduino
- Programming Low-Power, Low-Cost Microcontrollers – Atmel, Arduino, ATtiny – A Homebrew Toolchain including a 3-instruction Forth
- Voice Controlled Hardware and the Human-Sensor Interface
Footnotes:
- To put the small size into context, a block of code used to be 4096 bytes (4K), or about 6 pages of binary when viewed on an 80×40 screen in standard 16 bytes per row format. This about 20% of the size of a block, and is viewable in binary in just over 1 page (45 lines). ↩
Leave a Reply