blockdev: protect IX in routines

Sure, it's a bit slower, but it prevents a lot of hard to debug
problems. I don't have to want to remember "don't use IX if you
have any blk* calls". Let's optimize I/O later.
This commit is contained in:
Virgil Dupras 2019-07-14 12:17:13 -04:00
parent 3b0029335a
commit 797cbdcc95

View File

@ -125,7 +125,11 @@ _blkInc:
; 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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkGetC
pop ix
ret
_blkGetC: _blkGetC:
push hl push hl
push de push de
@ -138,7 +142,11 @@ _blkGetC:
; 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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkPutC
pop ix
ret
_blkPutC: _blkPutC:
push ix push ix
push hl push hl
@ -155,7 +163,11 @@ _blkPutC:
; 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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkRead
pop ix
ret
_blkRead: _blkRead:
push hl push hl
push bc push bc
@ -174,7 +186,11 @@ _blkRead:
; 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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkWrite
pop ix
ret
_blkWrite: _blkWrite:
push hl push hl
push bc push bc
@ -207,7 +223,11 @@ _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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkSeek
pop ix
ret
_blkSeek: _blkSeek:
cp BLOCKDEV_SEEK_FORWARD cp BLOCKDEV_SEEK_FORWARD
jr z, .forward jr z, .forward
@ -275,7 +295,11 @@ _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:
push ix
ld ix, BLOCKDEV_SEL ld ix, BLOCKDEV_SEL
call _blkTell
pop ix
ret
_blkTell: _blkTell:
ld e, (ix+4) ld e, (ix+4)
ld d, (ix+5) ld d, (ix+5)