This page (revision-16) was last changed on 03-Feb-2023 15:21 by Carsten Strotmann 

This page was created on 25-Apr-2010 09:12 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
16 03-Feb-2023 15:21 10 KB Carsten Strotmann to previous
15 25-Apr-2010 10:56 8 KB Carsten Strotmann to previous | to last
14 25-Apr-2010 10:45 6 KB Carsten Strotmann to previous | to last
13 25-Apr-2010 10:37 5 KB Carsten Strotmann to previous | to last
12 25-Apr-2010 10:29 3 KB Carsten Strotmann to previous | to last
11 25-Apr-2010 10:29 3 KB Carsten Strotmann to previous | to last
10 25-Apr-2010 10:26 3 KB Carsten Strotmann to previous | to last
9 25-Apr-2010 10:19 2 KB Carsten Strotmann to previous | to last
8 25-Apr-2010 10:17 2 KB Carsten Strotmann to previous | to last
7 25-Apr-2010 09:49 1 KB Carsten Strotmann to previous | to last
6 25-Apr-2010 09:48 1 KB Carsten Strotmann to previous | to last
5 25-Apr-2010 09:48 1 KB Carsten Strotmann to previous | to last
4 25-Apr-2010 09:22 9 KB Carsten Strotmann to previous | to last
3 25-Apr-2010 09:20 9 KB Carsten Strotmann to previous | to last
2 25-Apr-2010 09:20 9 KB Carsten Strotmann to previous | to last
1 25-Apr-2010 09:12 9 KB Carsten Strotmann to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 109 added 2 lines
! NEXT
At line 113 added one line
! Zugriff auf den Stack
At line 123 added one line
! ROM Zugriff auf Commodore Maschinen
At line 125 added 95 lines
Beim Assemblerprogrammieren muß beachtetwerden, daß VolksForth das ROM abschaltet (bei Commodore Maschinen). Daher müssen Lesezugriffe ins ROM etwas anders organisiert warden. Beispiel fur den C16:
{{{
ffd2 jsr \ springt eine RAM-Routine an.
ff3e sta ffd2 jsr ff3f sta \ springt eine ROM-Routine an.
}}}
Sie funktioniert nur , wenn sie im unteren RAM-Bereich (<$8000) steht . Sonst folgen undefinierte Reaktionen.
Beim C64 ist eine Bankumschaltung nur für Lesezugriffe in das BASIC-ROM erforderlich. Hierbei ist zusätzlich zu beachten, daß eine Bankumschaltung mit {{{SEI}}} vorbereitet werden muß, da andernfalls der periodische Tastaturinterrupt zu einem Absturz führen wurde.
Auf dem C16 ist kein {{{SEI}}} erforderlich, da im RAM der Vektor $FFFE auf eine eigene Interruptroutine zeigt (sie benotigt ca. 1 Promille der Rechenzeit). Aus dem gleichen Grund fuhrt eine BRK-Instruktion zwar weiterhin in den Monitor, allerdings mit falschem Registerdump, da der Monitor auf dam Stack die Daten der Interruptroutine statt der Register vorfindet.
!! Glossar
! PushA ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencode-Sequenz enthält, die den Inhalt des Akku vorzeichenbehaftet auf den Datenstack legt und dann zu NEXT springt. Wird als letzter Sprungbefehl in Code-Worten benutzt.
! Push0A ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencade-Sequenz enthät, die den Inhalt des Akku auf das Low-Byte des Datenstacks ablegt. Das High-Byte wird grundsätzlich auf 0 gesetzt. Anschliessend wird zu NEXT gesprungen. Wird als letzter Sprungbefehl in Code-Worten benutzt.
! Push ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencode-Sequenz enthält, die den Inhalt des Akku als High-Byte auf den Datenstack legt. Das Low-Byte wird vom Prozessorstack geholt und muß vorher dort abgelegt worden sein. Anschliessend wird zu NEXT gesprungen. Wird als letzter Sprungbefehl in Code-Worten benutzt.
! Next ( -- addr )
Eine Konstante, die die Adresse von NEXT auf den Datenstack legt. Wird als letzter Befehl in Code-Worten benutzt.
! xyNext ( -- addr )
Wie NEXT, jedoch werden vorher das X-Register mit 0 und das Y-Register mit 1 geladen. Das System erwartet grundsätzlich bei Aufruf von NEXT diese Werte in den Registern. Ansonsten reagiert es mit Absturz.
! PutA ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencode-Sequenz enthält, die den Akku als Low-Byte auf den Datenstack ablegt. Das High-Byte wird nicht verändert, ebenso wird im Gegensatz zu PUSH kein Platz auf dem Datenstack geschaffen. Anschliessend wird NEXT durchlaufen. Wird als letzter Befehl in Code-Worten benutzt.
! Pop ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencode-Sequenz enthält, die das oberste Element vom Datenstack entfernt. Anschliessend wird zu NEXT gesprungen.Wird als letzter Sprungbefehl in Code-Worten benutzt.
! PopTwo ( -- addr )
Einc Kanstante, welche die Adressee einer Maschinencade-Sequenz enthält, welche die obersten beiden Elemente vom Datenstack entfernt. Anschliessend wird zu NEXT gesprungen. Wird als letzter Sprungbefehl in Code-Worten benutzt.
! RP ( -- addr )
Eine Konstante, welche die Adresse des Returnstackpointers enthält.
! UP ( -- addr )
Eine Konstante, welche die Adresse des Userpointers, also des Offset zu ORIGIN enthält.
! SP ( -- addr )
Eine Konstante, welche die Adresse des Datenstackpointers enthält.
! IP ( -- addr )
Eine Konstante, welche die Adresse des Instruktionspointer der Forth-Maschine enthält. Dieser zeigt auf das jeweils nächste abzuarbeitende Wort.
! W ( -- addr )
Eine Konstante, welche die Adresse des Wort-Pointers der Forth­-Maschine enthält. Dieser zeigt auf das jeweils gerade bearbeitete Wort.
! N ( -- addr )
Eine Konstante, welche die Adresse eines Speicherbereichs in der Zeropage enthält, der dem Anwender zur Verfügung steht.
! setup ( -- addr )
Eine Konstante, welche die Adresse einer Maschinencode-Sequenz enthält, die n Eleaente vom Datenstack abbaut und bei N ablegt. Die Anzahl n muß im Akku stehen, wenn SETUP als Subroutine angesprungen wird. Das oberste Element des Datenstacks liegt bei N, das zweite bei N+2 etc. Zum Schluß werden X- und Y-Register auf 0 bzw. 1 gesetzt.
! wcmp ( addr1 addr2 -- )
Dieses Assemblermakro assembliert eine Sequenz, die bei Ausfuhrung den Inhalt des Wortes an addr1 mit dem Inhalt des Wortes an addr2 vergleicht. Anschließend ist das Carry-Flag high, wenn der Inhalt von addr1 größer oder gleich dem Inhalt von addr2 ist. Es werden der Akku sowie die Statusregisterflags C Z O N verändert.
! ram ( -- )
__Commodore__
Makro. Schaltet bei Ausführung auf eine andere Speicherbank. Die genaue Wirkungsweise ist Maschinenabhängig.
! rom ( -- )
__Commodore__
Makro. Schaltet bei Ausführung auf eine andere Speicherbank. Die genaue Wirkungsweise ist Maschinenabhängig.
! sys ( addr -- )
__Commodore__
Makro. Schaltet bei Ausführung auf eine Speicherbank mit Systemroutinen und führt einen Sprung zu addr aus. Die genaue Wirkungsweise ist Maschinenabhängig.