Source file: /~heha/Mikrocontroller/avr-inc.zip/avrstr.i90

;Stringausgabe aus Kode-Speicher
#ifndef AVRSTR_I90
#define AVRSTR_I90

;Benötigt:
;	putchar(r16)	Zeichen schreiben (blockierend)

;Bietet (diverses):
;	SendStr(Z)	konstanten String ausgeben (*)
;	SendStrAfter	konstanten String nach RCALL ausgeben (*)
;	JumpZ(Z)	Byteadresse Z in Wort aufrunden und anspringen (*)

;(*) Funktioniert auf ATmega128 nur in den unteren 64K Kode-Speicher!
;    Oder man setzt das entsprechende Page-Register entsprechend.

SendStr:	;konstanten String ausgeben
;PE: Z = Zeiger auf nullterminierte Zeichenkette im Kode-Speicher
;PA: -
;VR: Z (zeigt hinter die Null), R0=0
	lpm	r16,z+
	tst	r16
	breq	ss1
	rcall	putchar
	rjmp	SendStr
ss1:	ret

SendStrAfter:	;konstanten String nach CALL ausgeben
;PE: Nullterminierte Zeichenkette hinter dem CALL-Befehl
;PA: -
;VR: R16=0, Z
	pophl	Z	;da steht der String
	lslhl	Z	;verdoppeln (Byte-Adresse)
	rcall	SendStr
JumpZ:
	adiw	ZH:ZL,1	;aufrunden
	lsrhl	Z	;halbieren (Wort-Adresse)
	ijmp		;springt nach Z (ZH:ZL)

#endif//AVRSTR_I90
Detected encoding: UTF-80