Skip to content

Commit 32e056d

Browse files
fix #175
1 parent 87868e1 commit 32e056d

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

src/fileioc/fileioc.asm

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,9 @@ ti_Write:
492492
add iy, sp
493493
ld c,(iy + 12)
494494
call util_is_slot_open
495-
jr z, util_ret_null_closer
495+
jr z, .ret0
496496
call util_is_in_ram
497-
jr z, util_ret_null_closer
497+
jr z, .ret0
498498
ld bc, (iy + 6)
499499
ld hl, (iy + 9)
500500
call __smulu
@@ -518,7 +518,7 @@ ti_Write:
518518
ld (resize_amount), hl
519519
call util_insert_mem
520520
or a, a
521-
jr z, util_ret_null_closer
521+
jr z, .ret0
522522
.no_core_needed:
523523
call util_get_data_offset
524524
ex de, hl
@@ -535,10 +535,7 @@ ti_Write:
535535
ld (hl), de
536536
ld hl, (iy + 9)
537537
ret
538-
539-
util_ret_null_closer_pop_hl:
540-
pop hl
541-
util_ret_null_closer:
538+
.ret0:
542539
xor a, a
543540
sbc hl, hl
544541
ret
@@ -568,28 +565,49 @@ ti_Read:
568565
add iy, sp
569566
ld c, (iy + 12)
570567
call util_is_slot_open
571-
jr z, util_ret_null_closer
568+
jr z, .ret0
572569
ld bc, (iy + 6)
573570
ld hl, (iy + 9)
574-
push hl
575571
call __smulu
576572
add hl, de
577573
xor a, a
578574
sbc hl, de
579-
jr z, util_ret_null_closer_pop_hl
580-
push hl
575+
jr z, .ret0
576+
push hl ; hl = total size to read
577+
call util_get_slot_size
578+
push bc
579+
call util_get_offset
580+
pop hl
581+
or a, a
582+
sbc hl, bc ; size - offset = bytes left to read
583+
pop de ; if no bytes left, return
584+
jr z, .ret0
585+
jr c, .ret0
586+
or a, a
587+
sbc hl, de
588+
add hl, de ; check if left size <= read size
589+
jr nc, .copy
590+
ex de, hl ; otherwise just copy remaining bytes
591+
.copy:
592+
push de
581593
call util_get_data_offset
582594
ld de, (iy + 3)
583595
pop bc
584596
push bc
585597
ldir
586598
call util_get_offset
587599
pop hl
588-
add hl,bc
589-
ex de,hl
600+
push hl
601+
add hl, bc
602+
ex de, hl
590603
call util_get_offset_ptr
591604
ld (hl), de
592605
pop hl
606+
ld bc, (iy + 6)
607+
jp __sdivu ; return actual chunks read
608+
.ret0:
609+
xor a, a
610+
sbc hl, hl
593611
ret
594612

595613
;-------------------------------------------------------------------------------

0 commit comments

Comments
 (0)