Browse Source

recipes/trs80: can now run zasm!

pull/94/head
Virgil Dupras 4 years ago
parent
commit
c3213e1e8c
6 changed files with 83 additions and 9 deletions
  1. +2
    -0
      recipes/trs80/.gitignore
  2. +21
    -1
      recipes/trs80/Makefile
  3. +17
    -7
      recipes/trs80/README.md
  4. +11
    -0
      recipes/trs80/cfsin/hello.asm
  5. +18
    -1
      recipes/trs80/glue.asm
  6. +14
    -0
      recipes/trs80/user.h

+ 2
- 0
recipes/trs80/.gitignore View File

@@ -0,0 +1,2 @@
/cfsin/user.h
/cfsin/zasm

+ 21
- 1
recipes/trs80/Makefile View File

@@ -1,10 +1,30 @@
SHELLAPPS = zasm
APPTARGETS = ${SHELLAPPS:%=cfsin/%}
CFSTARGETS = $(APPTARGETS) cfsin/user.h
TARGET = os.bin
BASEDIR = ../..
ZASM = $(BASEDIR)/emul/zasm/zasm
KERNEL = $(BASEDIR)/kernel
APPS = $(BASEDIR)/apps
CFSPACK = $(BASEDIR)/tools/cfspack/cfspack

.PHONY: all
all: $(TARGET)
all: $(TARGET) floppy.cfs
$(TARGET): glue.asm
$(ZASM) $(KERNEL) $(APPS) < glue.asm > $@

$(CFSPACK):
make -C $(BASEDIR)/tools/cfspack

floppy.cfs: $(CFSTARGETS) $(CFSPACK)
$(CFSPACK) cfsin > $@

$(APPTARGETS):
$(ZASM) $(KERNEL) $(APPS) user.h < $(APPS)/${@:cfsin/%=%}/glue.asm > $@

cfsin/user.h: user.h
cp user.h $@

.PHONY: clean
clean:
rm -f $(CFSTARGETS) floppy.cfs $(TARGET)

+ 17
- 7
recipes/trs80/README.md View File

@@ -102,20 +102,20 @@ As stated in the overview, we need a program on the TRS-80 that:
That program has already been written, it's in `recv.asm` in this folder. You
can get the binary with `zasm < recv.asm | xxd`.

It's designed to run from offset `0x4000` and write received data in `0x3000`
It's designed to run from offset `0x5000` and write received data in `0x3000`
and onwards.

How will you punch that in? The `debug` program! This very useful piece of
software is supplied in TRSDOS. To invoke it, first run `debug (on)` and then
press the `BREAK` key. You'll get the debug interface which allows you to punch
in any data in any memory address. Let's use `0x4000` which is the offset it's
in any data in any memory address. Let's use `0x5000` which is the offset it's
designed for.

For reference: to go back to the TRSDOS prompt, it's `o<return>`.

First, display the `0x4000-0x403f` range with the `d4000<space>` command (I
First, display the `0x5000-0x503f` range with the `d5000<space>` command (I
always press Enter by mistake, but it's space you need to press). Then, you can
begin punching in with `h4000<space>`. This will bring up a visual indicator of
begin punching in with `h5000<space>`. This will bring up a visual indicator of
the address being edited. Punch in the stuff with a space in between each byte
and end the edit session with `x`.

@@ -141,10 +141,10 @@ before `02`.

If you want to save yourself typing for later sessions, why not save the
program you've painfully typed to disk? TRSDOS enables that easily. Let's say
that you typed your program at `0x4000` and that you want to save it to
that you typed your program at `0x5000` and that you want to save it to
`RECV/CMD` on your second floppy drive, you'd do:

dump recv/cmd:1 (start=x'4000',end=x'4030',tra='4000')
dump recv/cmd:1 (start=x'5000',end=x'5030',tra='5000')

A memory range dumped this way will be re-loaded at the same offset through
`load recv/cmd:1`. Even better, `TRA` indicates when to jump after load when
@@ -158,7 +158,7 @@ debugger.
## Sending binary through the RS-232 port

Once you're finished punching your program in memory, you can run it with
`g4000<enter>` (not space). If you've saved it to disk, run `recv` instead.
`g5000<enter>` (not space). If you've saved it to disk, run `recv` instead.
Because it's an infinite loop, your screen will freeze. You can start sending
your data.

@@ -222,3 +222,13 @@ writing `CFS\0\0\0\0` to the disk). If it doesn't error out, commands like
There is also a custom `recv` command that does the same "ping pong" as in
`recv.asm`, but once. It puts the result in `A`. This can be useful to send down
a raw CFS: you just need a while loop that repeatedly call `recv:putb a`.

## Assembling programs

Running `make` will yield a `floppy.cfs` file that you can dump on a disk. This
CFS contains a properly configured `zasm` as well as a test `hello.asm` file.

By mounting this CFS (running `fson` with the active device properly placed),
you can assemble and run a binary from `hello.asm` in the same way that you
would in any CFS-enabled shell. You'll then see those sweet "Assembled from a
TRS-80" words!

+ 11
- 0
recipes/trs80/cfsin/hello.asm View File

@@ -0,0 +1,11 @@
.inc "user.h"

ld hl, sAwesome
call printstr
xor a ; success
ret

sAwesome:
.db "Assembled from a TRS-80", 0x0d, 0



+ 18
- 1
recipes/trs80/glue.asm View File

@@ -9,6 +9,21 @@
.org 0x3000
jp init

; *** Jump Table ***
jp strncmp
jp upcase
jp findchar
jp printstr
jp blkSet
jp blkSel
jp _blkGetB
jp _blkPutB
jp _blkSeek
jp _blkTell
jp fsFindFN
jp fsOpen
jp fsGetB

.inc "err.h"
.inc "blkdev.h"
.inc "fs.h"
@@ -142,7 +157,9 @@ basFindCmdExtra:
call basFindCmd
ret z
ld hl, .cmds
jp basFindCmd
call basFindCmd
ret z
jp basPgmHook

.cmds:
.db "recv", 0


+ 14
- 0
recipes/trs80/user.h View File

@@ -0,0 +1,14 @@
.org 0x5800
.equ strncmp 0x3003
.equ upcase @+3
.equ findchar @+3
.equ printstr @+3
.equ blkSet @+3
.equ blkSel @+3
.equ _blkGetB @+3
.equ _blkPutB @+3
.equ _blkSeek @+3
.equ _blkTell @+3
.equ fsFindFN @+3
.equ fsOpen @+3
.equ fsGetB @+3

Loading…
Cancel
Save