Subleq
16-bit SUBLEQ CPU running eForth - just for fun
Install / Use
/learn @howerj/SubleqREADME
16-bit SUBLEQ eForth
- Author: Richard James Howe
- Email: mailto:howe.r.j.89@gmail.com
- Repo: https://github.com/howerj/subleq
- License: The Unlicense / Public Domain
If you feel like supporting the project you can buy a book from Amazon, available here that describes how the project works and how to port a Forth to a new platform.
This project contains a working (self-hosting) Forth interpreter that runs on top of a SUBLEQ 16-bit machine. SUBLEQ machines belong to the class of One Instruction Set Computers, they only execute a single instruction but are still Turing Complete. The Forth system, specifically a variant of eForth, is provided as subleq.dec, passing this image to the tiny (~ 600 bytes) SUBLEQ C virtual machine allows you to run eForth on the machine. For a list of commands type "words" and hit enter, numbers are entered using Reverse Polish Notation, eg. "2 2 + . cr" prints "4", and new functions can be defined like so:
: hello cr ." Hello, World" ;
Be careful with the spaces, they matter, after typing that in, type "hello" and hit enter. A Forth tutorial will not be provided here. Many Forth words are defined including the bitwise words.
To build and run you will need a C compiler and Make, type "make run", failing that:
cc subleq.c -o subleq
./subleq subleq.dec
The system is self hosting, that is it can generate new eForth images using the current eForth image and the eForth source code. This is done like so:
./subleq subleq.dec < subleq.fth > new-image.dec
There is a website available that runs an interactive SUBLEQ interpreter in the browser in case you do not want to both compiling things, it is available at https://github.com/howerj/subleq-js. Or if you just want to try it out directly https://howerj.github.io/subleq.htm.
Happy hacking, and a shiny penny for anyone that manages to do something useful with this project!
Other SUBLEQ projects
- https://github.com/pbrochard/subleq-eForthOS
- https://github.com/howerj/subleq-python
- https://github.com/howerj/subleq-perl
- https://github.com/howerj/subleq-js
- https://github.com/howerj/subleq-forth
- https://github.com/howerj/subleq-vhdl
References
- https://en.wikipedia.org/wiki/Forth_(programming_language)
- https://github.com/howerj/bit-serial
- https://github.com/howerj/embed
- https://github.com/howerj/forth-cpu
- https://rosettacode.org/wiki/Subleq
- https://stackoverflow.com/questions/2982729
- https://stackoverflow.com/questions/34120161
- https://web.ece.ucsb.edu/~parhami/pubs_folder/parh88-ijeee-ultimate-risc.pdf
- https://esolangs.org/wiki/Subleq
- https://wikipedia.org/wiki/Threaded_code
- https://github.com/samawati/j1eforth
- https://www.bradrodriguez.com/papers/
- 8086 eForth 1.0 by Bill Muench and C. H. Ting, 1990
- https://www.bradrodriguez.com/papers/mtasking.html, For multitasking support
- https://forth-standard.org/standard/block, For the block word-set, which is partially implemented.
- https://github.com/howerj/subleq-js
- URISC, the original OISC, a SUBLEQ machine: Mavaddat, F.; Parhami, B. (October 1988). "URISC: The Ultimate Reduced Instruction Set Computer".
- https://en.wikipedia.org/wiki/Turing_tarpit, which SUBLEQ could be argued to be one.
- For other Single Instruction Set Computers: https://en.wikipedia.org/wiki/One-instruction_set_computer
- For the Forth-83 Standard: http://forth.sourceforge.net/standard/fst83/ http://forth.sourceforge.net/standard/fst83/FORTH-83.PRN
- DPANS84 FORTH standard: http://forth.sourceforge.net/std/dpans/
Related Skills
node-connect
343.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
92.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
