collapseos/recipes/sms/romasm/glue.asm

167 lines
2.4 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 addDE
jp addHL
jp upcase
jp unsetZ
jp intoDE
jp intoHL
jp writeHLinDE
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 cpHLDE
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 "core.asm"
.inc "parse.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
.equ SHELL_RAMSTART FS_RAMEND
.equ SHELL_EXTRA_CMD_COUNT 10
.inc "shell.asm"
.dw edCmd, zasmCmd, fnewCmd, fdelCmd, fopnCmd, flsCmd, blkBselCmd
2019-07-21 15:37:03 -04:00
.dw blkSeekCmd, blkLoadCmd, blkSaveCmd
.inc "blockdev_cmds.asm"
.inc "fs_cmds.asm"
.equ PGM_RAMSTART SHELL_RAMEND
.equ PGM_CODEADDR USER_RAMSTART
.inc "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