basic: add bsel, bseek, getb, putb commands
This commit is contained in:
parent
8f1d942e5f
commit
12bc120375
@ -165,6 +165,31 @@ Then, there's the *special stuff*. This is the list of things you can query for:
|
|||||||
As explained in "glueing" section abolve, this folder contains optional modules.
|
As explained in "glueing" section abolve, this folder contains optional modules.
|
||||||
Here's the documentation for them.
|
Here's the documentation for them.
|
||||||
|
|
||||||
|
### blk
|
||||||
|
|
||||||
|
Block devices commands. Block devices are configured during kernel
|
||||||
|
initialization and are referred to by numbers.
|
||||||
|
|
||||||
|
**bsel**: Select the active block device. The active block device is the target
|
||||||
|
of all commands below. You select it by specifying its number. For example,
|
||||||
|
`bsel 0` selects the first configured device. `bsel 1` selects the second.
|
||||||
|
|
||||||
|
A freshly selected blkdev begins with its "pointer" at 0.
|
||||||
|
|
||||||
|
**seek**: Moves the blkdev "pointer" to the specified offset. The first
|
||||||
|
argument is the offset's least significant half (blkdev supports 32-bit
|
||||||
|
addressing). Is is interpreted as an unsigned integer.
|
||||||
|
|
||||||
|
The second argument is optional and is the most significant half of the address.
|
||||||
|
It defaults to 0.
|
||||||
|
|
||||||
|
**getb**: Read a byte in active blkdev at current pointer, then advance the
|
||||||
|
pointer by one. Read byte goes in `A`.
|
||||||
|
|
||||||
|
**putb**: Writes a byte in active blkdev at current pointer, then advance the
|
||||||
|
pointer by one. The value of the byte is determined by the expression supplied
|
||||||
|
as an argument. Example: `putb 42`.
|
||||||
|
|
||||||
### fs
|
### fs
|
||||||
|
|
||||||
`fs.asm` provides those commands:
|
`fs.asm` provides those commands:
|
||||||
|
47
apps/basic/blk.asm
Normal file
47
apps/basic/blk.asm
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
basBSEL:
|
||||||
|
call rdExpr
|
||||||
|
ret nz
|
||||||
|
push ix \ pop hl
|
||||||
|
call blkSelPtr
|
||||||
|
ld a, l
|
||||||
|
jp blkSel
|
||||||
|
|
||||||
|
basBSEEK:
|
||||||
|
call rdExpr
|
||||||
|
ret nz
|
||||||
|
push ix ; --> lvl 1
|
||||||
|
call rdExpr
|
||||||
|
push ix \ pop de
|
||||||
|
pop hl ; <-- lvl 1
|
||||||
|
jr z, .skip
|
||||||
|
; DE not supplied, set to zero
|
||||||
|
ld de, 0
|
||||||
|
.skip:
|
||||||
|
xor a ; absolute mode
|
||||||
|
call blkSeek
|
||||||
|
cp a ; ensure Z
|
||||||
|
ret
|
||||||
|
|
||||||
|
basGETB:
|
||||||
|
call blkGetB
|
||||||
|
ret nz
|
||||||
|
ld (VAR_TBL), a
|
||||||
|
ret
|
||||||
|
|
||||||
|
basPUTB:
|
||||||
|
call rdExpr
|
||||||
|
ret nz
|
||||||
|
push ix \ pop hl
|
||||||
|
ld a, l
|
||||||
|
jp blkPutB
|
||||||
|
|
||||||
|
basBLKCmds:
|
||||||
|
.dw basBSEL
|
||||||
|
.db "bsel", 0, 0
|
||||||
|
.dw basBSEEK
|
||||||
|
.db "bseek", 0
|
||||||
|
.dw basGETB
|
||||||
|
.db "getb", 0, 0
|
||||||
|
.dw basPUTB
|
||||||
|
.db "putb", 0, 0
|
||||||
|
.db 0xff, 0xff, 0xff ; end of table
|
@ -86,6 +86,7 @@
|
|||||||
.inc "basic/buf.asm"
|
.inc "basic/buf.asm"
|
||||||
.equ BFS_RAMSTART BUF_RAMEND
|
.equ BFS_RAMSTART BUF_RAMEND
|
||||||
.inc "basic/fs.asm"
|
.inc "basic/fs.asm"
|
||||||
|
.inc "basic/blk.asm"
|
||||||
.equ BAS_RAMSTART BFS_RAMEND
|
.equ BAS_RAMSTART BFS_RAMEND
|
||||||
.inc "basic/main.asm"
|
.inc "basic/main.asm"
|
||||||
|
|
||||||
@ -105,6 +106,9 @@ init:
|
|||||||
|
|
||||||
basFindCmdExtra:
|
basFindCmdExtra:
|
||||||
ld hl, basFSCmds
|
ld hl, basFSCmds
|
||||||
|
call basFindCmd
|
||||||
|
ret z
|
||||||
|
ld hl, basBLKCmds
|
||||||
jp basFindCmd
|
jp basFindCmd
|
||||||
|
|
||||||
emulGetC:
|
emulGetC:
|
||||||
|
Loading…
Reference in New Issue
Block a user