Mix
Random mix of pages and files
01.začátek
2025.04.14 19:39:18 end SW FORTH Gilhad

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 <rich@annexia.org> http://annexia.org/forth - 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 http://mix.gilhad.cz/Sklad/74HCxx-tester-14-16.html 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 http://mix.gilhad.cz/HW/PS2-RCA-VGA/PS2-RCA-VGA.html a http://mix.gilhad.cz/Blog/Blog_2025.html#arduino-day . 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, ...