mirror of
https://github.com/hsoft/collapseos.git
synced 2024-09-07 08:28:45 +10:00
Most of register fiddling routines (which is now the only thing contained in care.asm) are used by almost all userspace apps, often in inner loops. That makes the penalty of using jump tables for those a bit too high. Moreover, it burdens jump tables needlessly. Because this unit is very small (now that string routines are out), it makes sense to always include it in binaries.
75 lines
1.2 KiB
NASM
75 lines
1.2 KiB
NASM
; 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
|
|
.equ RAMSTART 0x8000
|
|
.equ RAMEND 0xffff
|
|
.equ ACIA_CTL 0x80 ; Control and status. RS off.
|
|
.equ ACIA_IO 0x81 ; Transmit. RS on.
|
|
|
|
jp init
|
|
|
|
; interrupt hook
|
|
.fill 0x38-$
|
|
jp aciaInt
|
|
|
|
.inc "err.h"
|
|
.inc "ascii.h"
|
|
.inc "core.asm"
|
|
.inc "str.asm"
|
|
.inc "parse.asm"
|
|
.equ ACIA_RAMSTART RAMSTART
|
|
.inc "acia.asm"
|
|
|
|
.equ MMAP_START 0xd000
|
|
.inc "mmap.asm"
|
|
|
|
.equ BLOCKDEV_RAMSTART ACIA_RAMEND
|
|
.equ BLOCKDEV_COUNT 1
|
|
.inc "blockdev.asm"
|
|
; List of devices
|
|
.dw mmapGetB, mmapPutB
|
|
|
|
.equ STDIO_RAMSTART BLOCKDEV_RAMEND
|
|
.equ STDIO_GETC aciaGetC
|
|
.equ STDIO_PUTC aciaPutC
|
|
.inc "stdio.asm"
|
|
|
|
.equ AT28W_RAMSTART STDIO_RAMEND
|
|
.inc "at28w/main.asm"
|
|
|
|
.equ SHELL_RAMSTART AT28W_RAMEND
|
|
.equ SHELL_EXTRA_CMD_COUNT 5
|
|
.inc "shell.asm"
|
|
; Extra cmds
|
|
.dw a28wCmd
|
|
.dw blkBselCmd, blkSeekCmd, blkLoadCmd, blkSaveCmd
|
|
|
|
.inc "blockdev_cmds.asm"
|
|
|
|
init:
|
|
di
|
|
; setup stack
|
|
ld hl, RAMEND
|
|
ld sp, hl
|
|
im 1
|
|
|
|
call aciaInit
|
|
call shellInit
|
|
|
|
xor a
|
|
ld de, BLOCKDEV_SEL
|
|
call blkSel
|
|
|
|
ei
|
|
jp shellLoop
|
|
|
|
a28wCmd:
|
|
.db "a28w", 0b011, 0b001, 0
|
|
ld a, (hl)
|
|
ld (AT28W_MAXBYTES), a
|
|
inc hl
|
|
ld a, (hl)
|
|
ld (AT28W_MAXBYTES+1), a
|
|
jp at28wInner
|
|
|
|
|