diff --git a/parts/blockdev.asm b/parts/blockdev.asm index 7c40ee6..43cee7e 100644 --- a/parts/blockdev.asm +++ b/parts/blockdev.asm @@ -132,6 +132,33 @@ blkPutC: ; 4 : Move to the beginning ; Set position of selected device to the value specified in HL blkSeek: + push de + cp 1 + jr z, .forward + cp 2 + jr z, .backward + cp 3 + jr z, .beginning + cp 4 + jr z, .end + ; all other modes are considered absolute + jr .seek ; for absolute mode, HL is already correct +.forward: + ex hl, de ; DE has our offset + call blkTell ; HL has our curpos + add hl, de + jr nc, .seek ; no carry? alright! + ; we have carry? out of bounds, set to maximum +.backward: + ; TODO - subtraction are more complicated... + jr .seek +.beginning: + ld hl, 0 + jr .seek +.end: + ld hl, 0xffff +.seek: + pop de ld iyl, 4 jr _blkCall diff --git a/parts/blockdev_cmds.asm b/parts/blockdev_cmds.asm index 74a1f97..7088417 100644 --- a/parts/blockdev_cmds.asm +++ b/parts/blockdev_cmds.asm @@ -31,7 +31,6 @@ blkSeekCmd: ld h, a pop af ; bring mode back call blkSeek - ld hl, 42 call blkTell ld a, h call printHex diff --git a/parts/mmap.asm b/parts/mmap.asm index 15a3a5a..699660f 100644 --- a/parts/mmap.asm +++ b/parts/mmap.asm @@ -57,32 +57,6 @@ mmapPutC: ret mmapSeek: - cp 1 - jr z, .forward - cp 2 - jr z, .backward - cp 3 - jr z, .beginning - cp 4 - jr z, .end - ; all other modes are considered absolute - jr .set ; for absolute mode, HL is already correct -.forward: - ld de, (MMAP_PTR) - add hl, de - jr nc, .set - ; we have carry? out of bounds, set to maximum - ld hl, 0xffff - jr .set -.backward: - ; TODO - subtraction are more complicated... - jr .set -.beginning: - ld hl, 0 - jr .set -.end: - ld hl, 0xffff-MMAP_START -.set: ld (MMAP_PTR), hl ret