X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp-cpm3.git/blobdiff_plain/50f3b8f0cb6ccbdc5c1ea8f916f3d95b197d3d04..4fc939ea71f1c4979525f2cb059da81a5e3fb07c:/cbios/sdio.180 diff --git a/cbios/sdio.180 b/cbios/sdio.180 index cf9310e..0d29645 100644 --- a/cbios/sdio.180 +++ b/cbios/sdio.180 @@ -6,9 +6,11 @@ ; Disk drive dispatching tables for linked BIOS public sd0,sd1,sd2,sd3 + public sd4,sd5,sd6,sd7 ; Variables containing parameters passed by BDOS + extrn @xdph extrn @adrv,@rdrv extrn @trk,@sect,@cnt extrn @dma,@dbnk @@ -85,6 +87,35 @@ sd2: dph 0,dpbsimhd512 sd3: dph 0,dpbsimhd512 + dw sd$write + dw sd$read + dw sd$login + dw sd$init4 + db 4,0 ; relative drive zero +sd4: dph 0,dpbsimhd512 + + dw sd$write + dw sd$read + dw sd$login + dw sd$init5 + db 5,0 ; relative drive one +sd5: dph 0,dpbsimhd512 + + dw sd$write + dw sd$read + dw sd$login + dw sd$init6 + db 6,0 ; relative drive zero +sd6: dph 0,dpbsimhd512 + + dw sd$write + dw sd$read + dw sd$login + dw sd$init7 + db 7,0 ; relative drive one +sd7: dph 0,dpbsimhd512 + + cseg ; DPB must be resident dpbsimhd512: @@ -104,15 +135,20 @@ sd$init0: sd$init1: sd$init2: sd$init3: +sd$init4: +sd$init5: +sd$init6: +sd$init7: ret ; all initialization done by drive 0 - - ; This entry is called when a logical drive is about to ; be logged into for the purpose of density determination. ; It may adjust the parameters contained in the disk ; parameter header pointed at by +; +; absolute drive number in @adrv (8 bits) +0 +; relative drive number in @rdrv (8 bits) +1 sd$login: xor a @@ -144,8 +180,11 @@ sd$login: ld b,recv_msg_len ; max receive message len call msg.recv -; ld a,(recv_msg_rc) -; or a + ld a,(recv_msg_rc) + or a + ret z + ld hl,0 + ld (@xdph),hl ret ; @@ -174,26 +213,26 @@ sd$write: ld c,2 rw$common: -; ld hl,residual ; remainng sectors from last multi io? -; ld a,(hl) -; sub a,1 -; jr c,rwc_new_sectors -; -; ld (hl),a -; xor a -; ret + ld hl,residual ; remainng sectors from last multi io? + ld a,(hl) + sub a,1 + jr c,rwc_new_sectors + + ld (hl),a + xor a + ret rwc_new_sectors: ld b,1 ; assume 1 sector to transfer -; ld a,(@cnt) -; or a -; jr z,rwc_doit -; -; ld b,a ; number of sectors to transfer -; dec a ; save remaining -; ld (hl),a -; xor a ; reset multi sector count -; ld (@cnt),a + ld a,(@cnt) + or a + jr z,rwc_doit + + ld b,a ; number of sectors to transfer + dec a ; save remaining + ld (hl),a + xor a ; reset multi sector count + ld (@cnt),a ; compute pysical transfer address ; prepare message