Also, remove `parts/platforms`. It makes no sense. Only recipes make sense.pull/10/head
@@ -1,5 +0,0 @@ | |||||
# platforms | |||||
This is a collection of include files that set platform-specific constants | |||||
that different parts use. When assembling your own OS, pick the platform include | |||||
that is closest to yours and adapt it to your machine. |
@@ -1,7 +0,0 @@ | |||||
; classic RC2014 setup (8K ROM + 32K RAM) and a stock Serial I/O module | |||||
; The RAM module is selected on A15, so it has the range 0x8000-0xffff | |||||
RAMSTART .equ 0x8000 | |||||
RAMEND .equ 0xffff | |||||
ACIA_CTL .equ 0x80 ; Control and status. RS off. | |||||
ACIA_IO .equ 0x81 ; Transmit. RS on. |
@@ -37,40 +37,9 @@ device I use in this recipe. | |||||
* [GNU screen][screen] | * [GNU screen][screen] | ||||
* A FTDI-to-TTL cable to connect to the Serial I/O module of the RC2014 | * A FTDI-to-TTL cable to connect to the Serial I/O module of the RC2014 | ||||
### Write main.asm | |||||
### Write glue.asm | |||||
This is what your glue code would look like: | |||||
``` | |||||
#include "platforms/rc2014.inc" | |||||
jr init | |||||
.fill 0x38-$ | |||||
jp aciaInt | |||||
init: | |||||
di | |||||
; setup stack | |||||
ld hl, RAMEND | |||||
ld sp, hl | |||||
im 1 | |||||
call aciaInit | |||||
call shellInit | |||||
ei | |||||
call shellLoop | |||||
#include "core.asm" | |||||
ACIA_RAMSTART .equ RAMSTART | |||||
#include "acia.asm" | |||||
SHELL_RAMSTART .equ ACIA_RAMEND | |||||
.define SHELL_GETC call aciaGetC | |||||
.define SHELL_PUTC call aciaPutC | |||||
#include "shell.asm" | |||||
``` | |||||
[This is what your glue code would look like.](glue.asm) | |||||
The `platform.inc` include is there to load all platform-specific constants | The `platform.inc` include is there to load all platform-specific constants | ||||
(such as `RAMSTART` and `RAMEND`). | (such as `RAMSTART` and `RAMEND`). | ||||
@@ -99,7 +68,7 @@ is decoupled from the ACIA and can get its IO from anything. See | |||||
We only have the shell to build, so it's rather straightforward: | We only have the shell to build, so it's rather straightforward: | ||||
scas -I /path/to/parts -o rom.bin main.asm | |||||
scas -I /path/to/parts -o rom.bin glue.asm | |||||
### Write to the ROM | ### Write to the ROM | ||||
@@ -0,0 +1,33 @@ | |||||
; classic RC2014 setup (8K ROM + 32K RAM) and a stock Serial I/O module | |||||
; The RAM module is selected on A15, so it has the range 0x8000-0xffff | |||||
RAMSTART .equ 0x8000 | |||||
RAMEND .equ 0xffff | |||||
ACIA_CTL .equ 0x80 ; Control and status. RS off. | |||||
ACIA_IO .equ 0x81 ; Transmit. RS on. | |||||
jr init | |||||
; interrupt hook | |||||
.fill 0x38-$ | |||||
jp aciaInt | |||||
init: | |||||
di | |||||
; setup stack | |||||
ld hl, RAMEND | |||||
ld sp, hl | |||||
im 1 | |||||
call aciaInit | |||||
call shellInit | |||||
ei | |||||
jp shellLoop | |||||
#include "core.asm" | |||||
ACIA_RAMSTART .equ RAMSTART | |||||
#include "acia.asm" | |||||
SHELL_RAMSTART .equ ACIA_RAMEND | |||||
.define SHELL_GETC call aciaGetC | |||||
.define SHELL_PUTC call aciaPutC | |||||
.define SHELL_IO_GETC call aciaGetC | |||||
SHELL_EXTRA_CMD_COUNT .equ 0 | |||||
#include "shell.asm" |