blockdev: make "seek" print out its resulting position
Also, extract commands into blockdev_cmds to avoid making blockdev dependent on stdio.
This commit is contained in:
parent
5071ee9f40
commit
f87cd0485a
@ -44,19 +44,6 @@ blkSel:
|
|||||||
pop af
|
pop af
|
||||||
ret
|
ret
|
||||||
|
|
||||||
blkBselCmd:
|
|
||||||
.db "bsel", 0b001, 0, 0
|
|
||||||
ld a, (hl) ; argument supplied
|
|
||||||
cp BLOCKDEV_COUNT
|
|
||||||
jr nc, .error ; if selection >= device count, error
|
|
||||||
call blkSel
|
|
||||||
xor a
|
|
||||||
ret
|
|
||||||
.error:
|
|
||||||
ld a, BLOCKDEV_ERR_OUT_OF_BOUNDS
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; In those routines below, IY is destroyed (we don't push it to the stack). We
|
; In those routines below, IY is destroyed (we don't push it to the stack). We
|
||||||
; seldom use it anyways...
|
; seldom use it anyways...
|
||||||
|
|
||||||
@ -137,26 +124,12 @@ blkPutC:
|
|||||||
ld iyl, 2
|
ld iyl, 2
|
||||||
jr _blkCall
|
jr _blkCall
|
||||||
|
|
||||||
; Seeks the block device in one of 5 modes, which is the first argument:
|
; Seeks the block device in one of 5 modes, which is the A argument:
|
||||||
; 0 : Move exactly to X, X being the second argument.
|
; 0 : Move exactly to X, X being the HL argument.
|
||||||
; 1 : Move forward by X bytes, X being the second argument
|
; 1 : Move forward by X bytes, X being the HL argument
|
||||||
; 2 : Move backwards by X bytes, X being the second argument
|
; 2 : Move backwards by X bytes, X being the HL argument
|
||||||
; 3 : Move to the end
|
; 3 : Move to the end
|
||||||
; 4 : Move to the beginning
|
; 4 : Move to the beginning
|
||||||
blkSeekCmd:
|
|
||||||
.db "seek", 0b001, 0b011, 0b001
|
|
||||||
; First, the mode
|
|
||||||
ld a, (hl)
|
|
||||||
inc hl
|
|
||||||
; 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
|
|
||||||
; Set position of selected device to the value specified in HL
|
; Set position of selected device to the value specified in HL
|
||||||
blkSeek:
|
blkSeek:
|
||||||
ld iyl, 4
|
ld iyl, 4
|
||||||
|
43
parts/blockdev_cmds.asm
Normal file
43
parts/blockdev_cmds.asm
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
; *** 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
|
||||||
|
call blkSel
|
||||||
|
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
|
||||||
|
call blkSeek
|
||||||
|
ld hl, 42
|
||||||
|
call blkTell
|
||||||
|
ld a, h
|
||||||
|
call printHex
|
||||||
|
ld a, l
|
||||||
|
call printHex
|
||||||
|
call printcrlf
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
Loading…
Reference in New Issue
Block a user