Obsah:

6502 Minimální počítač (s Arduino MEGA) Část 3: 7 kroků
6502 Minimální počítač (s Arduino MEGA) Část 3: 7 kroků

Video: 6502 Minimální počítač (s Arduino MEGA) Část 3: 7 kroků

Video: 6502 Minimální počítač (s Arduino MEGA) Část 3: 7 kroků
Video: Vlastní Windows na CPU Z80 4 MHz, 160 Kb RAM, 720 Kb FDD 2024, Prosinec
Anonim
6502 Minimal Computer (with Arduino MEGA) Part 3
6502 Minimal Computer (with Arduino MEGA) Part 3

Ještě dále, nyní jsem na hlavní desku přidal Octal Latch, 8 obdélníkových LED a pole odporu 220 Ohm. Mezi společným kolíkem pole a zemí je také propojka, takže LED diody lze vypnout. Brána 74HC00 NAND byla nahrazena bránou 78LS08 AND, bylo také změněno zapojení k bráně. Brána AND znamená, že 6522 se nyní nachází na 6000 $ místo E000 $.

K dispozici je také kolík pro připojení externích hodin k pohonu 6502. S tímto připojením není potřeba, aby MEGA poskytoval hodinový signál. MEGA stále monitoruje, co se děje s procesorem, jako dříve.

Na západku jsem použil 20kolíkový 74HC373, protože jsem nějaké měl. To bylo v pořádku, když byl na prkénku, ale 74HC573 je kompatibilní se sběrnicí a ušetřilo by to spoustu kabeláže. V obvodu může být uvažován také UCN5801A, což je 22pinový IC, ale zapojení se bude mírně lišit.

Horní oranžová LED dioda je indikátor napájení a spodní spodní červená indikuje, že probíhá zápis. Ten bude nevýznamný, pokud bude deska provozována ve vyšších rychlostech.

Upravený obvod je výše (u 74HC573).

Krok 1: Demonstrační programy

Demonstrační programy
Demonstrační programy

Dva jednoduché předváděcí programy jsou součástí monitoru 6502 a jejich rozebraný kód je zde.

Tento program načte 1 do registru 6502 A a uloží jej do západky. Poté přidá 1 do registru A a uloží jej do západky. Poté skočí zpět na 1005 $ a proces se navždy opakuje.

* = 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 nejprve nastaví DDR výstupu 6522 portu B na výstup. Do portu a západky pak uloží 55 $ (B01010101). Registr A se poté otočí o 1 krok doprava a nyní obsahuje $ AA (B10101010). To je opět uloženo v portu B a západce. Program skočí zpět na 1005 $ 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

Bystré oči mezi vámi si mohou všimnout, že barevné LED diody ukazují jiný vzor než zelené. Důvodem je, že společný vodič je připojen k 5v na barevných a společný na zelených je připojen k zemi.

Změňte tento řádek kódu na program2 nebo program3.

setDataPins (program3 [offset]);

6502 Assembler a Disassembler jsou užitečné nástroje, které pomáhají kódovat vaše programy.

Krok 2: Přidání EEPROM

Přidání EEPROM
Přidání EEPROM
Přidání EEPROM
Přidání EEPROM
Přidání EEPROM
Přidání EEPROM

Pro desku EEPROM jsem použil desku s lištou 950 x 650 mm a 19 mm kolíkové zástrčky, aby bylo možné desku vyčistit pod ní. Tato deska se zapojuje do desky 6502 níže. EEPROM je ATMEL 28C256, který má 28 pinů a obsahuje 32k x 8 bitů paměti. To je pro malé programy, které se v současné době používají, více než dostačující.

Neudělal jsem schéma zapojení pro tuto desku, ale je docela jednoduché, jak se připojuje k desce 6502 níže. Tyto čipy EEPROM nejsou vhodné pro sběrnice, takže musí být připojeny k jednotlivým kolíkům, tedy všem „zeleným a bílým špagetám“. Vyřešil jsem problém přemostění na dřívější desce zapojením datových linek dohromady na spodní straně desky.

14 adresových pinů EEPROM se připojuje k příslušným pinům na levé straně (zelené vodiče) a I/O piny k datovým pinům napravo (bílé vodiče). Pin 27 (WE) je připojen k pinu 28 (5v), pin 22 (OE) je připojen k zemi a pin 20 (CE) je připojen k bráně NAND. 2 vstupy brány NAND jsou připojeny k A15 na hlavní deska. To znamená, že když tento pin stoupne, NAND brána dává nízký signál CE pinu EEPROM, který jej aktivuje. S tímto nastavením to znamená, že EEPROM lze přečíst pouze na 6502.

Vzhledem k tomu, že paměť EEPROM žije na 32 000 nejlepších na mapě paměti, znamená to, že $ FFFC a $ FFFD mohou obsahovat počáteční adresu pro 6502 poté, co byla resetována. S adresou 6522 mezi 6000 a 600 $ a západkou na 4100 $ se zastaví jakékoli konflikty paměti.

Vektor NMI ($ FFFA a $ FFFB) a vektor BRK / IRQ ($ FFFE a $ FFFF) lze také zapsat stejným způsobem.

Krok 3: Programování EEPROM

Programování EEPROM
Programování EEPROM
Programování EEPROM
Programování EEPROM

K uložení programu na EEPROM potřebuje programátor. Jeden jsem vyrobil z páskové desky, Arduino Pro Mini, pár 74HC595 a ze zásuvky ZIF. Původně byl programátor vyroben pro AT28C16, který má méně adresových řádků než AT28C256, takže musel být upraven.

Schéma zapojení ukazuje, jak zapojit obě tyto EEPROM. Z fotografie není zřejmé, že dva čipy 595 jsou vzhůru nohama a ne tak, jak je znázorněno na schématu. Piny 1 až 7 z 595/1 jsou v souladu s A1 až A7 EEPROM bez ohledu na to, který je použit. Tím se ušetří 7 propojovacích vodičů. Deska nyní vypadá trochu těsně, a to proto, že původně jsem použil 24kolíkovou zásuvku DIL, která byla nyní nahrazena mnohem větší 28pólovou zásuvkou ZIF.

Součástí je program, který pracuje s mým boardem. Program bude fungovat s jakýmkoli Arduino a 595 v obvodu, jak je znázorněno. Vybral jsem 5v Pro Mini, protože je kompaktní a dostatečně levný na to, aby byl ponechán v nastavení.

Krok 4: Programy EEPROM

Programy EEPROM
Programy EEPROM

V EEPROM programátoru jsou tři jednoduché programy. Chcete -li je použít, stačí odkomentovat řádek, který chcete použít.

// Čtení z portu A 6522

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

Po dokončení programu se zobrazí výpis paměti. Část níže uvedeného programu vám dává plnou kontrolu nad tím, co chcete napsat nebo vymazat, nastaví $ FFFC & $ FFFD a poté zobrazí obsah daného rozsahu. Jednoduše odkomentujte nebo změňte parametry, jak požadujete. Adresy lze také zadat v desítkovém formátu.

// eraseEEPROM (422, 930, 0x41); // Použijte k vymazání celé nebo části EEPROM - začátek, konec, byte

Serial.println ("Programování EEPROM"); částka = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // Nastavit $ FFFC pro 6502 writeEEPROM (0x7ffd, 0x90); // Nastavit $ FFFD pro 6502 // writeEEPROM (0x1000, 0xA9); // Napište 1 bajt dat Serial.println ("hotovo"); String outline = "Napsáno" + (Řetězec) částka + "bajtů"; Serial.println (obrys); Serial.println ("Čtení EEPROM"); printContents (0x0000, 0x112f); // Nastavit rozsah pro zobrazení printContents (0x7ff0, 0x7fff); // Přečte posledních 16 bajtů na EEPROM

Zkrácený výstup z programu je výše.

Krok 5: Spuštění 6502 z EEPROM

Spuštění 6502 z EEPROM
Spuštění 6502 z EEPROM
Spuštění 6502 z EEPROM
Spuštění 6502 z EEPROM
Spuštění 6502 z EEPROM
Spuštění 6502 z EEPROM

Naprogramovanou EEPROM lze nyní vložit na její desku a toto prasátko se připojí k hlavní desce 6502, která se připojí k MEGA. Výše uvedené boční a horní fotografie ukazují, jak to všechno do sebe zapadá.

6502 nyní může přečíst počáteční vektor z $ FFFC a $ FFFD (což je 9000 $) a poté přeskočit na program, který je tam uložen. MEGA stále poskytuje hodinový signál a jeho program je třeba upravit tak, aby poskytoval pouze hodinový signál a monitoroval 6502. K tomu je k dispozici upravený program.

Na běžící fotografii je tento program spuštěn.

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

Přepínače jsou zapojeny do portu A a program zobrazí hodnotu, kterou čte, na portu B a 74HC373 (který je v současné době zakryt). spínače jsou připojeny k zemi a LED diody jsou připojeny k 5v. EOR #$ FF opravuje problém západky a portu B se zobrazováním různých vzorů převrácením bitů před zápisem do západky.

Krok 6: Externí časový signál

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

Pokud je na kolík v horní části desky aplikován hodinový signál, může 6502 nyní běžet nezávisle na MEGA. Samozřejmě také potřebuje napájení. Experimentoval jsem s různými takty a dokonce jsem spustil 6502 na 1MHz s krystalovým oscilátorem. MEGA nemůže držet krok s vyššími rychlostmi, takže musí být odstraněn.

Zkoušel jsem také výstup z časovače 555, ale to nefunguje. Myslím, že to může být proto, že to není čtvercová vlna? Když byl připojen k jednomu z výstupů CD4017, poháněl 6502. Zaplatil jsem do jedné z výše uvedených sad, abych se pokusil získat hodinový signál.

Stále hledám různé způsoby, jak získat hodinový signál.

Krok 7: Závěr

Ukázal jsem, jak postavit některé složité obvody a získat velmi jednoduchý „počítač“pro práci s minimálním množstvím dílů. Je pravda, že počítač v současné době nemůže udělat mnoho nebo pravděpodobně bude dělat v budoucnu.

Na začátku 80. let jsem se svým VIC20 přemýšlel o úžasném stroji a neměl první představu o tom, jak ho začít dávat dohromady. Doba pokročila a technologie také, ale i tak je příjemné vrátit se k základům a být hrdí na něco, co jste vybudovali od nuly.

K dalšímu vývoji tohoto počítače hodlám dát 2k SRAM za 0000 až 2047 $ a přidat oscilátor 1 MHz. Pravděpodobně přidá něco jako CD4040 (12stupňový binární čítač / dělič zvlnění), abych mohl využít různé rychlosti hodin.

Může dokonce přidat LCD displej, který poskytne textové výstupy, nikoli jen blikající světla. Bude také nutné upravit programátor EEPROM, aby se vypořádal s většími programy potřebnými pro provoz LCD displeje.

I když se MEGA pro běh 6502 stává nepotřebným, stále se hodí pro ladění strojového kódu. Jak někdo ví, strojový kód vždy obsahuje chyby!

Doporučuje: