Code-Optimierung: Wie wird Start- und Endzeit einer Routine ermittelt?
Hi,
ich schreibe gerade an Verschiebroutinen von Speicherbereichen
und frage mich, ob die ROM-Routine $A3BF schneller ist, als die
uebliche, indirekte Adressierung mit dem Y Register - oder ob es
ggf. sogar schneller waere, innerhalb des Programmablaufs, die
passende Daten direkt von Diskette in den Speicher zu laden .
Kurz, wie messe ich 'relativ genau' die Zeit, in Milli-
sekunden, die jede dieser 3 Varianten braucht, um 8K
Speicher auf einmal nach $2000 zu Verschieben ?
3 Beispiele (Welches ist schneller???):
1. ROM Verschieberoutine (Turbo Assembler Syntax)
Code
- *=$033c ; bzw. sys 828
- STARTADR=$3F40
- ENDADR=$5E7F
- ZIELADR=$3F3F ;von unten nach oben verschieben
- START
- LDA #<STARTADR
- LDY #>STARTADR
- STA $5f
- STY $60
- LDA #<ENDADR
- LDY #>ENDADR
- STA $5A
- STY $5B
- LDA #<ZIELADR
- LDY #>ZIELADR
- STA $58
- STY $59
- ;Startzeit Speichern ???
- JSR $A3BF
- ;Endzeit Speichern ???
- ENDE
- RTS
- BRK
- .END
2. EIGENE Verschieberoutine (Turbo Assembler Syntax)
Code
- *=$033c ; bis $037E bzw. sys 828
- STARTADR=$3F40
- ENDADR=$5E7F
- ZIELADR=$2000 ;von oben nach unten verschieben
- LDA #<STARTADR
- LDY #>STARTADR
- STA $5f
- STY $60
- LDA #<ENDADR
- LDY #>ENDADR
- STA $5A
- STY $5B
- LDA #<ZIELADR
- LDY #>ZIELADR
- STA $58
- STY $59
- LDA #$00 ;Copy-Range Low (0 bis FF)
- STA $037e
- TAY
- ;Startzeit Speichern ???
- LOOP
- LDA ($5F),Y
- STA ($58) ,Y
- INY
- CPY $037E
- BNE LOOP
- LDA $60
- CMP $5B
- BEQ ENDE
- INC $59 ;inc Ziel Hi
- INC $60 ;inc Start Hi ($60 bis $5B)
- LDA $60
- CMP $5B
- BNE LOOP
- LDA $5A ;Copy-Range Low (0 bis $5A)
- STA $037E
- JMP LOOP
- ENDE
- ;Endzeit Speichern ???
- RTS
- BRK
- NOP ;Variable $037E
- .END
3. LOAD Verschieberoutine (Turbo Assembler Syntax)
Code