From 270ad926c90a483fb3c22538bd91a18925727440 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 2 Dec 2019 20:18:41 -0500 Subject: [PATCH] recipes/sms: use BASIC shell --- recipes/sms/README.md | 2 +- recipes/sms/glue.asm | 28 +++++++---- recipes/sms/kbd/glue.asm | 28 +++++++---- recipes/sms/romasm/glue.asm | 96 +++++++++++++++++++++---------------- recipes/sms/romasm/user.h | 3 +- tools/emul/zasm/zasm.c | 2 +- 6 files changed, 97 insertions(+), 62 deletions(-) diff --git a/recipes/sms/README.md b/recipes/sms/README.md index 8532257..8b2f26e 100644 --- a/recipes/sms/README.md +++ b/recipes/sms/README.md @@ -37,7 +37,7 @@ thing! ## 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. The particularity here is that, unlike with the RC2014, we don't access Collapse diff --git a/recipes/sms/glue.asm b/recipes/sms/glue.asm index 65fa766..308d6b6 100644 --- a/recipes/sms/glue.asm +++ b/recipes/sms/glue.asm @@ -24,14 +24,26 @@ .equ STDIO_PUTC vdpPutC .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/ari.asm" .inc "lib/parse.asm" -.inc "lib/args.asm" -.inc "lib/stdio.asm" -.equ SHELL_RAMSTART STDIO_RAMEND -.equ SHELL_EXTRA_CMD_COUNT 0 -.inc "shell/main.asm" +.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 BAS_RAMSTART BUF_RAMEND +.inc "basic/main.asm" init: di @@ -41,8 +53,8 @@ init: call padInit call vdpInit - call shellInit - jp shellLoop + call basInit + jp basStart .fill 0x7ff0-$ .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c diff --git a/recipes/sms/kbd/glue.asm b/recipes/sms/kbd/glue.asm index ad283b3..a67e4be 100644 --- a/recipes/sms/kbd/glue.asm +++ b/recipes/sms/kbd/glue.asm @@ -26,14 +26,26 @@ .equ STDIO_PUTC vdpPutC .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/ari.asm" .inc "lib/parse.asm" -.inc "lib/args.asm" -.inc "lib/stdio.asm" -.equ SHELL_RAMSTART STDIO_RAMEND -.equ SHELL_EXTRA_CMD_COUNT 0 -.inc "shell/main.asm" +.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 BAS_RAMSTART BUF_RAMEND +.inc "basic/main.asm" init: di @@ -53,8 +65,8 @@ init: call kbdInit call vdpInit - call shellInit - jp shellLoop + call basInit + jp basStart .fill 0x7ff0-$ .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c diff --git a/recipes/sms/romasm/glue.asm b/recipes/sms/romasm/glue.asm index c0e45a2..e2d3e1e 100644 --- a/recipes/sms/romasm/glue.asm +++ b/recipes/sms/romasm/glue.asm @@ -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 .equ RAMSTART 0xc000 -.equ USER_RAMSTART 0xc200 +.equ USER_CODE 0xd500 ; Memory register at the end of RAM. Must not overwrite .equ RAMEND 0xddd0 @@ -19,7 +24,6 @@ jp fsGetB jp fsPutB jp fsSetSize - jp parseArgs jp printstr jp _blkGetB jp _blkPutB @@ -70,25 +74,32 @@ .equ FS_HANDLE_COUNT 2 .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/ari.asm" .inc "lib/parse.asm" -.inc "lib/args.asm" -.inc "lib/stdio.asm" -.equ SHELL_RAMSTART FS_RAMEND -.equ SHELL_EXTRA_CMD_COUNT 10 -.inc "shell/main.asm" -.dw edCmd, zasmCmd, fnewCmd, fdelCmd, fopnCmd, flsCmd, blkBselCmd -.dw blkSeekCmd, blkLoadCmd, blkSaveCmd +.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" -.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 +; USER_CODE is set according to this output below. +.out BAS_RAMEND init: di @@ -116,10 +127,27 @@ init: call kbdInit call vdpInit - call shellInit - ld hl, pgmShellHook - ld (SHELL_CMDHOOK), hl - jp shellLoop + 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 f0GetB: ld ix, FS_HANDLES @@ -137,30 +165,14 @@ f1PutB: ld ix, FS_HANDLES+FS_HANDLE_SIZE jp fsPutB -edCmd: - .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 +; last time I checked, PC at this point was 0x1df8. Let's give us a nice margin ; for the start of ed. -.fill 0x1900-$ +.fill 0x1e00-$ .bin "ed.bin" -; Last check: 0x1c4e -.fill 0x1d00-$ +; Last check: 0x22dd +.fill 0x2300-$ .bin "zasm.bin" .fill 0x7ff0-$ .db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c - - diff --git a/recipes/sms/romasm/user.h b/recipes/sms/romasm/user.h index 1883e0f..5d7ff7b 100644 --- a/recipes/sms/romasm/user.h +++ b/recipes/sms/romasm/user.h @@ -1,4 +1,4 @@ -.equ USER_RAMSTART 0xc200 +.equ USER_CODE 0xc200 ; Make ed fit in SMS's memory .equ ED_BUF_MAXLINES 0x100 .equ ED_BUF_PADMAXLEN 0x800 @@ -22,7 +22,6 @@ .equ fsGetB @+3 .equ fsPutB @+3 .equ fsSetSize @+3 -.equ parseArgs @+3 .equ printstr @+3 .equ _blkGetB @+3 .equ _blkPutB @+3 diff --git a/tools/emul/zasm/zasm.c b/tools/emul/zasm/zasm.c index af3309c..f65af8f 100644 --- a/tools/emul/zasm/zasm.c +++ b/tools/emul/zasm/zasm.c @@ -54,7 +54,7 @@ static int inpt_size; static int inpt_ptr; 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_ptr = 0; static uint8_t fsdev_seek_tell_cnt = 0;