]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/bioskrnl.180
sdio, cfio: factor out common error message print routines
[z180-stamp-cpm3.git] / cbios / bioskrnl.180
index 6ead6c30de271089f48c6530f36808349a4c4277..6c8366fe120796d95f2323ef4c0fb5a734436f44 100644 (file)
@@ -51,6 +51,7 @@ ccp   equ     0100h           ; Console Command Processor gets loaded
        extrn @dtbl                     ; table of pointers to XDPHs\r
        public @adrv,@rdrv,@trk,@sect   ; parameters for disk I/O\r
        public @dma,@dbnk,@cnt          ;    ''       ''   ''  ''\r
+       public @xdph,@op\r
 \r
     ; memory control\r
 \r
@@ -432,7 +433,10 @@ bnksel:
 seldsk:\r
        ld      a,c             ; save drive select code\r
        ld      (@adrv),a\r
-       ld      b,0             ; create index from drive code\r
+       xor     a\r
+       ld      (@op),a\r
+       ld      (@cnt),a\r
+       ld      b,a             ; create index from drive code\r
        ld      hl,@dtbl\r
        add     hl,bc           ; get pointer to dispatch table\r
        add     hl,bc\r
@@ -444,19 +448,21 @@ seldsk:
        or      h\r
        ret     z               ; if no entry in table, no disk\r
 \r
-       ld      a,e             ; examine login bit\r
-       and     1\r
-       ret     nz\r
-\r
-       push    ix\r
-       ld      ix,(@xdph)\r
-       ld      a,(ix-2)\r
-       ld      (@RDRV),a       ; get relative drive\r
-       ld      l,(ix-6)        ; get address of LOGIN routine\r
-       ld      h,(ix-5)\r
-       ex      (sp),ix\r
-       pop     de\r
+       bit     0,e             ; login bit to zero flag\r
+       ex      de,hl\r
+       ld      hl,-2           ; get relative drive\r
+       add     hl,de\r
+       ld      a,(hl)\r
+       ld      (@RDRV),a\r
+       jr      nz,notfirst     ; examine login bit\r
+       ld      hl,-6\r
+       add     hl,de\r
+       ld      a,(hl)\r
+       inc     hl\r
+       ld      h,(hl)\r
+       ld      l,a\r
        call    ipchl           ; call LOGIN\r
+notfirst:\r
        ld      hl,(@xdph)      ; recover DPH pointer\r
        ret\r
 \r
@@ -533,6 +539,8 @@ sectrn:
        ;               extended disk parameter header (XDPH).\r
 \r
 read:\r
+       ld      a,1\r
+       ld      (@op),a\r
        ld      ix,(@xdph)      ; get drive descriptor pointer\r
        ld      l,(ix-8)        ; get read routine entry\r
        ld      h,(ix-7)\r
@@ -545,6 +553,8 @@ read:
        ;               extended disk parameter header (XDPH).\r
 \r
 write:\r
+       ld      a,2\r
+       ld      (@op),a\r
        ld      ix,(@xdph)      ; get drive descriptor pointer\r
        ld      l,(ix-10)       ; get write routine entry\r
        ld      h,(ix- 9)\r
@@ -573,6 +583,7 @@ flush:
 ;     do not change order. sd driver depends on this\r
 \r
 @xdph: ds      2               ; pointer to currently selected drives dph\r
+@op    ds      1               ; current disk operation 0:select, 1:read, 2 write\r
 @adrv: ds      1               ; currently selected disk drive\r
 @rdrv: ds      1               ; controller relative disk drive\r
 @trk:  ds      2               ; current track number\r