mirror of
https://github.com/hsoft/collapseos.git
synced 2024-12-25 04:48:06 +11:00
recipes/rc2014/basic: new recipe
This commit is contained in:
parent
b7d4860acf
commit
aad8efeff7
@ -27,6 +27,7 @@ are other recipes related to the RC2014:
|
||||
* [Accessing a MicroSD card](sdcard/README.md)
|
||||
* [Assembling binaries](zasm/README.md)
|
||||
* [Interfacing a PS/2 keyboard](ps2/README.md)
|
||||
* [Replace shell by a BASIC interpreter](basic/README.md)
|
||||
|
||||
## Recipe
|
||||
|
||||
|
10
recipes/rc2014/basic/Makefile
Normal file
10
recipes/rc2014/basic/Makefile
Normal file
@ -0,0 +1,10 @@
|
||||
TARGET = os.bin
|
||||
ZASM = ../../../tools/zasm.sh
|
||||
KERNEL = ../../../kernel
|
||||
APPS = ../../../apps
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
$(TARGET): glue.asm
|
||||
$(ZASM) $(KERNEL) $(APPS) < $< > $@
|
||||
|
46
recipes/rc2014/basic/README.md
Normal file
46
recipes/rc2014/basic/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
# BASIC as a shell
|
||||
|
||||
This recipe demonstrate the replacement of the usual shell with the BASIC
|
||||
interpreter supplied in Collapse OS. To make things fun, we play with I/Os
|
||||
using RC2014's Digital I/O module.
|
||||
|
||||
## Gathering parts
|
||||
|
||||
* Same parts as in the base recipe
|
||||
* (Optional) RC2014's Digital I/O module
|
||||
|
||||
The Digital I/O module is only used in the example BASIC code. If you don't
|
||||
have the module, just use BASIC in another fashion.
|
||||
|
||||
## Build the image
|
||||
|
||||
As usual, building `os.bin` is a matter of running `make`. Then, you can get
|
||||
that image to your EEPROM like you did in the base recipe.
|
||||
|
||||
## Usage
|
||||
|
||||
Upon boot, you'll directy be in a BASIC prompt. See documentation in
|
||||
`apps/basic/README.md` for details.
|
||||
|
||||
For now, let's have some fun with the Digital I/O module. Type this:
|
||||
|
||||
```
|
||||
> a=0
|
||||
> 10 out 0 a
|
||||
> 20 sleep 0xffff
|
||||
> 30 a=a+1
|
||||
> 40 goto 10
|
||||
> run
|
||||
```
|
||||
|
||||
You now have your Digital I/O lights doing a pretty dance, forever.
|
||||
|
||||
## Looking at the glue code
|
||||
|
||||
If you look at the glue code, you'll see that it's very similar to the one in
|
||||
the base recipe, except that the shell includes have been replaced by the basic
|
||||
includes. Those includes have been copy/pasted from `apps/basic/glue.asm` and
|
||||
`USER_RAMSTART` has been replaced with `STDIO_RAMEND` so that BASIC's memory
|
||||
gets placed properly (that is, right after the kernel's memory).
|
||||
|
||||
Simple, isn't it?
|
56
recipes/rc2014/basic/glue.asm
Normal file
56
recipes/rc2014/basic/glue.asm
Normal file
@ -0,0 +1,56 @@
|
||||
.equ RAMSTART 0x8000
|
||||
.equ RAMEND 0xffff
|
||||
.equ ACIA_CTL 0x80 ; Control and status. RS off.
|
||||
.equ ACIA_IO 0x81 ; Transmit. RS on.
|
||||
.equ DIGIT_IO 0x00 ; digital I/O's port
|
||||
|
||||
jp init
|
||||
|
||||
; interrupt hook
|
||||
.fill 0x38-$
|
||||
jp aciaInt
|
||||
|
||||
.inc "err.h"
|
||||
.inc "ascii.h"
|
||||
.inc "core.asm"
|
||||
.inc "str.asm"
|
||||
.equ ACIA_RAMSTART RAMSTART
|
||||
.inc "acia.asm"
|
||||
|
||||
.equ STDIO_RAMSTART ACIA_RAMEND
|
||||
.equ STDIO_GETC aciaGetC
|
||||
.equ STDIO_PUTC aciaPutC
|
||||
.inc "stdio.asm"
|
||||
|
||||
; *** BASIC ***
|
||||
|
||||
; RAM space used in different routines for short term processing.
|
||||
.equ SCRATCHPAD_SIZE 0x20
|
||||
.equ SCRATCHPAD STDIO_RAMEND
|
||||
.inc "lib/util.asm"
|
||||
.inc "lib/ari.asm"
|
||||
.inc "lib/parse.asm"
|
||||
.inc "lib/fmt.asm"
|
||||
.equ EXPR_PARSE parseLiteralOrVar
|
||||
.inc "lib/expr.asm"
|
||||
.inc "basic/util.asm"
|
||||
.inc "basic/parse.asm"
|
||||
.inc "basic/tok.asm"
|
||||
.equ VAR_RAMSTART SCRATCHPAD+SCRATCHPAD_SIZE
|
||||
.inc "basic/var.asm"
|
||||
.equ BUF_RAMSTART VAR_RAMEND
|
||||
.inc "basic/buf.asm"
|
||||
.equ BAS_RAMSTART BUF_RAMEND
|
||||
.inc "basic/main.asm"
|
||||
|
||||
init:
|
||||
di
|
||||
; setup stack
|
||||
ld sp, RAMEND
|
||||
im 1
|
||||
|
||||
call aciaInit
|
||||
ei
|
||||
jp basStart
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user