Obsah:

6502 Minimálny počítač (s Arduino MEGA), časť 3: 7 krokov
6502 Minimálny počítač (s Arduino MEGA), časť 3: 7 krokov

Video: 6502 Minimálny počítač (s Arduino MEGA), časť 3: 7 krokov

Video: 6502 Minimálny počítač (s Arduino MEGA), časť 3: 7 krokov
Video: Příběhy z historie českého internetu: Internetoví pionýři, kteří přišli příliš brzy 2024, Júl
Anonim
6502 Minimálny počítač (s Arduino MEGA), časť 3
6502 Minimálny počítač (s Arduino MEGA), časť 3

Pokračujem ešte ďalej a teraz som na hlavnú dosku pridal oktálovú západku, 8 obdĺžnikových diód LED a pole rezistorov 220 ohmov. K dispozícii je tiež prepojka medzi spoločným kolíkom poľa a uzemnením, aby bolo možné LED diódy vypnúť. Brána 74HC00 NAND bola nahradená bránou 78LS08 AND, bolo tiež zmenené vedenie k bráne. Brána AND znamená, že 6522 sa teraz nachádza na 6000 dolároch namiesto E000 dolárov.

K dispozícii je tiež kolík na pripojenie externých hodín na pohon 6502. Pri tomto pripojení nie je potrebné, aby MEGA poskytoval hodinový signál. MEGA stále monitoruje, čo sa deje s procesorom, ako predtým.

Na západku som použil 20 pinový 74HC373, pretože som nejaké mal. To bolo v poriadku, keď bol na doske, ale 74HC573 je kompatibilný so zbernicou a ušetrí veľa káblov. V obvode môže byť tiež zvážený UCN5801A, ktorý je 22 -pinovým integrovaným obvodom, ale zapojenie bude mierne odlišné.

Horná, oranžová dióda LED je indikátorom napájania a dolná ľavá červená indikuje, kedy prebieha zápis. Ten druhý bude bezvýznamný, ak bude doska bežať na vyšších otáčkach.

Upravený obvod je vyššie (s 74HC573).

Krok 1: Demonštračné programy

Demonštračné programy
Demonštračné programy

Na monitore 6502 sú zahrnuté dva jednoduché demonštračné programy a ich rozložený kód je tu.

Tento program načíta 1 do registra 6502 A a uloží ho do západky. Potom pridá 1 do registra A a uloží ho do západky. Potom vyskočí späť na 1005 dolárov a proces sa opakuje navždy.

* = 1000

1000 A9 01 LDA #$ 01 1002 8D 00 41 STA $ 4100 1005 69 01 ADC #$ 01 1007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100D. END

Tento program najskôr nastaví na výstup DDR 6522 portu B. Potom do portu a západky uloží 55 dolárov (B01010101). Register A sa potom otočí o 1 krok doprava a teraz obsahuje $ AA (B10101010). Ten je opäť uložený v porte B a západke. Program skočí späť na 1005 dolárov a pokračuje navždy.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA 6002 1005 A9 55 LDA #55 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 ŽMP 1005 1018, EN

Bystré oči medzi vami si môžu všimnúť, že farebné LED diódy vykazujú iný vzor ako zelené. Dôvodom je, že spoločný vodič je na farebných zapojený na 5 V a spoločný na zelených je spojený so zemou.

Zmeňte tento riadok kódu na program2 alebo program3.

setDataPins (program3 [offset]);

Assembler a Disassembler 6502 sú užitočné nástroje, ktoré vám pomôžu kódovať vaše programy.

Krok 2: Pridanie EEPROM

Pridanie EEPROM
Pridanie EEPROM
Pridanie EEPROM
Pridanie EEPROM
Pridanie EEPROM
Pridanie EEPROM

Na dosku EEPROM som použil pásovú dosku s rozmermi 950 x 650 mm a 19 mm kolíkové kolíky, ktoré umožnili doske vyčistiť dosku pod ňou. Táto doska sa pripája k doske 6502 nižšie. EEPROM je ATMEL 28C256, ktorý má 28 pinov a obsahuje 32 k x 8 bitov pamäte. To je viac ako dostatočné pre malé programy, ktoré sa v súčasnosti používajú.

Pre túto dosku som nevytvoril schému zapojenia, ale jeho zapojenie k doske 6502 nižšie je pomerne jednoduché. Tieto čipy EEPROM nie sú vhodné pre zbernice, takže musia byť zapojené do jednotlivých kolíkov, teda všetkých „zelených a bielych špagiet“. Vyriešil som problém premostenia na predchádzajúcej doske zapojením dátových vedení dohromady na spodnej strane dosky.

14 pinov adresy EEPROM sa pripája k príslušným kolíkom na ľavej strane (zelené vodiče) a I/O kolíky k dátovým kolíkom napravo (biele vodiče). Pin 27 (WE) je pripojený k pinu 28 (5v), pin 22 (OE) je pripojený k zemi a pin 20 (CE) je pripojený k bráne NAND. 2 vstupy brány NAND sú pripojené k A15 na hlavna tabula. To znamená, že keď sa tento pin zvýši, brána NAND dáva nízky signál kolíku CE EEPROM, čo ho robí aktívnym. S týmto nastavením to znamená, že EEPROM je možné čítať iba na čísle 6502.

Keďže EEPROM žije v 32 000 najlepších na pamäťovej mape, znamená to, že $ FFFC a $ FFFD môžu po resetovaní obsahovať počiatočnú adresu pre 6502. Keď má 6522 adresy od 6000 do 600 dolárov a západka je na 4100 dolárov, zastaví všetky konflikty pamäte.

Rovnakým spôsobom by sa dal zapísať aj vektor NMI ($ FFFA a $ FFFB) a vektor BRK / IRQ ($ FFFE a $ FFFF).

Krok 3: Programovanie EEPROM

Programovanie EEPROM
Programovanie EEPROM
Programovanie EEPROM
Programovanie EEPROM

Na uloženie programu na EEPROM potrebuje programátor. Jeden som vyrobil z pásovej dosky, Arduino Pro Mini, pár 74HC595 a zo zásuvky ZIF. Pôvodne bol programátor vyrobený pre AT28C16, ktorý má menej riadkov adresy ako AT28C256, takže bolo potrebné ho upraviť.

Schéma zapojenia ukazuje, ako prepojiť obe tieto EEPROM. Z fotografie nie je zrejmé, že tieto dva čipy 595 sú hore nohami a nie sú uvedené na obrázku. Piny 1 až 7 z 595/1 sú v súlade s A1 až A7 EEPROM bez ohľadu na to, ktoré sa používajú. To ušetrí 7 spojovacích vodičov. Doska teraz vyzerá trochu tesne, a to preto, že pôvodne som používal 24 -kolíkovú zásuvku DIL, ktorá bola teraz nahradená oveľa väčšou 28 -kolíkovou zásuvkou ZIF.

Je zahrnutý program, ktorý funguje s mojou doskou. Program bude fungovať s akýmkoľvek Arduino a 595 v obvode, ako je to znázornené. Vybral som si 5v Pro Mini, pretože je kompaktný a dostatočne lacný na to, aby ste ho nechali v nastavení.

Krok 4: Programy EEPROM

Programy EEPROM
Programy EEPROM

V programátore EEPROM sú tri jednoduché programy. Ak ich chcete použiť, odkomentujte riadok, ktorý chcete použiť.

// Čítajte z portu A z 6522

// údaje konstantného bajtu = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Po dokončení programu sa zobrazí výpis z pamäte. Nasledujúca časť programu vám dáva plnú kontrolu nad tým, čo chcete napísať alebo vymazať, nastaví $ FFFC a $ FFFD a potom zobrazí obsah daného rozsahu. Stačí odkomentovať alebo zmeniť parametre podľa svojich požiadaviek. Adresy je možné zadávať aj v desatinnom formáte.

// vymazanieEEPROM (422, 930, 0x41); // Používa sa na vymazanie celej alebo časti pamäte EEPROM - začiatok, koniec, bajt

Serial.println ("Programovanie EEPROM"); množstvo = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // Nastavte $ FFFC na 6502 writeEEPROM (0x7ffd, 0x90); // Nastavit $ FFFD pre 6502 // writeEEPROM (0x1000, 0xA9); // Napíšte 1 bajt údajov Serial.println („hotovo“); String outline = "Napísané" + (Reťazec) množstvo + "bajtov"; Serial.println (osnova); Serial.println ("Čítanie EEPROM"); printContents (0x0000, 0x112f); // Nastavenie rozsahu na zobrazenie printContents (0x7ff0, 0x7fff); // Číta posledných 16 bajtov na EEPROM

Skrátený výstup z programu je uvedený vyššie.

Krok 5: Spustenie 6502 z EEPROM

Spustenie 6502 z EEPROM
Spustenie 6502 z EEPROM
Spustenie 6502 z EEPROM
Spustenie 6502 z EEPROM
Spustenie 6502 z EEPROM
Spustenie 6502 z EEPROM

Naprogramovanú EEPROM je teraz možné vložiť do jej dosky a toto prasiatko sa vráti na hlavnú dosku 6502, ktorá sa pripojí k MEGA. Bočné a horné fotografie vyššie ukazujú, ako to všetko do seba zapadá.

6502 teraz dokáže prečítať štartovací vektor z $ FFFC a $ FFFD (čo je 9 000 dolárov) a potom skočiť na program, ktorý je tam uložený. MEGA stále poskytuje hodinový signál a jeho program je potrebné zmeniť tak, aby poskytoval iba hodinový signál a monitoroval 6502. Na to je poskytnutý upravený program.

Na spustenej fotografii je zobrazený tento program.

9000 LDA #00 A9 00

9002 STA 6003 $ 8D 03 60 9005 LDA #$ FF A9 FF 9007 STA 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR #$ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 ŽMP $ 900A 4C 0A 90

Prepínače sú zapojené do portu A a program zobrazí hodnotu, ktorú číta, na porte B a 74HC373 (ktorý je v súčasnosti skrytý). prepínače sú pripojené k zemi a LED diódy sú pripojené k 5v. EOR #$ FF opravuje problém západky a portu B so zobrazovaním rôznych vzorov preklopením bitov pred zápisom do západky.

Krok 6: Externý časový signál

Externý časový signál
Externý časový signál

Ak je na kolík v hornej časti dosky aplikovaný hodinový signál, 6502 teraz môže fungovať nezávisle od MEGA. Samozrejme to tiež vyžaduje napájanie. Experimentoval som s rôznymi hodinami a dokonca som bežal 6502 na 1MHz s kryštálovým oscilátorom. MEGA nemôže držať krok s vyššími rýchlosťami, takže musí byť odstránený.

Skúsil som aj výstup z časovača 555, ale to nefunguje. Myslím, že to môže byť tým, že to nie je štvorcová vlna? Po pripojení k jednému z výstupov CD4017 poháňal model 6502. Zaplatil som do jednej z vyššie uvedených súprav, aby som sa pokúsil získať hodinový signál.

Stále hľadám rôzne metódy na získanie hodinového signálu.

Krok 7: Záver

Ukázal som, ako postaviť niekoľko zložitých obvodov a získať veľmi jednoduchý „počítač“na prácu s minimálnym počtom súčiastok. Je pravda, že počítač v súčasnosti nemôže urobiť veľa alebo pravdepodobne urobí v budúcnosti.

Začiatkom 80. rokov som so svojim VIC20 premýšľal nad úžasným strojom a nemal som prvú predstavu o tom, ako ho začať dávať dohromady. Časy išli ďalej a s nimi aj technológia, ale stále je príjemné vrátiť sa k základom a byť hrdí na niečo, čo ste vybudovali od začiatku.

Na ďalší vývoj tohto počítača mám v úmysle dať 2k SRAM za 0000 až 2047 dolárov a pridať 1 MHz oscilátor. Pravdepodobne pridá niečo ako CD4040 (12-stupňový binárny čítač / rozdeľovač zvlnenia), aby som mohol využiť rôzne rýchlosti hodín.

Môže dokonca pridať LCD displej, ktorý poskytne textové výstupy, a nie iba blikajúce svetlá. Bude tiež potrebné upraviť programátor EEPROM, aby sa vysporiadal s väčšími programami potrebnými na prevádzku LCD displeja.

Napriek tomu, že sa MEGA stáva pre chod 6502 nepotrebným, na ladenie strojového kódu je stále užitočný. Ako každý vie, strojový kód vždy obsahuje chyby!

Odporúča: