diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index a24f05b0..b0589701 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -771,12 +771,12 @@ PPIDE_GETBUF: RET NZ ; BAIL OUT IF TIMEOUT ; ; SETUP PPI TO READ - LD C,(IY+PPIDE_PPI) ;; + LD C,(IY+PPIDE_PPI) ; LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ OUT (C),A ; DO IT ; ; SELECT READ/WRITE IDE REGISTER - LD C,(IY+PPIDE_CTL) ;; + DEC C ; LD C,(IY+PPIDE_CTL) LD A,PPIDE_REG_DATA ; DATA REGISTER OUT (C),A ; DO IT @@ -784,12 +784,12 @@ PPIDE_GETBUF: XOR PPIDE_CTL_DIOR ; SWAP THE READ LINE BIT LD D,A ; D := READ ASSERTED ; - ; LOOP SETUP - LD B,0 ; 256 ITERATIONS - LD C,(IY+PPIDE_DATALO) ; SETUP C WITH IO PORT (LSB) -; -#IF (!PPIDE8BIT) - INC C ; PRE-INCREMENT C + LD B,0 ; LOOP SETUP - 256 ITERATIONS + + ; SETUP C WITH IO PORT + DEC C ; C = IY+PPIDE_DATAHI +#IF (PPIDE8BIT) ; + DEC C ; C = IY+PPIDE_DATALO #ENDIF ; CALL PPIDE_GETBUF1 ; FIRST PASS (FIRST 256 BYTES) @@ -805,24 +805,36 @@ PPIDE_GETBUF: JP NZ,PPIDE_IOERR RET ; -PPIDE_GETBUF1: ; START OF READ LOOP - PUSH BC ;; - LD C,(IY+PPIDE_CTL) ;; - OUT (C),D ; ASSERT READ - POP BC ;; - -#IF (!PPIDE8BIT) +PPIDE_GETBUF1: ; START OF READ LOOP +; +#IF (PPIDE8BIT) + INC C + INC C + OUT (C),D ; LD C,(IY+PPIDE_CTL) + DEC C ; ASSERT READ + DEC C + INI + PUSH AF + INC C + INC C + OUT (C),E ; LD C,(IY+PPIDE_CTL) + DEC C ; DEASSERT READ + DEC C + POP AF +#ELSE + INC C + OUT (C),D ; LD C,(IY+PPIDE_CTL) + DEC C ; ASSERT READ DEC C INI ; GET AND SAVE NEXT BYTE INC C ; LSB -> MSB + INI + PUSH AF + INC C + OUT (C),E ; LD C,(IY+PPIDE_CTL) + DEC C ; DEASSERT READ + POP AF #ENDIF - INI ; GET AND SAVE NEXT BYTE - - PUSH BC ;; - LD C,(IY+PPIDE_CTL) ;; - OUT (C),E ; DEASSERT READ - POP BC ;; -; JR NZ,PPIDE_GETBUF1 ; LOOP UNTIL DONE RET ;