1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-21 04:18:06 +11:00
collapseos/recipes/sms/romasm/glue.asm

180 lines
3.0 KiB
NASM
Raw Normal View History

2019-12-03 12:18:41 +11:00
; TODO: This recipe has not been tested since its conversion to the BASIC shell.
; My PS/2 adapter has been acting up and probably has a loose wire. I need to
; fix it beore I can test this recipe on real hardware.
; But theoretically, it works...
2019-07-22 05:37:03 +10:00
; 8K of onboard RAM
.equ RAMSTART 0xc000
2019-12-03 12:18:41 +11:00
.equ USER_CODE 0xd500
2019-07-22 05:37:03 +10: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-22 05:37:03 +10:00
jp fsSetSize
jp printstr
jp _blkGetB
jp _blkPutB
2019-07-22 05:37:03 +10: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-22 05:37:03 +10:00
.inc "sms/kbd.asm"
2019-07-22 05:37:03 +10:00
.equ KBD_RAMSTART RAMSTART
.equ KBD_FETCHKC smskbdFetchKCB
.inc "kbd.asm"
2019-07-22 05:37:03 +10:00
.equ VDP_RAMSTART KBD_RAMEND
.inc "sms/vdp.asm"
2019-07-22 05:37:03 +10:00
.equ STDIO_RAMSTART VDP_RAMEND
.equ STDIO_GETC kbdGetC
.equ STDIO_PUTC vdpPutC
.inc "stdio.asm"
2019-07-22 05:37:03 +10: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-22 05:37:03 +10:00
.equ BLOCKDEV_RAMSTART STDIO_RAMEND
.equ BLOCKDEV_COUNT 3
.inc "blockdev.asm"
2019-07-22 05:37:03 +10:00
; List of devices
.dw mmapGetB, mmapPutB
.dw f0GetB, f0PutB
.dw f1GetB, f1PutB
2019-07-22 05:37:03 +10:00
.equ FS_RAMSTART BLOCKDEV_RAMEND
.equ FS_HANDLE_COUNT 2
.inc "fs.asm"
2019-07-22 05:37:03 +10:00
2019-12-03 12:18:41 +11:00
; *** BASIC ***
; RAM space used in different routines for short term processing.
.equ SCRATCHPAD_SIZE 0x20
.equ SCRATCHPAD FS_RAMEND
.inc "lib/util.asm"
2019-12-03 12:18:41 +11:00
.inc "lib/ari.asm"
.inc "lib/parse.asm"
2019-12-03 12:18:41 +11:00
.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 BFS_RAMSTART BUF_RAMEND
.inc "basic/fs.asm"
.inc "basic/blk.asm"
.equ BAS_RAMSTART BFS_RAMEND
.inc "basic/main.asm"
; USER_CODE is set according to this output below.
.out BAS_RAMEND
2019-07-22 05:37:03 +10: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-22 05:37:03 +10:00
call fsInit
xor a
ld de, BLOCKDEV_SEL
2019-07-22 05:37:03 +10:00
call blkSel
call fsOn
2019-07-22 05:37:03 +10:00
call kbdInit
call vdpInit
2019-12-03 12:18:41 +11:00
call basInit
ld hl, basFindCmdExtra
ld (BAS_FINDHOOK), hl
jp basStart
basFindCmdExtra:
ld hl, basFSCmds
call basFindCmd
ret z
ld hl, basBLKCmds
call basFindCmd
ret z
ld hl, .mycmds
call basFindCmd
ret z
jp basPgmHook
.mycmds:
.db "ed", 0
.dw 0x1e00
.db "zasm", 0
.dw 0x2300
.db 0xff
2019-07-22 05:37:03 +10:00
f0GetB:
2019-07-22 05:37:03 +10:00
ld ix, FS_HANDLES
jp fsGetB
2019-07-22 05:37:03 +10:00
f0PutB:
2019-07-22 05:37:03 +10:00
ld ix, FS_HANDLES
jp fsPutB
2019-07-22 05:37:03 +10:00
f1GetB:
2019-07-22 05:37:03 +10:00
ld ix, FS_HANDLES+FS_HANDLE_SIZE
jp fsGetB
2019-07-22 05:37:03 +10:00
f1PutB:
2019-07-22 05:37:03 +10:00
ld ix, FS_HANDLES+FS_HANDLE_SIZE
jp fsPutB
2019-07-22 05:37:03 +10:00
2019-12-03 12:18:41 +11:00
; last time I checked, PC at this point was 0x1df8. Let's give us a nice margin
2019-07-22 05:37:03 +10:00
; for the start of ed.
2019-12-03 12:18:41 +11:00
.fill 0x1e00-$
2019-07-22 05:37:03 +10:00
.bin "ed.bin"
2019-12-03 12:18:41 +11:00
; Last check: 0x22dd
.fill 0x2300-$
2019-07-22 05:37:03 +10:00
.bin "zasm.bin"
.fill 0x7ff0-$
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c