Browse Source

Update ppide.asm

Optimization
patch
b1ackmai1er 6 years ago
parent
commit
c3ef70efc0
  1. 73
      Source/HBIOS/ppide.asm

73
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
;

Loading…
Cancel
Save