Inhoudsopgave:
- Benodigdheden
- Stap 1: Het concept
- Stap 2: Vereisten
- Stap 3: Samenvoegen
- Stap 4: Het circuit testen
- Stap 5: Volgende stap
- Stap 6: Het programma
- Stap 7: Conclusie
Video: 6502 Minimal Computer (met Arduino MEGA) Deel 1: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
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
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
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 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
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:
Door beweging geactiveerde cosplayvleugels met Circuit Playground Express - Deel 1: 7 stappen (met afbeeldingen)
Door beweging geactiveerde cosplayvleugels met Circuit Playground Express - Deel 1: Dit is deel één van een tweedelige project, waarin ik je mijn proces laat zien voor het maken van een paar geautomatiseerde feeënvleugels. Het eerste deel van het project is de mechanica van de vleugels, en het tweede deel is het draagbaar maken en de vleugels toevoegen
6502 Minimal Computer (met Arduino MEGA) Deel 3: 7 stappen
6502 Minimal Computer (met Arduino MEGA) Deel 3: Als we nog verder gaan, heb ik nu een Octal Latch, 8 rechthoekige LED's en een 220 Ohm weerstandsarray aan het moederbord toegevoegd. Er is ook een jumper tussen de gemeenschappelijke pin van de array en aarde, zodat de LED's kunnen worden uitgeschakeld. De 74HC00 NAND-poort h
6502 & 6522 Minimal Computer (met Arduino MEGA) Deel 2: 4 stappen
6502 & 6522 Minimal Computer (met Arduino MEGA) Deel 2: In navolging van mijn vorige Instructable, heb ik nu de 6502 op een stripbord gezet en een 6522 veelzijdige interface-adapter (VIA) toegevoegd. Nogmaals, ik gebruik een WDC-versie van de 6522, omdat het een perfecte match is voor hun 6502. Deze nieuwe c
Computer voor RE-systemen (deel 1 van 2) (hardware): 5 stappen
Computer voor RE-systemen (deel 1 van 2) (hardware): hier zal ik u laten zien hoe ik een volledig werkende mini-desktopcomputer heb gemaakt voor kleine hernieuwbare energiesystemen. Het RE-systeem dat ik van plan ben te gebruiken, zal voornamelijk een 12 volt-systeem zijn met 6 of 8 Golf Cart-batterijen, en ik heb een 700 watt vermogen inver
Computer voor RE-systemen (deel 2 van 2) (software): 6 stappen
Computer voor RE-systemen (deel 2 van 2) (software): in het eerste deel van deze Instructable bevindt zich hier https://www.instructables.com/id/Computer-for-RE-Systems-Part-1-of-2 -Hardware/, ik heb alle hardware toegevoegd die ik wilde om een goed desktopsysteem te krijgen. Nu voor de software, maar vóór de software