<< Zpět

 

  Česky: , English:

Jak se pitval Sharp GDG

Každý "můj milášek" osmibiťák si zaslouží repliku. Což někdy vyžaduje speciální součástky. Spectristi si ještě mohou sehnat svou ULA, ale co chudák "můj milášek" Sharp MZ800 a jeho GDG (Graphic Display Generator)? A tak jsem zbystřil, když se 20.11.2018 objevilo na OldComp fóru vlákno "Sharp MZ - GDG foto čipu". Píše v něm suksoft: "Tak se stal malý zázrak. Mikesovi21 se úspěšně podařilo vyfotit chip našeho GDG chipu v MZ800. Stálo ho to sice jeden den života, dlouhou pracovní cestu a i nějaké peníze, ale výsledek je kvalitní."

GDG čip vyrobila firma NEC, pod označením uPD65040 (datasheet), tedy 100-pinové 2-micronové CMOS hradlové pole se 4104 buňkami, organizovanými do matice 27 x 152. Samozřejmě nelze očekávat, že by se obsah dal vyčíst z jediného celkového snímku, z detailů by se nic nerozpoznalo.

Označení v pravém dolním rohu čipu je NEC 1983 D65040 032.

Nafoceno bylo 115 obrázků ve zvětšení 20x (12 řad po 9 nebo 10 obrázcích) a 734 obrázků ve zvětšení 50x (31 řad po 22 až 26 obrázcích). Rozměr jednoho obrázku 5184 x 3456. Původní plán byl dát dohromady pár nadšenců, kteří si obrázky rozdělí a budou dešifrovat obsah.

Základní buňka sestává ze 4 tranzistorů: dva P-channel a dva N-channel, s dvouvrstvým kovovým propojením. V první vrstvě se dělají obvykle horizontální spoje, v druhé vrstvě vertikální. Horní silný horizontální spoj přivádí napájení VCC, dolní silný horizontální spoj je zem GND.

Několik hradel se podařilo dešifrovat už v dřívějších pokusech před dvěma lety, ale bylo tehdy nafoceno jen 32 buněk. Nyní se konečně stalo reálným dešifrování celého čipu. Začal jsem se do toho také trochu míchat (jako Panda38) a zkusil jsem si také dekódovat pár buněk.

Nepoužitá buňka:

Invertor:

2-vstupové NAND hradlo:

2-vstupové NOR hradlo:

3-vstupové NAND hradlo:

Nezbytným krokem se ukázalo být nejdříve všechny obrázky sestavit do jednoho velkého pole, ve kterém budou mít jednotlivé buňky svou přesnou souřadnici, aby se daly úkony automatizovat. Obrázky z mikroskopu neměly přesnou pozici, měly přesahy, trochu zešikma a ztmavené okraje ... samozřejmě, líp to realizovat nešlo. Normalizace do jednoho obrazu by v dalších postupech hodně pomohla.

Na vygenerování obrazu sestavy jsem vytvořil program. Prochází vstupní obrázky po řadách a sloupcích. Nejdříve provede jasovou korekci - normalizuje celkový jas obrázku a zesvětlí okraje. Sestaví diferenční obrázky. Namísto jasové informace obsahuje diferenční obrázek změny jasu mezi sousedními pixely. Diferenční obrázky se použijí k vyhledání překryvu obrázků. Jsou vhodnější než jasové, protože jsou méně závislé na rozdílnosti jasů. Při hledání překryvu se počítá korelace obrázků - vypočte se součet kvadrátů rozdílů pixelů obrázků. Obrázky se vůči sobě zkusmo posouvají a vyhledává se minimální korelace - což odpovídá nejshodnějšímu překryvu obrázků. Takto se sestaví k sobě obrázky v každé řadě. Vyhledáním korelace prvního obrázku v řadě se k sobě spárují správně řady. U obrázků se provede oprava šikmosti, což koriguje pootočení obrázků. Tím se obrázky buněk dorovnají do přesné souřadné sítě. Případně lze programem ještě vykreslit do výsledného obrazu souřadnou síť. Příklad diferenčního obrázku:

Během generování jsem bohužel zjistil, že řady 12 a 17 nenavazují, chybí skeny 2 řádků. Jsou nahrazené ze zvětšení 20x - je to menší kvalita obrazu, dešifrování je obtížnější, ale i s tím se to nakonec povedlo. Níže je download programu generátoru, spolu s výchozími obrázky a s vygenerovanou sestavou v 1/4 zmenšení, s rastrem i bez rastru. Program po spuštění vygeneruje soubor sestavy (má 21 GB, rozměr obrazu 90544 x 84268 pixelů), jednotlivé segmenty i zmenšené obrazy sestavy. Generování trvá hodinu. Výsledný obraz v plném rozlišení nelze kvůli přílišné velikosti zobrazit v žádném grafickém editoru, musí být zpracováván programově.

Buňky s rastem. Na jednu buňku připadají 4 vertikální linky gridu, s roztečí 106,125 pixelu, a 16 horizontálních linek gridu, s roztečí 74,215 pixelu. Mezi buňkami je 18 horizontálních linek gridu s roztečí 68,357 pixelu. Číslo buňky udává řádek a sloupec buňky.

Aby bylo možné buňky dešifrovat, bylo nutné rozsekání obrazu na jednotlivé buňky. Pro ten účel jsem připravil program GDG_cell (ke stažení níže). Do složky se umístí soubor sestavy gdg.bin, program vygeneruje obrázky s buňkami a připraví seznam gdg_cell.csv, do kterého by se vepisovaly typy buněk.

Nyní přichází na řadu dekódování funkce jednotlivých buněk. Bylo by sice možné rozpoznávání drátových propojek a funkce každé buňky ručně, ale může to být velmi obtížné kvůli připojeným signálům, kdy každá buňka vypadá jinak. Zkusil jsem si při detekci vypomoct neuronovou sítí. Již dříve jsem neuronovou síť používal na dekódování obrázků, měl jsem pro ten účel vytvořenou C++ knihovnu s podporou Cuda.

Program k detekci typů buněk je také níže ke stažení. V průběhu detekce jsem dokresloval vzorníky typů hradel. Jsou označené podle NEC datasheetu. Vzorník naleznete také v uvedeném archivu.

Ve složce gdgnet je program pro detekci pomocí neuronové sítě. Program používá obrázek sestavy ve 1/4 velikosti gdg4.jpg. Jako pomocný obrázek používá gdg16gray.tga, zmenšený obrázek ve stupnici šedé. Při spuštění programu se neuronová síť nejdříve učí podle vzorků, které nalezne ve složkách typů. Po učení se snaží detekovat dosud neznámé obrázky. Obrázky vygeneruje a uloží do složek typů. Následuje ruční fáze opravy. Složky s typy se prochází a kontroluje se, zda byl typ správně určen. Pokud ne, lze definici opravit přesunutím do správné složky, nebo zrušením přenechat detekci na automatice. Po opravě se provede nová automatická detekce. Tímto způsobem se postupuje postupně po řádcích. V konfiguračním souboru se nastaví parametry - pro které řádky se má síť učit, které řádky detekovat. Po správné detekci buněk v počátečních řádcích je síť v detekci stále úspěšnější a další řádky je stále snadnější analyzovat. Výsledkem je soubor gdg_gate.csv obsahující definici a souřadnice každého hradla. Počítá se přitom s tím, že některá hradla zabírají několik buněk.

Ještě jsem později vypomohl s analýzou pinů a vstupně/výstupních hradel - viz archiv níže. Ale dál jsem se už aktivně nepodílel na analýze GDG čipu, proto dál jen velmi stručně. Hlavní mravenčí práce spočívala na suksoft, Mikes21, microlan, uunek. suksoft připravil editor pro definici spojů, microlan spojoval, Mikes21 analyzoval funkci obvodů simulátorem Magic a definoval schéma zapojení. Testovali funkci, překreslovali, upřesňovalil, ladili, opravovali chyby.

Analýza hazardních stavů:

Kompletní náhradní "schéma" čipu:

Čítač F961 konečně čítá, stěrače stírají:

Po 4 měsících práce první oslavy:

Překreslování schéma do Eagle:

Sčítačka ve 3D:

Aktuální stav po 3/4 roce práce:

Přesně po roce se práce dostaly do stavu, kdy byl připraven adaptér pro připojení CPLD (Altera 5M1270ZT144C5) do reálného Sharpu a připravovala se implementace kódu ve VHDL. Následuje slučování obvodů do funkčních celků a analýza funkce částí GDG. suksoft testuje čítače pro generování PAL signálu v FPGA:

Květen 2020, po roce a půl, Mikes21 oživuje a programuje svůj CPLD adaptér. První náznaky funkčnosti emulovaného GDG.

A po dalším měsíci ladění a hledání chyb (chybné čítání mikrořádků a zpoždění) konečně úspěch s generováním obrazu.

Martin8bity zkouší emulaci GDG v Altera MAX V CPLD a potvrzuje, že obraz je perfektně shodný s originálním GDG. GDG implementovaný pomocí CPLD se zdá být již plně funkční, až na drobnosti k doladění. suksoft pokračuje v dešifrování funkcí GDG.

Program "GDG_draw" k barevnému označení funkčních částí GDG čipu:

Downloady

Generátor sestavy (4 části po 550 MB): část 1, část 2, část 3, část 4

Rozsekání sestavy gdg.bin na jednotlivé buňky (474 KB): GDG_cell

Analyzátor typů hradel s neuronovou sítí (280 MB): GDG_net

Piny a vstupně/výstupní hradla (28 MB): GDG_piny

Obrázek GDG čipu s piny ve 1/4 velikosti, rozměr 22014 x 21067 pixelů (103 MB): piny4.jpg

Program k barevnému označení funkčních částí GDG čipu (140 MB): GDG_draw

Miroslav Němeček

<< Zpět