17 KiB
Repo
Source: https://github.com/nimblemachines/muforth#under-active-development
GitHub - nimblemachines/muforth: A simple, indirect-threaded Forth, written in C; for target compiling; runs on Linux, BSD, OSX, and Cygwin
Navigation Menu
Toggle navigation
Appearance settings
-
Platform
- AI CODE CREATION
- DEVELOPER WORKFLOWS
- APPLICATION SECURITY
- EXPLORE
-
Solutions
- BY COMPANY SIZE
- BY USE CASE
- BY INDUSTRY
-
Resources
- EXPLORE BY TOPIC
- EXPLORE BY TYPE
- SUPPORT & SERVICES
-
Open Source
- COMMUNITY
- PROGRAMS
- REPOSITORIES
-
Enterprise
Search or jump to...
Search code, repositories, users, issues, pull requests...
Search
Clear
Provide feedback
We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel Submit feedback
Saved searches
Use saved searches to filter your results more quickly
Name
Query
To see all available qualifiers, see our documentation.
Cancel Create saved search
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
nimblemachines / muforth Public
- Notifications You must be signed in to change notification settings
- Fork 34
- Star 153
A simple, indirect-threaded Forth, written in C; for target compiling; runs on Linux, BSD, OSX, and Cygwin
License
153 stars 34 forks Branches Tags Activity
Notifications You must be signed in to change notification settings
Additional navigation options
nimblemachines/muforth
master
Go to file
Code
Open more actions menu
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
| Latest commit History3,159 Commits 3,159 Commits | ||||
| .vim | .vim | |||
| doc | doc | |||
| mu | mu | |||
| scripts | scripts | |||
| src | src | |||
| talks | talks | |||
| .gitattributes | .gitattributes | |||
| BUILDING | BUILDING | |||
| LICENSE | LICENSE | |||
| README.md | README.md | |||
| View all files |
Repository files navigation
What is muforth?
muforth is a small, simple, fast, indirect-threaded code (ITC) Forth intended for use as a cross-compiler for microcontrollers and other embedded devices. It is written in C and its core is very portable. Because of its Forth nature, it is naturally extensible, scriptable, and customizable.
muforth is very well-suited to interactive coding, debugging, and exploration, and is a great tool for bringing up new hardware.
It has support – in varying degrees of completeness – for a number of different architectures and chip families.
- 8051
- ARMv6-m (aka Cortex-M0/M0+)
- ARMv7-m (aka Cortex-M3/M4/M7)
- AVR (Atmel/Microchip)
- HC08 and HCS08 (Motorola/Freescale/NXP)
- MSP430 (TI)
- PIC18 (Microchip)
- RISC-V (initially, the SiFive FE310 and GigaDevice GD32VF103)
Tethered vs self-hosted
Unlike a "self-hosted" Forth, where the target contains the dictionary, the text interpreter, and all the tools necessary for assembling and compiling code, muforth supports a tethered development model. muforth runs on the host machine, compiling code and data that are later copied to the target machine and executed there.
Because the dictionary and all the compilation tools reside on the host, only the compiled code and data reside on the target. This makes it possible to target very small devices that only have a few kilobytes of flash and a few hundred bytes of RAM. In contrast, a self-hosted Forth often needs 16 KiB (or more) of flash to be useful, and consumes RAM for the text interpreter and compiler.
The host machine is also orders of magnitude faster than the target, so doing the compilation on the host is essentially instantaneous.
Why yet another Forth?
I initially wrote muforth because I wanted to try out some implementation ideas. The core language primitives are written in C, but initially muforth compiled Forth words via a simple native code compiler for the x86. I quickly realized that simplicity and portability were more important than speed. The current implementation is a straightforward indirect-threaded Forth - and it is quite fast!
Its implementation is no longer the point. Its sole reason for existing is to be a cross-compiler for other Forths, and their implementations are in no way tied to muforth’s. In fact, muforth can be used to compile any sort of code onto the target. I've used it very successfully as a smart assembler for writing AVR and S08 code.
By keeping it small and simple, it is much more likely to be a useful tool that people can customize.
It’s BSD licensed, so do what you want with it! I’d love to hear about innovative or unusual uses of muforth.
Starting points
BUILDING will tell you how to build muforth. It’s very simple.
Look in mu/target/ to find a target that interests you. There is
generally a mu/target/<target-name>/build.mu4 that loads the cross-build
environment. Use it as an “index” to find the assembler, disassembler,
meta-compiler, kernel, and other key pieces of code.
Documentation
Sadly, there isn’t a lot of documentation right now. A good place to start is to read the source.
The code – both the C code that implements the Forth virtual machine and the muforth code that does everything else – is carefully and in some cases extensively (even obsessively!) commented. Right now your best source of documentation is the code! Luckily for you, there isn’t that much of it, so reading it is actually possible. That’s part of the point of muforth; I want it to be a convivial tool.
The heart of the system is the Forth code that muforth reads when it first starts: mu/startup.mu4. You’ll learn a lot by reading this!
muforth.dev will eventually host the muforth documentation. At the moment, it is a collection of journals, essays, and “getting started” pages.
News
Follow @muforth.dev for updates about the project and related things (eg, interesting development boards) that I'm thinking about.
Talks
In March 2008 I gave a talk about bootstrapping, muforth, and convivial tools.
Warning: I wave my arms around a lot, and the audio and video quality isn’t that great, but you might find it interesting, or at least amusing.
It’s also hard to see my slides. If you want to “follow along”,
download my slides,
and use less to view them – ideally in a text window that is at least 30
lines high – like so:
less -30 ~/muforth/talks/2008-mar-30-PNCA
Above all, enjoy!
About
A simple, indirect-threaded Forth, written in C; for target compiling; runs on Linux, BSD, OSX, and Cygwin
Resources
License
Uh oh!
There was an error while loading. Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Uh oh!
There was an error while loading. Please reload this page.
Contributors 4
Uh oh!
There was an error while loading. Please reload this page.
Languages
- Forth 90.9%
- Assembly 3.3%
- Lua 2.9%
- C 2.1%
- Roff 0.3%
- Shell 0.2%
- Other 0.3%
Footer
© 2026 GitHub, Inc.
Footer navigation
- Terms
- Privacy
- Security
- Status
- Community
- Docs
- Contact
- Manage cookies
- Do not share my personal information
You can’t perform that action at this time.
