FPMI-80

Tím názvem si nejsem ještě moc jistý, ale nějak tak by to mohlo být. Je to zkrátka PMI-80 ve FPGA.

Moje hraní s FPGA kity a s jazykem VHDL nemohlo zůstat bez následků. Navíc jsem tu už psal o tom, že jsem sehnal hezký bublinový displej a „vyntyč“ klávesnici. Sice původní myšlenka byla využít ATMegu a nějak to spájet, ale když mám ten levný kit

Výchozí situace byla takováto: Mám klávesnici bez popisků, tak jsem si udělal sadu popisků. 0-9 a A-F zůstanou stejné, no a ten zbytek budu moct prohodit třeba za KIM-1 nebo TEMS nebo BOB nebo – prostě tak!

IMG_20150725_132927

Na eBay jsem sehnal za levno dva displeje HP 5082-7441, což je něco jako CQYP95 nebo NSA1198, zkrátka devítimístný LED displej. Originální VQD30 není, ale i jiní nahrazují

Klávesnici jsem chtěl původně spájet do matice 3×8 plus jedno dedikované tlačítko pro RESET, ale pak jsem si řekl: Proč? Vždyť můžu nechat tu matici 5×5 a takhle to přivést do FPGA! A dokonce i bez další bižuterie, protože pull-upy mi udělá FPGA.

Jak s displejem? No, originál to řeší tranzistorovými budiči a dekodérem, já to (zase) jako to prase prostě připájel 1:1 na vývody FPGA (dá se omezit proud, co jimi teče) a budím to přímo 3.3V logikou. Poznámka pro zneklidněné čtenáře: To víte že tam jsou odpory!

Chvíli jsem si pálil prsty pájkou (mentální poznámka: Musím si přivézt svěrák!) a pak to připojil ke kitu. Je pátek, čtyři hodiny odpoledne.

První test bylo jen blikání segmenty. Já vám řeknu, ta radost, když to šlapalo…

IMG_20150725_095426

Fajn, co dál? Šel jsem si na Nostalcomp pro moudra (schéma, monitor atd.) a udělal postupně: RAMku, ROMku (napsal jsem si převodník z .bin do .mif) a CPU.

A tady začalo mé trápení. Použil jsem nějaké VHDL jádro 8080, co je mikroprogramované a malé. Perfektní, hurá, ale neseje to.

O krok dál: udělal jsem si modul ve VHDL, který má 3 vstupy: data1, data2 a adresa (8, 8 a 16 bitů) a výstup jako hexadecimální znaky na ten LED displej. Jo a podtaktoval jsem 8080 na 2Hz, abych to viděl prostým okem. Modul připojený na adresovou sběrnici, datovou sběrnici, na výstup z ROM, a jedeme. Syntéza, nahrání, sledovat čísla. Syntéza, nahrání, sledovat čísla. A furt dokola.

Nic. CPU na „test NOPem“ běží. Bohužel, běží úplně stejně i s reálnými instrukcemi.

Sedmá večer. Zkouším použít jinou 8080. Pak ještě Z80. Pak zase zpátky tu původní, zkouším laborovat s nestandardním signálem VMA, a tu náhle… Instrukce skoku vyvolá změnu adresy, jupí! Takže jádro procesoru pracuje!

Devět večer. Už to nějak proběhne, takže implementuju 8255 a spouštím… a nic!

Znovu laboruju, kolem jedenácté zjišťuju, že problém je jinde. Totiž – nevrátí se mi procesor z podprogramu a místo toho někde bloumá. Podstrkuju mu vlastní testovací kód, a zjišťuju, že nějak nefunguje zápis do RAMky, nebo čtení z RAMky. Respektive funguje buď jedno, nebo druhé.

Dobře, místo modulu RAM používám svou implementaci polem. Výsledek je furt stejný. Le frustrace!

Zapojuju do celého obvodu skvělou Alteráckou funkci System-in Probe a čtu signály. Hm, hm, je to velmi divné. Simuluju jádro toho procesoru v ModelSIM. Aha, aha… čtení je posunuto proti datasheetu o jeden takt, a v tu chvíli už je na datové sběrnici něco jiného, protože to nedrží RD… ááááá…

Jdu spát. Ještě před usnutím si říkám, že to celé zahodím a postavím to na podvozku od Granta Searla.

V sobotu v osm ráno zapínám Quartus, nahrávám Grantův Multicomp, nechávám v něm jádro Z80 a zkusím si spustit ten testovací kód. Něco je velmi, velmi blbě! Neběhá ani ten Grantův stroj. Nepomáhá nic. Ještě zkusím 6502 – a výsledek je tristní: Procesor se proměnil v šestnáctibitový čítač a čítá od nuly!

Strašný. V poledne opouštím tuhle neplodnou linii, vracím se zpátky ke včerejším experimentům a v návalu osvícení nahrazuju RAMku dvouportovou. Když není jádro procesoru schopné udržet adresu ještě ve chvíli, kdy čte, tak to musím vymyslet nějak jinak. A dvouportová s latchovanou adresovou sběrnicí pomohla. Ve 12:17 to vypadalo, že co do RAMky PUSHnu, to z ní taky POPnu!

Ve 12:25 se poprvé objevil známý nápis.
IMG_20150725_122339

Jo, je to pozpátku, ale to je nejmenší detail! Stačí obrátit pořadí pozic.

Napsal jsem modul na obsluhu matice kláves. S kmitočtem 50 kHz scannuje řádky a výsledek ukládá do pole 25 bitů. Co klávesa, to jeden bit. No a za tenhle modul jsem si napsal modul, který těch 25 vodičů přemapoval na signál Reset, na signál Int a na tři výstupní bity (multiplexované z čtyř vstupních). Připojil jsem to na virtuální 8255 a – nic!

Nepřekvapilo mě to. A tak jsem zase experimentoval s hexadecimálním displejem (klávesnice se ukázala jako naprosto perfektní, šlapala na první dobrou), 2Hz procesorem, logickou virtuální sondou, a tak, viz výše. Když jsem vyloučil různé jiné příčiny (nefunkční 8255 a tak), tak jsem šel už najisto: Bylo to tak! Jednak vznikaly úplně divné PIOCS, jednak adresa držela, ale procesor poslal IORD (tak mu PIO dalo data), ale přečetl si je až v dalším taktu (a na něj si IORD shodil, takže na sběrnici bylo zase velké nulové).

Vyhodil jsem Grantův dekodér sběrnice (kombinační) a udělal ho podle sebe, procesem a s datovým latchem, spouštěným signálem RD. Test s logickou sondou ukázal, že data drží… takže… takže…?

Nahodil jsem plnou ROM, přepnul hodiny zpátky na plný kotel, přeložil, nahrál, objevilo se „PMI -80“, já stisknul klávesu – a byl tam! Otazníček maličký…

IMG_20150725_160822

Protože si pamatuju, jak jsem psal emulátor a jaké mrzení bylo s mapováním kláves (jo, to schéma, co je na internetech, není moc dobré a občas člověk netuší, jestli je to klávesa 6, 8 nebo B), tak jsem ani nedoufal, že by to snad mohlo fungovat napoprvé.

A víte vy co? Fungovalo!

IMG_20150725_160830

Bylo 16:16, a já si vzal do pravé ruky mobil s kamerou, levou jsem naťukal první program…

Trvalo to nějakých 15 hodin, ale mám funkční VHDL repliku PMIčka. Ještě bych mohl pořešit load a save (třeba sériovým portem a přes USB do PC, ne?), ale hardware funguje. Až to trochu dočistím a vyhezkám, tak hodím zdrojáky ven…

Příspěvek byl publikován v rubrice Hardware se štítky , , , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.
  • odpad

    mmmm …
    Moc prima. Pro PMIčko mám slabost. I když – ta má slabost pro ně souvisí nejen s nostalgií/vzpomínkami, ale taky se samotnou spartánskou konstrukcí – a ta HW stránka tady už z principu dostává na frak (jeden drobný tisícinohý čtvereček místo těch několika původních prehistorických brouků). Ale důležité je, že je to PMI. Reinkarnace. Vzbudilo se v jiném těle, ale poznávám ho. Je prima na jeho 1kB duši narazit v další fyzické podobě 🙂

  • Nemám retroducha, ale to se o mně ví. Na druhou stranu na zapojení ani nesáhnu, jen změním propojení, vyměním procesor, a budu mít KIM-1. A co ten Heathkit s 6800? A co tam dát rovnou dva procesory a dvě architektury…?

    (Plus nezanedbatelný faktor sebevzdělávání v moderních technologiích, BTW)

  • odpad

    Já nijak nezpochybňuju a neznevažuju tvé počiny. Ale některé z těch stařečků mám iracionálně „rád“ a ono to pak má ty popisované vedlejší důsledky ve vnímání tvých výrobků. Obdivuju tvé schopnosti – během několika hodin realizovat myšlenku na HW emulaci nějakého stroje apod. Já bych o tom několik týdnů špekuloval a pak bych to stejně fyzicky neudělal 😉
    Je dobře, že jsou jedinci jako ty. Až ten multi-stroj (KIM,PMI,Heathkit) doděláš, tak jej od tebe koupím 😀

  • Přispěj na mou knihu o elektronice, a když se vybere dost, tak si postavíš svůj. Bude tam návod… 😉

  • odpad

    aha – a kde je o té knize něco víc?

  • Aha. Já ji tady ještě nepromoval, z pochopitelných důvodů: http://www.misantrop.info/naucim-vas-mluvit-elektronicky/

  • odpad

    Prima – a máš to už na některém z uváděných startovačů? Určitě takovou věc podpořím – přesně to vystihuje i mou představu o potřebném průvodci pro vstup do našeho báječného světa . A v dnešní realitě je představa původního aktuálního díla v Češtině až neuvěřitelná.

  • Teprve to bude, plánuju to po prázdninách.

  • Martˇa Staník

    Ta vzpomínaná kniha Od krystalky… se nám válí ještě někde v polici. Pokoušel jsem se v mládí sestavit krystalku, ale nikdy mi nefachala – velké zklamání. Až o x desítek let později jsem se dověděl, že to bylo sluchátkem (nějaké telefonní) s nedostatečnou impedancí. V té knize to snad ani nebylo zmíněno, že je potřeba vysoká impedance. (stejně nechápu, jak je možné, že by to mělo hrát)
    Z dalších knih bych možná zmínil: Bity do bytu, Od logických obvodů k mikroprocesorům – měl to brácha, na mě to už bylo příliš.
    Každopádně fandim ať se dílo povede. Není moc knih, kde by toto téma bylo podáno záživnou formou, pokud možno polopatě. I proto, že se mi líbí tvůj styl psaní (… zase velké nulové :-)).

  • V té knížce bylo asi šestkrát napsáno „vysokoimpedanční sluchátko“ 🙂 Pamatuju si to, protože jsem jako dítě netušil, co to znamená, a bylo to takové mysteriózní zaklínadlo… 😉

  • Martˇa Staník

    Opravdu? Tak to jsem asi nějak přehlíd… Táta měl ještě knihu Radioamatérské konstrukce, myslím 4 díl. Byl tam i návod na stavbu osmibitu. Ale to už bylo mimo mé schopnosti a možnosti.

  • odpad

    Zajímalo mne, co je to za knížku (neznal jsem ji) a tak jsem se podíval, jestli se neválí na té „velké hromadě všeho“.cz … byly tam dva balíčky skenů, kdy ani jeden nebyl kompletní, ale dohromady se to dalo sestavit. Tady to je zpracované (i prohledávatelné) 😉
    http://www.uschovna.cz/zasilka/FPKHF9NKLUZBKG5Y-4AX/

  • Paráda. A ďalší krok by mohlo byť PMD85 🙂

  • Ta konstrukce osmibitu mě zaujala… Pohledám, díky za tip.

    Edit: Aha, tak to byla Savia 84: http://www.nostalcomp.cz/savia.php

  • Uvidíme 🙂 To bude ale chtít externí paměť a pak nějaký vhodný postup, jak převést neortodoxní rozlišení PMD na vhodné VGA…

  • Martˇa Staník

    Když už jsme u těch knih a vzpomínání, eště jsem si vzpomněl na jednu výbornou knihu: Elektřina kolem nás. Ale nebylo to ani tak o bastlení, spíš o vysvětlování pojmů, co jak funguje apod. Může to být dobré doplnění k nějaké praktičtější knize, třeba té co právě vzniká.

  • Právě před dvěma týdny mi přišla z antikvariátu… 🙂 http://www.databazeknih.cz/knihy/elektrina-kolem-nas-102465

  • Martˇa Staník

    Že mě to nepřekvapuje… 🙂 Omlouvám se, že tu ještě opruzuju, ale ještě se mi vybavila jedna docela zajímavá kniha – Rozeberte si PC. Zaujal mě tam pokus zobrazení magnetického záznamu třeba na disketě pomocí roztoku feritového prachu v sladké vodě.
    http://martastanik.rajce.idnes.cz/nastenka#RozebertesiPC_134-5.jpg
    Taková bezůčelná ptákovinka.

  • Ale to je pěkné! 🙂 Dík

  • Martˇa Staník

    Mohu mít ještě připomínku či spíše návrh? Bylo by možno sepsat nějaký polopatistický návod na to, jak si naprogramit vlastní emulátor? Nemusí to být nutně kniha, stačilo by pár článků na netu po vzoru vhdl.cz. Nebo jestli něco takového již existuje, nejlíp v češtině, bylo by to fajn. Byl bych ochoten i zaplatit. Opravdu. Třeba v naturáliích (třešně, svestičky ze zahrádky :), ale to spíš až za rok). Programit trochu umim (středně pokročilý amatér :)), tak snad bych se s tim nějak popral.

  • Něco je na Retročipu, ale sepsat bych to mohl.

  • Pochopil som spravne ze ten display si pripojil bez predradnych odporou?

  • zzindigo

    Prevod v pripade ze videoram bude vo FPGA nebude velky problem 😉 Len sa musi vybrat vhodne casovanie (75Hz) aby to neblblo

  • No, spíš mi šlo o to, že převést 288×256 na nějaké VGA rozlišení bude znamenat buď velký border, nebo nestejně velké pixely. 75Hz je OK, ale to rozlišení… Moc se mi nelíbí, když je jeden pixel větší než ten vedlejší.

  • 800×600 je IMAO v poriadku a kazdy pixel bude 2×2

  • border bude 44 nahoře, 44 dole a 112 po stranách… to by asi šlo.

  • Tak VHDL vs Programovanie je velky rozdiel. Sam sa vzdy tak tyzden prepinam z jedneho do druheho.

    p.s. na mojom PMI vo FPGA hneva CS signal na 8255

  • Uz ma nehneva nic. PMI beha jak z praku.

  • Gratuluju. Jaks řešil tu Savii a spol.? Jen jinou ROMkou? AFAIK by měly být jinak shodné…

  • z80 namiesto 8080 a ina rom
    na web dam link na zdrojaky

  • Dej, prosím, třeba mě to donutí dát ty svoje 🙂

  • su na stranke projektu http://zz-indigo.mavipet.sk/?page_id=1846

    len mam stary ssl certifikat. zajtra skusim fixnut

  • Pěkné, díky, už jsem si Gitem naklonoval… Na tu entitu 8255 máš nějaký odkaz, nebo je to ta z OpenCores?

  • chod o adresar nizsie. odkial ju mam teraz neviem ale upravoval som ju

  • naklonij adresar fpga_pc tam se aj svaby. iked cast ako externals

  • Mám naklonované celé tvé veřejné SVN 🙂

  • firemne ma 0,5 tera to nechces?

  • ano

  • a sudiac podla vhdl.cz aj veb bol zdrojom informacii 😉

  • Po pravdě jsem se do toho ještě moc nedíval. Jen jsem to zazálohoval, protože tyhle věci mají tendenci mizet z webu, a v zálohách jako když najdeš… Ale pro vhdl.cz byl spíš zdrojem informací Grant Searle, Doulos a asi šest anglickejch knížek.

  • ja to mam na dvoch mirstach ako repozitar a na dalsich stiroch je aktualna verzia

  • ad zdroje. neboj viem ze moje stranky su len utrzkovyte. ale ked som cital tvoje pri jednom odstavci mi bolo jasne ze si si moje veci precital poriadne

  • Tak ten odstavec by mě zajímal…