.. vim: noexpandtab fileencoding=utf-8 nomodified wrap textwidth=0 foldmethod=marker foldmarker={{{,}}} foldcolumn=4 ruler showcmd lcs=tab\:|- list tabstop=8 noexpandtab nosmarttab softtabstop=0 shiftwidth=0 linebreak showbreak=»\ ft=rst :date: 2025.04.14 19:39:18 :_modified: 1970.01.01 00:00:00 :tags: SW,FORTH :authors: Gilhad :summary: 01.začátek :title: 01.začátek :nice_title: |logo| |FORTH| %title% |logo| %HEADER% 01.začátek -------------------------------------------------------------------------------- FORTH je naprosto úžasný jazyk a kdo to neví, má mezeru ve vzdělání a měl by si ji doplnit:) S FORTHem jsem začal kdysi na BBC Micro se Z80 koprocesorem a CP/M (týjóó celých 60kB pro programy a data a k tomu grafika navíc). Psal jsem to ve strojáku, nějak to chodilo, něco to dělalo, ale Sametová Revoluce a další okolnosti to odsunuly stranou. Ten FORTH jsem si napsal podle nějakého popisu jeho chování, snad z Amára, nebo něčeho takového, určitě nebyl úplný, ale nějak fungoval a měl jsem takový pocit, že to ani není moc velký program, takže to muselo být docela malé. (Píše o se o tom `zde `__ a scany jsou `tady `_ a `tady `__ ) Pak jsem ho tak nějak používal pořád. Teda vlastně ne. Ale několik mých větších programů (jako Mzdy pro Transgass a tak) používaly větší bloky kódu s RPN a zásobníky a dalšími vychytávkami tam, kde samotný systém nestačil, a nebo kde jsem potřeboval nějaké speciality konfigurovatelné snáz než přeprogramováním. Narazil jsem na jonesforth.S pro 32bit PC (By Richard W.M. Jones ``__ - odkaz je asi už neplatný) a velice se mi líbil (doporučuju pročíst a projít si odkazy z něj) a napsal jsem v něm obecné řešení problému 8 Dam na šachovnici. A překlopil jsem ho na 64bit systémy (kde je potřeba používat jiné registry jinak a zcela jiná systémová volání) a ty dámy chodily i na nové verzi, ale pak tak nějak zase šel život okolo a nic moc z toho nebylo. (`git.annexia.org `__ `github `__ Teď si hraju s Arduinama a přemýšlím o vlastním 8bitovém počítači `Comp24 `__ a vypadá to, že se zase k FORTHu vracím z jiné strany. Jednak ho tam asi chci jako variaci na BASIC a jiné "operační systémy" osmibiťáků ... ale to se ještě uvidí, jednak mě u různých Arduin štve ladění, kdy si nemůžu jen tak snadno cvičit s nožičkama bez kompilování a nahrávání (něco na způsob ``__ ale lepšího pro ruční manipulaci). Narazil jsem na `nanoFORTH `__ a nevypadalo to špatně, ale limit na 3 písmena mi neseděl a neviděl jsem do toho tolik a tak jsem oprášil **jonesforth** a zkusím si napsat svojí vlastní verzi s Arduinem a jeho piny jako hlavním cílem a patrně i s ``__ a ``__ . Pokud mi to umožní snadno tahat za nožičky, tak skvělé, pokud to bude umět i dobře FORTHovat, tak ještě líp, hlavně jestli mě to bude bavit (zatím vypadá, že ano). Úvahy -------------------------------------------------------------------------------- * Tohle potřebuju hlavně na piny, nejčastější hodnoty asi budou +/-127 ale asi stejně vezmu aspon 16bit čísla +/-32K * jednotlivá slova se budou přidávat do RAM, primitiva budou ve FLASH kvůli úspoře místa. * **codeblock** povede do FLASH v každém případě (stačí 16b pointer) * pointer na slova musí být 24b __memx (2b pointer+mark, 0x80 znamená FLASH, 0x00 znamená RAM) * nemůžu rozdělit primitiva do FLASH a ostatní slova do RAM, protože i FORTH obsahuje dost DOCOL slov (QUIT počínaje) pro vnitřní použití * potřebuju 3B pointery, ale __memx jde jen v C a nikoli v C++ viz `tady `__ , ale přes 3B uniony to propašovat jde. * návratové adresy jsou 2B (FLASH only) * ? ukládat ukazatele jako 2 hodnoty, nebo 1 (a mít zásobníky na 3B, nebo 4B?) * 3B zásobník návratových adres zní podivně, protože CALLy a tak ukládají 2B a hlavně se to při čemkoli rozsype mnohem hůř * asi prostě bude zásobník 2B a ukazatele budou 2 položky s horním bytem nulovým (+ignorovaným v ukazatelových slovech) * začal jsem od definic typů v C a nějak se mi ta idea rozpadá na technikáliích, možná zkusím napsat nějaký kus uprostřed a pak to třeba bude jednodušší - a zkusím víc používat přetypování * umělák jako vždy hrozně kecá a drobně pomáhá :) Rozvržení -------------------------------------------------------------------------------- * FORTH_log - jak jsem skutečně postupoval `FORTH_log `__ : `01 `__, ... * FORTH_doc - co je co a co to obsahuje `FORTH_doc `__ : `01 `__, ... * FORTH_etc - věci okolo, možná nějaké prográmky, testy ... prostě mix - "a další" `FORTH_etc `__ : `01 `__, ...