replika mikropočítače PETR



Tato stránka je věnována chystané stavbě repliky výukového mikropočítače Petr s jednočipem 8748. Ovšem ještě před započetím vlastní stavby probíhá interní bitva. Opravdu je dobrý nápad to stavět s 8748? Nebylo by jednodušší to postavit rovnou s nějakou "jedenapadesátkou"? Bylo. Jenže když už ty dvě "osmačtyřicítky" mám, tak tam prostě jedna z nich bude. Ovšem na x51 se bude ladit. Jenže ještě zbývá rozhodnout, jestli bude na Petrově "motherboardu" patice pro 8748 a do ní se bude vkládat redukce pro x51, nebo naopak. Na to, že x51 je pokračovatelem řady x48 mají teda dost rozdílné pinouty:

porovnání pinoutů x51 a x48

porovnání pinoutů x51 a x48

Konečné rozhodnutí je toto: na desce budou patice obě. Pro 51 (s ISP) i pro 48. Pochopitelně může být osazen vždy jen jeden jednočip. Každý bude mít vlastní krystal 6 MHz (už někdo provozoval Atmela na tak malé frekvenci:-)). RESET bude společný a úrovně budou upraveny hradly obvodu 74LS14. Ono totiž nejen, že 51 a 48 mají zcela rozdílné pinouty, ale mají i rozdílné aktivní úrovně RESETu. Plus je třeba počítat s RESETem obvodu 8155. Z řady x51 nakonec padla volba na Atmel AT89S51. Je to klasická x51 se 4KB Flash a má příjemné ISP programování. A stojí pár kaček.

Takže nakonec by měly vzniknout repliky dvě (v jednom). Jedna pro 8951 a druhá pro 8748. To proto, že bude-li si to někdo chtít postavit, bude jednodušší právě verze s 8951, protože sehnat jej není problém a naprogramovat jej umí kdekdo. Funkčně by se lišit neměly, jen možná verze s 8951 bude mít více instrukcí (má větší paměť). Ovšem z důvodu následného přepisu pro 8748 nebudou možnosti procesoru x51 plně využity. Například čítač bude využit jen jeden (8748 má také jen jeden) a s interní pamětí RAM se bude zacházet jako u 8748 (jen dvě banky registrů, jen 32 bytů volné RAM, maličký zásobník, apod).

Displej bude se společnou anodou. Jednoduše proto, že se podařilo sehnat dva pěkné třímístné zapojené pro multiplex. Strobování displeje a klávesnice bude společné. U klávesnice ale bude jedna změna. U originálu je klávesnice v matici 7x3 a jako sedmá linka multiplexu slouží bit 4 portu 2 (P24) z 8748. To zbytečně komplikuje programovou obsluhu. U repliky bude klávesnice zapojena v matici 6x4 a P24 bude sloužit pro čtení jednoho řádku. Teoreticky by tak bylo možné osadit až 24 tlačítek, ale zde se replika nebude od originálu lišit. Klávesy budou stejné (20 + Reset). Volná místa v matici nevadí. Pravděpodobnost, že se podaří sehnat origoš firmvér Petra se nápadně podobá nule, a kdyžtak se to předrátuje.

Ještě zbývalo rozhodnout co s tlačítky LOAD a SAVE. Implementovat nahrávání z/na magnetofon je zbytečné. Ovšem nějakou možnost ukládání uživatelských programů by to chtělo. Nabízí se možnost využít nějaké sériové EEPROM, třeba levné 24C64 (8KB). Z důvodu jednoduchosti by se ukládal vždy celý obsah uživatelské RAM z obvodu 8155 (256 bajtů). Bylo by tedy možné uložit 32 uživatelských programů. Poslední program by mohl mít délku jen 255 bajtů, protože poslední bajt EEPROM by sloužil k uložení počtu již nahraných programů. Po stisku LOAD by Petr nabídl číslo posledního uloženého programu. Hodnotu by bylo možné změnit na libovolné nižší číslo, nebo ponechat. Další stisk LOAD by požadovaný program nahrál do RAM v 8155. Podobně by mohlo fungovat SAVE s tím rozdílem, že nabídnuté číslo by patřilo prvnímu volnému bloku paměti. Bylo by možné jej přepsat nižší hodnotou, pro přepsání již existujícího programu.

Takže ještě jednou schéma Petra z dobového prospektu:

mikropočítač Petr

napůl blokové schéma Petra z orig. prospektu


*** Aktualizace ***

Další komplikace na obzoru: že 8048 nebude mít celočíselné dělení (DIV) se dalo předpokládat. Násobení by sice mohla mít, ale budiž, nemá. To se dá všechno obejít. Ale, že nebude mít ani odčítání, které už měl čtyřbitový procesor 4004, to teda koukám. Pochopitelně i to se dá řešit rutinou. Jenže začíná se vynořovat dotěrná otázka: "Jak to proboha tvůrci originálu všechno dostali do jednoho kila?".

******

Rutiny pro celočíselné dělení (DIV a MOD), násobení, odčítání a porovnávání čísel už jsou hotové a odladěné na PMI-80. Ještě, že u 8048 je alespoň dekrementace.

******

Na Petrovi už se pracuje. Horní vodorovná patice je pro AT89S51, dolní pro 8155. Svislá patice vlevo je pro 8748. Bílý konektor je pro ISP pro AT89S51. Na černý řadový konektor vzadu jsou vyvedeny volné porty P1 (CPU) a PA (8155). Jednořadé sokly jsou pro displej. Displej je v porovnání k ostatním součástkám obrovský. Ale na té fotce v katalogu vypadal celkem normálně... Nakonec se ale ukázalo, že se na jednu desku nevejdeme. Musel jsem obětovat místo pod displejem, kde měla být původně klávesnička. Tlačítka tedy budou na kousku jiné destičky umístěné nad tímto prostorem. Alespoň nebudou tlačítka tak utopená, ten displej je fakt obrovský:-)

replika mikropočítače Petr
budoucí PETR
replika mikropočítače Petr
budoucí PETR
 

Displej je se společnou anodou. Anody jsou spínány PNP tranzistory buzené přes "výkonové" invertory 7406. Segmenty jsou spínány tranzistorovým polem ULN2003. A protože pole má jen 7 spínačů, je desetinná tečka ovládána separátním tranzistorem. Je nutné si uvědomit, že porty obvodu 8155 jsou klasické TTL kompatibilní výstupy ze ziskem 1 a nejsou schopny takového zatížení jako porty jednočipu x51. Schéma zapojení "se udělá" dodatečně. Staví se z hlavy:-)

Dalším obvodem na desce je 74LS14, jehož dvě hradla slouží pro generování signálů RESET a /RESET. Je to zdůvodu toho, že 8748 a 8951 mají rozdílné úrovně RESETu. A také je nutné resetovat 8155. Zapojení 7414 je shodné jako u PMI Z-80. Vpravo na displejem bude sériová EEPROM 24C64.

******

PETR s AT89S51 je téměř hotov! Alespoň co se HW týče. Ovšem ani SW není pozadu. Chybí jen dodělat spolupráci se sériovou eeprom. K SW se také váže stavba nového ISP programátoru pro procesor 89S51. Proč, když jsem se vytahoval, že programátor mám se dozvíte zde. Jinak je PETR ve verzi 51 již plně funkční. Vyklubal se z toho ale natolik zajímavý počítač a projekt, že si v budoucnu zaslouží samostanou podstránku zde na nostalcompu. Bude ji mít. Bude schéma, bude popis, bude softík. "Fšecko" bude:-) Nyní zatím alespoň pár fotek z prvních krůčků Petra po světě vezdejším:

replika mikropočítače Petr
hotový PETR
replika mikropočítače Petr
PETR se umí podepsat
 

Pro účely testování instrukcí IN a OUT Petra, byla postavena jednoduchá destička připojitelná na I/O konektor Petra. Vstupy jsou simulovány 4 tlačítky a 4 DIL spínači. Jako výstupy slouží zatím 8x LED připojené přes budič 74hct541 (odpálit si port obvodu 8155 by byla škoda). Volné místo na desce lze využít třeba pro relé či jiné akční členy. Petrem lze řídit různé hračky a modely.

replika mikropočítače Petr
I/O deska
replika mikropočítače Petr
PETR s připojenou I/O deskou
 

A takto se s Petrem komunikuje:

replika mikropočítače Petr
programování Petra
replika mikropočítače Petr
ukaž co sis naakumuloval:-)
 
replika mikropočítače Petr
Petr je Ready
replika mikropočítače Petr
ajaj, chyba uživatelského programu...
 

Instrukční soubor PETRA 51 (konečná verze). Všechny instrukce jsou v současné verzi SW již plně funkční:

Instrukční soubor PETR 51

Malá hádanka. Co asi dělá a jak asi skončí následující program puštěný na Petrovi 51?

    000   LAD 000
    001   DISPA 050
    002   INCA
    003   JMP 001

******

Zprovozněno ukládání programů do sériové EEPROM a jejich nahrávání do uživatelské RAM. Namísto původně avizované EEPROM 24C64 (8KB) tam mám 24C32 (4KB). Nějak jsem se seknul při objednávání... Ale čtyři kila stačí. Lze tak uložit 16 programů. Veškeré parametry pro spolupráci s EEPROM jsou navíc ve zdrojáku vytaženy do konstant. Stačí při překladu jen změnit velikost použité EEPROM v KB a ostatní dopočítá překladač. Lze tak použít EEPROM až do 64KB.

Jak se ukázalo, původní "konečný" seznam instrukcí až tak konečný nebyl. Rozrostl se o další 4 instrukce. V PDF výše je aktualizovaný seznam. Sice doufám, že už je opravdu konečný, ale vykřikovat to raději nebudu...

Teď bude následovat pečlivé testování PETRA 51. Současně s testováním se budu snažit o nějakou optimalizaci algoritmů. Software totiž tak trochu nabobtnal. V současné době má přeložený binární kód 2,8 KB a pár bajtíků je ještě v plánu. Zdrojový kód má 31 stran A4. Je zřejmé, že pro verzi PETR 48 bude nutné software značně ořezat. Je to škoda, protože se budu muset zbavit spousty hezkých věcí:-) Pravdou je, že k tomu ani není motivace. PETR 48 bude chudý příbuzný PETRA 51, ale na druhou stranu jsou možnosti PETRA 51 oproti originálu značně rozšířené. Má 35 instrukcí (originál jen 24) z nichž některé jsou dost složité (zejména INDA a BRK), vypisuje celou řadu textových hlášek (to asi originál vůbec neuměl) a hodně zabírá také komunikace se sériovou EEPROM (upravil jsem rutiny přímo od Atmelu). Naproti tomu základ se od originálu asi moc neliší.

A ještě řešení výše položené hádanky:

    000   LAD 000   ;nahraj do střadače číslo 0
    001   DISPA 050   ;zobraz na displeji obsah střadače a počkej 500ms
    002   INCA   ;inkrementuj střadač
    003   JMP 001   ;skoč na řádek 1

Program nejprve vynuluje akumulátor a posléze cyklicky zobrazí jeho obsah, inkrementuje ho a vrací se zpět na zobrazení. Jelikož PETR pracuje jen a pouze s osmibitovým číslem bez přenosů, je rozsah použitelných čísel omezen na 0-255. Při snaze o inkrementaci hodnoty 255 je generováno chybové hlášení:

    E01.002

Chyba č.01 (překročení povoleného rozsahu čísel) na řádku 002 (INCA).

Před započetím stavby jsem si nedovedl představit, jak se bude PETR pomocí pouze 20-prvkové klávesnice vlastně ovládat. Nakonec mi dvě tlačítka zbyla. Sice jsou funkční, ale víceméně zbytečná. Jedná se o PC (nastavení a zobrazení Program counteru) a END (ukončení editace paměti). PC je úplně zbytečný a END by se dal spojit s tlačítkem STOP. Stačilo by tedy jen 18 kláves a nutno říci, že matice 6x3 by zjednodušila i stavbu. Při zapojování současné klávesnice, fyzicky uspořádané do matice 7x3, ovšem elektricky zapojené do matice 6x4, mi totiž občas selhávala představivost...

******

Tak instrukcí už je zase o jednu více. Ale 36 je konečný počet. Čestný pionýrský. Počitadlo bajtíků se zastavilo na hodnotě 2972. Dokončím dokumentaci k Petrovi 51 a vrhám se na Petra 48.

*** PETR 48 ***

První pokus s 8748 dopadl dobře. Jednočip se podařilo naprogramovat. Zatím neumí nic jiného, než periodicky čítat na LEDkách na přídavné kartě Petra. Ale zas tak primitivní to není, protože LEDky jsou připojeny na port obvodu 8155 a nikoliv přímo na 8748, takže zárodek Petra 48 už umí s obvodem 8155 pracovat:-) Ovšem zároveň se ukázalo, že tudy cesta nevede. Bude nutné si postavit jakýsi "emulační adaptér", který bude sestávat z procesoru 8048 s připojenou vnější pamětí, kterou ovšem nahradí simulátor Eprom. To celé se pak strčí do patice pro 8748 na Petrovi a takto bude vznikat software. Původní idea byla, že "se jen poupraví" firmware Petra 51 na 48, přeloží a zapíše do jednočipu. Jenže se ukazuje, že to byla opravdu jen idea. Rozdíly mezi 8048 a 8051 jsou větší, než jsem si myslel. Bude třeba více úprav a ladění. Bude třeba hodně přepisů paměti, proto ten simulátor.

*** PETR 48 zrušen! ***

Projekt Petr 48 jsem nakonec odpískal. A to hlavně z důvodu toho, že bych musel funkcionalitu Petra 51 hodně osekat. A jít do horšího se mi prostě nechce, chybí motivace. Zvláště, když Petr 51 funguje tak dobře. Sice by se dala k 8048 připojit externí paměť, ale to už se zase vytrácí to kouzlo jednoduchosti.


RET



Odladěno na MS IE 8.0 a Firefoxu při rozlišení min. 1024 x 768 pixelů
www.NOSTALCOMP.cz    2010  -  2017