]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/commitdiff
cf_init: do not depend on reset state of the ide command block registers.
authorLeo C <erbl259-lmu@yahoo.de>
Tue, 7 Jun 2016 07:47:46 +0000 (09:47 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Tue, 7 Jun 2016 07:47:46 +0000 (09:47 +0200)
cbios/cfio.180

index d7d6697299e420142cee0486b0ee033af6b83613..a237bd62aa0c382867a7f18a64bc26195d5af070 100644 (file)
@@ -324,30 +324,33 @@ ptab_read:
        ret\r
 \r
 cf_init:\r
-       ld      hl,25600        ;32000/1.25 ms\r
-       call    wait_nbsy_to\r
+       ld      hl,25600        ; 32000/1.25 ms\r
+       call    wait_nbsy_to    ; wait for BSY == 0\r
        jr      c,cfi_error     ; return error on timeout\r
-       in      a,(IDESCnt)\r
-       dec     a\r
-       jr      nz,cfi_error\r
-       in      a,(IDESNum)\r
-       dec     a\r
-       jr      nz,cfi_error\r
-       in      a,(IDECLo)\r
-       or      a\r
-       jr      nz,cfi_error\r
-       in      a,(IDECHi)\r
-       or      a\r
-       jr      nz,cfi_error\r
-       in      a,(IDESDH)\r
-       or      a\r
-       jr      nz,cfi_error\r
-       ld      hl,25600        ;32000/1.25 ms\r
-       call    wait_rdy_to\r
+\r
+       ld      hl,25600        ; 32000/1.25 ms\r
+       call    wait_rdy_to     ; wait for RDY == 1\r
        jr      c,cfi_error     ; return error on timeout\r
 \r
        ld      a,0E0h          ; assume unit 0, lba mode\r
        out     (IdeSDH),a      ;\r
+\r
+       xor     a               ; execute NOP command\r
+       out     (IdeCmd),a      ;\r
+       ld      hl,100\r
+       call    wait_rdy_to\r
+       jr      c,cfi_error\r
+       and     11111001b       ;\r
+       cp      01010001b       ; should return error\r
+       jr      nz,cfi_error    ;\r
+       ld      a,10h           ; execute RECALIBRATE command\r
+       out     (IdeCmd),a      ;\r
+       ld      hl,100\r
+       call    wait_rdy_to\r
+       and     11111001b       ;\r
+       cp      01010000b       ; should return ok\r
+       jr      nz,cfi_error    ;\r
+\r
        ld      a,1             ; Enable 8-bit data transfer.\r
        out     (IDEFeat),a\r
        ld      a,CmdSF         ; Set feature command\r
@@ -408,7 +411,9 @@ chk_1:
 \r
 ; Wait while device is busy with time out\r
 ;     hl: timer tics (1.25ms) to wait\r
-;     return carry flag set, if time out\r
+;     return:\r
+;       a: IDE status register\r
+;       carry flag set, if time out\r
 \r
 wait_nbsy_to:\r
        ld      a,1\r
@@ -421,11 +426,14 @@ wnb_l:
        call    chk_to\r
        jr      nc,wnb_l\r
 wnb_e:\r
+       in      a,(IdeCmd)\r
        ret\r
 \r
 ; Wait for ready signal with time out\r
 ;     hl: timer tics (1.25ms) to wait\r
-;     return carry flag set, if time out\r
+;     return:\r
+;       a: IDE status register\r
+;       carry flag set, if time out\r
 \r
 wait_rdy_to:\r
        ld      a,1\r
@@ -439,6 +447,7 @@ wrdy_l:
        call    chk_to\r
        jr      nc,wrdy_l\r
 wrdy_e:\r
+       in      a,(IdeCmd)\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -691,9 +700,8 @@ retry:
        ld      e,(iy+PTAB_SIZE+0)\r
        ld      d,(iy+PTAB_SIZE+1)\r
        sbc     hl,de\r
-       ld      l,a\r
+       ld      e,a\r
        sbc     a,(iy+PTAB_SIZE+2)\r
-       ld      a,l\r
        pop     hl\r
        jr      c,lba_ok\r
        ld      a,1             ; block# >= partition size, return error\r
@@ -701,8 +709,7 @@ retry:
 \r
 lba_ok:\r
        WAITREADY\r
-       ld      e,a             ; add partition start\r
-       ld      a,(iy+PTAB_START+0)\r
+       ld      a,(iy+PTAB_START+0)     ; add partition start\r
        add     a,l\r
        out     (IdeSNum),a\r
        ld      a,(iy+PTAB_START+1)\r