--- description: Chuck Moore colorForth-áról forrás: https://web.archive.org/web/20040725170022/http://www.users.qwest.net:80/~loveall/colorForth.htm fordító: zgroska@gmail.com verzió: 0v1 - 2022.01.10 állapot: a szerkesztése folyamatban tags: colorForth, leírás, hu --- # <div style="text-align:center;">Chuck Moore <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a>-áról</div> <div style="text-align:center;">2002. november 11.</div> ___ Az igazi programozók Forth magokat írnak az assemblerben és processzor tervező VLSI CAD rendszert Forth-ban. Az előbbit 6600 bájtnyi gépikódban, az utóbbit pedig kb 4000 darab 32 bites szóból álló objektumkódban. ### Hogyan csinálják? Először néhány alapvető mérőszám. A szó értelmezője 24 bájt, a 'find' ciklus pedig 35 bájtból áll. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> rendszermagja 11 kb-ot foglal el, de csak 6600 bájt objektumkódból áll. Ez magában foglalja a <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> kernelt, felhasználói és grafikus felületet. A maradékból pedig a szótár bővíthető kb. 640 új definícióval (128 a MACRO-hoz, 512 a FORTH-hoz). Így körülbelül 1000 bájt marad a kernelbővítmények számára (MACRO-k az alapműveletekhez). Az alkalmazáskódnak „ide” kell mutatnia a 162 decimális mező vagy az A200h cím után. A blokkok 256 bájt hosszúak, és a 24\. blokkal kezdődnek (3000h cím, 12298 decimális), ahonnan az alapértelmezett melegindítás betöltődik. A kód/szótár ez alatt található. A verem a 0A0000h-nál van. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> egy egyszerű többfeladatos program, amely két feladatot használ: „god” (grafikus kimenet megjelenítése) és „main” (általában „billentyűzet”). A „main” átvált 'god'-ra („isten”-re), miközben a „key” bevitelére vár. Az "isten" minden alkalommal frissíti a videomegjelenítést, amikor átvált. A 'switch' (god-on belül) a 'frame'-nél lévő kimeneti képet a 'displ'-nél lévő AGP videomemóriába másolja. Chuck weboldala szerint az OKAD körülbelül 500 kódsorból áll. vö: [colorforth.com/vlsi.html](https://web.archive.org/web/20040725170022/http://colorforth.com/vlsi.html) Más <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a>-kódját vizsgálhatod a következő címen: [merlintec.com/download/color.html](http://www.merlintec.com/download/color.html) Egy kódsor névleges hossza körülbelül 8 szó. Tehát az OKAD névlegesen 4000 szóból vagy 16 kb forráskódból áll. A lefordított objektumkód nagyjából azonos méretű lesz, beleértve a szótári terhelést is (az adattömböket nem tartalmazza). A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> a "szó", azaz a 32 bites szó fogalma köré van írva. A számok és a karakterláncok mind 32 bites szavak többszörösei. A számok bináris formátumban, négy bites színtípussal és hexa/decimális bitjelzővel vannak megőrizve, az egyszeres pontosságú számok "szavai" pedig 27 bites előjeles bináris értékek. Az alfanumerikus karakterláncok 4 bit színinformációból állnak, a fennmaradó 28 bit pedig csomagolt Huffman karakterkódolt karakterláncok számára áll rendelkezésre. A bevitel egyszerre csak egy szó, vagy egy alfanumerikus karakterlánc vagy egy szám. A szín az egyes 32 bites szavak velejárója. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> nem sororientált, hanem **szó** orientált. A Huffman-kódolást azért választottuk, hogy a <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> és az OKAD sajátos szótárneveiben használt karakterláncokat a lehető legkompaktabb formában kódoljuk. (Írj egy másik alkalmazást más nevekkel, és lehet, hogy újra kell majd kódolnod a Huffman-kódolást az alkalmazásod karaktergyakoriságának megfelelően.) A numerikus változók a blokkhelyükön maradnak. lásd: [colorforth.com/parsed.html](http://colorforth.com/parsed.html) A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> felhasználói felületét elnézve nyilvánvaló, hogy azt Chuck sajátos gondolkodásmódja és kódolási módja alapján és számára tervezték. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> szintaxis alapegységeként egy szómodellt kényszerít ki. A felhasználói felület először kiválaszt egy színt, amely ezután meghatározza a beviteli módot. Alapszintű bevitel edetén minden szó a következő parancs kezdetekor kerül végrehajtásra/raktározásra. A blokkszerkesztő execute/enstack-ről beszúrásra/törlésre változik, ellenkező esetben a beviteli módok változatlanok maradnak. ### Visszatérve az eredeti kérdéshez: Hogyan csinálja ezt? **Először** is tanuld meg **összes** CPU műveleti kódját, ne csak a gyakran használtakat. Chuck kódja olyan műveleti kódokat használ, amelyek nem jelennek meg a fordító kimenetének dis-assembly-jében. **Másodszor**, ismerd meg a hardverplatform jellemzőit. Készíts prototípusokat, hogy kitaláld, hogyan kell egyszerű műveleteket végrehajtani. Más emberek kódja (OPC) az ő céljaikhoz fog igazodni, nem a tiédhez. Az OPC általában irreleváns általánosságokat is tartalmaz. Térképezd le a szükséges funkciókat a hardverre. **Harmadszor**, készíts minimális felhasználói felületet. Ez a kód legdrágább része. (Nemrég csináltam egy függőleges görgetősávot C nyelven. Az alapfunkciók 644 bájt objektumkódot vettek igénybe. A kész verzió, amely 3D körvonalakkal **jól nézett ki**, de semmi extra funkciót nem nyújtott, több mint 1300 bájt kódot vett igénybe.) A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> körülbelül 600 bájtot használ az alapvető bevitelhez, számkonverzióhoz és Huffman-szócsomagoláshoz. Chuck megemlíti, hogy az alap kernel kevesebb, mint 2k, így a többi (4,5k) a felhasználói felületre és a CAD-képes grafikára ment el. **Végül** Chuck arról beszél, hogy minden fejlesztési erőfeszítés a legkorábban kell megtenni: * futási időt takaríthatsz meg a fordítási időben, * a fordítási időt takaríthatsz meg szerkesztési időben, * a szerkesztési időt takaríthatsz meg tervezési időben. Végezd el a tervezést előre, és a kódbevitel/hibakeresés a fejlesztési erőfeszítésnek csak 10%-át teszi ki. ### Összefoglalva: * Ismerd meg eszközeid, hardvert és szoftvert belülről. * A felhasználói felület legyen a lehető legegyszerűbb. * Először a prototípus, a második a tervezés és az utolsó a kód. Chuck 20 éve fejleszti a <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a>-ot. Ez egy folyamat volt az egyszerűsítés és a feltalálás folyamata. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> lényege, hogy az OKAD-ot olyan módon valósítsák meg, amelyet Chuck használhat az X18 veremprocesszor és hasonló tervek megtervezéséhez. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a>-ot inkább speciális célú programozási nyelvnek tervezték, mint általános célúnak. Ez nagyban megmagyarázza, miért tűnik a <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> annyira ellenségesnek az együttműködésen alapuló programozással szemben. Kifejezetten az OKAD szükséges alapjaként jött létre. A szigor, mellyel <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> és az OKAD készült, olyan szintű, mint G. Spencer Brown „The Laws of Form (A forma törvényei)” vagy Whitehead és Russel „Principia Mathematica (Matematikai alapelvek)” című művében. Tekintsük ezt egy VLSI CAD tervezőcsomag kb. 25kb-ba való beillesztését logikai bizonyítéknak egy nyílt végű programozási nyelvvel együtt. Igazságtalan dolog bárki más kódját a <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a>/OKAD-hoz hasonlítani anélkül, hogy figyelembe vennénk az évekig tartó tervezési finomítást. És elvárni, hogy képesek legyünk olyan új <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> szoftverplatformokat létrehozni, amelyek ugyanolyan elegánsak, egyszerűen ostobaság. A <a style='color:#ff0000'>color</a><a style='color:#009900'>Forth</a> kíméletlen, brutális tervezési módszertana a számítástechnika igazi **"zenje" - „Zen of Computing”**, amelynek elsajátítása évekig is eltarthat. **YMMV** ([Your Mileage May Vary](https://www.urbandictionary.com/define.php?term=ymmv))