Innehållsförteckning:

6502 & 6522 Minimal dator (med Arduino MEGA) Del 2: 4 steg
6502 & 6522 Minimal dator (med Arduino MEGA) Del 2: 4 steg

Video: 6502 & 6522 Minimal dator (med Arduino MEGA) Del 2: 4 steg

Video: 6502 & 6522 Minimal dator (med Arduino MEGA) Del 2: 4 steg
Video: Minimum 6502 computer start ⚡️#homebrew #diyelectronics #8bit #breadboards #computerscience 2024, November
Anonim
6502 & 6522 Minimal dator (med Arduino MEGA) Del 2
6502 & 6522 Minimal dator (med Arduino MEGA) Del 2

Efter min tidigare instruerbara har jag nu lagt 6502 på ett bandkort och lagt till en 6522 mångsidig gränssnittsadapter (VIA). Återigen använder jag en WDC -version av 6522, eftersom det är en perfekt matchning för deras 6502. Inte bara använder dessa nya chips mycket mindre ström än de ursprungliga MOS -versionerna, men de kan köras med långsammare hastigheter eller till och med trampas igenom ett program utan problem.

Arduino -programmet skrevs ursprungligen av Ben Eater (som har många videor på YouTube) och har ändrats av mig för att uppnå detta resultat.

Tillbehör

1 x WDC W65C02 -processor

1 x WDC W65C22 mångsidig gränssnittsadapter

1 x 74HC00N IC (Quad 2-input NAND gate) eller liknande

1 x 10 cm bred (35 linje) Stripboard

2 x 40 -stifts DIL -uttag

1 x 14 -stifts DIL -uttag

PCB Header Pins 2.54mm

PCB -uttag 2,54 mm

1 x 12 mm momentan taktil tryckknappsbrytare PCB -monterad SPST eller liknande

1 x 1K motstånd

1 x 3K3 motstånd

2 x 0,1 uF keramiska kondensatorer

1 x 8 Way Water Light Marquee 5 mm röd LED

Olika färgade trådar för anslutningar

8 manliga - hanlänkar

Steg 1: Kretskortet

Kretskortet
Kretskortet
Kretskortet
Kretskortet

Kretskortet är ganska kompakt och undersidan ansluts direkt till Arduino MEGA. För att uppnå detta skjuts stiften så långt som möjligt in i plasthållarna innan de löds till skivans undersida. Längre stift kunde ha använts för detta, men standardnålarna innebär att brädan vilar stadigt ovanpå MEGA.

Jag har ställt in 6502 och 6522 IC: erna så att de använder bandspåren för att ansluta till MEGA. Det finns också några anslutningar för 6502 dolda under IC. När du gjorde brädan var det första du skulle klippa de 16 remsorna som kommer att anslutas till Arduinos dubbla rad uttag. De yttre 2 behöver inte skäras eftersom 5v och Gnd är på båda sidor. Nästa lod i de 2 raderna med 18 stift på undersidan och de 2 raderna med 18 hylsor på ovansidan.

Därefter löds DIL -uttagen på plats och spåren skärs mellan dem. Jag kunde ha sparat en anslutning genom att placera stift 14 på 74HC00 på samma spår som 5v. Jag klippte bara spåren när jag var säker på att de behövde vara det medan jag lödde anslutningskablarna. Men saker går inte alltid som planerat, jag designade ursprungligen remskivan från föregående brödbräda med hjälp av stiften 2, 3 och 7 på Arduino, men dessa är inte i linje med hålen i bandskivan, så jag måste använda stift 18, 31 och 37. Därav länkarna på mitt bräde på 31 och 37. Du kanske undrar varför jag inte använde en av de oanvända stiften (23, 24 etc) för klockan, det beror på att de inte stöder avbryter, så var tvungen att använda stift 18, 19, 20 eller 21 som gör. Lyckligtvis ligger dessa 4 stift i linje med hålen i bandbrädan och håller allt kompakt. Pin 18 är också längst bort från alla andra ledningar.

Du kanske också märker att min färdiga tavla inte är exakt samma som mitt diagram. Detta för att jag följde någon annans diagram. Därav anslutningarna till 74HC00. Jag har också lagt till en power -LED och ytterligare 2 rader uttag för Gnd och 5v samt ett par kondensatorer till.

Jag kunde ha anslutit de två datafacken, men det här skulle betyda mycket fler trådar som passerar brädet. Jag valde 8 länkkablar för att göra detta som en tillfällig åtgärd.

6522 -port A och B har fått uttag lödda på sina spår så att LED -märken enkelt kan sättas in.

Det finns mycket mindre trådar nu än på brödbrädversionen.

Steg 2: Programmeringsteori

Programmeringsteori
Programmeringsteori

6522 har två I/O -portar samt många andra funktioner, men port A och B är lätt åtkomliga. För att mata ut data på porten måste Data Direction Register (DDR) ställas in i enlighet därmed och data skickas till själva porten.

Med ovanstående inställning ligger 6522 på $ E000.

För att mata ut data på port B, är DDR vid $ E002 inställd på $ FF (255 - alla utgångar) och data skickas till $ E000.

För att mata ut data på port A, är DDR vid $ E003 inställd på $ FF (255 - alla utgångar) och data skickas till $ E001.

Koden nedan laddar $ FF i 6502 A -registret och skriver det till DDR B på $ E002. Den laddar sedan $ 55 och skriver den till ORB. Koden roteras (ger $ AA) och skrivs till ORB. Programmet hoppar tillbaka tp $ 1005 och upprepas oändligt. OBS: DDR behöver bara initialiseras en gång.

Adress Hexdump -demontering

$ 1000 a9 ff LDA #$ ff $ 1002 8d 02 e0 STA $ e002 $ 1005 a9 55 LDA #$ 55 $ 1007 8d 00 e0 STA $ e000 $ 100a 6a ROR A $ 100b 8d 00 e0 STA $ e000 $ 100e 4c 05 10 JMP $ 1005

$ 55 i binär är 010101010 och $ AA är 10101010 vilket gör att lysdioderna växlar 4 på, 4 av.

Snabb och smutsig lösning:

Ersätt 74HC00 (Quad 2 input NAND Gate) med en 74HC08 (Quad 2 input AND Gate) och 6522 ligger nu på $ 6000 istället för $ E000. Detta flyttar den från den övre 32K till den nedre 32K i 6502: s adresserbara minne.

Steg 3: Arduino -programmet och -output

Arduino -programmet och -output
Arduino -programmet och -output

Eftersom 6502 inte har något RAM -minne att läsa från, levererar Arduino programmet för att den ska kunna läsas. När en klockpuls detekteras på stift 18, sätter Arduino programdatan på databussen (Arduino -stift 39, 41, 43, 45, 47, 49, 51 och 53). 6502 genererar sina egna adresser som bara övervakas av Arduino på de jämna stiften 22 till 52. Arduino levererar också klockpulsen på stift 37. R/W -linjen i 6502 övervakas på stift 31.

Eftersom Arduino levererar data har det hittills inte varit möjligt att få 6502 att mata in data från VIA (om du inte vet bättre).

Arduino -programmet är nedan och ett urval från seriemonitorn är ovan.

Steg 4: Slutsats

Återigen har jag försökt visa hur man ställer in en minimal "6502 -dator".

I detta skede är 6502 fortfarande beroende av Arduino för att förse den med ett program och en klockpuls för att den ska kunna köras.

Det är ett steg längre än när jag ställde upp det på brödbräda.

Jag har inte använt 74HC373 den här gången utan den mer komplexa 6522 för att låsa datautmatningarna. 6522 har också två I/O -portar.

Jag tänker ta detta projekt vidare genom att installera lite SRAM eller en EEPROM.

Rekommenderad: