Source file: /~heha/basteln/PC/USB2LPT/lpt2usb.zip/limit.i90

;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
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded