mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-27 15:18:05 +11:00
rc2014/ps2: update recipe to Forth's Collapse OS
This commit is contained in:
parent
e9e3bd80f6
commit
b06cf09754
@ -1,27 +0,0 @@
|
|||||||
PROGNAME = ps2ctl
|
|
||||||
AVRDUDEMCU ?= t45
|
|
||||||
AVRDUDEARGS ?= -c usbtiny -P usb
|
|
||||||
TARGETS = $(PROGNAME).hex os.bin
|
|
||||||
BASEDIR = ../../..
|
|
||||||
ZASM = $(BASEDIR)/emul/zasm/zasm
|
|
||||||
KERNEL = $(BASEDIR)/kernel
|
|
||||||
APPS = $(BASEDIR)/apps
|
|
||||||
|
|
||||||
# Rules
|
|
||||||
|
|
||||||
.PHONY: send all clean
|
|
||||||
|
|
||||||
all: $(TARGETS)
|
|
||||||
@echo Done!
|
|
||||||
|
|
||||||
send: $(PROGNAME).hex
|
|
||||||
avrdude $(AVRDUDEARGS) -p $(AVRDUDEMCU) -U flash:w:$(PROGNAME).hex
|
|
||||||
|
|
||||||
$(PROGNAME).hex: $(PROGNAME).asm
|
|
||||||
avra -o $@ $(PROGNAME).asm
|
|
||||||
|
|
||||||
os.bin: glue.asm
|
|
||||||
$(ZASM) $(KERNEL) $(APPS) < glue.asm > $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(TARGETS) *.eep.hex *.obj os.bin
|
|
@ -61,10 +61,23 @@ probably have gone the flip-flop way. Seems more solid.
|
|||||||
|
|
||||||
## Using the PS/2 interface
|
## Using the PS/2 interface
|
||||||
|
|
||||||
After having built and flashed the `glue.asm` supplied with this recipe, you end
|
To use this interface, you have to build a new Collapse OS binary. We'll use
|
||||||
up with a shell driven by the PS/2 keyboard (but it still outputs to ACIA).
|
the xcomp unit from the base recipe and modify it.
|
||||||
|
|
||||||
There are still a few glitches, especially at initialization or at connect and
|
First, we need a `(ps2kc)` routine. In this case, it's easy, it's
|
||||||
disconnect, but it otherwise works rather well!
|
`: (ps2kc) 8 PC@ ;`. Add this after ACIA loading. Then, we can load PS/2
|
||||||
|
subsystem. You add `411 414 LOADR`. Then, at initialization, you add `PS2$`
|
||||||
|
after `ACIA$`. You also need to define `PS2_MEM` at the top. You can probably
|
||||||
|
use `RAMSTART + 0x7a`.
|
||||||
|
|
||||||
|
Rebuild, reflash, should work. For debugging purposes, you might not want to
|
||||||
|
go straight to plugging PS/2 `(key)` into the system. What I did myself was
|
||||||
|
to load the PS/2 subsystem *before* ACIA (which overrides with its own `(key)`)
|
||||||
|
and added a dummy word in between to access PS/2's key.
|
||||||
|
|
||||||
|
Also (and this is a TODO: investigate), I had a problem where the break key I
|
||||||
|
got from `(ps2kc)` was 0x70 instead of 0xf0 which had the effect of duplicating
|
||||||
|
all my keystrokes. I added a 0x70 -> 0xf0 replacement in my version of
|
||||||
|
`(ps2kc)`. Does the trick (at the cost of a non-functional numpad 0).
|
||||||
|
|
||||||
[avra]: https://github.com/hsoft/avra
|
[avra]: https://github.com/hsoft/avra
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
.equ RAMSTART 0x8000
|
|
||||||
.equ RAMEND 0xffff
|
|
||||||
.equ ACIA_CTL 0x80 ; Control and status. RS off.
|
|
||||||
.equ ACIA_IO 0x81 ; Transmit. RS on.
|
|
||||||
.equ KBD_PORT 0x08
|
|
||||||
|
|
||||||
jp init
|
|
||||||
|
|
||||||
.inc "err.h"
|
|
||||||
.inc "ascii.h"
|
|
||||||
.inc "core.asm"
|
|
||||||
.inc "str.asm"
|
|
||||||
.equ ACIA_RAMSTART RAMSTART
|
|
||||||
.inc "acia.asm"
|
|
||||||
|
|
||||||
.equ KBD_RAMSTART ACIA_RAMEND
|
|
||||||
.inc "kbd.asm"
|
|
||||||
|
|
||||||
.equ STDIO_RAMSTART KBD_RAMEND
|
|
||||||
.equ STDIO_GETC kbdGetC
|
|
||||||
.equ STDIO_PUTC aciaPutC
|
|
||||||
.inc "stdio.asm"
|
|
||||||
|
|
||||||
; *** BASIC ***
|
|
||||||
|
|
||||||
; RAM space used in different routines for short term processing.
|
|
||||||
.equ SCRATCHPAD_SIZE STDIO_BUFSIZE
|
|
||||||
.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
|
|
||||||
ld sp, RAMEND
|
|
||||||
im 1
|
|
||||||
|
|
||||||
call aciaInit
|
|
||||||
call kbdInit
|
|
||||||
call basInit
|
|
||||||
ei
|
|
||||||
jp basStart
|
|
||||||
|
|
||||||
KBD_FETCHKC:
|
|
||||||
in a, (KBD_PORT)
|
|
||||||
ret
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user