Mikroprocesor 6502 a Junior Computer




Jelikož je autor stránek "odkojen" procesory Intel a jejich odvozeninami, zůstávaly ostatní procesory stranou. To se týkalo i veleslavného procesoru 6502. Možná k tomu přispělo i trochu posměšné označení "tříregistrový" :-) Jenže... Nedávno při objednávání součástek v eshopu GM jsem zabrousil do oddělení procesorových obvodů. Jen tak ze zvědavosti, protože vím, že v eshopu se toho dá najít víc, než v tištěném katalogu. Prakticky ihned mi padlo do oka označení 6502AP. Najel jsem myší na dostupnost a dozvěděl se, že jeden jediný poslední kus mají na pobočce v Brně. Ihned letěl do košíku. Nebyl sice levný, ale když byl poslední... :-) Takže tady je:

Mikroprocesor 6502AP

mikroprocesor 6502AP

Je to standardní procesor 6502 vyrobený firmou Rockwell. Písmeno A znamená, že může být taktovaný až 2 MHz. P znamená plastové DIP pouzdro. Teď ještě rozhodnout co s ním. Ze slavných jednodeskáčů se přímo nabízí možnost postavit si repliku KIM-1, nebo SYM-1, áánéébo Junior Computera. Kdo asi vyhraje? Bude to těsné, ale sázím na Junior Computer. A to proto, že schéma Junior Computer vyšlo v ARA 1982 i s hexavýpisem monitoru. A jeden malej školák to schéma tehdy studoval a studoval a moc si přál něco takového postavit :-)

Jenže je tu problém. Jak už to u počítačů s 6502 bývá, procesor tam není nikdy sám. Většinou má kolem sebe kámoše ze stejného vrhu. V případě Junior Computera je to tzv. RIOT (RAM, Input/Output, Timer) obvod s označením 6532, zvaný též PIA (ale "pravá" PIA byl obvod 6521). Jedná se o multifunkční programovatelný obvod, který obsahuje 128 bajtů statické RAM, čítač/časovač a hlavně dva paralelní osmibitové porty. Jenže kde ho vzít? Z běžně dostupných intelovských obvodů je prakticky identický čip 8155. Z hlediska funkcí je opravdu prakticky stejný, ale naprosto se liší filosofií ovládání. Hlavně díky multiplexované adresové a datové sběrnici. Takže tudy cesta nevede. Znásilnit klasický 8255 je taky nereálné, takže zbývají tři varianty. Vlastně čtyři.

1. sehnat originál. Buď 6532, nebo CO10750 od Atari. Mělo by to být to samé.

2. "vypálit" obvod 6532 do nějakého FPGA. Ale to neumím.

3. naprogramovat funkcionalitu 6532 do nějakého mikrokontroléru. To by šlo, 6532 je dobře zdokumentovaný. A pokud by někomu nevadilo, že jako jeden jediný servisní obvod ve stařičkém počítači funguje počítač mnohem výkonnější a modernější, tak proč ne.

4. nahradit 6532 dvojicí diskrétních 8-bitových portů. To možná lze za předpokladu, že monitor Junior Computera standardně nevyužívá RAM a Timer z 6532. RAM by případně bylo možné přeadresovat. Zdrojový kód monitoru je k dispozici, jenže to předpokládá znalost assembleru 6502. Takže původně jsem si chtěl postavit počítač s 6502, abych se naučil jeho assembler a teď se musím naučit assembler, abych si mohl postavit ten počítač... :-) A taky pochopitelně nebude možné spouštět některé z velkého množství programů pro JC (hlavně využívající timer). Ale to až tak nevadí. Pokud JC jinak pošlape a bude možné si vyzkoušet pár jednoduchých prográmků, bude to OK.

Zatím to vypadá na variantu č.4 s tím, že se budu pídit po originálu (varianta č.1). Na desce by byla normálně zapojená patice pro RIOT a do té by se do doby, než by originální 6532 byla k dispozici, strkala redukce s nějakými latchi + logikou pro jejich ovládání (a doufalo by se, že než by se postavila ta redukce, tak by se sehnal origoš RIOT :-)).

Možná by stačilo sehnat obvod PIA 6521, který obsahuje stejné porty jako RIOT, jen nemá RAM ani Timer. 6521 by měl být dostupnější. Už proto, že na rozdíl od RIOT se PIA stále vyrábí (stav k 8/2010).


Elektor Junior Computer

Kromě obvodu RIOT už u Junior Computeru nenajdeme žádné záludnosti. Posuďte sami:

mikropočítač Elektor Junior Computer

Schéma zapojení mikropočítače Junior Computer


Naprosto vše o Junior Computeru se dá najít zde: http://retro.hansotten.nl. Jsou zde naskenované snad všechny články z Elektoru snad ve všech jazykových mutacích, které se Juniora týkají. Kromě článků z časopisů jsou zde i celé knihy. Pochopitelně nechybí software, včetně zdrojového kódu monitoru. Základní představu o tom, co byl Junior Computer, si uděláte ze stručného popisu na stránce o slavných jednodeskách.


*** Aktualizace: ***

Junior Computer, tedy jeho replika, je zatím u ledu. Přednost má Petr. Stejně zatím není RIOT. Ačkoliv všechny ostatní součástky jsou již po kupě a platforma je nachystaná:

replika Junior Computer
budoucí desky CPU a terminálu Juniora
replika Junior Computer
spojené desky Juniora
 


******

Mám RIOT! Díky tomuto webu jsem získal obvod CO 10750, což je ekvivalent obvodu 6532, neboli prostě RIOT. Obvod nezištně daroval (a předtím ještě vyzkoušel) Krupkaj, provozovatel českého ATARI portálu. Honzo, ještě jednou díky! Kromě nedostatku volného času tak stavbě Juniora už nic nebrání.

RIOT Atari CO10750

RIOT Atari CO10750 (6532)

******

Neděje se toho moc, ale něco málo přece. Začalo studium obvodů a rodí se první návrhy uspořádání na desce Juniora. A taky jsem si už připravil EPROM 2716 a nahrál do ní monitor Juniora. Dále jsem objednal diplej. Původně jsem chtěl použít VQD30 (jako má PMI-80), ale bylo mi ho líto. A to už je krok vpřed :-)

******

Displeje už dorazily. Jsou sice zase obrovské a dohromady mají 8 pozic (potřebuju jen 6), ale to nevadí. Ono sehnat levný multiplexní displej se společnou katodou je docela oříšek. Navíc je na dekodéru katod jedna pozice volná, tak možná půjde jednoduše využít 7 míst displeje. Uvidíme, netuším, jak se s tím vypořádá monitor.

******

Tak po delší pauze se ledy kolem Juniora trochu hnuly. Započaly práce na procesorové desce. Oscilátor maká a "debouce circuit" s NE556 také. Sice by se to dalo řešit elegantněji a jednoduššeji (třeba s 7414), ale chtěl jsem se držet originální předlohy. Akorát ten krystal je příšernej. Ale je autentickej a stejně nic jiného, než tahle obluda na 1 MHz nebylo.

replika mikropočítače Junior Computer
deska CPU Junior Computer
replika mikropočítače Junior Computer
deska CPU Junior Computer


******

Junior Computer je hotov! Na následujících obrázcích je již hotový Junior. Deska CPU nesoucí procesor, RIOT, EPROM, RAM a pomocné obvody a deska terminálu nesoucí klávesnici, displej a jejich pomocné obvody. Před osazením ostatních obvodů byl procesor opět vyzkoušen pomocí instrukce NOP (zde EAh) "naprogramované" pomocí pullup (4k7) a pulldown (47R) odporů na datové sběrnici. Reset vektor FFFDh-FFFDh jsem neřešil, funguje to i tak a viditelné blikání bylo pozorovatelné na A13 až A15. Poté jsem osadil zbývající obvody a do EPROM nahrál jednoduchý prográmek pro otestování paměti RAM (2114 i v RIOTu). Následně jsem osadil a zkontroloval terminál a do patice putovala EPROM s monitorem. Junior běžel na první zapnutí:-)

replika mikropočítače Junior Computer
hotová procesorová deska Juniora
replika mikropočítače Junior Computer
deska terminálu Juniora

Následuje sestavený počítač a ukázka jeho provozu (adresa 03FFh, data 12h). Ještě zbývá dodělat nějaký popis klávesnice.

replika mikropočítače Junior Computer
sestavený Junior Computer
replika mikropočítače Junior Computer
Junior v akci

A nakonec konečné provedení s jumperem připojujícím 7. pozici displeje a s PC loader kabelem (viz dále popsané úpravy).

replika mikropočítače Junior Computer replika mikropočítače Junior Computer
Junior Computer - finální provedení

    JUNIOR COMPUTER monitor


Práce s Juniorem

Práce s Juniorem je jednoduchá a intuitivní. Ovšem kdo si jednou zvykne na celkem komfortní monitor PMIčka, má pocit, že monitor Juniora je primitivní. Ale ještě neznám všechna zákoutí a služby toho monitoru, tak bych mu nerad křivdil. Také samotný procesor 6502 nemám zdaleka zmáknutý. Je nutné myslet na vektory, na pevně ukotvený stack, na zero page a spoustu dalších věcí. Doporučuji stáhnout a prostudovat knihy o Juniorovi z výše uvedeného odkazu. Knihy jsou celkem 4, ale jen díly 1,2 a 4 jsou tam v angličtině (stav 12/2010). Třetí díl je jen holandsky:-) Pro stavbu a oživení je důležitý díl 1 ( Junior book 1).

Musím se ale přiznat, že jsem z procesoru 6502 byl zpočátku úplně tumpachovej. Pohled na instrukční soubor budí dojem, že je to jednoduchej procesor, vždyť těch instrukcí je jen pár. Jenže když k tomu přičtete všechny ty možnosti adresace a když najednou zjistíte, že nemáte žádný volný registry k dispozici, jste z toho vedle. Připadáte si úplně bezruký, bez těch registrů. Přechod na žádný jiný procesor pro mě nebyl takový šok, jako přechod k 6502. Proto jsem si zpočátku musel stáhnout jeho simulátor, abych byl vůbec schopen odladit nějaký jednoduchý program. Prostě jsem do toho procáku potřeboval vidět... Nakonec se mi nejlépe osvědčil tento simulátor: home.pacbell.net/michal_k/6502.html. Nemusí se instalovat a je velmi intuitivní. Další simulátory a vůbec tuny informací k 6502 naleznete na stránce 6502.org. Na následujících obrázcích je screenshot práce se simulátorem a reálný výsledek. Funguje to:-)

replika mikropočítače Junior Computer
práce se simulátorem 6502...
replika mikropočítače Junior Computer
...a výsledek v reálu

Prográmek vypisující text "Junior" si můžete naťukat z následujícího výpisu. Pro překlady opět používám TASM s tabulkou TASM65. Výhodou je, že lze používat stejnou syntaxi pro TASM i pro výše uvedený simulátor. Jen je nutné hexadeximální čísla psát jako $12AB a nikoliv jako 012ABh.

Pro snadné stanovení hodnot nutných pro zobrazení požadovaných znaků na displeji Juniora jsem si připravil jednoduchý kalkulátor. S tím je to paráda:-)

Text Junior

Stejně jako u PMI jsem i pro Juniora vytvořil prográmek pro download programů z PC, tzv. Junior PC Loader, který je popsán na samostatné stránce.


Úpravy Juniora

Přestože jsem se chtěl maximálně držet originální předlohy, provedl jsem v konstrukci několik drobných úprav.

RESET. Junior se po zapnutí sám neresetuje a je nutné to provést stisknutím tlačítka RST. Náprava je jednoduchá. K tlačítku RST stačí paralelně připojit malý elyt. Měl by vyhovovat cca 1-2,2uF. Sám tam mám 10uF a díky těm velkým odporům trvá reset zbytečně dlouho.

Dle doporučení v datasheetu procesoru 6502 jsem nepoužitý vstup RDY ošetřil pullupem 3k3. Stejně jsem ošetřil i nepoužitý vstup /SO.

Dvě nepoužitá zbylá hradla NAND z obvodu 74LS01 jsem využil jako budiče (invertory) LED a připojil je na (jinak nevyužité) výstupy PB6 a PB7 obvodu RIOT. Světýlka já rád:-))

7-míst displeje. Nepoužitý výstup 3 z dekodéru společných katod 74LS145 jsem připojil na 7. pozici displeje (myšleno zprava). Při provozu monitoru tam nepatrně prosvítá znak z pozice 6, ale není to nic dramatického a 7 pozic se v uživatelských programech může hodit. Propojka jde přes jumper, takže to lze kdykoliv zase rozpojit.

Junior PC Loader. Zbylé dva nepoužité piny PB0 a PB5 portu B z RIOT jsem vyvedl na konektor pro Junior PC Loader, abych mohl natahovat programy z PC.

EPROM 2KB. Nejzásadnější úprava se týká EPROM. Ne, že bych nemohl osadit původní 1 KB EPROM 2708 (8708), ale jen kvůli ní by bylo nutné napájení kromě +5V ještě +12V a -5V. A to je nepraktické. EPROM 1 KB 2758 s napájením jen +5V není k mání, tak jsem tam dal klasiku v podobě 2KB 2716. A abych využil i druhý kilobajt provedl jsem malou úpravu. Signály /CS7 (K7) a /CS1 (K1) z dekodéru adres jsem sloučil pomocí funkce AND. Abych nemusel dávat další čip, vytvořil jsem AND ze dvou schottkyho diod 1N5819. Pullup už jsem nepřidával, neboť už tam je odpor 3k3. Výsledný signál /CS je přiveden na /CE paměti EPROM 2716. Vstup /OE je trvale na GND (log. 0). Na vstup A10 paměti jsem připojil signál A11 procesoru (na A10 to bez úprav zapojení opravdu nejde). První KB je tak dostupný na adresách 0400h-07FFh, druhý KB je na 1C00h-1FFFh. A právě v druhém KB musí být umístěn monitor. S adresací to u Juniora není vůbec jednoduché. Monitor je sice na adresách 1C00h-1FFFh, ale ve skutečnosti se využívá zrcadlo na adresách FC00h-FFFFh! Procesor 6502 po resetu totiž skáče na adresu, kterou si načte z adresy FFFCh (low byte) a FFFDh (high byte). Zde musí být adresa startu programu! Proto také můžete v literatuře narazit na dva "různé" monitory. Jeden je od adresy 1C00h a druhý od FC00h (tento používám já). Ve skutečnosti je to ale úplně fuk...:-)

replika mikropočítače Junior Computer

Zapojení EPROM 2716 v Junior Computeru

Rozsahy adres a jejich obsazení pamětmi (mapa paměti Juniora) u mého provedení se 2KB EPROM typu 2716:

0000h - 03FFh     RAM 1KB z toho je 0100h-01FFh vyhrazeno pro stack!
0400h - 07FFh     EPROM 1KB (1/2 2716)
1A00h - 1A7Fh     RIOT RAM 128B
1A80h - 1A9Fh     RIOT registry portů a timeru
1C00h - 1FFFh     EPROM 1KB (1/2 2716) MONITOR

U procesoru 6502 je nutné počítat s tím, že některé adresy v paměťovém prostoru mají svůj pevně daný význam. Pro zásobník je vždy používána oblast 0100h-01FFh, zde tedy musí být RAM. Na adresách FFFAh-FFFBh procesor očekává cílovou adresu, kam má skočit při aktivaci nemaskovatelného přerušení /NMI. Z adres FFFCh-FFFDh si zase načte adresu kam skáče po /RESETu a konečně z adres FFFEh-FFFFh čte adresu skoku po aktivaci přerušení /IRQ. Na uvedených adresách by tedy měla být nějaká pevná paměť ROM/EPROM.


Zjednodušení Juniora

Jako u replik PMI i zde bych rád přinesl návrhy na možná zjednodušení Junior Computeru. Jenže ono to moc nejde. Na Junioru se toho moc zjednodušit nedá. Když se na to podíváte podrobně zjistíte, že jeho zapojení není úplně šťastné... Přesto alespoň trošku: zjednodušit se dá RAM. Namísto 2 pouzder 2114 lze použít nějakou RAM v jednom pouzdře. Typicky 6116 s kapacitou 2 KB. Druhý KB by se dal využít, podobně jako jsem to řešil s EPROM výše. Bohužel nelze jednoduše "posunout" address dekodér, aby adresoval po 2KB. Bylo by to ideální, ale díky umístění RIOTu to prostě nejde. Jak jsem již naznačil, bylo by možné namísto protizákmitového obvodu s NE556 použít "schmittova" hradla 7414. Sice se neušetří integráč, ale těch pár součástek okolo něj. A to je asi vše. Aby Junior zůstal Juniorem, více úprav se dělat nedá...


mikropočítač Elektor Junior Computer


RET



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