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
\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
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
call chk_to\r
jr nc,wrdy_l\r
wrdy_e:\r
+ in a,(IdeCmd)\r
ret\r
\r
;-------------------------------------------------------------------------------\r
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
\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