!!! VolksForth 6502 Assembler (work in progress, translation pending) Source: [6502 Assembler] See also: [6502 Assembler in Forth] %%tabbedSection %%tab-english tab content 1 /% %%tab-deutsch !!Der 6502-Assembler Im folgenden werden die Konzepte des 6502-Assemblers für VolksForth dargestellt. Es wird kein vollständiges Glossar angegeben, da die Mnemonics des Assemblers allen Maschinensprache-Programmierern vertraut sein dürften. Eine genaue Darstellung der Funktionsweise findet sich in den [FORTH DIMENSIONS, Vol III,5 p. 143ff|A FORTH ASSEMBLER FOR THE 6502] . Im folgenden wird eine kurze Zusammenfassung angegeben sowie Änderungen gegenüber dem Original dargestellt. Die Funktionsweise des Adressinterpreters sowie der Routine NEXT wird in [Kapitel 2 des VolksForth Handbuch|VFHandbuchKapitel2] dargestellt. Der 6502-Assembler gestattet strukturierte Programmierung. Die Strukturelemente sind analog zu den Kontrollstrukturen des Forth aufgebaut, tragen jedoch andere Namen, um die Verwechselungsgefahr zu verringern und die Übersichtlichkeit zu erhöhen. Ein Beispiel: {{{ cc ?[ <ausdruck1> ][ <ausdruck2> ]? }}} cc steht fur "condition code" . <ausdruck1> wird ausgeführt, wenn cc zutrifft, andernfalls <ausdruck2>. Der Teil {{{ ][ <ausdruck2> }}} kann auch weggelassen werden. Das Analogon in Forth ist IF ELSE ... THEN Beachten Sie bitte, das vor {{{?[}}} immer(!) ein conditioncode stehen muß. Außerdem findet keine Prüfung auf korrekte Verschachtelung der Kontrollstrukturen statt. Weitere Kontrollstrukturen sind: {{{ [[ <ausdruck1> cc ?[[ <ausdruck2> ]]? [[ <ausdruck1> cc ?] [[ <ausdruck1> ]] }}} Die analogen Ausdrucke in Forth sind: {{{ BEGIN <ausdruck1> WHILE <ausdruck2> REPEAT BEGIN <ausdruckl> UNTIL BEGIN <ausdruck1> REPEAT }}} Auch hier darf bei den Assemblerworten cc nicht weggelassen werden. Außerdem ist nur genau ein {{{?[[}}} zwischen {{{[[}}} und {{{]]?}}} zulässig. Beachten Sie bitte auch den Unterschied zwischen {{{]]}}} und {{{]]?}}} ! Als condition code sind zulässig: {{{ 0= 0<> 0< 0>= CS CC VS VC }}} Sie konnen den Prozessor-Flags Z N C und V zugeordnet werden. Im ersten Beispiel wird also <ausdruck1> ausgeführt , wenn cc durch 0= ersetzt wird und das Z-Flag gesetzt ist. Jeden der condition codes kann man durch ein folgendes NOT erweitern, also z.B.: {{{ 0= NOT ?[ 0 # lda ]? }}} /% /%