.. vim: noexpandtab fileencoding=utf-8 nomodified wrap textwidth=200 foldmethod=marker foldmarker={{{,}}} foldcolumn=4 ruler showcmd lcs=tab\:|- list :date: 1970.01.01 00:00:01 :tags: dir :authors: system :summary: index MHF-002/FORTH :title: MHF-002/FORTH :nice_title: |logo| MHF-002/FORTH |logo| %HEADER% %INDEX_HERE% Nápad: * `CREATE .. DOES>` má problém, že potřebuje dva ukazatele na data - kde je nové slovo (TEN) kvůli číslu/číslům a kde je vytvářející slovo (CONSTANT) kvůli programu * řeší to tím, že zakompiluje `CALL dodoes` do vytvářejícího slova a použije to jako cíl CW vytvářeného slova (a pak zneužije systémový zásobník) * problém je kód (executable) v zapisovaných datech (writable) * řešení by mohlo taky být použití 24bit pointerů s nastaveným bitem, který by NEXT (a nikdo jiný) vyhodnotil jako * načti kam směřuju, to. co tam je použij jako cíl nepřímého skoku a Parsx uložý adresu, co je za tím * ve vytvářejícím slově by byla jen adresa `dodoes` (1 CELL jako v CW, ale kódu) a do vytvářeného slova by se do CW dal ukazatel na toto pole ale s příznakem * cena je instrukce navíc v NEXT