Jo, eine Woche ist vielleicht etwas knapp.
Du weißt aber schon etwas über Hexadezimalcodes (z.B. dieses magische $C9 ist eine 201)?
Es sind zwei Schleifen. Die innere
WGLOOP1: dec temp2------------------------------------------> 1 Takt
brne WGLOOP1--------------------------------------------------> Sprung 2
wird $C9, also 201 mal ausgeführt
201* 3 Takte = 603 Takte
Die äußere Schleife
WGLOOP0: ldi temp2, $C9-------------------------------------> 1 Takt
.//Innere Loop mit 603 Takten
.
dec temp1-------------------------------------------------------> 1 Takt
brne WGLOOP0--------------------------------------------------> Sprung 2
wird durch das vorladen von $21 in temp1 33 mal ausgeführt.
Du kannst also rechnen 33 * (4 + 603) = 20031 Takte
Wenn wir es ganz genau nehmen, musst Du jetzt noch Einsprung (z.B. jmp) und Rücksprung (ret) und den Takt für das Vorinitialisieren des temp1-Registers dazuzählen, das sind aber nur Peanuts.
Ich sage Dir also auf den Kopf zu: Das sind etwa 20000 Takte, die Routine war ursprünglich für 4MHz gebaut. Der Autor war ein Elektrotechnikingenieur der alten Schule ("ohne besondere Anforderungen reichen zwei Stellen nach dem Komma").
In der Praxis setz einfach ein $32 anstatt der $C9, dann klappst auch mit den 16MHz.
- - - Aktualisiert - - -
FALSCH FALSCH FALSCH: In der Praxis setze für die $21 eine $84 ein.
(ich hab's noch gemerkt)
Lesezeichen