From: Leo C Date: Mon, 13 Jun 2016 16:20:31 +0000 (+0200) Subject: local stack for 'sdio' and 'cfio' X-Git-Tag: hexrel-6.9~34 X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp-cpm3.git/commitdiff_plain/958f610fd7c11481fae54d758bf34619d161554a?ds=sidebyside;hp=d6c677a8a2cdb57e83f9ba8c03c643441c1878d9 local stack for 'sdio' and 'cfio' --- diff --git a/cbios/cfio.180 b/cbios/cfio.180 index 5dd8a2e..fc3bea1 100644 --- a/cbios/cfio.180 +++ b/cbios/cfio.180 @@ -649,6 +649,9 @@ rw$common: endif rwc_new_sectors: + ld (cfstack),sp + ld sp,cfstack + in0 a,(dcntl) and a,~(M_DMS1+M_DIM1+M_DIM0) or b @@ -705,7 +708,8 @@ retry: pop hl jr c,lba_ok ld a,1 ; block# >= partition size, return error - ret + jp exit +; ret lba_ok: WAITREADY @@ -762,7 +766,8 @@ err_out: pop bc ld e,a and 10001001b ; Busy, DRQ, or Error? - ret z ; Return to BDOS if no error + jr z,exit +; ret z ; Return to BDOS if no error ld hl,print_details call pr.errors @@ -772,6 +777,8 @@ err_out: ld (residual),a ld a,1 ; return hard error to BDOS +exit: + ld sp,(cfstack) ret ;------------------------------------------------------------------------------- @@ -824,4 +831,10 @@ parttbl: tmpsecbuf: ;temporary sector buffer ds 512 + rept 80 + db 07CH + endm +cfstack:: + dw 0 + end diff --git a/cbios/sdio.180 b/cbios/sdio.180 index 28ed4dd..d934ef4 100644 --- a/cbios/sdio.180 +++ b/cbios/sdio.180 @@ -164,6 +164,9 @@ sd$init7: ; relative drive number in @rdrv (8 bits) +1 sd$login: + ld (sdstack),sp + ld sp,sdstack + xor a ld (residual),a ld hl,send_msg+1 @@ -195,6 +198,9 @@ sd$login: ld a,(recv_msg_rc) or a + + ld sp,(sdstack) + ret z ld hl,0 ld (@xdph),hl @@ -230,6 +236,9 @@ sd$write: ret rwc_new_sectors: + ld (sdstack),sp + ld sp,sdstack + ld b,1 ; assume 1 sector to transfer ld a,(@cnt) or a @@ -280,7 +289,8 @@ retry: call msg.recv ld a,(recv_msg_rc) or a - ret z ; check status and return to BDOS if no error +; ret z ; check status and return to BDOS if no error + jr z,exit ld hl,print_details call pr.errors @@ -298,6 +308,8 @@ retry: dec c e_exit: ld a,c +exit: + ld sp,(sdstack) ret ;------------------------------------------------------------------------------- @@ -391,4 +403,10 @@ fr$msg19: db 'FR_INVALID_PARAMETER,',0 fr$msg20: db 'short read/write,',0 db 0 + rept 80 + db 07CH + endm +sdstack:: + dw 0 + end