cdd0b64570
Instead of expecting a `USER_CODE` symbol to be set, we expect `.org` to be set in all userspace glue code. This gives us more flexibility with regards to how we manage that. Moreover, instead of making `USER_RAMSTART` mandatory, we make it default to the end of the binary, which is adequate in a majority of cases. Will be useful for my upcoming mega-commit... :) |
||
---|---|---|
.. | ||
.gitignore | ||
glue.asm | ||
Makefile | ||
README.md | ||
user.h |
zasm and ed from ROM
SMS' RAM is much tighter than in the RC2014, which makes the idea of loading apps like zasm and ed in memory before using it a bit wasteful. In this recipe, we'll include zasm and ed code directly in the kernel and expose them as shell commands.
Moreover, we'll carve ourselves a little 1K memory map to put a filesystem in there. This will give us a nice little system that can edit small source files compile them and run them.
Gathering parts
- A SMS that can run Collapse OS.
- A PS/2 keyboard adapter
Build
There's nothing special with building this recipe. Like the base recipe, run
make
then copy os.sms
to your destination medium.
If you look at the makefile, however, you'll see that we use a new trick here: we embed "apps" binaries directly in our ROM so that we don't have to load them in memory.
Usage
Alright, here's what we'll do: we'll author a source file, assemble it and run it, all on your SMS! Commands:
Collapse OS
> fnew 1 src
> ed src
: 1i
.org 0xc200
: 1a
ld hl, sFoo
: 2a
call 0x3f
: 3a
xor a
: 4a
ret
: 5a
sFoo: .db "foo", 0
: w
> fnew 1 dest
> fopn 0 src
> fopn 1 dest
> zasm 1 2
First pass
Second pass
> dest
foo>
Awesome right? Some precisions:
- Our glue code specifies a
USER_RAMSTART
of0xc200
. This is wheredest
is loaded by thepgm
shell hook. 0x3f
is the offset ofprintstr
in the jump table of our glue code.xor a
is for the command to report as successful to the shell.