Browse Source

blockdev: fix load command over-loading a byte

Calling `load` would always read one more byte than specified. Also,
make `0` mean `0x100`.
pull/10/head
Virgil Dupras 5 years ago
parent
commit
8cf9904f33
1 changed files with 9 additions and 6 deletions
  1. +9
    -6
      kernel/blockdev_cmds.asm

+ 9
- 6
kernel/blockdev_cmds.asm View File

@@ -44,9 +44,10 @@ blkSeekCmd:
xor a
ret

; Load the specified number of bytes (max 0xff) from IO and write them in the
; current memory pointer (which doesn't change). If the blkdev hits end of
; stream before we reach our specified number of bytes, we stop loading.
; Load the specified number of bytes (max 0x100, 0 means 0x100) from IO and
; write them in the current memory pointer (which doesn't change). If the
; blkdev hits end of stream before we reach our specified number of bytes, we
; stop loading.
;
; Returns a SHELL_ERR_IO_ERROR only if we couldn't read any byte (if the first
; call to GetC failed)
@@ -63,11 +64,13 @@ blkLoad:
ld hl, (SHELL_MEM_PTR)
call blkGetC
jr nz, .ioError
jr .intoLoop ; properly dec B + check on first iteration.
.loop:
ld (hl), a
inc hl
call blkGetC
jr nz, .loopend
.intoLoop:
djnz .loop
.loopend:
; success
@@ -80,9 +83,9 @@ blkLoad:
pop bc
ret

; Load the specified number of bytes (max 0xff) from the current memory pointer
; and write them to I/O. Memory pointer doesn't move. This puts chars to
; blkPutC. Raises error if not all bytes could be written.
; Load the specified number of bytes (max 0x100, 0 means 0x100) from the current
; memory pointer and write them to I/O. Memory pointer doesn't move. This puts
; chars to blkPutC. Raises error if not all bytes could be written.
;
; Example: save 42
blkSaveCmd:


Loading…
Cancel
Save