Inhoudsopgave:

6502 Minimal Computer (met Arduino MEGA) Deel 1: 7 stappen
6502 Minimal Computer (met Arduino MEGA) Deel 1: 7 stappen

Video: 6502 Minimal Computer (met Arduino MEGA) Deel 1: 7 stappen

Video: 6502 Minimal Computer (met Arduino MEGA) Deel 1: 7 stappen
Video: Assembly and Review - PE6502 Hobby Computer 2024, November
Anonim
6502 Minimal Computer (met Arduino MEGA) Deel 1
6502 Minimal Computer (met Arduino MEGA) Deel 1

De 6502 microprocessor verscheen voor het eerst in 1975 en werd ontworpen door een klein team onder leiding van Chuck Peddle voor MOS Technology. Destijds werd het gebruikt in videoconsoles en thuiscomputers, waaronder de Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 en 64. Op dat moment was het een van de goedkoopste op de markt. Het is nooit echt verdwenen en wordt nu door hobbyisten en professionals voor veel toepassingen gebruikt.

De versie die ik gebruik is de W65C02S6TPG-14 die is gemaakt door Western Design Center en tien keer minder stroom verbruikt dan het origineel. Het bijzondere is dat het niet op 1 MHz hoeft te draaien zoals de originele chip. Het kan veel langzamer werken of worden gebruikt om een enkele stap door een programma te lopen en zelfs opvoeren tot 14 MHz. Het gegevensblad voor de chip legt de mogelijkheden ervan uit. Andere 6502-chips hebben deze mogelijkheid niet en zullen niet op deze manier werken. De chips zijn momenteel beschikbaar op Ebay en andere bronnen.

Benodigdheden

Alle gebruikte onderdelen zijn momenteel beschikbaar op Ebay, AliExpress en anderen.

Stap 1: Het concept

Ik kreeg mijn inspiratie van Ben Eater die een reeks video's op YouTube heeft gemaakt over de 6502 en vele andere aspecten van het bouwen van computers en circuits. Het programma is oorspronkelijk door hem geschreven en ik heb dit en enkele van zijn ontwerpen aangepast om met deze Instructable te komen. Een andere persoon die me inspireerde was Andrew Jacobs die een sectie op GitHub heeft waar hij een PIC-micro gebruikt om zijn 6502 te besturen.

Net als Ben gebruik ik een Arduino MEGA om de 6502 te bewaken. Ik gebruik de MEGA ook om het kloksignaal te leveren, in tegenstelling tot Ben. Momenteel gebruik ik ook geen EEPROM's of RAM.

Stap 2: Vereisten

Vereisten
Vereisten

Om deze "computer" te bouwen is een lijst met items als volgt:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (Quad 2-input NAND-poort) of vergelijkbaar

1 x 74HC373N IC (Octal D-type transparante vergrendeling) of vergelijkbaar

2 broodplanken met 830 gaten (1 bij een snuifje)

Diverse Dupont male - male kabels en verbindingsdraden

2 x LED's (ik gebruikte 5 mm blauw omdat je weg kunt komen zonder weerstanden)

1 x 12 mm kortstondige tactiele drukknopschakelaar op PCB gemonteerd SPST of vergelijkbaar

1 x 1K weerstand

2 x 0.1 uF keramische condensatoren

1 x 8 Way Water Light Marquee 5 mm rode LED (zoals hierboven) of 8 LED's en weerstanden

OPMERKING: Als u de ongesoldeerde kit krijgt, kunt u de LED's verkeerd om plaatsen, zodat ze een gemeenschappelijke kathode vormen. Ik bevestig een vlieglood (in plaats van de pin) zodat het gemakkelijk ergens anders kan worden aangesloten. VCC wordt nu Ground. Je kunt de LED's natuurlijk omdraaien (op een geassembleerd item) en ze opnieuw solderen, maar dit is een heel gedoe! Kits zijn momenteel beschikbaar op AliExpress.

Stap 3: Samenvoegen

Samenvoegen
Samenvoegen
Samenvoegen
Samenvoegen

Ik vond het gemakkelijker om nieuwe DuPont-draden te gebruiken die niet van hun lint waren gescheiden voor de adres- en databussen.

Sluit pin 9 (A0) van de 6502 aan op pin 52 van de MEGA, pin 10 (A1) van de 6502 naar pin 50 etc…

tot

Sluit pin 25 (A15) van de 6502 aan op pin 22 van de MEGA.

16 verbindingen tot nu toe.

hetzelfde

Sluit pin 26 (D7) van de 6502 aan op pin 39 van de MEGA, pin 27 (D6) van de 6502 naar pin 41 etc…

tot

Sluit pin 33 (D0) van de 6502 aan op pin 53 van de MEGA.

Nog 8 aansluitingen.

Sluit pin 8 (VDD) aan op 5v op de MEGA.

Een 0.1uF condensator aangesloten van pin 8 naar Gnd van het breadboard kan hier handig zijn, maar niet noodzakelijk.

Sluit pin 21 (VSS) aan op Gnd op de MEGA.

Pinnen 2, 4, 6, 36 en 38 kunnen worden gekoppeld aan 5v

Sluit pin 37 (Clock) aan op pin 2 en pin 7 van de MEGA.

Sluit pin 34 (RWB) aan op pin 3 van de MEGA.

Sluit pin 40 (reset) aan zoals hierboven afgebeeld.

Stap 4: Het circuit testen

Het circuit testen
Het circuit testen

In dit stadium zal de 6502 werken en kan programma1 worden gebruikt. Als u de 8-weg tent gebruikt (zoals hierboven), kan deze rechtstreeks in het breadboard worden gestoken en de vliegkabel op aarde worden aangesloten, of u kunt 8 LED's en weerstanden gebruiken. De LEDS laten zien wat er op de databus staat.

In dit stadium zou het net zo goed zijn om de vertragingen in de Loop() in te stellen op 500 of meer, om te volgen wat er gebeurt.

U zou een vergelijkbare uitvoer op de seriële monitor moeten krijgen zoals hierboven. Wanneer Reset wordt ingedrukt, doorloopt de processor 7 cycli en zoekt vervolgens naar de start van het programma op de locaties $FFFC en $FFFD. Omdat er geen fysieke adressen zijn voor de 6502 om uit te lezen, moeten we deze aanleveren vanuit de MEGA.

In de bovenstaande uitvoer leest de 6502 $FFFC en $FFFD en krijgt $00 en $10 (Low byte, High byte), wat de start van het programma is bij $1000. De processor begint dan met het uitvoeren van het programma op locatie $1000 (zoals hierboven). In dit geval staat er $A9 en $55, d.w.z. LDA#$55 (laad 85 in de accu). Nogmaals, aangezien er geen fysieke geheugenlocatie is, simuleert de MEGA wat er van de databus wordt gelezen.

$55 (85) geeft het binaire patroon 01010101 en wanneer 1 bit naar links gedraaid geeft $AA (170) 10101010.

Het programma laat zien dat de processor correct werkt maar wordt al snel een beetje saai, dus op naar het volgende deel.

Stap 5: Volgende stap

Volgende stap
Volgende stap
Volgende stap
Volgende stap

De "stapel spaghetti" hierboven is waarschijnlijk zoiets als wat je na deze fase zult hebben.

Vervolgens moet je de 74HC373N en 74HC00N IC's aan het breadboard toevoegen.

Helaas zijn de pinnen van de 373 niet uitgelijnd met de databus, dus moeten ze worden aangesloten met draden.

Sluit 5v aan op pin 20.

Sluit aarde aan op pin 10.

Sluit pin 33 (D0) van de 6502 aan op pin 3 (D0) van de 74HC373N

en eveneens met pinnen D1 tot D7.

Q0 tot Q7 zijn de uitgangen en deze moeten worden aangesloten op de LED-tent of individuele LED's en weerstanden.

Met de 74HC00 zijn slechts 2 van zijn poorten nodig

Sluit 5v aan op pin 14.

Sluit aarde aan op pin 7.

Sluit pin 17 (A8) van de 6502 aan op pin 1 (1A) van de 74HC00

Sluit pin 25 (A15) van de 6502 aan op pin 2 (1B) van de 74HC00

Sluit pin 34(R/W) van de 6502 aan op pin 5 (2B) van de 74HC00

Sluit pin 3 (1Y) van de 74HC00 aan op pin 4 (2A) van de 74HC00

Sluit pin 6 (2Y) van de 74HC00 aan op pin 11 (LE) van de 74HC373N

Sluit pin 11 (LE) van de 74HC373N aan op pin 1 (OE) van de 74HC373N

U kunt een blauwe LED op 1Y en massa aansluiten en ook 2Y op massa, deze geeft aan wanneer de poort actief is.

Verander ten slotte de regel in de onClock-procedure van programma1 naar programma2

setDataPins (programma2 [offset]);

Stap 6: Het programma

Het programma
Het programma
Het programma
Het programma

Het programma 6502-Monitor bevat de twee hierboven beschreven 6502-routines.

Het programma is nog in ontwikkeling en is een beetje slordig.

Wanneer programma2 wordt uitgevoerd, kunnen de vertragingen in de lus() 50 of minder zijn en zelfs helemaal worden verwijderd. Door de Serial.print()-regels te becommentariëren, werkt de 6502 ook sneller. Het loskoppelen van pin 1 (OE) van de 373 van pin 11 (LE) geeft andere resultaten. Door pin 1 en pin 11 van de 373 los te koppelen van de NAND-poorten kun je bij elke klokcyclus zien wat er op de databus staat.

Mogelijk moet u OE aan aarde binden in plaats van deze te laten zweven, omdat de 8 uitgangslijnen worden uitgeschakeld als deze pin hoog wordt. Wanneer de LE-pin hoog is, zijn de uitgangspinnen hetzelfde als de ingangen. Door de LE-pin laag te houden, worden de uitgangen vergrendeld, d.w.z. als de ingangspinnen veranderen, blijven de uitgangen hetzelfde.

Ik heb geprobeerd het programma zo eenvoudig mogelijk te houden om het gemakkelijker te begrijpen te maken.

Door te experimenteren met de tijdvertragingen kun je precies volgen wat de 6502 doet.

Hieronder staan de twee programma's (beide draaien op adres $ 1000) in 6502 Assembler:

programma1

LDA#$55

GEEN P

ROL

STA$1010

JMP$1000

De ROL roteert de inhoud van de accumulator één bit naar links, wat betekent dat de $ 55 nu $ AA wordt.

In machinecode (hex): A9 55 EA 2A 8D 10 10 4C 00 10

programma2

LDA#$01

ST$8100

ADC#$03

ST$8100

JMP$1005

In machinecode (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

In programma2 is er nu een fysiek adres $8100 waar de 74HC373 zich op de adresbus bevindt.

d.w.z. A15 van de 6502 is 32768 ($ 8000) en A8 is 256 ($ 0100) = 33024 ($ 8100).

Dus wanneer de 6502 naar $8100 (STA$8100) schrijft, is de R/W van de 6502 laag en worden de gegevens op de 6502 databus vergrendeld wanneer de 373 LE laag wordt. Door de 74HC00 NAND Gate zijn de signalen omgekeerd.

In de bovenstaande schermafdruk is de tweede schrijfactie met 3 verhoogd (ADC#$03) - van $7F naar $82.

In werkelijkheid zouden meer dan 2 regels van de adresbus worden gebruikt voor de specifieke locatie van de 373. Aangezien dit het enige fysieke adres is van de mogelijke 65536, laat het zien hoe de adresbus werkt. U kunt experimenteren met verschillende adrespinnen en deze op een andere locatie plaatsen. Natuurlijk moet u de STA-operanden naar de nieuwe locatie wijzigen. bijv. Als u adresregels A15 en A9 zou gebruiken, zou het adres $ 8200 (32768 + 512) zijn.

Stap 7: Conclusie

Conclusie
Conclusie

Ik heb geprobeerd aan te tonen hoe gemakkelijk het is om een 6502 aan de gang te krijgen.

Ik ben geen expert op dit gebied, dus ik zou graag constructieve opmerkingen of informatie ontvangen.

U bent van harte welkom om dit verder uit te werken en ik ben geïnteresseerd in wat u heeft gedaan.

Ik ben van plan om een EEPROM, SRAM en een 6522 aan het project toe te voegen en in de toekomst ook op stripboard te plaatsen.

Aanbevolen: