Když NOSTALCOMP představil na stránkách Signetics 2650 Baby System byl jsem celkem nadšený, protože s tímhle procesorem jsem si chtěl vždycky pohrát. Vzniknul v roce 1975, poměrně záhy po Intel 808o a Motorola 6800 a není rozhodně tak mocný, ale je založený na minipočítači IBM 1130 a byl v té době asi nejjednodušší na implementaci. Stačila vám ROM a RAM a nějaká ta adresní logika a měli jste kompletní systém. Moje původní myšlenka byla jen Baby System, jak ho udělal NOSTALCOMP zjednodušit použitím GAL a DIP oscilátoru a přidat nějaká ty tlačítka a blikátka. Jenže jsem si zrovna začínal hrát s MCU Cypress PSoC a tak jsem si z toho udělal učební příklad. Celý Baby System jsem zjednodušil na CPU 2650 a SRAM a vše ostatní jsem strčil do PSoC 4200L. Teda přidal jsem nějaká ta blikátka, protože, tak jako Nostalcomp, světýlka já rád.
PSoC 4200L je pro oldcomp bastlíře skvělá věc. Z mého pohledu výborně propojuje svět 5V logiky s moderními periferiemi, jako je třeba USB. Každý z nás má stole nějaké ty sériové TTL konvertory nebo rovnou RS-232c porty, bez kterých se práce se starými počítači neobejde. Proč ale nepřipojit přímo USB, když to jde a serial-USB bridge si udělat přímo v PSoC? Proč se zapojovat s diskrétní logikou, když si nakreslíte schémátko uvnitř PSoC a jen zapojíte příslušné piny? Proč se namáhat s EPROM, když ve flash je místa dost a naplnit SRAM a zamknout některé stránky v ní při spuštění systému je otázka milisekund? Na co oscilátor, když si interní 48 MHz hodiny vydělíte jak potřebujete?
No jo, už brzdím, jasně, že by se asi dal celý 2650 strčit dovnitř PSoC, ale to už by nebylo ono. Určitě spousta lidí řekne, že “ono” není ani tohle, ale jednak s tím spoustu věcí naučím a druhak nemám úplně pocit, že bych dělal něco “neoldcomp”. Schéma je pořád složené z klasické logiky, jen část obvodu leží uvnitř něčeho, co má trochu víc nožiček .
Chybami se člověk učí a i já jsem narazil. Opět mi bylo připomenuto, abych pořádně četl datasheety. Po prvním zapojení mi z PSoC unikl životodárný kouř, což nebylo dobré znamení. Díky mému prvotními nadšení, že PSoC 4200L bez problémů snese až 5.5V jsem na všechny piny VDD něco a VCC něco přivedl 5V a to nebyl úplně dobrý nápad. Jeden pin jmenující se VCCD je totiž napájení vnitřní digitální logiky, která běží na 1.8V a na ten pin se buď přivede externích 1.8V nebo se na něj dá jen blokovací kondenzátor a PSoC si zapne vnitřní stabilizátor na 1.8V. Ovšem s externími 5V nepočítal a to se teda přepočítal 😉 Njn, chce to fakt ty datasheety číst . Po odstranění ubohé mrtvolky, jsem přeškrábnul přívod 5V k osudnému pinu 48, zapájel nový MCU a přidal 1uF keramický kondenzátor.
Pak už se PSoC připojil v pohodě. Nejdřív jsem si natrénoval blikání LED, displej, tlačítka a čtení a zápis do RAM bez CPU 2650, což šlo poměrně hladce. Po připojení 2650 jsem se chvíli zaseknul na sběrnici, než jsme zjistil, že držení CPU 2650 v RESET nestačí, aby uvolnil sběrnici, ale je potřeba ho k tomu ještě donutit pomocí signálů ADREN a DBUSEN. Pak už se vše hezky rozjelo.
Signetics 2650 je fakt zajímavý procesor. Umí adresovat až 32 kB paměti, ale vše funguje po 8 kB blocích mezi kterými se dá přepínat jen pomocí instrukce skoku, což je poněkud zvláštní. Procesor má 7 8-bitových registrů – registr R0 a dvě trojice registrů R1, R2 a R3, mezi kterými se dá jednoduše přepínat. Bohužel registry jsou 8-bitové a tak 16-bitové operace jsou náročnější. Na druhou stranu adresních módů je poměrně hodně, škoda těch omezení.
Procesor má dva přímo ovládané piny SENSE a FLAG, které monitor PIPBUG s výhodou využívá na jednoduchou TTL sériovou linku. Původní PIPBUG chodil na 110 Bd, později 300 Bd a Nostalcomp monitor rozšířil a upravil až na 4800 Bd, což je safra rozdíl. Při spuštění programu se mi sériák malinko zakuckává, ale jinak chodí dobře. 300 Bd chodí bez problémů vždy. Na desce mám vyvedené všechny důležité piny, takže se dobře cokoli připojuje, měří, testuje a je zajímavé, že třeba FT232RL si s tím poradí hůře než CP2102 nebo můj interní v PSoC naprogramovaný TTL serial-USB bridge.
Pro zápis do dvou segmentovek TIL311 a čtení tlačítek jsem naimplementoval dva “porty” pro instrukce READ EXTENDED a WRITE EXTENDED. Ty jsou také celkem legrační. Standardní IO instrukce totiž podporují DATA port nebo CONTROL port. Jeden! Bez adresace! Prostě se s více porty nepočítá. No, teda počítá, jsou tam ještě ty EXTENDED instrukce, které umí 8-bitovou adresaci. Tu jsem z lenosti udělal v PSoC jen neúplnou, abych zaplnil 8-vstupé hradlo AND, ale tady je výhoda PSoC, že kdykoli si udělat úplnou adresaci není problém.
Zápis do registrů TIL311 je řešen čistě hardwarově, zatímco čtení tlačítek musí řešit PSoC SW a stav předávat do registru pro čtení portu. Šlo by to udělat také čistě hardwarově, ale tlačítka jsem připojil na piny, které snesou větší zatížení, a ty bohužel zase mají menší možnosti propojení do interní logiky, což jsem nevěděl. Na druhou stranu program na 2650 toto vůbec nepozná, prostě čte stav tlačítek z IO portu.
Tohle je velká výhoda PSoC, že “hloupé” blikání LED s tlačítkem můžete řešit několika způsoby, jde to softwarově nebo i jen hardwarově bez jediného řádku kódu a v praxi pak oba přístupy kombinujete.
Kdyby si chtěl někdo taky hrát, tak mi pár destiček zbylo .