|
- ; *** REQUIREMENTS ***
- ; blockdev
- ; stdio
-
- blkBselCmd:
- .db "bsel", 0b001, 0, 0
- ld a, (hl) ; argument supplied
- cp BLOCKDEV_COUNT
- jr nc, .error ; if selection >= device count, error
- push de
- ld de, BLOCKDEV_SEL
- call blkSel
- pop de
- xor a
- ret
- .error:
- ld a, BLOCKDEV_ERR_OUT_OF_BOUNDS
- ret
-
- blkSeekCmd:
- .db "seek", 0b001, 0b011, 0b001
- ; First, the mode
- ld a, (hl)
- inc hl
- push af ; save mode for later
- ; HL points to two bytes that contain out address. Seek expects HL
- ; to directly contain that address.
- ld a, (hl)
- ex af, af'
- inc hl
- ld a, (hl)
- ld l, a
- ex af, af'
- ld h, a
- pop af ; bring mode back
- ld de, 0 ; DE is used for seek > 64K which we don't support
- call blkSeek
- call blkTell
- ld a, h
- call printHex
- ld a, l
- call printHex
- call printcrlf
- xor a
- ret
-
- ; 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)
- ;
- ; Example: load 42
- blkLoadCmd:
- .db "load", 0b001, 0, 0
- blkLoad:
- push bc
- push hl
-
- ld a, (hl)
- ld b, a
- ld hl, (SHELL_MEM_PTR)
- call blkGetC
- jr nz, .ioError
- jr .intoLoop ; we'v already called blkGetC. don't call it
- ; again.
- .loop:
- call blkGetC
- .intoLoop:
- ld (hl), a
- inc hl
- jr nz, .loopend
- djnz .loop
- .loopend:
- ; success
- xor a
- jr .end
- .ioError:
- ld a, SHELL_ERR_IO_ERROR
- .end:
- pop hl
- pop bc
- ret
-
- ; 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:
- .db "save", 0b001, 0, 0
- blkSave:
- push bc
- push hl
-
- ld a, (hl)
- ld b, a
- ld hl, (SHELL_MEM_PTR)
- .loop:
- ld a, (hl)
- inc hl
- call blkPutC
- jr nz, .ioError
- djnz .loop
- .loopend:
- ; success
- xor a
- jr .end
- .ioError:
- ld a, SHELL_ERR_IO_ERROR
- .end:
- pop hl
- pop bc
- ret
|