collapseos/emul
2020-04-09 09:43:48 -04:00
..
forth xcomp: don't automatically shadow core words 2020-04-09 09:43:48 -04:00
hw Add emul_memdump() and stop automatically on ROM write 2020-04-09 08:26:41 -04:00
libz80@8a1f935daa Move "emul" folder to root 2019-12-31 13:34:24 -05:00
runbin Move "emul" folder to root 2019-12-31 13:34:24 -05:00
.gitignore Merge remote-tracking branch 'origin/master' into forth 2020-04-07 19:32:30 -04:00
emul.c Add emul_memdump() and stop automatically on ROM write 2020-04-09 08:26:41 -04:00
emul.h Add emul_memdump() and stop automatically on ROM write 2020-04-09 08:26:41 -04:00
Makefile Add xcomp unit for cross compilation 2020-04-09 08:23:53 -04:00
README.md Add /tools/slatest 2020-04-02 23:20:47 -04:00

emul

This folder contains a couple of tools running under the [libz80][libz80] emulator.

Not real hardware

In the few emulated apps described below, we don't try to emulate real hardware because the goal here is to facilitate userspace development.

These apps run on imaginary hardware and use many cheats to simplify I/Os.

For real hardware emulation (which helps developing drivers), see the hw folder.

Build

First, make sure that the libz80 git submodule is checked out. If not, run git submodule init && git submodule update.

After that, you can run make and it builds all applications.

forth

Collapse OS' Forth interpreter, which is in the process of replacing the zasm-based project.

The Forth interpreter is entirely self-hosting, that is, it assembles its binary with itself.

There are 3 build stages.

Stage 0: At this stage, all we have are our bootstrap binaries, boot.bin and z80c.bin. We concatenate them into forth0.bin ans then wrap the emulator around it which is named stage1 (because it builds the stage 1) to have a barebone forth interpreter.

Stage 1: The stage1 binary allows us to augment forth0.bin with the compiled dictionary of a full Forth interpreter. We feed it with $(FORTHSRCS) and then dump the resulting compiled dict.

From there, we can create forth1.bin, which is wrapped by both the forth and stage2 executables. forth is the interpreter you'll use.

Stage 2: stage2 is used to resolve the chicken-and-egg problem and use the power of a full Forth intepreter, including an assembler, to assemble z80c.bin. This is a manual step executed through make updatebootstrap.

Normally, running this step should yield the exact same boot.bin and z80c.bin as before, unless of course you've changed the source.

runbin

This is a very simple tool that reads binary z80 code from stdin, loads it in memory starting at address 0 and then run the code until it halts. The exit code of the program is the value of A when the program halts.

This is used for unit tests.

Problems?

If the libz80-wrapped zasm executable works badly (hangs, spew garbage, etc.), it's probably because you've broken your bootstrap binaries. They're easy to mistakenly break. To verify if you've done that, look at your git status. If boot.bin or z80c.bin are modified, try resetting them and then run make clean all. Things should go better afterwards.

If that doesn't work, there's also the nuclear option of git reset --hard and git clean -fxd.

If that still doesn't work, it might be because the current commit you're on is broken, but that is rather rare: the repo on Github is plugged on Travis and it checks that everything is smooth.