memxFORTH

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

Re: memxFORTH

Příspěvek od gilhad »

No, ono tak nějak všechno souvisí se vším.

Na začátku bylo OMEN Kilo od Martina Malého. SBC s HD6309, RAM, ROM, ACIA a šlus. Ani LEDka nebyla. S tím jsem si chvíli hrál, ale ono to nic neumělo, ani blikat.

Tak přišlo Expanduino, které se tam připojilo jako přídavná deska na sběrnici a emulovalo několik sériových portů ve stylu ACIA, které pracně převedlo do Arduina Nano kde se mi data řadily do několika front a z několika jiných front se zase odesílaly zpět.

To nějak chodilo, ale okamžitě došla paměť, tak jsem to předělal (prostě konverzní socket s drátkama) na Arduino Every. To chodilo líp, protože víc RAM, ale ta abstrakce a objekty a tak, co jsem tam všechno navymýšlel, tomu dost bránily v rozletu a použití, Arduino struktura programu a knihovny tomu taky moc nepomáhaly a navíc to trpělo mechanickou nestabilitou a furt vypadávaly konektory a nebylo jak to zlepšit.

Takže jsem ten HD6309 přenesl na breadboard, kam už se dalo ledacos napíchat drátkama a nějak organizovat a měnit. Akorát teda se ukázal problém s napájením, když jsem to napájel z jednoho kraje, tak na druhém konci už nebylo +5V, ale asi tak +3V a ono to nějak nefungovalo dobře, občas to nefungovalo vůbec. Ale rozhodně to byl krok správným směrem, umožňoval to rozšiřovat. I napájení jsem nějak vylepšil tlustými propojkami a bylo všude rázem +5V. Jen to s těma breadbordama bylo nějak nepřenosné a drátky občas drátkovaly a občas ne, nebo rovnou vypadly. A jako tupý terminal to mělo velký moderní desktop s 24 threadovým Ryzenem a 35GB RAM - prostě trapárna ...

Tak jsem si usmyslel, že udělám Comp24, který bude na PCB 10x10 cm s 64bit konektorem a distančkama, aby cesty držely fest a dalo se to rozšiřovat a mohl jsem si to navrhnout po svém. A bude mít základní desku s CPU a grafickou kartu, která bude dělat výstup na VGA a RSA a bude dělat vstup z PS/2 klávesnice a tak podobně, protože jsem viděl nějaké projekty s Arduinem, které by něco z toho jako uměly a byly by na to mnohem příhodnější než ten Ryzen.

Takže vzniknul ten "počítač za cenu oběda", co jsem měl na loňském MakerFairu jako proof-of-concept. Ten se osvěčil, ale ATmega328P prostě neměla jednak dost RAM, jednak dost nožiček na všechno, co jsem potřeboval. (A furt vypadávaly drátky a blbě se to testovalo, tak jsem se rozhodl na tu udělat FORTH, na tahání za nožičky)

Tak jsem to převedl na Arduino Mega, které na tom bylo líp. Ale zase nemělo vyvedený pin s 16 MHz (a asi 16 dalších nožiček), takže jsem se rozhodl ATmega2560 udělat vlastní PCB, kde to bude všechno už vytažené jak potřebuju a bude to ta grafická karta.

Takže jsem udělal desku MHF-001 a osadil jí a napsal si memxFORTH, který umožňoval držet ukazatele do RAM i FLASH ve 3bytových proměnných, ale _memx chodí jen v C, nikoli v C++ a furt jsem tam musel nějak konvertovat věci mezi 24 a 32 bitama. A navíc jsem měl VGA výstup na portu, který nepodporoval IN/OUT instrukce, ale jen pomalejší STS a to už nestíhalo správně. A spoustu dalších drobností.

Takže jsem vylepšil asi 75 detailů a udělal desku MHF-002 a začal zkoumat, co s ní všechno zvládnu. FORTH jsem si napsal znova od začátku v Assembleru (převážně), to je ten memxFORTH-asm repozitář, rozchodil na tom VGA, PS/2 a hada a pokračoval ve vylepšování na SW frontě. Ale to už celkem fungovalo dost dobře, aby na tom základě to šlo použít jako grafická karta.

Takže teď se konečně zase dostávám k tomu Comp24, grafickou kartu mám (obě dvě), tak teď dělám kartu pro CPU. Původně jsem tam chtěl ATF1504 jako GLUE, ale nějak se ukázalo, že těch 64 I/O pinů nestačí na všechno, co bych tam chtěl.

Tak jsem udělal návrh se dvěma ATF1504, které si dělily zátěž mezi sebe a předávaly si mezivýsledky na několika málo pinech, čímž počet nožiček obešly. Jenže když jsem se tak učil ty ATF programovat, tak jsem zjistil, že sice s pinama vyjdu, ale logika je nějak trochu složitéjší, než jsem čekal. Ono to má ovládat 7 devices (ACIA, VIA a 4 rozšiřující desky a jednu pro rezervu), dvě MHF karty, které každá má sdílenou 128kB RAM, do toho vlastní 32kB EEPROM a 128kB RAM (ale HD6309 umí adresovat jen 64kB), takže tam budou dvě EMS okna po 4kB (kam se přez vnitřní registry ATF (naemulované uvnitř z D-latchů) dá namapovat jak ROM, tak RAM, tak obě ty sdílené paměti) a navíc to musí správně managovat signály pro ty sdílené RAM, protože tohle ty MHF desky pro zjednodušení komunikace a zámků taky delegovaly na CPU desku (že to "nějak" zařídí). A najednou prostě nebylo dost cells na všechno potřebné a nevcházelo se to. A navíc to naprosto podivně přehazovalo piny, i když byly jasně přiřazené.

Takže jsem se rozhodl použít ještě mocnější ATF1508, která má 80 I/O pinů (takže už se to zvládne) a 128 makrocells, takže už toho upočítá víc, zvlášť když odpadá externí komunikace mezi levou a pravou hemisférou, a hlavně jsem se dostal k lepší dokumentaci toho CPDL jazyka a naučil se ho líp používat a vynutit si, co má být drženo v nodech a co se naopak dá substituovat a booleansky optimalizovat, a nakonec jsem se tam se vším vešel, ještě přidal 12 bit čítač na generování FIRQ 100x za sekundu a piny držely přiřazená čísla, tak jsem konečně mohl navrhnout tu desku na CPU a poslat do výroby.

A tam jsem teď. (Sakra, to zní ještě líp, než ten vtip o tom, kolik je potřeba policajtů na zašroubování žárovky :lol: )

---

Takže ten FORTH na tahání za nožičky je jen jedna malá část příběhu a je to nástroj na kontrolu PCB a zapojení na breadboardech a tak podobně, který vždycky někam nahraju, pak zkouším, jestli vodiče vodí, stěrače stírají a houkačka houká a pak, když je HW zjevně v pořádku, ho většinou nahradí něco mnohem komplikovanějšího.

Jenže tenhle šílený projekt tak nějak není moc robot, tak jsem to tu nechtěl zase tak moc rozplevelovat a držel jsem to v jednom offtopik vláknu. (A vedle na arduino.cz, nověji hwkitchen.cz, to taky mám v jednom napůl offtopik vlánu, protože ono to sice místy arduino je, ale čím dál tím víc to driftuje někam jina, protože sice používám klasický arduino HW - atmega328P, atmega2560, SD kartu, CP2102 USB-Serial a tak, ale čím dál, tím víc dost ne-arduino způsobem. Místo Arduino-language, nejdřív GCC C++/C, potom ASM a FORTH a co se učí o intrerruptech (malé, krátké, rychlé, nesmí nic okolo sebe měnit, musí uchovat všechny registry a tak dál) to porušuju ve všech bodech a naprosto bezostyšně :lol:

Takže prostě tohle vlákno zneužívám i k věcem, které s původním tématem moc nesouvisí, resp. jejichž mrňavou částí je i to původní téma.

Ale nezdá se mi, že by věci prospělo to rozhodit na víc vláken, dokud nebude něco, co si takové vlákno zaslouží samo a bude schopné ho táhnout i delší dobu. Ale pokud to tak někdo bude chtít, aby se to nemotalo všechno do sebe, tak to klidně rozdělím :)

---

Takže nejdřív bylo HD6309, pak se přidaly dvě grafické desky, každá s ATmega2560 (a kromě hlavního účelu i použitelné jako samostatné SBC) a teď se to zase spojuje. FORTH na tahání za nožičky je jen jedním z nástrojů pro podporu vývoje a používám ho i u ostatních projektů, ale je to spíš na kontrolu HW zapojení, než na sběr a mapipulaci dat.
Odpovědět