collapseos/recipes/sms/romasm/glue.asm

167 lines
2.5 KiB
NASM
Raw Normal View History

2019-07-21 15:37:03 -04:00
; 8K of onboard RAM
.equ RAMSTART 0xc000
.equ USER_RAMSTART 0xc200
2019-07-21 15:37:03 -04:00
; Memory register at the end of RAM. Must not overwrite
.equ RAMEND 0xddd0
jp init
; *** JUMP TABLE ***
jp strncmp
jp upcase
jp findchar
jp parseHex
jp parseHexPair
jp blkSel
jp blkSet
jp fsFindFN
jp fsOpen
jp fsGetB
jp fsPutB
2019-07-21 15:37:03 -04:00
jp fsSetSize
jp parseArgs
jp printstr
jp _blkGetB
jp _blkPutB
2019-07-21 15:37:03 -04:00
jp _blkSeek
jp _blkTell
jp printcrlf
jp stdioPutC
jp stdioReadLine
.fill 0x66-$
retn
.inc "err.h"
.inc "ascii.h"
.inc "blkdev.h"
.inc "fs.h"
.inc "core.asm"
.inc "str.asm"
2019-07-21 15:37:03 -04:00
.inc "sms/kbd.asm"
2019-07-21 15:37:03 -04:00
.equ KBD_RAMSTART RAMSTART
.equ KBD_FETCHKC smskbdFetchKCB
.inc "kbd.asm"
2019-07-21 15:37:03 -04:00
.equ VDP_RAMSTART KBD_RAMEND
.inc "sms/vdp.asm"
2019-07-21 15:37:03 -04:00
.equ STDIO_RAMSTART VDP_RAMEND
.equ STDIO_GETC kbdGetC
.equ STDIO_PUTC vdpPutC
.inc "stdio.asm"
2019-07-21 15:37:03 -04:00
.equ MMAP_START 0xd700
; 0x180 is to leave some space for the stack
.equ MMAP_LEN RAMEND-MMAP_START-0x180
.inc "mmap.asm"
2019-07-21 15:37:03 -04:00
.equ BLOCKDEV_RAMSTART STDIO_RAMEND
.equ BLOCKDEV_COUNT 3
.inc "blockdev.asm"
2019-07-21 15:37:03 -04:00
; List of devices
.dw mmapGetB, mmapPutB
.dw f0GetB, f0PutB
.dw f1GetB, f1PutB
2019-07-21 15:37:03 -04:00
.equ FS_RAMSTART BLOCKDEV_RAMEND
.equ FS_HANDLE_COUNT 2
.inc "fs.asm"
2019-07-21 15:37:03 -04:00
; *** Shell ***
.inc "lib/util.asm"
.inc "lib/parse.asm"
.inc "lib/args.asm"
.inc "lib/stdio.asm"
2019-07-21 15:37:03 -04:00
.equ SHELL_RAMSTART FS_RAMEND
.equ SHELL_EXTRA_CMD_COUNT 10
.inc "shell/main.asm"
.dw edCmd, zasmCmd, fnewCmd, fdelCmd, fopnCmd, flsCmd, blkBselCmd
2019-07-21 15:37:03 -04:00
.dw blkSeekCmd, blkLoadCmd, blkSaveCmd
.inc "shell/blkdev.asm"
.inc "shell/fs.asm"
.equ PGM_RAMSTART SHELL_RAMEND
.equ PGM_CODEADDR USER_RAMSTART
.inc "shell/pgm.asm"
.out PGM_RAMEND
2019-07-21 15:37:03 -04:00
init:
di
im 1
ld sp, RAMEND
; init a FS in mmap
ld hl, MMAP_START
ld a, 'C'
ld (hl), a
inc hl
ld a, 'F'
ld (hl), a
inc hl
ld a, 'S'
ld (hl), a
2019-07-21 15:37:03 -04:00
call fsInit
xor a
ld de, BLOCKDEV_SEL
2019-07-21 15:37:03 -04:00
call blkSel
call fsOn
2019-07-21 15:37:03 -04:00
call kbdInit
call vdpInit
call shellInit
ld hl, pgmShellHook
ld (SHELL_CMDHOOK), hl
2019-07-21 15:37:03 -04:00
jp shellLoop
f0GetB:
2019-07-21 15:37:03 -04:00
ld ix, FS_HANDLES
jp fsGetB
2019-07-21 15:37:03 -04:00
f0PutB:
2019-07-21 15:37:03 -04:00
ld ix, FS_HANDLES
jp fsPutB
2019-07-21 15:37:03 -04:00
f1GetB:
2019-07-21 15:37:03 -04:00
ld ix, FS_HANDLES+FS_HANDLE_SIZE
jp fsGetB
2019-07-21 15:37:03 -04:00
f1PutB:
2019-07-21 15:37:03 -04:00
ld ix, FS_HANDLES+FS_HANDLE_SIZE
jp fsPutB
2019-07-21 15:37:03 -04:00
edCmd:
.db "ed", 0, 0, 0b1001, 0, 0
2019-07-21 15:37:03 -04:00
push hl \ pop ix
ld l, (ix)
ld h, (ix+1)
jp 0x1900
2019-07-21 15:37:03 -04:00
zasmCmd:
.db "zasm", 0b1001, 0, 0
push hl \ pop ix
ld l, (ix)
ld h, (ix+1)
jp 0x1d00
2019-07-21 15:37:03 -04:00
; last time I checked, PC at this point was 0x183c. Let's give us a nice margin
2019-07-21 15:37:03 -04:00
; for the start of ed.
.fill 0x1900-$
2019-07-21 15:37:03 -04:00
.bin "ed.bin"
; Last check: 0x1c4e
.fill 0x1d00-$
2019-07-21 15:37:03 -04:00
.bin "zasm.bin"
.fill 0x7ff0-$
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c