Try   HackMD

Chuck Moore colorForth-áról

2002. november 11.

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 colorForth rendszermagja 11 kb-ot foglal el, de csak 6600 bájt objektumkódból áll. Ez magában foglalja a colorForth 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 colorForth 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

Más colorForth-kódját vizsgálhatod a következő címen: 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 colorForth 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 colorForth nem sororientált, hanem szó orientált.

A Huffman-kódolást azért választottuk, hogy a colorForth é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

colorForth 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 colorForth 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 colorForth 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 colorForth-ot. Ez egy folyamat volt az egyszerűsítés és a feltalálás folyamata. A colorForth 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 colorForth-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 colorForth 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 colorForth é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 colorForth/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 colorForth szoftverplatformokat létrehozni, amelyek ugyanolyan elegánsak, egyszerűen ostobaság. A colorForth 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)