VolksForth/st/ASSEMBLE.FB

1 line
19 KiB
Plaintext
Raw Normal View History

2017-04-23 22:25:49 +00:00
\\ *** Assembler *** 25may86we Dieses File enth<74>lt den 68000-Assembler f<>r volksFORTH-83. Der Assembler basiert auf dem von Michael Perry f<>r F83 entwik- kelten, enth<74>lt aber einige zus<75>tzliche Features. Wegen der Heap-Struktur im volksFORTH sind z.B. echte Labels verwendbar. Aus Geschwindigkeitsgr<67>nden enth<74>lt der Assembler kaum Fehler<65>berpr<70>fung, es empfiehlt sich daher, nach getaner Tat die Code-Worte mit einem Disassembler zu <20>berpr<70>fen. Screen $11 enth<74>lt einen Loadscreen, mit dem man der kompletten Assembler auf den Heap laden kann, damit er w<>hrend der Kompila-tionszeit zur Verf<72>gung steht, aber keinen Platz im Dictionary verbraucht. Mit CLEAR oder SAVE wird der Assembler entfernt,wenn er nicht mehr ben<65>tigt wird. \ 68000 Assembler Load Screen 26oct86we Onlyforth Vocabulary Assembler Assembler also definitions : end-code context 2- @ context ! ; ' swap | Alias *swap base @ 4 $11 +thru base ! : reg) size push .l 0 *swap FP DI) ; : Next .w IP )+ D7 move D7 reg) D6 move D6 reg) jmp >here next-link @ , next-link ! ; 2 3 +thru Onlyforth \ Internal Assembler 09sep86we Onlyforth here $1300 hallot heap dp ! -1 +load dp ! \ Extended adressing modes 09sep86we : R#) ( addr -- ) size push [ Forth ] dup 0< IF [ Assembler ] .w # D6 move D6 reg) [ Forth ] exit THEN .w FP D) ; | : inrange? ( addr -- offset f ) [ Forth ] >here 2+ - >here 0< IF dup $FFFE >here - < exit THEN dup >here negate > ; : pcrel) ( addr -- ) \ pc-relativ adressing mode inrange? [ Forth ] 0= abort" out of range" pcd) ; : ;c: 0 recover R#) jsr end-code ] ;