Indholdsfortegnelse:

6502 Minimal computer (med Arduino MEGA) Del 3: 7 trin
6502 Minimal computer (med Arduino MEGA) Del 3: 7 trin

Video: 6502 Minimal computer (med Arduino MEGA) Del 3: 7 trin

Video: 6502 Minimal computer (med Arduino MEGA) Del 3: 7 trin
Video: № 111 Еженедельный обзор № 26 – Новые продукты для производителей 2024, Juli
Anonim
6502 Minimal computer (med Arduino MEGA) Del 3
6502 Minimal computer (med Arduino MEGA) Del 3

Fremadrettet har jeg nu tilføjet en Octal Latch, 8 rektangulære lysdioder og et 220 Ohm modstandsarray til hovedkortet. Der er også en jumper mellem arrayets fælles pin og jord, så LED'erne kan slukkes. 74HC00 NAND -porten er blevet erstattet med en 78LS08 AND -port, ledningerne til porten er også blevet ændret. OG -porten betyder, at 6522 nu er placeret på $ 6000 i stedet for $ E000.

Der er også en pin til tilslutning af et eksternt ur til at drive 6502. Med denne forbindelse er der ikke behov for, at MEGA afgiver et ur -signal. MEGA overvåger stadig, hvad der foregår med processoren som før.

Jeg brugte en 20 pin 74HC373 til låsen, fordi jeg havde nogle. Dette var OK, når det var på brødbrættet, men en 74HC573 er buskompatibel og ville have sparet masser af ledninger. UCN5801A, som er en 22 -polet IC, kan også overvejes i kredsløbet, men ledningerne vil være lidt forskellige.

Den øverste, orange orange LED er en strømindikator, og den nederste venstre røde angiver, hvornår der skrives. Sidstnævnte vil være ubetydelig, hvis brættet køres med højere hastigheder.

Det modificerede kredsløb er ovenfor (med 74HC573).

Trin 1: Demonstrationsprogrammer

Demonstrationsprogrammer
Demonstrationsprogrammer

To enkle demonstrationsprogrammer er inkluderet i 6502 -skærmen, og deres adskilte kode er her.

Dette program indlæser 1 i 6502 A -registret og gemmer det i låsen. Det tilføjer derefter 1 til A -registret og gemmer det i låsen. Derefter springer det tilbage til $ 1005, og processen gentages for altid.

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

Dette program sætter først DDR i 6522 port B til output. Det gemmer derefter $ 55 (B01010101) i porten samt låsen. A -registret roterer derefter 1 trin til højre og rummer nu $ AA (B10101010). Dette gemmes igen i port B og låsen. Programmet springer tilbage til $ 1005 og fortsætter for altid.

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

De skarpe øjne blandt jer vil måske bemærke, at de farvede lysdioder viser et andet mønster end de grønne. Dette skyldes, at den fælles ledning er forbundet til 5v på de farvede, og den fælles på den grønne er forbundet til jorden.

Skift denne kodelinje til program2 eller program3.

setDataPins (program3 [offset]);

En 6502 Assembler og Disassembler er nyttige værktøjer til at hjælpe med at kode dine programmer.

Trin 2: Tilføjelse af en EEPROM

Tilføjelse af en EEPROM
Tilføjelse af en EEPROM
Tilføjelse af en EEPROM
Tilføjelse af en EEPROM
Tilføjelse af en EEPROM
Tilføjelse af en EEPROM

Til EEPROM -kortet brugte jeg et 950 x 650 mm båndplade og 19 mm hanstik til at sætte bordet i stand til at rydde det nedenunder. Dette kort kan tilsluttes 6502 -kortet herunder. EEPROM er en ATMEL 28C256, der har 28 ben og indeholder 32k x 8 bits hukommelse. Dette er mere end tilstrækkeligt til de små programmer, der bruges i øjeblikket.

Jeg har ikke lavet et kredsløbsdiagram for dette kort, men det er ret ligetil, hvordan det forbinder til 6502 -kortet herunder. Disse EEPROM -chips er ikke busvenlige, så de skal forbindes til de enkelte stifter, derfor alle de "grønne og hvide spaghetti". Jeg har løst broproblemet på det tidligere bord ved at koble datalinjerne sammen på undersiden af tavlen.

EEPROMs 14 adressestifter forbindes til de relevante stifter på venstre side (grønne ledninger) og I/O -benene til datastifterne til højre (hvide ledninger). Pin 27 (WE) er tilsluttet pin 28 (5v), pin 22 (OE) er forbundet til jorden, og pin 20 (CE) er forbundet til en NAND -gate. De 2 input af NAND -gate er forbundet til A15 på hovedtavle. Dette betyder, at når denne pin går højt, giver NAND -porten et lavt signal til CE -stiften i EEPROM, som gør den aktiv. Med denne opsætning betyder det, at EEPROM kun kan læses af 6502.

Da EEPROM lever i top 32k på hukommelseskortet, betyder det, at $ FFFC og $ FFFD kan holde startadressen til 6502, efter at den er blevet nulstillet. Da 6522 har sine adresser mellem $ 6000 og $ 600F, og låsen er på $ 4100, stopper den enhver hukommelseskonflikt.

NMI -vektoren ($ FFFA og $ FFFB) og BRK / IRQ -vektor ($ FFFE og $ FFFF) kunne også skrives på samme måde.

Trin 3: Programmering af EEPROM

Programmering af EEPROM
Programmering af EEPROM
Programmering af EEPROM
Programmering af EEPROM

For at gemme et program på EEPROM har det brug for en programmør. Jeg lavede en af en stripplade, en Arduino Pro Mini, et par 74HC595'er og og en ZIF -fatning. Oprindeligt var programmøren lavet til en AT28C16, der har færre adresselinjer end AT28C256, så den skulle ændres.

Kredsløbsdiagrammet viser, hvordan man kobler begge disse EEPROM'er. Det fremgår ikke af billedet, at de to 595 chips er på hovedet og ikke som vist på diagrammet. Ben 1 til 7 i 595/1 er i overensstemmelse med A1 til A7 i EEPROM, uanset hvilken der bruges. Dette sparer 7 forbindelsestråde. Tavlen ser nu lidt stram ud, og det er fordi jeg oprindeligt brugte en 24 -pin DIL -sokkel, som nu er blevet erstattet af den meget større 28 -bens ZIF -sokkel.

Der medfølger et program, der fungerer med mit bord. Programmet fungerer med alle Arduino og 595'er i et kredsløb som vist. Jeg valgte en 5v Pro Mini, fordi den er kompakt og billig nok til at blive efterladt i opsætningen.

Trin 4: EEPROM -programmerne

EEPROM -programmerne
EEPROM -programmerne

Der er tre enkle programmer i EEPROM programmerer. Hvis du vil bruge dem, skal du bare fjerne kommentaren fra den linje, du vil bruge.

// Læs fra port A på 6522

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

Programmet viser en hukommelsesdump, når den er færdig. Delen af programmet nedenfor giver dig fuld kontrol over, hvad du vil skrive eller slette, indstiller $ FFFC og $ FFFD og viser derefter indholdet af et givet område. Du skal bare kommentere eller ændre parametrene, som du har brug for. Adresserne kan også indtastes i decimalformat.

// slet EEPROM (422, 930, 0x41); // Brug til at slette hele eller dele af EEPROM - start, slut, byte

Serial.println ("Programmering af EEPROM"); beløb = program_numerisk_data (0x1000); skriveEEPROM (0x7ffc, 0x00); // Indstil $ FFFC til 6502 writeEEPROM (0x7ffd, 0x90); // Indstil $ FFFD til 6502 // writeEEPROM (0x1000, 0xA9); // Skriv 1 byte data Serial.println ("udført"); String outline = "Skrevet" + (streng) beløb + "bytes"; Serial.println (omrids); Serial.println ("Læsning af EEPROM"); printContents (0x0000, 0x112f); // Indstil område til visning af printContents (0x7ff0, 0x7fff); // Læser de sidste 16 bytes på EEPROM

En forkortet output fra programmet er ovenfor.

Trin 5: Kørsel af 6502 fra EEPROM

Kører 6502 fra EEPROM
Kører 6502 fra EEPROM
Kører 6502 fra EEPROM
Kører 6502 fra EEPROM
Kører 6502 fra EEPROM
Kører 6502 fra EEPROM

Den programmerede EEPROM kan nu indsættes i sit bræt, og denne sparegris går tilbage til hoved 6502 -tavlen, som grisen bakker om til MEGA. Billederne fra siden og ovenfra viser, hvordan det hele hænger sammen.

6502 kan nu læse startvektoren fra $ FFFC og $ FFFD (som er $ 9000) og derefter springe til det program, der er gemt der. MEGA leverer stadig kloksignalet, og dets program skal ændres for kun at give kloksignalet og overvåge 6502. Et modificeret program leveres til at gøre dette.

Det løbende foto viser, at dette program kører.

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

Kontakterne er sat i port A, og programmet viser den værdi, det læser på port B og 74HC373 (som er skjult i øjeblikket). kontakterne er forbundet til jord, og lysdioderne er forbundet til 5v. EOR #$ FF korrigerer problemet med låsen og port B, der viser forskellige mønstre ved at vende bitene, før der skrives til låsen.

Trin 6: Eksternt tidssignal

Eksternt tidssignal
Eksternt tidssignal

Hvis et kloksignal påføres stiften øverst på brættet, kan 6502 nu køre uafhængigt af MEGA. Det har selvfølgelig også brug for en strømforsyning. Jeg har eksperimenteret med forskellige ure og endda kørt 6502 ved 1MHz med en krystaloscillator. MEGA kan ikke følge med hurtigere hastigheder, så den skal fjernes.

Jeg har også prøvet output fra en 555 timer, men det virker ikke. Jeg tror, det kan skyldes, at det ikke er en firkantbølge? Når den blev tilsluttet en af CD4017 -udgange, drev den 6502. Jeg lappede ind i et af kitsene ovenfor for at prøve at få et ur -signal.

Jeg kigger stadig på forskellige metoder til at få et ur signal.

Trin 7: Konklusion

Jeg har vist, hvordan man bygger nogle komplekse kredsløb og får en meget enkel "computer" til at arbejde med en minimal mængde dele. Computeren kan ganske vist ikke gøre ret meget på nuværende tidspunkt eller sandsynligvis gøre det i fremtiden.

Tilbage i begyndelsen af 80'erne, med min VIC20, undrede jeg mig over den fantastiske maskine og havde ikke den første idé om, hvordan jeg skulle begynde at sammensætte en. Tiderne er gået videre og det samme har teknologien, men det er stadig rart at komme tilbage til det grundlæggende og være stolt af noget, du har bygget fra bunden.

For at videreudvikle denne computer har jeg til hensigt at sætte 2k SRAM til $ 0000 til $ 2047 og tilføje en 1 MHz oscillator. Vil sandsynligvis tilføje noget som en CD4040 (12-trins Binary Ripple Counter / Divider), så jeg kan få fat i forskellige clockhastigheder.

Kan endda tilføje et LCD -display for at give tekstoutput i stedet for kun blinkende lys. EEPROM -programmereren skal også ændres for at håndtere de større programmer, der er nødvendige for at køre et LCD -display.

Selvom MEGA er ved at blive unødvendig for driften af 6502, er den stadig nyttig til fejlfinding af maskinkoden. Som nogen ved, indeholder maskinkode altid fejl!

Anbefalede: