From c3ef70efc08aa8a7f4e8a3c21454c554852f0432 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Thu, 6 Feb 2020 03:10:26 +0800 Subject: [PATCH] Update ppide.asm Optimization --- Source/HBIOS/ppide.asm | 73 ++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index b0589701..b0850329 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -809,30 +809,30 @@ PPIDE_GETBUF1: ; START OF READ LOOP ; #IF (PPIDE8BIT) INC C - INC C - OUT (C),D ; LD C,(IY+PPIDE_CTL) - DEC C ; ASSERT READ + INC C ; LD C,(IY+PPIDE_CTL) + OUT (C),D ; ASSERT READ + DEC C DEC C - INI + INI ; GET AND SAVE NEXT BYTE PUSH AF INC C - INC C - OUT (C),E ; LD C,(IY+PPIDE_CTL) - DEC C ; DEASSERT READ + INC C ; LD C,(IY+PPIDE_CTL) + OUT (C),E ; DEASSERT READ + DEC C DEC C POP AF #ELSE - INC C - OUT (C),D ; LD C,(IY+PPIDE_CTL) - DEC C ; ASSERT READ + INC C ; LD C,(IY+PPIDE_CTL) + OUT (C),D ; ASSERT READ + DEC C DEC C INI ; GET AND SAVE NEXT BYTE INC C ; LSB -> MSB - INI + INI ; GET AND SAVE NEXT BYTE PUSH AF - INC C - OUT (C),E ; LD C,(IY+PPIDE_CTL) - DEC C ; DEASSERT READ + INC C ; LD C,(IY+PPIDE_CTL) + OUT (C),E ; DEASSERT READ + DEC C POP AF #ENDIF JR NZ,PPIDE_GETBUF1 ; LOOP UNTIL DONE @@ -851,25 +851,25 @@ PPIDE_PUTBUF: ; ; SETUP PPI TO WRITE - LD C,(IY+PPIDE_PPI) ;; + LD C,(IY+PPIDE_PPI) LD A,PPIDE_DIR_WRITE ; SET DATA BUS DIRECTION TO WRITE 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 ;; + OUT (C),A ; LD E,A ; E := WRITE UNASSERTED XOR PPIDE_CTL_DIOW ; SWAP THE READ LINE BIT LD D,A ; D := WRITE 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 + ; LOOP SETUP ; 256 ITERATIONS + LD B,0 ; SETUP C WITH IO PORT (LSB) + + DEC C ; LD C,(IY+PPIDE_DATAHI) +#IF (PPIDE8BIT) + DEC C ; LD C,(IY+PPIDE_DATALO) #ENDIF ; CALL PPIDE_PUTBUF1 ; FIRST PASS (FIRST 256 BYTES) @@ -886,19 +886,28 @@ PPIDE_PUTBUF: RET ; PPIDE_PUTBUF1: ; START OF READ LOOP -#IF (!PPIDE8BIT) +#IF (PPIDE8BIT) + OUTI ; PUT NEXT BYTE ON THE BUS + PUSH AF + INC C ; LD C,(IY+PPIDE_CTL) + INC C + OUT (C),D ; ASSERT WRITE + OUT (C),E ; DEASSERT WRITE + DEC C + DEC C + POP AF +#ELSE DEC C OUTI ; PUT NEXT BYTE ON THE BUS (LSB) INC C + OUTI ; PUT NEXT BYTE ON THE BUS (MSB) + PUSH AF + INC C ; LD C,(IY+PPIDE_CTL) + OUT (C),D ; ASSERT WRITE + OUT (C),E ; DEASSERT WRITE + DEC C + POP AF #ENDIF - OUTI - PUSH BC - LD C,(IY+PPIDE_CTL) ; ASSERT WRITE - OUT (C),D ; DO IT - LD C,(IY+PPIDE_CTL) ; DEASSERT WRITE - OUT (C),E ; DO IT - POP BC -; JR NZ,PPIDE_PUTBUF1 ; LOOP UNTIL DONE RET ;