FORTH - první úspěchy

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

FORTH - první úspěchy

Příspěvek od gilhad » 25 dub 2025, 06:09

Pisu si vlastni FORTH na Arduino a dnes poprve prosel neco od zacatku do konce bez padu :)

# Předhodil jsem FORTHu číslo 0x21 a slovo : DOUBLE DUP + ; jako výsledek zbylo na zásobníku 0x42 - budu to považovat za hexadecimální odpověď :)

Fulscreen obrazky tu nejdou, tak aspon odkazem z mych stranek: http://mix.gilhad.cz/SW/FORTH/odpoved.png

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: FORTH - první úspěchy

Příspěvek od Pablo74 » 25 dub 2025, 18:05

@gilhad: 42 je skvělá odpověď na... (jistě víš a znáš)
Obdivuju tvou práci, tvůj rozhled a všestrannost.

pro všechny: Na root.cz je seriál o jazyku Forth, napsal ho Pavel Tišnovský, což je záruka pro velmi vysokou kvalitu: Seriál Programovací jazyk Forth

Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

Re: FORTH - první úspěchy

Příspěvek od gilhad » 26 dub 2025, 12:59

Kdybych věděl, na co je to přesně odpověď, byl bych lepší než Hlubina Myšlení :lol:

Tadyhle jsem to hodil na github, kdyby si to někdo chtěl prohlídnout a inspirovat se :)

https://github.com/githubgilhad/memxFORTH-init

Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

Re: FORTH - první úspěchy

Příspěvek od gilhad » 02 kvě 2025, 08:39

Když jsem ten program přece napsal správně a on přesto nechodí, tak za to může překladač ... :lol:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119989

Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

Re: FORTH - první úspěchy

Příspěvek od gilhad » 17 kvě 2025, 02:26

Ten počítač za cenu oběda, co jsem ukazoval na Make Faire už kromě honění hadů začíná dělat i věci opravdu zajímavé https://github.com/githubgilhad/NanoHomeFORTH

Teď na něm běží memxFORTH, co si píšu, má kolem stovky primitiv a 13 slov kompozitních (všechno ve FLASH) a nová slova už jdou zadávat přímo z klávesnice na obrazovku, debugovat a používat. (Už ten FORTH dost začínám debugovat v něm samém)

Tady jsem se rozhodl si vykreslit vestavěný font (před mezerou mám dvojité zavorky a šipečky), tak jsem si na to napsal slovo

Kód: Vybrat vše

: ascii 0 BEGIN DUP EMIT 1 + DUP 0x100 - ==0 UNTIL DROP ; 
, prohlídnul si, jak se přeložilo

Kód: Vybrat vše

 ' ascii show 
a rovnou i spustil. (Z předchozího ladění mi nahoře ještě běží ukazatele aktuální volné paměti a jejího minima, updatované při každém framu)
Obrázek
Monitor, klávesnice a počítač, co víc člověk potřebuje?

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: FORTH - první úspěchy

Příspěvek od Pablo74 » 17 kvě 2025, 14:06

@gilhad: Opravdu máš můj obdiv!

Tvoje implementace jazyka Forth běží na ATMega328 ("Arduino"), zeptal jsem se AI, jak to vypadá s jazykem Forth na ESP32 a tady je odpověď:
Ano, pro jednočipový mikrokontrolér ESP32 existuje implementace jazyka Forth, například ESP32Forth, která vznikla jako spolupráce Brada Nelsona a dalších vývojářů. Tato implementace umožňuje využít Forth jako alternativu k běžně používanému Wiring (Arduino) nebo MicroPythonu. Níže uvádím podrobnosti o hardwarových nárocích a programovacích možnostech: ...
Ptal jsem se i na větší možnosti a dozvídám se, že:
Forth na ESP32 nabízí širokou škálu funkcí, které využívají možnosti tohoto čipu. Mezi klíčové patří:

WiFi a BLE (Bluetooth Low Energy):
Implementace Forthu plně podporuje bezdrátovou komunikaci přes WiFi a BLE, což umožňuje vytvářet síťové aplikace nebo zařízení komunikující s mobilními telefony a jinými periferiemi.
Grafické displeje:
ESP32Forth a podobné implementace umožňují připojení a ovládání grafických displejů. Některé projekty dokonce nabízejí grafické uživatelské rozhraní (GUI) přístupné přes WiFi, což je ideální pro vizuální výstup.
Přístup k periferiím:
Forth poskytuje podporu pro různé periferie, například:
SPIFFS (SPI Flash File System) a SD karty pro ukládání dat,
senzory a aktuátory běžně používané v embedded projektech.
Tyto vlastnosti činí Forth vhodným pro vývoj aplikací na ESP32, které vyžadují bezdrátovou konektivitu, grafické rozhraní nebo interakci s externími hardwarovými komponentami.
Vypadá to, že Forth se dá použít v ESP32 relativně na vše.

Právě si čtu výše zmíněný seriál o jazyku Forth, co vyšel na rootu; jelikož jsem si už v dětství trochu sáhl na ZX Spectrum, dělal v Basicu (fuj!), pak v Pascalu, C, JavaScriptu (aktuálně VueJS 3.x), dává mi postupně popis jazyka Forth smysl, i když psát v něm program vyjadřuje naprosto jinej způsob uvažování.

Díky za sdílení tvých nápadů a jejich realizací.

Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

Re: FORTH - první úspěchy

Příspěvek od gilhad » 17 kvě 2025, 16:38

Tak on FORTH může běžet takřka na čemkoli ;)

Právě na 6502.org sleduju diskusi o milliFORTH-6502, který se vejde do 1.110 bytů a vychází z milliForth, který se vejde do 336 bytů (a zbytek už jsou "jen" za běhu dopsaná slova, kterými si definuje vše, co potřebuje), ale oni neřeší RAM za běhu, nýbrž startovní velikost.

Takže minimalizovali na dřeň a i dost základní slova mají jako "high level" definovaná pomocí ještě základnějších (jako 0 1 -1 ... já tam prostě hodil standardní knihovnu a strtoul(buf,&end,BASE) a itoa(c, buf, BASE) a hotovo, všechna čísla od začátku v pohodě, oni si odvodí pár nezbytných konstant a k číslům se dostanou až o řadu kapitol dál. :lol: )

Já tady řeším, že s grafikou, která bere přez 1003 bytů ze 2kB RAM a s tím, že bootstrap je psaný v Céčku a potřebuje systémový zásobník, tam prostě nemůžu "zbytek slovníku" nasypat za běhu, ale potřebuju toho co nejvíc dát předem do FLASH a ten jeden použitelný kilobyte si co nejvíc šetřit a rozplánovat, aby zbylo co nejvíc na finální "improvizování za běhu".

No a ten FORTH se učím právě tím, jak ho implementuju a na to jsem potřeboval, aby mi co nejdřív běželo něco použitelné nějak (tam už skoro jsem) a až pak to začít víc optimalizovat a ztenčovat a rozšiřovat podle potřeby.

Ono i na Arduino jsem už viděl víc implementací, ale nějak mi nesedly, tak si to dělám po svém a mám dobrý pocit z toho, že tomu rozumím a že vím, co které slovo dělá a hlavně proč a k čemu je to dobré ;)

(Z jedné diskuze na 6502.org)
scotws wrote:
... I realized that you don't program in Forth, you use Forth as the foundation of your own programming language based on Forth.
(A může se stát, že se časem a optimalizacema a používáním dostanu k něčemu podobnému, jako ostatní implementace, nebo k něčemu zcela jinému. Ale i kdyby to bylo naprosto stejné, tak rozdíl bude, že všechna slova tam budou za nějakým účelem, k něčemu jsem je potřeboval a použil a vím, co a jak a proč dělají. Což pouhým převzetím cizího kódu nezískám.)

Uživatelský avatar
Caster
Příspěvky: 458
Registrován: 11 zář 2019, 09:02

Re: FORTH - první úspěchy

Příspěvek od Caster » 23 kvě 2025, 21:59

Pěkné. Na VŠ jsem kdysi používal alfanumerickou kalkulačku HP41-CV, kterou používali američtí astronauti jako zálohu, pokud by jim přestaly fungovat palubní počítače. I dnes ji mám jako Android aplikaci na mobilu. Používá RPN tj. obrácenou polskou logiku, tlačítko "=" na ni nenajdete. Pracuje se 4 úrovňovým zásobníkem X, Y, Z a T. Návod k použití zde.

MCU programuji v C++, které umí jejich schopnosti plně využít.

Pro velké projekty pak rychlé výpočty s velkým množství dat programuji mimo C++ (VS2022) na GPU, CUDA za využití AI, které často radím, aby pro práci s velkým množství dat nepoužívala funkce, které pracují se stohem nebo hroudou (stack/heep), ale předem si alokovala např. 2 GB RAM, data načetla do ní a tam s nimi pracovala. Je to rychlé, bezpečné a nehrozí pád programu. Aktuálně pracuji na programu pro virtuální screenig 300 proteinů x 1000 ligandů, který si sám z C++ pomocí CURL načte z internetu potřebné soubory, uloží je do RAM paměti a tam s nimi pracuje. Ve třech krocích počítá 300 000 kombinací vazebních energií a vybírá nejvhodnější kombinace, které by mohly pomoci vyléčit rakovinu.

Uživatelský avatar
gilhad
Příspěvky: 849
Registrován: 07 bře 2018, 11:22

Re: FORTH - první úspěchy

Příspěvek od gilhad » 23 kvě 2025, 23:27

Nějaký HP měl táta taky takže RPN jsem znal od mlada. Do toho našeho šly strkat magnetické proužky a na jednom z nich byla hra Přistání na Měsíci - ukazovalo to na střídačku výšku, rychlost a množství paliva a člověk vždycky zadal, kolik ho chce spálit (a měl na to omezený čas a pak to zase chvilku blikalo ta čísla a zase znovu). Cílem bylo skončit s nulovou rychlostí v nulové výšce ... jako děcka jsme to pařili furt dokola :lol:

Teď si tady hraju s hračkama, které jsem jako kluk neměl a hrozně si to užívám :)

A pro rozepisování slov do tvaru, kdy se dají uložit do FLASH jsem si napsal program v Pythonu, který to převádí z FORTHu do assembleru (primitivně, ale snadno a rychle) a překonvertoval ten FORTH i na PC (jako 32bitový program, i tak to je s kanónem na vrabce), takže tam si slova odladím, vyexportuju a pak převedu do interní slovní zásoby. Teoreticky to funguje, prakticky jsem zkusil pár věcí a vypadá to dobře, ale zatím to ještě víc ladím, než používám, a do toho balím na dovolenou :)

https://github.com/githubgilhad/pcFORTH-core

třeba takhle udělám slovo ascii, které vypíše všechny znaky (defaultně mám hexa, i když jde používat jakýkoli základ a průběžně to měnit)

Kód: Vybrat vše

: ascii 0 BEGIN DUP EMIT 1 + DUP 100 - ==0 UNTIL DROP ;

./pcFORTH.elf (vypisuje mi nějaké ladící informace v dvojitých závorkách a před promptem -» vypíše v hranatých závorkách zásobník - pořád ještě dost ladím, aby informace vítězily nad pohledností :lol: )

Kód: Vybrat vše

-»: ascii «f_create»
-»0 -»BEGIN [0805][10E7]-»DUP [0805][10E7]-»EMIT [0805][10E7]-»1 [0805][10E7]-»+ [0805][10E7]-»DUP [0805][10E7]-»100 [0805][10E7]-»- [0805][10E7]-»==0 [0805][10E7]-»UNTIL -»DROP -»; -»
' ascii [0805][10DB]-»export

: ascii LIT \'0x00000000 DUP EMIT LIT \'0x00000001 + DUP LIT \'0x00000100 - ==0 0BRANCH \'0xFFFFFFD4 DROP ;
-»ascii	


 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÄÆÇÈÉËÌÍÏÑÒÓÕÖרÚÜÝÞàáâäåæèéêìîïðñòôö÷ùúüýþÿ-»EXOT
«What?»
«EXOT»
-»EXIT «the end»
Setup done
do words.4th teda přidám ten export (okomentovaný)

Kód: Vybrat vše

: ascii 			\ nove slovo
	LIT \'0x00	        \ promenna pro cyklus
				\ BEGIN slouzi jako navesti
	DUP EMIT 		\ vypis znak
	LIT \'0x01 +	        \ i++
	DUP LIT \'0x0100 - ==0 	\ ? rovno 256?
	0BRANCH \'0xFFFFFFD4 	\ kdyz ne, opakuj
	DROP ;			\ uklid
a spustím forth2inc.py (nebo je to součástí make) a dostanu words.inc s následující částí

Kód: Vybrat vše

DEFWORD w_ascii,0,"ascii",f_docol        // 000064 	: ascii 			\ nove slovo
	.long w_lit_cw                   // 000065 		LIT \'0x00      	\ promenna pro cyklus
	.long 0x00                
                                         // 000066 					\ BEGIN slouzi jako navesti
	.long w_dup_cw                   // 000067 		DUP EMIT 		\ vypis znak
	.long w_emit_cw                 
	.long w_lit_cw                   // 000068 		LIT \'0x01 +      	\ i++
	.long 0x01                
	.long w_plus_cw                 
	.long w_dup_cw                   // 000069 		DUP LIT \'0x0100 - ==0 	\ ? rovno 256?
	.long w_lit_cw                  
	.long 0x0100                    
	.long w_minus_cw                
	.long w_zero_cw                 
	.long w_0branch_cw               // 000070 		0BRANCH \'0xFFFFFFD4 	\ kdyz ne, opakuj
	.long 0xFFFFFFD4                
	.long w_drop_cw                  // 000071 		DROP ;			\ uklid
	.long w_exit_cw                 
a po make už mám další slovo ve FLASH :lol:

---

Ale jeden z účelů těchto hrátek je mít na MCU interaktivní pohodlný shell pro různé zkoušení zapojení, kdy zatáhám za nožičky a rovnou na breadbordu měřím, kde mám kolik a jestli drátky nevypadly a odpory mají správné hodnoty (a výhledově nejen tahat, ale i posílat I2C a SPI a kdoví jaké další protokoly a přijímast odpovědi). Ono tohle jde snadno napsat v C++ pro jeden konkrétní případ, ale už tam moc nejde ta interaktivita a možnost přizpůsobování za chodu. (takový ten rozdíl, když program přeložím, někam uploadnu a nechám ho spustit a poslat si výsledky a když se tam prostě ssh-áčknu a ovládám to tam přímo na místě :lol: )

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: FORTH - první úspěchy

Příspěvek od Pablo74 » 25 kvě 2025, 18:00

A co teprve ve Forthu napsaný operační systém pro civilizaci, která přežije apokalypsu!

Collapse OS: operační systém do světa Falloutu

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host