mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-27 12:08:07 +11:00
basic: can now execute user apps!
Shell replacement sequence beginning in 3, 2, 1...
This commit is contained in:
parent
b29073b01d
commit
7c893dada1
@ -227,3 +227,9 @@ device (bseek, getb, putb).
|
|||||||
**ldbas <fname>**: loads the content of the file specified in the argument
|
**ldbas <fname>**: loads the content of the file specified in the argument
|
||||||
(as an unquoted filename) and replace the current code listing with this
|
(as an unquoted filename) and replace the current code listing with this
|
||||||
contents. Any line not starting with a number is ignored (not an error).
|
contents. Any line not starting with a number is ignored (not an error).
|
||||||
|
|
||||||
|
**basPgmHook**: That is not a command, but a routine to hook into
|
||||||
|
`BAS_FINDHOOK`. If you do, whenever a command name isn't found, the filesystem
|
||||||
|
is iterated to see if it finds a file with the same name. If it does, it loads
|
||||||
|
its contents at `USER_CODE` (from `user.h`) and calls that address, with HL
|
||||||
|
pointing to the the remaining args in the command line.
|
||||||
|
@ -77,6 +77,29 @@ basFOPEN:
|
|||||||
push de \ pop ix ; IX now points to the file handle.
|
push de \ pop ix ; IX now points to the file handle.
|
||||||
jp fsOpen
|
jp fsOpen
|
||||||
|
|
||||||
|
basPgmHook:
|
||||||
|
; Cmd to find is in (DE)
|
||||||
|
ex de, hl
|
||||||
|
; (HL) is suitable for a direct fsFindFN call
|
||||||
|
call fsFindFN
|
||||||
|
ret nz
|
||||||
|
; We have a file! Let's load it in memory
|
||||||
|
ld ix, BFS_FILE_HDL
|
||||||
|
call fsOpen
|
||||||
|
ld hl, 0 ; addr that we read in file handle
|
||||||
|
ld de, USER_CODE ; addr in mem we write to
|
||||||
|
.loop:
|
||||||
|
call fsGetB ; we use Z at end of loop
|
||||||
|
ld (de), a ; Z preserved
|
||||||
|
inc hl ; Z preserved in 16-bit
|
||||||
|
inc de ; Z preserved in 16-bit
|
||||||
|
jr z, .loop
|
||||||
|
; Ready to jump. Return USER_CODE in IX and basCallCmd will take care
|
||||||
|
; of setting (HL) to the arg string.
|
||||||
|
ld ix, USER_CODE
|
||||||
|
cp a ; ensure Z
|
||||||
|
ret
|
||||||
|
|
||||||
basFSCmds:
|
basFSCmds:
|
||||||
.dw basFLS
|
.dw basFLS
|
||||||
.db "fls", 0, 0, 0
|
.db "fls", 0, 0, 0
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
.inc "err.h"
|
.inc "err.h"
|
||||||
.inc "ascii.h"
|
.inc "ascii.h"
|
||||||
.equ RAMSTART 0x4000
|
.equ RAMSTART 0x4000
|
||||||
|
.equ USER_CODE 0x4200
|
||||||
.equ STDIO_PORT 0x00
|
.equ STDIO_PORT 0x00
|
||||||
.equ FS_DATA_PORT 0x01
|
.equ FS_DATA_PORT 0x01
|
||||||
.equ FS_ADDR_PORT 0x02
|
.equ FS_ADDR_PORT 0x02
|
||||||
@ -109,7 +110,9 @@ basFindCmdExtra:
|
|||||||
call basFindCmd
|
call basFindCmd
|
||||||
ret z
|
ret z
|
||||||
ld hl, basBLKCmds
|
ld hl, basBLKCmds
|
||||||
jp basFindCmd
|
call basFindCmd
|
||||||
|
ret z
|
||||||
|
jp basPgmHook
|
||||||
|
|
||||||
emulGetC:
|
emulGetC:
|
||||||
; Blocks until a char is returned
|
; Blocks until a char is returned
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.equ SHELL_RAMSTART 0x4100
|
.equ SHELL_RAMSTART 0x4100
|
||||||
.equ USER_CODE 0x4200
|
.equ USER_CODE 0x4200 ; in sync with glue.asm
|
||||||
|
|
||||||
; *** JUMP TABLE ***
|
; *** JUMP TABLE ***
|
||||||
.equ strncmp 0x03
|
.equ strncmp 0x03
|
||||||
|
Loading…
Reference in New Issue
Block a user