;Alle 16-bit-Parameter müssen "gerade" Doppelregister sein (für movw)!
;X = Maximum aus X und U (untere Grenze) vzb.
.macro Max2s ;XH,XL,UH,UL
;if (x<u) x=u;
cp @1,@3
cpc @0,@2
brge $+2
movw @0:@1,@2:@3
.endm
;X = Minimum aus X und O (obere Grenze) vzb.
.macro Min2s ;XH,XL,OH,OL
;if (o<x) x=o;
cp @3,@1
cpc @2,@0
brge $+2
movw @0:@1,@2:@3
.endm
;X = Eingrenzung von X zwischen U und O vzb.
.macro Limit2s ;XH,XL,UH,UL,OH,OL
Max2s @0,@1,@2,@3
Min2s @0,@1,@4,@5
.endm
;X = Maximum aus X und U (untere Grenze) vzl.
.macro Max2u ;XH,XL,UH,UL
;if (x<u) x=u;
cp @1,@3
cpc @0,@2
brsh $+2
movw @0:@1,@2:@3
.endm
;X = Minimum aus X und O (obere Grenze) vzl.
.macro Min2u ;XH,XL,OH,OL
;if (o<x) x=o;
cp @3,@1
cpc @2,@0
brsh $+2
movw @0:@1,@2:@3
.endm
;X = Eingrenzung von X zwischen U und O vzl.
.macro Limit2u ;XH,XL,UH,UL,OH,OL
Max2u @0,@1,@2,@3
Min2u @0,@1,@4,@5
.endm
;X = vzb. Begrenzung von X nach vzb. Addition/Subtraktion, X muss R16..R31 sein
.macro Lims1s ;X
brvc $+4 ;ohne Überlauf nichts tun
ldi @0,0x80
brpl $+2 ;brpl oder brmi ??
ldi @0,0x7F
.endm
;X = vzb. Begrenzung von X nach vzb. Addition/Subtraktion, X muss R16..R31 sein
.macro Lims2s ;XH,XL
brvc $+6
ldiw @0,@1,0x8000
brpl $+3
ldiw @0,@1,0x7FFF
.endm
;X = vzl. Begrenzung nach Addition einer vzb. Zahl auf vzl. Zahl
;(Beispiel: Addition einer vzb. Differenz auf eine vzl. Mauszeiger-Koordinate)
.macro Limus1u ;X
;Flags:
;X DeltaX X Xlim Flags
;05 05 0A . -
;FC 05 01 FF C
;05 FC 01 . C unmöglich nur mit Flags!
.endm
Vorgefundene Kodierung: ANSI (CP1252) | 4
|
|