1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-30 20:48:06 +11:00

blockdev: make selection structure opaque

I'm about to change that structure and I don't want fs to be messed up
by this. I'm proceeding step by step...
This commit is contained in:
Virgil Dupras 2019-06-04 09:56:36 -04:00
parent c85ed474d7
commit 63473cc2e3
8 changed files with 27 additions and 24 deletions

View File

@ -26,7 +26,7 @@ look like:
im 1 im 1
call aciaInit call aciaInit
xor a xor a
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
call stdioInit call stdioInit
call shellInit call shellInit

View File

@ -59,15 +59,12 @@
; Pointer to the selected block device. A block device is a 8 bytes block of ; Pointer to the selected block device. A block device is a 8 bytes block of
; memory with pointers to GetC, PutC, Seek and Tell routines, in that order. ; memory with pointers to GetC, PutC, Seek and Tell routines, in that order.
; 0 means unsupported. ; 0 means unsupported.
.equ BLOCKDEV_GETC BLOCKDEV_RAMSTART .equ BLOCKDEV_SEL BLOCKDEV_RAMSTART
.equ BLOCKDEV_PUTC BLOCKDEV_GETC+2 .equ BLOCKDEV_RAMEND BLOCKDEV_SEL+8
.equ BLOCKDEV_SEEK BLOCKDEV_PUTC+2
.equ BLOCKDEV_TELL BLOCKDEV_SEEK+2
.equ BLOCKDEV_RAMEND BLOCKDEV_TELL+2
; *** CODE *** ; *** CODE ***
; Select block index specified in A and place them in routine pointers at (DE). ; Select block index specified in A and place them in routine pointers at (DE).
; For example, for a "regular" blkSel, you will want to set DE to BLOCKDEV_GETC. ; For example, for a "regular" blkSel, you will want to set DE to BLOCKDEV_SEL.
blkSel: blkSel:
push af push af
push de push de
@ -120,13 +117,13 @@ blkSel:
; Sets Z according to whether read was successful: Set if successful, unset ; Sets Z according to whether read was successful: Set if successful, unset
; if not. ; if not.
blkGetC: blkGetC:
ld ix, (BLOCKDEV_GETC) ld ix, (BLOCKDEV_SEL)
jp (ix) jp (ix)
; Reads B chars from blkGetC and copy them in (HL). ; Reads B chars from blkGetC and copy them in (HL).
; Sets Z if successful, unset Z if there was an error. ; Sets Z if successful, unset Z if there was an error.
blkRead: blkRead:
ld ix, (BLOCKDEV_GETC) ld ix, (BLOCKDEV_SEL)
_blkRead: _blkRead:
push hl push hl
push bc push bc
@ -145,16 +142,20 @@ _blkRead:
; Writes character in A in current position in the selected device. Sets Z ; Writes character in A in current position in the selected device. Sets Z
; according to whether the operation was successful. ; according to whether the operation was successful.
blkPutC: blkPutC:
ld ix, (BLOCKDEV_PUTC) ld ix, (BLOCKDEV_SEL+2)
jp (ix) jp (ix)
; Writes B chars to blkPutC from (HL). ; Writes B chars to blkPutC from (HL).
; Sets Z if successful, unset Z if there was an error. ; Sets Z if successful, unset Z if there was an error.
blkWrite: blkWrite:
ld ix, (BLOCKDEV_PUTC) ld ix, (BLOCKDEV_SEL)
_blkWrite: _blkWrite:
push ix
push hl push hl
push bc push bc
; make IX point to PutC
inc ix
inc ix
.loop: .loop:
ld a, (hl) ld a, (hl)
call callIX call callIX
@ -165,6 +166,7 @@ _blkWrite:
.end: .end:
pop bc pop bc
pop hl pop hl
pop ix
ret ret
; Seeks the block device in one of 5 modes, which is the A argument: ; Seeks the block device in one of 5 modes, which is the A argument:
@ -184,8 +186,8 @@ _blkWrite:
; If the device is "growable", it's possible that seeking to end when calling ; If the device is "growable", it's possible that seeking to end when calling
; PutC doesn't necessarily result in a failure. ; PutC doesn't necessarily result in a failure.
blkSeek: blkSeek:
ld ix, (BLOCKDEV_SEEK) ld ix, (BLOCKDEV_SEL+4)
ld iy, (BLOCKDEV_TELL) ld iy, (BLOCKDEV_SEL+6)
_blkSeek: _blkSeek:
; we preserve DE so that it's possible to call blkSeek in mode != 0 ; we preserve DE so that it's possible to call blkSeek in mode != 0
; while not discarding our current DE value. ; while not discarding our current DE value.
@ -234,7 +236,7 @@ _blkSeek:
; Returns the current position of the selected device in HL (low) and DE (high). ; Returns the current position of the selected device in HL (low) and DE (high).
blkTell: blkTell:
ld de, 0 ; in case device ignores DE. ld de, 0 ; in case device ignores DE.
ld ix, (BLOCKDEV_TELL) ld ix, (BLOCKDEV_SEL+6)
jp (ix) jp (ix)
; This label is at the end of the file on purpose: the glue file should include ; This label is at the end of the file on purpose: the glue file should include

View File

@ -8,7 +8,7 @@ blkBselCmd:
cp BLOCKDEV_COUNT cp BLOCKDEV_COUNT
jr nc, .error ; if selection >= device count, error jr nc, .error ; if selection >= device count, error
push de push de
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
pop de pop de
xor a xor a

View File

@ -369,7 +369,7 @@ fsblkPutC:
fsblkWrite: fsblkWrite:
push ix push ix
ld ix, (FS_PUTC) ld ix, (FS_GETC) ; we have to point to blkdev's beginning
call _blkWrite call _blkWrite
pop ix pop ix
ret ret
@ -523,7 +523,7 @@ fsOn:
push bc push bc
; We have to set blkdev routines early before knowing whether the ; We have to set blkdev routines early before knowing whether the
; mounting succeeds because methods like fsReadMeta uses fsblk* methods. ; mounting succeeds because methods like fsReadMeta uses fsblk* methods.
ld hl, BLOCKDEV_GETC ld hl, BLOCKDEV_SEL
ld de, FS_GETC ld de, FS_GETC
ld bc, 8 ; we have 8 bytes to copy ld bc, 8 ; we have 8 bytes to copy
ldir ; copy! ldir ; copy!

View File

@ -72,7 +72,7 @@ init:
ld (SHELL_CMDHOOK), hl ld (SHELL_CMDHOOK), hl
xor a xor a
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
ei ei

View File

@ -99,7 +99,7 @@ init:
ld (SHELL_CMDHOOK), hl ld (SHELL_CMDHOOK), hl
xor a xor a
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
ei ei

View File

@ -47,7 +47,6 @@
.dw stdinGetC, stdinPutC, stdinSeek, stdinTell .dw stdinGetC, stdinPutC, stdinSeek, stdinTell
.dw mmapGetC, mmapPutC, mmapSeek, mmapTell .dw mmapGetC, mmapPutC, mmapSeek, mmapTell
#include "blockdev_cmds.asm"
.equ MMAP_RAMSTART BLOCKDEV_RAMEND .equ MMAP_RAMSTART BLOCKDEV_RAMEND
.equ MMAP_START 0xe000 .equ MMAP_START 0xe000
@ -59,7 +58,6 @@
.equ FS_RAMSTART STDIO_RAMEND .equ FS_RAMSTART STDIO_RAMEND
.equ FS_HANDLE_COUNT 2 .equ FS_HANDLE_COUNT 2
#include "fs.asm" #include "fs.asm"
#include "fs_cmds.asm"
.equ SHELL_RAMSTART FS_RAMEND .equ SHELL_RAMSTART FS_RAMEND
.equ SHELL_EXTRA_CMD_COUNT 9 .equ SHELL_EXTRA_CMD_COUNT 9
@ -67,11 +65,14 @@
.dw blkBselCmd, blkSeekCmd, blkLoadCmd, blkSaveCmd .dw blkBselCmd, blkSeekCmd, blkLoadCmd, blkSaveCmd
.dw fsOnCmd, flsCmd, fnewCmd, fdelCmd, fopnCmd .dw fsOnCmd, flsCmd, fnewCmd, fdelCmd, fopnCmd
#include "blockdev_cmds.asm"
#include "fs_cmds.asm"
.equ PGM_RAMSTART SHELL_RAMEND .equ PGM_RAMSTART SHELL_RAMEND
.equ PGM_CODEADDR USERCODE .equ PGM_CODEADDR USERCODE
#include "pgm.asm" #include "pgm.asm"
.out PGM_RAMEND ;.out PGM_RAMEND
init: init:
di di
@ -84,7 +85,7 @@ init:
call mmapInit call mmapInit
call fsInit call fsInit
ld a, 0 ; select fsdev ld a, 0 ; select fsdev
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
call fsOn call fsOn
call shellInit call shellInit

View File

@ -49,7 +49,7 @@ init:
ld hl, 0xffff ld hl, 0xffff
ld sp, hl ld sp, hl
ld a, 2 ; select fsdev ld a, 2 ; select fsdev
ld de, BLOCKDEV_GETC ld de, BLOCKDEV_SEL
call blkSel call blkSel
call fsOn call fsOn
ld hl, .zasmArgs ld hl, .zasmArgs