1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-20 18:38:05 +11:00

recipes/sms: use BASIC shell

This commit is contained in:
Virgil Dupras 2019-12-02 20:18:41 -05:00
parent 66dacd1816
commit 270ad926c9
6 changed files with 97 additions and 62 deletions

View File

@ -37,7 +37,7 @@ thing!
## Usage ## Usage
On boot, you will get a regular Collapse OS shell. See the rest of the On boot, you will get a regular Collapse OS BASIC shell. See the rest of the
documentation for shell usage instructions. documentation for shell usage instructions.
The particularity here is that, unlike with the RC2014, we don't access Collapse The particularity here is that, unlike with the RC2014, we don't access Collapse

View File

@ -24,14 +24,26 @@
.equ STDIO_PUTC vdpPutC .equ STDIO_PUTC vdpPutC
.inc "stdio.asm" .inc "stdio.asm"
; *** Shell *** ; *** BASIC ***
; RAM space used in different routines for short term processing.
.equ SCRATCHPAD_SIZE 0x20
.equ SCRATCHPAD STDIO_RAMEND
.inc "lib/util.asm" .inc "lib/util.asm"
.inc "lib/ari.asm"
.inc "lib/parse.asm" .inc "lib/parse.asm"
.inc "lib/args.asm" .inc "lib/fmt.asm"
.inc "lib/stdio.asm" .equ EXPR_PARSE parseLiteralOrVar
.equ SHELL_RAMSTART STDIO_RAMEND .inc "lib/expr.asm"
.equ SHELL_EXTRA_CMD_COUNT 0 .inc "basic/util.asm"
.inc "shell/main.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: init:
di di
@ -41,8 +53,8 @@ init:
call padInit call padInit
call vdpInit call vdpInit
call shellInit call basInit
jp shellLoop jp basStart
.fill 0x7ff0-$ .fill 0x7ff0-$
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c

View File

@ -26,14 +26,26 @@
.equ STDIO_PUTC vdpPutC .equ STDIO_PUTC vdpPutC
.inc "stdio.asm" .inc "stdio.asm"
; *** Shell *** ; *** BASIC ***
; RAM space used in different routines for short term processing.
.equ SCRATCHPAD_SIZE 0x20
.equ SCRATCHPAD STDIO_RAMEND
.inc "lib/util.asm" .inc "lib/util.asm"
.inc "lib/ari.asm"
.inc "lib/parse.asm" .inc "lib/parse.asm"
.inc "lib/args.asm" .inc "lib/fmt.asm"
.inc "lib/stdio.asm" .equ EXPR_PARSE parseLiteralOrVar
.equ SHELL_RAMSTART STDIO_RAMEND .inc "lib/expr.asm"
.equ SHELL_EXTRA_CMD_COUNT 0 .inc "basic/util.asm"
.inc "shell/main.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: init:
di di
@ -53,8 +65,8 @@ init:
call kbdInit call kbdInit
call vdpInit call vdpInit
call shellInit call basInit
jp shellLoop jp basStart
.fill 0x7ff0-$ .fill 0x7ff0-$
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c

View File

@ -1,6 +1,11 @@
; 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...
; 8K of onboard RAM ; 8K of onboard RAM
.equ RAMSTART 0xc000 .equ RAMSTART 0xc000
.equ USER_RAMSTART 0xc200 .equ USER_CODE 0xd500
; Memory register at the end of RAM. Must not overwrite ; Memory register at the end of RAM. Must not overwrite
.equ RAMEND 0xddd0 .equ RAMEND 0xddd0
@ -19,7 +24,6 @@
jp fsGetB jp fsGetB
jp fsPutB jp fsPutB
jp fsSetSize jp fsSetSize
jp parseArgs
jp printstr jp printstr
jp _blkGetB jp _blkGetB
jp _blkPutB jp _blkPutB
@ -70,25 +74,32 @@
.equ FS_HANDLE_COUNT 2 .equ FS_HANDLE_COUNT 2
.inc "fs.asm" .inc "fs.asm"
; *** Shell *** ; *** BASIC ***
; RAM space used in different routines for short term processing.
.equ SCRATCHPAD_SIZE 0x20
.equ SCRATCHPAD FS_RAMEND
.inc "lib/util.asm" .inc "lib/util.asm"
.inc "lib/ari.asm"
.inc "lib/parse.asm" .inc "lib/parse.asm"
.inc "lib/args.asm" .inc "lib/fmt.asm"
.inc "lib/stdio.asm" .equ EXPR_PARSE parseLiteralOrVar
.equ SHELL_RAMSTART FS_RAMEND .inc "lib/expr.asm"
.equ SHELL_EXTRA_CMD_COUNT 10 .inc "basic/util.asm"
.inc "shell/main.asm" .inc "basic/parse.asm"
.dw edCmd, zasmCmd, fnewCmd, fdelCmd, fopnCmd, flsCmd, blkBselCmd .inc "basic/tok.asm"
.dw blkSeekCmd, blkLoadCmd, blkSaveCmd .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"
.inc "shell/blkdev.asm" ; USER_CODE is set according to this output below.
.inc "shell/fs.asm" .out BAS_RAMEND
.equ PGM_RAMSTART SHELL_RAMEND
.equ PGM_CODEADDR USER_RAMSTART
.inc "shell/pgm.asm"
.out PGM_RAMEND
init: init:
di di
@ -116,10 +127,27 @@ init:
call kbdInit call kbdInit
call vdpInit call vdpInit
call shellInit call basInit
ld hl, pgmShellHook ld hl, basFindCmdExtra
ld (SHELL_CMDHOOK), hl ld (BAS_FINDHOOK), hl
jp shellLoop 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
f0GetB: f0GetB:
ld ix, FS_HANDLES ld ix, FS_HANDLES
@ -137,30 +165,14 @@ f1PutB:
ld ix, FS_HANDLES+FS_HANDLE_SIZE ld ix, FS_HANDLES+FS_HANDLE_SIZE
jp fsPutB jp fsPutB
edCmd: ; last time I checked, PC at this point was 0x1df8. Let's give us a nice margin
.db "ed", 0, 0, 0b1001, 0, 0
push hl \ pop ix
ld l, (ix)
ld h, (ix+1)
jp 0x1900
zasmCmd:
.db "zasm", 0b1001, 0, 0
push hl \ pop ix
ld l, (ix)
ld h, (ix+1)
jp 0x1d00
; last time I checked, PC at this point was 0x183c. Let's give us a nice margin
; for the start of ed. ; for the start of ed.
.fill 0x1900-$ .fill 0x1e00-$
.bin "ed.bin" .bin "ed.bin"
; Last check: 0x1c4e ; Last check: 0x22dd
.fill 0x1d00-$ .fill 0x2300-$
.bin "zasm.bin" .bin "zasm.bin"
.fill 0x7ff0-$ .fill 0x7ff0-$
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c

View File

@ -1,4 +1,4 @@
.equ USER_RAMSTART 0xc200 .equ USER_CODE 0xc200
; Make ed fit in SMS's memory ; Make ed fit in SMS's memory
.equ ED_BUF_MAXLINES 0x100 .equ ED_BUF_MAXLINES 0x100
.equ ED_BUF_PADMAXLEN 0x800 .equ ED_BUF_PADMAXLEN 0x800
@ -22,7 +22,6 @@
.equ fsGetB @+3 .equ fsGetB @+3
.equ fsPutB @+3 .equ fsPutB @+3
.equ fsSetSize @+3 .equ fsSetSize @+3
.equ parseArgs @+3
.equ printstr @+3 .equ printstr @+3
.equ _blkGetB @+3 .equ _blkGetB @+3
.equ _blkPutB @+3 .equ _blkPutB @+3

View File

@ -54,7 +54,7 @@ static int inpt_size;
static int inpt_ptr; static int inpt_ptr;
static uint8_t middle_of_seek_tell = 0; static uint8_t middle_of_seek_tell = 0;
static uint8_t fsdev[0x40000] = {0}; static uint8_t fsdev[0x80000] = {0};
static uint32_t fsdev_size = 0; static uint32_t fsdev_size = 0;
static uint32_t fsdev_ptr = 0; static uint32_t fsdev_ptr = 0;
static uint8_t fsdev_seek_tell_cnt = 0; static uint8_t fsdev_seek_tell_cnt = 0;