INHOUDSOPGAWE:

6502 Minimale rekenaar (met Arduino MEGA) Deel 3: 7 stappe
6502 Minimale rekenaar (met Arduino MEGA) Deel 3: 7 stappe

Video: 6502 Minimale rekenaar (met Arduino MEGA) Deel 3: 7 stappe

Video: 6502 Minimale rekenaar (met Arduino MEGA) Deel 3: 7 stappe
Video: Day in My Life as a Quantum Computing Engineer! 2024, Julie
Anonim
6502 Minimale rekenaar (met Arduino MEGA) Deel 3
6502 Minimale rekenaar (met Arduino MEGA) Deel 3

Om verder te gaan, het ek nou 'n Octal Latch, 8 reghoekige LED's en 'n 220 Ohm -weerstandsreeks by die hoofbord gevoeg. Daar is ook 'n springer tussen die gemeenskaplike pen en die grond, sodat die LED's afgeskakel kan word. Die 74HC00 NAND -hek is vervang met 'n 78LS08 AND -hek, die bedrading na die hek is ook verander. Die AND -hek beteken dat die 6522 nou op $ 6000 geleë is in plaas van $ E000.

Daar is ook 'n pen vir die aansluiting van 'n eksterne klok om die 6502 aan te dryf. Met hierdie verbinding hoef die MEGA nie 'n kloksein te gee nie. Die MEGA monitor steeds soos voorheen met die verwerker.

Ek het 'n 20 -pins 74HC373 vir die grendel gebruik, want ek het 'n paar gehad. Dit was reg toe dit op die broodbord was, maar 'n 74HC573 is busversoenbaar en sou baie bedrading bespaar het. Die UCN5801A, 'n 22 -pins IC, kan ook in die kring oorweeg word, maar die bedrading sal effens anders wees.

Die boonste, oranje LED is 'n kragaanwyser, en die rooi onderste hoek links dui aan wanneer daar geskryf word. Laasgenoemde sal onbeduidend wees as die bord teen hoër snelhede bestuur word.

Die aangepaste stroombaan is hierbo (met die 74HC573).

Stap 1: Demonstrasieprogramme

Demonstrasieprogramme
Demonstrasieprogramme

Twee eenvoudige demonstrasieprogramme is ingesluit in die 6502 -monitor en die gedemonteerde kode is hier.

Hierdie program laai 1 in die 6502 A -register en stoor dit in die grendel. Dit voeg dan 1 by die A -register en stoor dit in die grendel. Dan spring dit terug na $ 1005 en word die proses vir ewig herhaal.

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

Hierdie program stel eers die DDR van die 6522 -poort B in op uitvoer. Dit stoor dan $ 55 (B01010101) in die hawe sowel as die grendel. Die A -register draai dan 1 stap regs en hou nou $ AA (B10101010). Dit word weer in poort B en die grendel geberg. Die program spring terug na $ 1005 en duur vir ewig voort.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEK 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

Die skerp oë onder u sal moontlik sien dat die gekleurde LED's 'n ander patroon as die groen toon. Dit is omdat die gewone lood gekoppel is aan 5v op die gekleurdes en die gewone op die groen aan die aarde gekoppel is.

Verander hierdie reël kode na program2 of program3.

setDataPins (program3 [offset]);

'N 6502 Assembler en Demassembler is nuttige instrumente om u programme te kodeer.

Stap 2: Voeg 'n EEPROM by

Voeg 'n EEPROM by
Voeg 'n EEPROM by
Voeg 'n EEPROM by
Voeg 'n EEPROM by
Voeg 'n EEPROM by
Voeg 'n EEPROM by

Vir die EEPROM -bord het ek 'n strookbord van 950 x 650 mm en 'n 19 mm -kopstukpen gebruik, sodat die bord die onderkant kan skoonmaak. Hierdie bord sluit aan op die 6502 -bord hieronder. Die EEPROM is 'n ATMEL 28C256 met 28 penne en bevat 32k x 8 stukkies geheue. Dit is meer as voldoende vir die klein programme wat tans gebruik word.

Ek het nie 'n stroombaan -diagram vir hierdie bord gedoen nie, maar dit is redelik eenvoudig hoe dit aansluit by die 6502 -bord hieronder. Hierdie EEPROM -skyfies is nie busvriendelik nie, dus moet aan die individuele penne gekoppel word, vandaar al die "groen en wit spaghetti". Ek het die oorbruggingskwessie op die vorige bord opgelos deur die datalyne aan die onderkant van die bord aan te sluit.

Die 14 adrespenne van die EEPROM verbind met die toepaslike penne aan die linkerkant (groen drade) en die I/O -penne aan die datapennetjies aan die regterkant (wit drade). Speld 27 (WE) is gekoppel aan pen 28 (5v), pen 22 (OE) is aan die grond gekoppel en pen 20 (CE) is gekoppel aan 'n NAND -hek. Die 2 ingange van die NAND -hek is gekoppel aan A15 op die hoofbord. Dit beteken dat wanneer die pen hoog word, die NAND -hek 'n lae sein gee aan die CE -pen van die EEPROM, wat dit aktief maak. Met hierdie opset beteken dit dat die EEPROM slegs deur die 6502 gelees kan word.

Aangesien die EEPROM in die top 32k op die geheuekaart woon, beteken dit dat $ FFFC en $ FFFD die beginadres vir die 6502 kan hou nadat dit herstel is. Omdat die 6522 sy adresse tussen $ 6000 en $ 600F het en die grendel op $ 4100 is, stop dit geheue -konflikte.

Die NMI -vektor ($ FFFA en $ FFFB) en BRK / IRQ -vektor ($ FFFE en $ FFFF) kan ook op dieselfde manier geskryf word.

Stap 3: Programmering van die EEPROM

Die programmering van die EEPROM
Die programmering van die EEPROM
Die programmering van die EEPROM
Die programmering van die EEPROM

Om 'n program op die EEPROM te stoor, benodig dit 'n programmeerder. Ek het een gemaak van 'n strookbord, 'n Arduino Pro Mini, 'n paar 74HC595's en 'n ZIF -aansluiting. Oorspronklik is die programmeerder gemaak vir 'n AT28C16 met minder adreslyne as die AT28C256, dus moes dit gewysig word.

Die kringdiagram toon hoe u beide hierdie EEPROM's moet bedraad. Dit is nie duidelik uit die foto dat die twee 595 skyfies onderstebo is en nie soos op die diagram getoon nie. Spelde 1 tot 7 van 595/1 is in lyn met A1 tot A7 van die EEPROM, ongeag wat gebruik word. Dit bespaar 7 verbindingsdrade. Die bord lyk nou 'n bietjie styf, en dit is omdat ek oorspronklik 'n 24 -pins DIL -aansluiting gebruik het wat nou vervang is deur die veel groter 28 -pins ZIF -aansluiting.

'N Program is ingesluit wat saam met my raad werk. Die program werk met enige Arduino en 595's in 'n stroombaan soos getoon. Ek het 'n 5v Pro Mini gekies omdat dit kompak en goedkoop genoeg is om in die installasie te bly.

Stap 4: Die EEPROM -programme

Die EEPROM -programme
Die EEPROM -programme

Daar is drie eenvoudige programme in die EEPROM -programmeerder. Om dit te gebruik, moet u net die reël wat u wil gebruik, uitlaat.

// Lees uit poort A van 6522

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

Die program toon 'n geheue -afval as dit klaar is. Die deel van die program hieronder gee u volle beheer oor wat u wil skryf of uitvee, stel $ FFFC en $ FFFD in en vertoon dan die inhoud van 'n gegewe reeks. Ontmerk net of verander die parameters soos u benodig. Die adresse kan ook in desimale formaat ingevoer word.

// wisEEPROM (422, 930, 0x41); // Gebruik om die hele of 'n deel van EEPROM uit te vee - begin, eindig, greep

Serial.println ("EEPROM programmeer"); bedrag = program_getal_data (0x1000); skryf EEPROM (0x7ffc, 0x00); // Stel $ FFFC in vir 6502 writeEEPROM (0x7ffd, 0x90); // Stel $ FFFD in vir 6502 // writeEEPROM (0x1000, 0xA9); // Skryf 1 greep data Serial.println ("klaar"); String outline = "Geskryf" + (string) hoeveelheid + "grepe"; Serial.println (uiteensetting); Serial.println ("EEPROM lees"); printContents (0x0000, 0x112f); // Stel reeks om printContents (0x7ff0, 0x7fff) te vertoon; // Lees die laaste 16 grepe op EEPROM

'N Verkorte uitset van die program is hierbo.

Stap 5: Begin die 6502 vanaf die EEPROM

Met die 6502 vanaf die EEPROM
Met die 6502 vanaf die EEPROM
Met die 6502 vanaf die EEPROM
Met die 6502 vanaf die EEPROM
Met die 6502 vanaf die EEPROM
Met die 6502 vanaf die EEPROM

Die geprogrammeerde EEPROM kan nou in die bord geplaas word, en hierdie varkie kan teruggekeer word na die hoofbord van 6502 wat op die MEGA teruggekeer word. Die foto's aan die sy- en bo -aansig hierbo wys hoe dit alles bymekaar pas.

Die 6502 kan nou die beginvektor van $ FFFC en $ FFFD (wat $ 9000 is) lees en dan na die program wat daar gestoor word, spring. Die MEGA verskaf steeds die kloksein en sy program moet verander word om net die kloksein te gee en die 6502 te monitor. 'N Gewysigde program word voorsien om dit te doen.

Die lopende foto toon dat hierdie program aan die gang is.

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

Die skakelaars word in poort A gekoppel en die program vertoon die waarde wat dit op poort B en die 74HC373 lees (wat tans verduister is). die skakelaars is op die grond gekoppel en die LED's is gekoppel aan 5v. Die EOR #$ FF korrigeer die probleem van die grendel en poort B wat verskillende patrone vertoon deur die stukkies om te draai voordat hulle na die grendel skryf.

Stap 6: Eksterne tydsein

Eksterne tydsein
Eksterne tydsein

As 'n kloksignaal op die pen bo -aan die bord aangebring word, kan die 6502 nou onafhanklik van die MEGA loop. Dit benodig natuurlik ook 'n kragtoevoer. Ek het met verskillende horlosies geëksperimenteer en selfs die 6502 op 1MHz met 'n kristal ossillator uitgevoer. Die MEGA kan nie byhou met vinniger snelhede nie, dus moet dit verwyder word.

Ek het ook die uitvoer van 'n 555 -timer probeer, maar dit werk nie. Ek dink dit kan wees omdat dit nie 'n vierkantgolf is nie? Toe dit aan een van die CD4017 -uitsette gekoppel is, het dit die 6502 aangedryf. Ek het in een van die stelle hierbo geplak om 'n horlosie te probeer kry.

Ek kyk nog steeds na verskillende metodes om 'n horlosiesignaal te kry.

Stap 7: Gevolgtrekking

Ek het getoon hoe om 'n paar komplekse stroombane te bou en 'n baie eenvoudige 'rekenaar' te laat werk met 'n minimale hoeveelheid dele. Toegegee, die rekenaar kan tans nie veel doen nie, of waarskynlik in die toekoms.

Vroeg in die vroeë tagtigerjare, met my VIC20, het ek gereeld gewonder oor die wonderlike masjien en ek het nie die eerste idee gehad hoe om dit te begin saamstel nie. Tye het aangegaan en tegnologie ook, maar dit is steeds lekker om terug te keer na die basiese beginsels en trots te wees op iets wat u van nuuts af opgebou het.

Om hierdie rekenaar verder te ontwikkel, is ek van voorneme om 2k SRAM op $ 0000 tot $ 2047 te sit en 'n 1 MHz -ossillator by te voeg. Sal waarskynlik iets soos 'n CD4040 (12-fase binêre rimpel-teller / verdeler) byvoeg sodat ek verskillende kloksnelhede kan gebruik.

U kan selfs 'n LCD -skerm byvoeg om teksuitsette te gee in plaas van net flikkerende ligte. Die EEPROM -programmeerder sal ook aangepas moet word om die groter programme te hanteer wat nodig is om 'n LCD -skerm te laat loop.

Alhoewel die MEGA onnodig raak vir die werking van die 6502, is dit steeds handig om die masjienkode te ontfout. Soos almal weet, bevat masjienkode altyd foute!

Aanbeveel: