2019-07-22 05:37:03 +10:00
|
|
|
# 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](../kbd/README.md)
|
2019-07-26 04:23:13 +10:00
|
|
|
|
|
|
|
## 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` of `0xc200`. This is where
|
|
|
|
`dest` is loaded by the `pgm` shell hook.
|
|
|
|
* `0x3f` is the offset of `printstr` in the jump table of our glue code.
|
|
|
|
* `xor a` is for the command to report as successful to the shell.
|