Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:kernel_embedded:inner_interpreter:next_atmega

NEXT (AVR ATmega)

Am Beispiel des amForth von M.Trute für die AVR ATmega Prozessorfamilie wird gezeigt, wie ein NEXT auch auf einer Harvard–Speichereinteilung aufgesetzt werden kann. Richtungsweisend dafür war der Beitrag von Ron Minke in den Jahren 2004 und 2005 in der Zeitschrift “Vijgeblaadje”, herausgegeben von der niederländischen Forthgruppe. Nachgedruck im Sonderheft AVR (2007)

Das NEXT aus dem amforth von M.Trute für die AVR ATmega Prozessoren nutzt die Eigenschaften der Prozessorfamilie aus, über die Registerpaare X, Y und Z indirekte Operationen ausführen zu können. Insbesondere kann durch das Z-Register ein indirekter Sprung zum nächsten Stück Maschinencode ausgeführt werden. Da das amforth indirect threaded code ist, werden zwei indirekte Ladevorgänge benötigt um diesen Sprung zu machen.

Eine AVR 8-bit Microcontrollerbesonderheit: Der Flash besteht aus 16-bit Zellen, die zugehörige lpm (load program memory) liest aber 8-bit weise. Drum wird der Zeiger jeweils verdoppelt.

         
DO_NEXT: ; 24 CPU cycles to ijmp
	brts DO_INTERRUPT
	movw zl, XL	; Z <-- IP
	lsl zl		; Z * 2
	rol zh		;
	lpm wl, Z+	; W <-- (Z)
	lpm wh, Z+	;
	adiw XL, 1	; INC IP
         
DO_EXECUTE: ; 12 cpu cycles to ijmp
	movw zl, wl	; Z <-- W
	lsl zl		; Z * 2
	rol zh		;
	lpm temp0, Z+	; temp <-- (Z)
	lpm temp1, Z+	;
	movw zl, temp0	; Z <-- temp
	ijmp		; JMP (Z)  ==  PC <-- Z

Quellen

Ron Minke, „Forth von der Pike auf“, in: Forth Magazin „Vierte Dimension“, Sonderheft AVR (2007).

Matthias Trute, amforth-2.7.

words/kernel_embedded/inner_interpreter/next_atmega.txt · Zuletzt geändert: 2011-05-14 18:16 (Externe Bearbeitung)