#define __SFR_OFFSET 0
#include <avr/io.h>
/****************************
* Sonstige Hilfsfunktionen *
****************************/
// Gemeinsamer Anfang für PutNib und GetNib
27: movw ZL,r24 // Basiszeiger
mov r0,r22 // Index
lsr r0
add ZL,r0
adc ZH,r1
ld r24,Z
sbrs r22,0
swap r24
ret
.global _Z6PutNibPhhc,_Z6GetNibPKhh,_Z3x10h,_Z9clock_seth
_Z6PutNibPhhc:
rcall 27b
andi r24,0xF0
or r24,r20 // Nibble (muss 0..F sein)
sbrs r22,0
swap r24
st Z,r24
ret
_Z6GetNibPKhh:
rcall 27b
andi r24,0x0F
ret
// Unterprogramme für CompareNumber
28: movw ZL,r24
movw XL,r22
29: ld r22,Z+
ld r23,X+
eor r22,r23
ret
// Vergleichsroutine über R23 Nibbles
// PA: R22=Differenzwert, Z passend: Z=1 bei Gleichheit
// VR: X,Z,R0,R23,T-Flag (aber nicht R25:R24!)
6: mov r0,r23
bst r0,0
lsr r0 // Anzahl Bytes
rjmp 7f // zum Fuß springen
1: rcall 29b
brne 9f // 2 Ziffern ungleich
dec r0
7: brne 1b // Schleife über Bytes
brtc 9f
rcall 29b
andi r22,0xF0 // letzte Ziffer vergleichen
9: ret
.global _Z8CompareNPKhS0_,_Z11KillVorwahlPhPKh
// S0_ steht wohl für "Same as Argument 0"?
_Z8CompareNPKhS0_: // R25:R24 = 1. Nummer, R23:R22 = 2. Nummer
rcall 28b // X und Z laden, R22 = *X^(R23=*Z)
brne 8f // Länge ungleich
rcall 6b
8: mov r24,r22 // nach R24 schaffen für gcc-API
ret
_Z11KillVorwahlPhPKh: // R25:R24 = Nummer, R23:R22 = Vorwahl
rcall 28b // X und Z laden, R22 = *X^(R23=*Z)
tst r23 // Vorwahl hat Länge Null?
breq 9b // Nichts tun, Returnwert egal
eor r22,r23 // XOR rückgängig
sub r22,r23 // Differenz
movw r20,r22 // Länge der Vorwahl (R21) und Differenz (R20) retten
dec r22 // muss mindestens 1 Ziffer länger sein
brmi 9b // Länge Vorwahl >= Länge Nummer: Nichts tun, R24!=0
rcall 6b // Vergleich <R23> Nibbles
brne 8b // raus mit R24!=0
clr r23 // Zielziffer-Index
movw XL,r24
st X+,r20 // Neue Länge speichern (>=1)
4: mov r22,r21 // Quellindex ab Vorwahl-Länge
inc r21
movw r24,XL
rcall _Z6GetNibPKhh
push r20
mov r20,r24
mov r22,r23 // Zielindex ab Null
inc r23
movw r24,XL
rcall _Z6PutNibPhhc
pop r20
dec r20
brne 4b
clr r24 // Treffer anzeigen
ret
_Z3x10h:
lsl r24
mov r0,r24
lsl r24
lsl r24
add r24,r0
ret
_Z9clock_seth:
cli
ldi r25,0x80
out CLKPR,r25
out CLKPR,r24
sei
ret
Detected encoding: UTF-8 | 0
|