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