memxFORTH

Uživatelský avatar
gilhad
Příspěvky: 277
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

memxFORTH

Příspěvek od gilhad »

Rozhodl jsem se udělat si něco na "tahání za nožičky a čtení výsledků" pro arduina, abych snáz odhaloval chyby zapojení. Jenže to chce nějakou interaktivní slupku, protože pořád něco kompilovat a nahrávat není moc ono. Zvlášť pro jednorázové věci, jako "a nevypadnul mi nějaký drát na breadboardu?" Takže jsem se rozhodnul dát si tam něco jako FORTH, protože to by se mohlo vejít a dát ovládat.

Protože RAM je vždycky málo (i když 2kB by měly být dost pro každého), tak toho chci narvat co nejvíc do FLASH. Zejména definice všech slov, která tam budu chtít mít. A na druhou stranu bych rád definoval nová slova kdykoli mě napadne, tedy ukládal je do RAM a to znamená nějaký systém, jak tyhle dvě oblasti propojit.

Řešením se ukázalo použít __memx ukazatele a tady je "technologická ukázka", že by tak něco jako FORTH udělat šlo

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

Budu na tom pokračovat dál spíš ve formě jiného projektu, protože tam už se ty __memx ukazatele totálně ztratí pod náporem jiné funkčnosti, tak tohle nechám jako spíš nevelkou ukázku, že to vůbec nějak jde
Uživatelský avatar
cube
Příspěvky: 13
Registrován: 20 úno 2023, 15:30
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od cube »

Forth je cool :) Jen mě vždycky bolí mozek z toho pamatovat si co mám na stacku.

Ty __memx pointery se přeloží na 24bit a podmínku při každém použití, že? Znamená to že forth word musí být taky 24bit? A pokud ano, nebylo by efektivnější vynutit zarovnání všech věcí v paměti na 2B, mít a držet RAM/flash ve spodním bitu?
Uživatelský avatar
cube
Příspěvky: 13
Registrován: 20 úno 2023, 15:30
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od cube »

(vždycky = 3x když jsem se v tom něco snažil dělat :) )
Uživatelský avatar
gilhad
Příspěvky: 277
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

__memx jsou 3byty a testuje se vrchní bit, jestli se použije LD nebo LPM.
A protože se to chystám portovat i na atmega2560, tak to v horním bytu bude trochu složitější, než jen horní bit.
Ale popravdě řečeno ještě nevím, jak tohle pojmu. Uvidím, až tam dojdu. Dnes to umí "nějak" tohle:
WORDS TEST DEBUG TROUBLE DOUBLE QUIT INTERPRET BRANCH . NUMBER , WORD KEY EXIT + DUP LIT BASE STATE LAST

a dospěl jsem k přesvědčení, že když program napíšu správně a nefunguje, tak za to může překladač :)
Uživatelský avatar
gilhad
Příspěvky: 277
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

A když za to může překladač, tak je ho potřeba opravit :)

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119989
tomasp
Příspěvky: 56
Registrován: 15 dub 2014, 23:01

Re: memxFORTH

Příspěvek od tomasp »

No ale postavili se k tomu čelem a opravili to svižně.
Uživatelský avatar
gilhad
Příspěvky: 277
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

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?
Uživatelský avatar
petr-kubac
Příspěvky: 141
Registrován: 24 úno 2013, 14:43
Bydliště: Prostřední Suchá
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od petr-kubac »

Koukal jsem na GitHub a nevím co mě fascinuje více jestli FORTH, nebo ultra jednoduché, ale funkční (polo-softwarové) generování VGA
A taky mám dotaz - kolik pro Forth zbyde času - uvážíme-li, že posuvný registr pro VGA je třeba neustále krmit.
"The best computer language is a solder" - "Nejlepší programovací jazyk je pájka" - Bob Pease
Uživatelský avatar
petr-kubac
Příspěvky: 141
Registrován: 24 úno 2013, 14:43
Bydliště: Prostřední Suchá
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od petr-kubac »

Odpovídám si sám - 10% zbývá na FORTH. Tipuji že jede jen během HSYNC + VSYNC ???

A to jsem si myslel, že moje "stereofonní ultrazvuky" kde bylo 50 taktů na zpracování jednoho vzorku z AD převodníku - byly "natěsno"
"The best computer language is a solder" - "Nejlepší programovací jazyk je pájka" - Bob Pease
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1606
Registrován: 16 úno 2013, 13:26

Re: memxFORTH

Příspěvek od Dex »

A kdybys chodil občas na RoboDoupata nebo třeba na pražský Maker Faire mohl jsi to vidět naživo ;)
"all your robots are belong to us"
robodoupe.cz
Odpovědět