memxFORTH

Uživatelský avatar
petr-kubac
Příspěvky: 192
Registrován: 24 úno 2013, 14:43
Bydliště: Prostřední Suchá
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od petr-kubac »

Jen tak střelím od boku - jestli mám odhad :
Vidím tam dvě identické desky. Z toho soudím, že vykreslování většího displeje zabralo více strojového času a tím začalo být jedinému procesoru opravdu úzko.
Takže jste to rozdělil - na AVR co kreslí na monitor a druhé AVR co dělá všechno ostatní - Mám pravdu?
"The best computer language is a solder" - "Nejlepší programovací jazyk je pájka" - Bob Pease
Uživatelský avatar
gilhad
Příspěvky: 310
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

To je teprve plán :)
Záměr je, že ta deska bude grafická karta k retropočítači (až ho udělám), kde se bude starat o to zobrazování a jednoduché funkce okolo (psaní textu se zalamováním na konci řádku a scrollováním na konci obrazovky a tak podobně), druhá stejná se bude starat o čtení klávesnice a práci s SD kartou (odkud při startu i nahraje obsah "ROM") (aby se nerušili se zobrazováním) a retropočítač s HD6309 a 64kB RAM (kam se nahoru nahraje ta "ROM") to celé bude řídit. A případně tam přidám ještě klasické sériové, paralelní a jiné porty (VIA,PIA, ACIA a spol)

Zatím tam jsou dvě/tři nepropojené desky jen proto, že je to jednoduchý způsob jak je skladovat.

Kreslení na monitor teď zabírá 480/520 = 12/13 času, v pavoukovi mám 10 WAIT v hlavní smyčce, což čeká na 10 nových framů aby nejezdil nesmyslně rychle.

Ono se totiž v pavoukovi skoro nic nedělá - načte se klávesa, posune se hlava, na její staré místo se nakreslí kus těla, posune se ocas, na jeho staré místo se nakreslí tráva a možná se nakreslí jedno nové ovoce, a napíše se skóre.

Tělo je uloženo jen ve videoRAM jako znaky a ocas ho vlastně žere a podle toho se rozhoduje, kam se natočit. Stejně tak tráva a zdi.

Ten program je tady https://github.com/githubgilhad/memxFOR ... /Snake.4th
od řádku 128 (: hb ...) je to už jen zobrazovani pro ruční ladění/chlubení.

vlastní kód hada končí tady (a odsud je to dobré číst pozpátku, protože to asi dává lepší smysl než začít z druhé strany definicemi binárních řetězců jako konstant):

Kód: Vybrat vše

: snake
	snake_wrap
	CLS '>' EMIT
;
Je to FORTH, takze cisla se davaji na zasobnik, slova berou argumenty ze zasobniku a vysledky vraceji zase na zasobnik.
( věci v závorkách jsou jen komentář, komentáře s dvěma pomlčkami popisujístav zásobníku před a po provedení )
: is_grass ( c -- flag ) grass_str ISINSTR ; dvojtečka zahajuje definici slova is_grass, komentář říká, že čeká znak na zásobníku a vrací příznak (jestli je zna tráva) grass_str je volání slova, které dá a zásobník adresu řetězce znaků pro trávu, ISINSTR je slovo, které testuje, jestli je znak v řetězci (je napsane v C/asm), stredník definici slova končí
BEGIN ... AGAIN je věčná smyčka, EXIT vyskočí z celého slova
BEGIN ... cosi UNTIL je smyčka, která skončí, když je na vrchu zasobníku nenulová hodnota
cosi IF tohle ELSE tamhle THEN pokud je cosi nenulove, provede se tohle, jinak tamhle (ELSE cast muze chybet)
?DUP zduplikuje vrsek zasobníku, pokud není nulový
0 VALUE hd definuje promennou hd s hodnotou nula
2 TO hd do ni ulozi dvojku

hlava má pozici hx,hy a směr hd, ocas ma tx,ty a td
Uživatelský avatar
gilhad
Příspěvky: 310
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

Tak jsem hada ještě vylepšil, že když ho člověk nehlídá, tak se hraje sám.
Obrázek
Ale když ho i tak člověk nehlídá, tak se nudí, dělá kraviny a páchá piroteskní sebevraždy :)
Obrázek
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1651
Registrován: 16 úno 2013, 13:26

Re: memxFORTH

Příspěvek od Dex »

To je ale vlastně docela zábavnej had :lol:
"all your robots are belong to us"
robodoupe.cz
Uživatelský avatar
gilhad
Příspěvky: 310
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

Jo, překvapilo mě, jak celkem jednoduchý kód má docela složité a zajímavé důsledky :) (teda, kam se hrabu na fraktály, ale stejně ...)

Pro demo režim jsem to upravil tak, že tam je jen jedno ovoce, když ho sežere, vygeneruje se náhodně jiné tak, aby bylo na prázdném místě.
Hlava se vždycky podívá, kde to ovoce je (má to uloženo od generování) a kde je ona a určí směry podle vhodnosti, pak se v tom pořadí podívá, jestli tam může jít *) a když ne, zkusí další, dokud ji nezbyde poslední možnost. A v dalším kroku zase. A to je vše :D

*) vlastní tělo je taky překážka, čímž se řeší i couvání (kousnutí se do jazyka)

Jenže pak na to člověk kouká furt a ono se to furt snaživě šmrdolí a nedá se od toho odtrhnout :roll:
(většinou se zasebevraždí/zažene do pasti asi tak kolem délky 100 což je součet stran hřiště, ale je to spíš dáno tím, že už je pak snadnější vytvořit několika ovoci právě tu past, kdy si udělá úhel s jedním políčkem ve špici a pak do něj vjede zevnitř, dřív, než mu to ocas uvolní)
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1651
Registrován: 16 úno 2013, 13:26

Re: memxFORTH

Příspěvek od Dex »

Možná by šlo nějak vylepšit generování pozice pro nové ovoce aby byla vysoká pravděpodobnost, že bude na vhodném místě?
"all your robots are belong to us"
robodoupe.cz
Uživatelský avatar
gilhad
Příspěvky: 310
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: memxFORTH

Příspěvek od gilhad »

Určitě by s tím šlo udělat strašnou spoustu věcí (kolik mě jich jen napadlo...), ale zatím to už vypadá celkem dobře, takže s chytřejší náhodou už moc šíbovat nebudu (už takhle si to hledá prázdné pozice, dokud je nenajde, takže i kdyby had byl skoro přes celé hřiště, tak ovoce nějak padat bude).

A takhle mi to v tom demu celkem vyhovuje, krátký had se nezauzluje a u dlouhého to nevadí, aspoň je zase nějaká změna. Kdyby se klikatil po skoro celé obrazovce, tak už by to zase byla nuda.

Ale ono fotka obrazovky nevystihne, jaké je to nažívo, tak se těšte na Maker Faire :lol:
Odpovědět