endif\r
\r
rwc_new_sectors:\r
+ ld (cfstack),sp\r
+ ld sp,cfstack\r
+\r
in0 a,(dcntl)\r
and a,~(M_DMS1+M_DIM1+M_DIM0)\r
or b\r
pop hl\r
jr c,lba_ok\r
ld a,1 ; block# >= partition size, return error\r
- ret\r
+ jp exit\r
+; ret\r
\r
lba_ok:\r
WAITREADY\r
pop bc\r
ld e,a\r
and 10001001b ; Busy, DRQ, or Error?\r
- ret z ; Return to BDOS if no error\r
+ jr z,exit\r
+; ret z ; Return to BDOS if no error\r
\r
ld hl,print_details\r
call pr.errors\r
ld (residual),a\r
\r
ld a,1 ; return hard error to BDOS\r
+exit:\r
+ ld sp,(cfstack)\r
ret\r
\r
;-------------------------------------------------------------------------------\r
tmpsecbuf: ;temporary sector buffer\r
ds 512\r
\r
+ rept 80\r
+ db 07CH\r
+ endm\r
+cfstack::\r
+ dw 0\r
+\r
end\r
; relative drive number in @rdrv (8 bits) +1\r
\r
sd$login:\r
+ ld (sdstack),sp\r
+ ld sp,sdstack\r
+\r
xor a\r
ld (residual),a\r
ld hl,send_msg+1\r
\r
ld a,(recv_msg_rc)\r
or a\r
+\r
+ ld sp,(sdstack)\r
+\r
ret z\r
ld hl,0\r
ld (@xdph),hl\r
ret\r
\r
rwc_new_sectors:\r
+ ld (sdstack),sp\r
+ ld sp,sdstack\r
+\r
ld b,1 ; assume 1 sector to transfer\r
ld a,(@cnt)\r
or a\r
call msg.recv\r
ld a,(recv_msg_rc)\r
or a\r
- ret z ; check status and return to BDOS if no error\r
+; ret z ; check status and return to BDOS if no error\r
+ jr z,exit\r
\r
ld hl,print_details\r
call pr.errors\r
dec c\r
e_exit:\r
ld a,c\r
+exit:\r
+ ld sp,(sdstack)\r
ret\r
\r
;-------------------------------------------------------------------------------\r
fr$msg20: db 'short read/write,',0\r
db 0\r
\r
+ rept 80\r
+ db 07CH\r
+ endm\r
+sdstack::\r
+ dw 0\r
+\r
end\r