Tartalomjegyzék:

6502 Minimális számítógép (Arduino MEGA -val) 3. rész: 7 lépés
6502 Minimális számítógép (Arduino MEGA -val) 3. rész: 7 lépés

Videó: 6502 Minimális számítógép (Arduino MEGA -val) 3. rész: 7 lépés

Videó: 6502 Minimális számítógép (Arduino MEGA -val) 3. rész: 7 lépés
Videó: Logic Gates Learning Kit #2 - Transistor Demo 2024, November
Anonim
6502 Minimális számítógép (Arduino MEGA -val) 3. rész
6502 Minimális számítógép (Arduino MEGA -val) 3. rész

Továbblépve, most hozzáadtam egy oktális reteszt, 8 téglalap alakú LED -et és egy 220 ohmos ellenállást az alaplaphoz. Van egy jumper is a tömb közös csapja és a föld között, így a LED -ek kikapcsolhatók. A 74HC00 NAND kaput 78LS08 ÉS kapura cserélték, a kapu vezetéke is megváltozott. Az ÉS kapu azt jelenti, hogy a 6522 most 6000 dollárnál található E000 dollár helyett.

A 6502 meghajtásához egy külső óra csatlakoztatására szolgáló csap is rendelkezésre áll. Ezzel a csatlakozással nincs szükség a MEGA órajelre. A MEGA továbbra is figyeli, hogy mi történik a processzorral, mint korábban.

20 tűs 74HC373 -at használtam a reteszhez, mert volt nálam. Ez rendben volt a kenyértáblán, de a 74HC573 busszal kompatibilis, és rengeteg vezetéket takarított volna meg. Az UCN5801A, amely 22 tűs IC, szintén figyelembe vehető az áramkörben, de a vezetékek kissé eltérnek.

A felső, egyetlen narancssárga LED tápellátás -jelző, a bal alsó piros pedig azt jelzi, hogy mikor van írás. Ez utóbbi jelentéktelen lesz, ha a táblát nagyobb sebességgel futtatják.

A módosított áramkör fent van (a 74HC573 -al).

1. lépés: Bemutató programok

Bemutató programok
Bemutató programok

A 6502 monitor két egyszerű bemutató programot tartalmaz, és szétszedett kódja itt található.

Ez a program betölt 1 -et a 6502 A regiszterbe, és eltárolja a reteszben. Ezután hozzáad 1 -et az A regiszterhez, és eltárolja a reteszben. Aztán visszaugrik 1005 dollárra, és a folyamat örökké megismétlődik.

* = 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

Ez a program először a 6522 B port DDR -jét állítja kimenetre. Ezután 55 dollárt (B01010101) tárol a portban, valamint a reteszt. Az A regiszter ekkor 1 lépést jobbra forog, és most $ AA -t tartalmaz (B10101010). Ez ismét a B portban és a reteszben tárolódik. A program visszaugrik 1005 dollárra, és örökké folytatódik.

* = 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 JMP $ 1005 1018. END

Az éles szeműek észrevehetik, hogy a színes LED -ek más mintát mutatnak, mint a zöldek. Ez azért van, mert a közös vezeték 5 V -ra van kötve a színeseken, a zöld pedig a földre.

Változtassa meg ezt a kódsorot program2 vagy program3 értékre.

setDataPins (program3 [eltolás]);

A 6502 Assembler és Disassembler hasznos eszközök a programok kódolásához.

2. lépés: EEPROM hozzáadása

EEPROM hozzáadása
EEPROM hozzáadása
EEPROM hozzáadása
EEPROM hozzáadása
EEPROM hozzáadása
EEPROM hozzáadása

Az EEPROM tábla esetében 950 x 650 mm -es szalaglemezt és 19 mm -es hüvelyes fejlécet használtam, hogy a tábla tisztíthassa az alatta lévő lapot. Ez a lap az alábbi 6502 -es panelhez csatlakozik. Az EEPROM egy ATMEL 28C256, 28 tűvel és 32 x 8 bit memóriával. Ez több mint elegendő a jelenleg használt kis programokhoz.

Nem készítettem áramköri rajzot ehhez a kártyához, de meglehetősen egyszerű, hogyan csatlakozik az alábbi 6502 -es táblához. Ezek az EEPROM chipek nem buszbarátok, ezért az egyes tüskékhez kell kötni őket, tehát az összes "zöld -fehér spagetti". Az áthidalási problémát a korábbi táblán úgy oldottam meg, hogy az adatvonalakat a tábla alsó oldalán összekötöttem.

Az EEPROM 14 címetű csapja a bal oldali megfelelő tűkhöz (zöld vezetékek), az I/O tűk pedig a jobb oldali adatcsapokhoz (fehér vezetékek) kapcsolódik. A 27 -es (WE) csatlakozó a 28 -as (5v) tűhöz, a 22 -es (OE) a földhöz, a 20 -as (CE) pedig a NAND -kapuhoz van csatlakoztatva. A NAND -kapu 2 bemenete az A15 -ös csatlakozón van fő tábla. Ez azt jelenti, hogy amikor ez a csap magasra kerül, a NAND kapu alacsony jelet ad az EEPROM CE csapjának, ami aktívvá teszi. Ezzel a beállítással azt jelenti, hogy az EEPROM -ot csak a 6502 olvashatja.

Mivel az EEPROM a memóriatérkép első 32 ezer helyén él, ez azt jelenti, hogy a $ FFFC és a $ FFFD a 6502 kezdőcímét megtarthatja a visszaállítás után. Mivel a 6522 címe 6000 és 600 USD között van, és a retesz 4100 dollárnál van, megállítja a memóriaütközéseket.

Az NMI vektor ($ FFFA és $ FFFB) és a BRK / IRQ vektor ($ FFFE anf $ FFFF) szintén ugyanígy írható.

3. lépés: Az EEPROM programozása

Az EEPROM programozása
Az EEPROM programozása
Az EEPROM programozása
Az EEPROM programozása

Egy program EEPROM -on való tárolásához programozóra van szükség. Csináltam egy szalagdeszkából, egy Arduino Pro Mini -ből, pár 74HC595 -ösből és egy ZIF foglalatból. Eredetileg a programozó egy AT28C16 -ra készült, amelynek kevesebb címsora van, mint az AT28C256 -nak, ezért módosítani kellett.

Az kapcsolási rajz bemutatja, hogyan kell mindkét EEPROM -ot bekötni. A fényképből nem derül ki egyértelműen, hogy a két 595 zseton fejjel lefelé van, és nem az ábrán látható módon. Az 595/1 számú 1–7. Csapok az EEPROM A1 – A7 pontjaival összhangban vannak, függetlenül attól, hogy melyiket használják. Ez 7 összekötő vezetéket takarít meg. A tábla most kissé feszesnek tűnik, és ez azért van, mert eredetileg 24 tűs DIL foglalatot használtam, amelyet most a sokkal nagyobb, 28 tűs ZIF foglalat váltott fel.

Tartalmaz egy programot, amely működik a táblámmal. A program minden Arduino és 595 -ös készülékkel működik az áramkörben, az ábrán látható módon. Azért választottam egy 5v Pro Mini -t, mert kompakt és elég olcsó ahhoz, hogy elhagyja a rendszert.

4. lépés: Az EEPROM programok

Az EEPROM programok
Az EEPROM programok

Az EEPROM programozóban három egyszerű program található. Használatukhoz egyszerűen törölje a megjegyzést a használni kívánt sorról.

// Olvasás a 6522 -es A portból

// const byte data = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

A program memóriakiírást jelenít meg, amikor befejezte. A program alábbi része teljes körű irányítást biztosít Önnek arról, hogy mit szeretne írni vagy törölni, beállítja a $ FFFC és $ FFFD értékeket, majd megjeleníti az adott tartomány tartalmát. Csak vegye ki a megjegyzéseket vagy módosítsa a paramétereket a kívánt módon. A címek decimális formátumban is megadhatók.

// eraseEEPROM (422, 930, 0x41); // Használja az EEPROM egészének vagy egy részének törléséhez - kezdet, vég, bájt

Serial.println ("EEPROM programozása"); összeg = program_szám_adatok (0x1000); writeEEPROM (0x7ffc, 0x00); // $ FFFC beállítása 6502 íráshozEEPROM (0x7ffd, 0x90); // $ FFFD beállítása a 6502 -hez // writeEEPROM (0x1000, 0xA9); // Írjon 1 bájt adatot Serial.println ("kész"); String outline = "Írásbeli" + (karakterlánc) mennyiség + "bájtok"; Serial.println (vázlat); Serial.println ("EEPROM olvasása"); printContents (0x0000, 0x112f); // A tartomány beállítása a printContents megjelenítéséhez (0x7ff0, 0x7fff); // Olvassa el az EEPROM utolsó 16 bájtját

A program rövidített kimenete fent van.

5. lépés: A 6502 futtatása az EEPROM -ból

A 6502 futtatása az EEPROM -ból
A 6502 futtatása az EEPROM -ból
A 6502 futtatása az EEPROM -ból
A 6502 futtatása az EEPROM -ból
A 6502 futtatása az EEPROM -ból
A 6502 futtatása az EEPROM -ból

A programozott EEPROM most beilleszthető az alaplapjába, és ez a malacka a 6502 fő táblához csatlakozik, amely malacka a MEGA -hoz. A fenti oldal- és felülnézeti fotók bemutatják, hogyan illeszkedik mindez egymáshoz.

A 6502 mostantól ki tudja olvasni a kezdővektorot a $ FFFC és $ FFFD (ez 9000 dollár) összegből, majd az ott tárolt programra ugorhat. A MEGA továbbra is biztosítja az órajelet, és programját módosítani kell, hogy csak az órajelet adja, és figyelje a 6502 -et. Ehhez egy módosított programot biztosítanak.

A futó képen ez a program fut.

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 JMP $ 900A 4C 0A 90

A kapcsolók be vannak dugva az A portba, és a program megjeleníti az olvasott értéket a B porton és a 74HC373 -on (jelenleg homályos). a kapcsolók földre vannak kötve, a LED -ek pedig 5V -ra. Az EOR #$ FF kijavítja a retesz és a B port problémáit, amelyek különböző mintákat jelenítenek meg azzal, hogy a biteket elfordítják, mielőtt a reteszhez írnak.

6. lépés: Külső időjel

Külső időjel
Külső időjel

Ha órajelet adnak a tábla tetején lévő csapra, a 6502 mostantól a MEGA -tól függetlenül is futhat. Természetesen tápellátásra is szükség van. Kísérleteztem különböző órákkal, és még a 6502 -et is 1MHz -en futtatom kristályoszcillátorral. A MEGA nem tud lépést tartani a nagyobb sebességgel, ezért el kell távolítani.

Próbáltam egy 555 -ös időzítő kimenetét is, de ez nem működik. Szerintem azért lehet, mert nem négyzethullám? Amikor az egyik CD4017 -es kimenethez csatlakoztattam, a 6502 -et hajtotta. Beillesztettem a fenti készletek egyikébe, hogy megpróbáljam elérni az órajelet.

Még mindig különböző módszereket keresek az órajel lekérésére.

7. lépés: Következtetés

Megmutattam, hogyan lehet összetett áramköröket építeni, és egy nagyon egyszerű "számítógépet" minimális mennyiségű alkatrészekkel működtetni. Igaz, a számítógép jelenleg nem tud sokat tenni, vagy valószínű, hogy a jövőben is ezt fogja tenni.

Még a 80 -as évek elején, a VIC20 -as gépemmel csodálkoztam a fantasztikus gépen, és nem volt az első ötletem, hogyan kezdjem el összerakni. Az idők haladtak, és a technológia is, de még mindig jó visszatérni az alapokhoz, és büszke lenni valamire, amit a semmiből épített.

Ennek a számítógépnek a továbbfejlesztése érdekében 2k SRAM -ot szándékozom 0000 dollárról 2047 dollárra tenni, és hozzáadni 1 MHz -es oszcillátort. Valószínűleg hozzáadok valami CD4040-et (12-fokozatú bináris hullámzás-számláló / osztó), hogy különböző órajeleket használhassak.

Akár LCD kijelzőt is hozzáadhat, hogy szöveges kimenetet adjon, nem csak villogó fényeket. Az EEPROM programozót is módosítani kell, hogy megbirkózzon az LCD kijelző futtatásához szükséges nagyobb programokkal.

Annak ellenére, hogy a MEGA szükségtelenné válik a 6502 futtatásához, mégis jól jön a gépi kód hibakereséséhez. Mint bárki tudja, a gépi kód mindig hibákat tartalmaz!

Ajánlott: