mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-24 03:08:06 +11:00
We can now assemble source files from within the shell!
This commit is contained in:
parent
839ba91312
commit
082fa3431d
@ -11,3 +11,4 @@
|
|||||||
* [Load code in RAM and run it](load-run-code.md)
|
* [Load code in RAM and run it](load-run-code.md)
|
||||||
* [Using block devices](blockdev.md)
|
* [Using block devices](blockdev.md)
|
||||||
* [Using the filesystem](fs.md)
|
* [Using the filesystem](fs.md)
|
||||||
|
* [Assembling z80 source from the shell](zasm.md)
|
||||||
|
31
doc/zasm.md
Normal file
31
doc/zasm.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Assembling z80 source from the shell
|
||||||
|
|
||||||
|
In its current state, Collapse OS has all you need to assemble z80 source
|
||||||
|
from within the shell. What you need is:
|
||||||
|
|
||||||
|
* A mounted filesystem with `zasm` on it.
|
||||||
|
* A block device to read from (can be a file from mounted CFS)
|
||||||
|
* A block device to write to (can theoretically be a file, but technical
|
||||||
|
limitations temporary prevents us that. We'll use a mmap for now).
|
||||||
|
|
||||||
|
The emulated shell is already set up with all you need. If you want to run that
|
||||||
|
on a real machine, you'll have to make sure to provide these requirements.
|
||||||
|
|
||||||
|
The emulated shell has a `hello.asm` file in its mounted filesystem that is
|
||||||
|
ready to compile. It has two file handles 0 and 1, mapped to blk IDs 1 and 2.
|
||||||
|
We only use file handle 0 (blk ID 1) and then tell zasm to output to mmap which
|
||||||
|
is configured to start at `0xe00`
|
||||||
|
|
||||||
|
Collapse OS
|
||||||
|
> fopn 0 hello.asm ; open file in handle 0
|
||||||
|
> zasm 1 3 ; assemble opened file and spit result in mmap
|
||||||
|
> bsel 3 ; select mmap
|
||||||
|
> peek 5
|
||||||
|
210890CD3C ; looking good
|
||||||
|
> mptr 9000 ; hello.asm is configured to run from 0x9000
|
||||||
|
> load ff ; load compiled code from mmap
|
||||||
|
> peek 5
|
||||||
|
210890CD3C ; looking good
|
||||||
|
> call 00 0000
|
||||||
|
Assembled from the shell
|
||||||
|
> ; Awesome!
|
@ -1,7 +1,9 @@
|
|||||||
; named shell_.asm to avoid infinite include loop.
|
; named shell_.asm to avoid infinite include loop.
|
||||||
.equ RAMSTART 0x4000
|
.equ RAMSTART 0x4000
|
||||||
.equ KERNEL_RAMEND 0x5000
|
; kernel ram is well under 0x100 bytes. We're giving us 0x200 bytes so that we
|
||||||
.equ USERCODE 0x9000
|
; never worry about the stack.
|
||||||
|
.equ KERNEL_RAMEND 0x4200
|
||||||
|
.equ USERCODE KERNEL_RAMEND
|
||||||
.equ STDIO_PORT 0x00
|
.equ STDIO_PORT 0x00
|
||||||
.equ FS_DATA_PORT 0x01
|
.equ FS_DATA_PORT 0x01
|
||||||
.equ FS_SEEKL_PORT 0x02
|
.equ FS_SEEKL_PORT 0x02
|
||||||
@ -37,16 +39,21 @@
|
|||||||
#include "parse.asm"
|
#include "parse.asm"
|
||||||
|
|
||||||
.equ BLOCKDEV_RAMSTART RAMSTART
|
.equ BLOCKDEV_RAMSTART RAMSTART
|
||||||
.equ BLOCKDEV_COUNT 3
|
.equ BLOCKDEV_COUNT 4
|
||||||
#include "blockdev.asm"
|
#include "blockdev.asm"
|
||||||
; List of devices
|
; List of devices
|
||||||
.dw fsdevGetC, fsdevPutC, fsdevSeek, fsdevTell
|
.dw fsdevGetC, fsdevPutC, fsdevSeek, fsdevTell
|
||||||
.dw stdoutGetC, stdoutPutC, stdoutSeek, stdoutTell
|
.dw stdoutGetC, stdoutPutC, stdoutSeek, stdoutTell
|
||||||
.dw stdinGetC, stdinPutC, stdinSeek, stdinTell
|
.dw stdinGetC, stdinPutC, stdinSeek, stdinTell
|
||||||
|
.dw mmapGetC, mmapPutC, mmapSeek, mmapTell
|
||||||
|
|
||||||
#include "blockdev_cmds.asm"
|
#include "blockdev_cmds.asm"
|
||||||
|
|
||||||
.equ STDIO_RAMSTART BLOCKDEV_RAMEND
|
.equ MMAP_RAMSTART BLOCKDEV_RAMEND
|
||||||
|
.equ MMAP_START 0xe000
|
||||||
|
#include "mmap.asm"
|
||||||
|
|
||||||
|
.equ STDIO_RAMSTART MMAP_RAMEND
|
||||||
#include "stdio.asm"
|
#include "stdio.asm"
|
||||||
|
|
||||||
.equ FS_RAMSTART STDIO_RAMEND
|
.equ FS_RAMSTART STDIO_RAMEND
|
||||||
@ -64,6 +71,8 @@
|
|||||||
.equ PGM_CODEADDR USERCODE
|
.equ PGM_CODEADDR USERCODE
|
||||||
#include "pgm.asm"
|
#include "pgm.asm"
|
||||||
|
|
||||||
|
.out PGM_RAMEND
|
||||||
|
|
||||||
init:
|
init:
|
||||||
di
|
di
|
||||||
; setup stack
|
; setup stack
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.equ USER_CODE 0x9000
|
.equ USER_CODE 0x4200
|
||||||
.equ USER_RAMSTART 0xa800
|
.equ USER_RAMSTART USER_CODE+0x1800
|
||||||
.equ FS_HANDLE_SIZE 8
|
.equ FS_HANDLE_SIZE 8
|
||||||
|
|
||||||
; *** JUMP TABLE ***
|
; *** JUMP TABLE ***
|
||||||
|
Loading…
Reference in New Issue
Block a user