mirror of
https://github.com/hsoft/collapseos.git
synced 2024-12-26 04:58:05 +11:00
recipes/trs80: can write compiled version to floppy
This commit is contained in:
parent
f38de1c151
commit
65f359bda4
5
blk/492
5
blk/492
@ -4,10 +4,13 @@ CODE KEY
|
|||||||
L A LDrr, H 0 LDrn,
|
L A LDrr, H 0 LDrn,
|
||||||
HL PUSHqq,
|
HL PUSHqq,
|
||||||
;CODE
|
;CODE
|
||||||
|
|
||||||
CODE EMIT
|
CODE EMIT
|
||||||
BC POPqq, ( c == @DSP arg )
|
BC POPqq, ( c == @DSP arg )
|
||||||
chkPS,
|
chkPS,
|
||||||
A 0x02 LDrn, ( @DSP )
|
A 0x02 LDrn, ( @DSP )
|
||||||
0x28 RSTn,
|
0x28 RSTn,
|
||||||
;CODE
|
;CODE
|
||||||
|
CODE BYE
|
||||||
|
HL 0 LDddnn,
|
||||||
|
A 0x16 LDrn, ( @EXIT )
|
||||||
|
0x28 RSTn,
|
||||||
|
@ -63,6 +63,10 @@ my knowledge. As far as I know, the COMM program doesn't allow this.
|
|||||||
What are we going to do? We're going to punch in a binary program to handle that
|
What are we going to do? We're going to punch in a binary program to handle that
|
||||||
kind of reception! You're gonna feel real badass about it too...
|
kind of reception! You're gonna feel real badass about it too...
|
||||||
|
|
||||||
|
## Keyboard tips
|
||||||
|
|
||||||
|
* `_` is `CLEAR+ENTER`.
|
||||||
|
|
||||||
## Building the stage 1
|
## Building the stage 1
|
||||||
|
|
||||||
You can start the process by building the stage 1 binary. Running `make` in
|
You can start the process by building the stage 1 binary. Running `make` in
|
||||||
@ -196,31 +200,71 @@ would cause a data mismatch at the very beginning of the process, all the time.
|
|||||||
What I do in these cases is start a `COMM *cl` session on one side and a screen
|
What I do in these cases is start a `COMM *cl` session on one side and a screen
|
||||||
session on the other, type a few characters, and try `pingpong` again.
|
session on the other, type a few characters, and try `pingpong` again.
|
||||||
|
|
||||||
## Running Collapse OS
|
|
||||||
|
|
||||||
If everything went well, you can run Collapse OS with `g3000<return>`. You'll
|
|
||||||
get a usable Collapse OS prompt!
|
|
||||||
|
|
||||||
Like with the `recv` program, nothing stops you from dumping that binary to a
|
|
||||||
floppy.
|
|
||||||
|
|
||||||
## Saving to disk
|
## Saving to disk
|
||||||
|
|
||||||
You could save your sent content as-is by following the instructions you had
|
If everything went well, you could run Collapse OS with `g3000<return>`. You
|
||||||
for the `RECV` program, but that would mean that your executable would boostrap
|
would get a usable Collapse OS prompt. But don't do that just yet. That
|
||||||
itself every time it starts, which takes multiple seconds. You're better off
|
executable bootstraps itself from code and it takes a while to do that every
|
||||||
saving a compiled version of Collapse OS, something you already have once you
|
time you launch it. You don't want that right? Let's save a compiled version of
|
||||||
see the "ok" after running `g3000<return>`.
|
it to disk.
|
||||||
|
|
||||||
Before you do that, however, you need to update your `LATEST` field, something
|
Turn off the debugger (which can mess up some things) and save your sent
|
||||||
you can do with `CURRENT @ 0x08 BIN+ !`. You also need to know where your
|
content as-is by following the instructions you had for the `RECV` program.
|
||||||
binary stops, something you'll get with `H@ .X`.
|
This way, if you mess up a step below, you can quickly start over. Now you can
|
||||||
|
launch Collapse OS. Then, we need to:
|
||||||
|
|
||||||
Then, you can go back to TRSDOS with the BREAK key followed by `o<return>` and
|
* Reclaim wasted memory
|
||||||
proceed with writing the proper memory area to disk.
|
* Create hook entry
|
||||||
|
* Update LATEST
|
||||||
|
* Write down initialization code
|
||||||
|
* Write memory to floppy
|
||||||
|
|
||||||
TODO: make this work. this doesn't actually work. Saving it before compilation
|
### Reclaim wasted memory
|
||||||
works though.
|
|
||||||
|
During initialization, `RDLN$` allocated memory in `HERE` for its input buffer.
|
||||||
|
If you don't reclaim that space, that will be dead space in your binary.
|
||||||
|
|
||||||
|
You can reclaim that space with `FORGET _` which will rewind to before we
|
||||||
|
defined our initialization routine (see xcomp.fs).
|
||||||
|
|
||||||
|
However, that is not enough. If you only do that, there will be a conflict
|
||||||
|
between the rdln input buffer and your `HERE` space! So we need to go put that
|
||||||
|
input buffer somewhere else first. Therefore, your commands will be:
|
||||||
|
|
||||||
|
500 ALLOT RDLN$ FORGET _
|
||||||
|
|
||||||
|
### Create hook entry
|
||||||
|
|
||||||
|
That one is easy:
|
||||||
|
|
||||||
|
(entry) _
|
||||||
|
|
||||||
|
### Update LATEST
|
||||||
|
|
||||||
|
At this point, both `HERE` and `CURRENT` point to your future `LATEST`.
|
||||||
|
|
||||||
|
H@ 0x08 BIN+ !
|
||||||
|
|
||||||
|
Done.
|
||||||
|
|
||||||
|
### Write down initialization code
|
||||||
|
|
||||||
|
You'll do something similar to what we do in xcomp, except you'll have to add
|
||||||
|
"HERE rewinding" code because by default, `HERE` starts at RAMSTART+0x80. So:
|
||||||
|
|
||||||
|
," CURRENT @ HERE ! (ok) RDLN$ "
|
||||||
|
|
||||||
|
As soon as `RDLN$` is called, the `C<` pointer changes and gives control to
|
||||||
|
keyboard, giving us our full forth interpreter.
|
||||||
|
|
||||||
|
### Write memory to floppy
|
||||||
|
|
||||||
|
What you currently have in memory is gold. You want that on floppy. First, run
|
||||||
|
`H@ .X` to know your upper bound (and `0 BIN+ .X` to know your lower one, but
|
||||||
|
you're already supposed to know that one). Then, run `BYE` to return to TRSDOS
|
||||||
|
(the TRSDOS driver overrides `BYE` so that it calls the proper SVC instead of
|
||||||
|
just halting). Then, you can dump memory to floppy as you already did for
|
||||||
|
`RECV`.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
@ -19,5 +19,5 @@ H@ 256 /MOD 2 PC! 2 PC!
|
|||||||
PC ORG @ 8 + !
|
PC ORG @ 8 + !
|
||||||
," CURRENT @ HERE ! "
|
," CURRENT @ HERE ! "
|
||||||
422 463 XPACKR ( core cmp print parse readln fmt )
|
422 463 XPACKR ( core cmp print parse readln fmt )
|
||||||
," : INIT CURRENT @ HERE ! RDLN$ (ok) INTERPRET ; INIT "
|
," : _ RDLN$ (ok) ; _ "
|
||||||
H@ 256 /MOD 2 PC! 2 PC!
|
H@ 256 /MOD 2 PC! 2 PC!
|
||||||
|
Loading…
Reference in New Issue
Block a user