Indholdsfortegnelse:
- Trin 1: Demonstrationsprogrammer
- Trin 2: Tilføjelse af en EEPROM
- Trin 3: Programmering af EEPROM
- Trin 4: EEPROM -programmerne
- Trin 5: Kørsel af 6502 fra EEPROM
- Trin 6: Eksternt tidssignal
- Trin 7: Konklusion
Video: 6502 Minimal computer (med Arduino MEGA) Del 3: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
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
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
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
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
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
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
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:
Mega RasPi - en Raspberry Pi i et Sega Mega Drive / Genesis: 13 trin (med billeder)
Mega RasPi - en Raspberry Pi i en Sega Mega Drive / Genesis: Denne guide tager dig gennem konverteringen af et gammelt Sega Mega Drive til en retro -spilkonsol ved hjælp af en Raspberry Pi. Jeg har brugt utallige timer i min barndom på at spille videospil på mit Sega Mega Drive. De fleste af mine venner havde også en, så vi ville
6502 & 6522 Minimal computer (med Arduino MEGA) Del 2: 4 trin
6502 & 6522 Minimal Computer (med Arduino MEGA) Del 2: I forlængelse af min tidligere Instructable, har jeg nu sat 6502 på et stripkort og tilføjet en 6522 Alsidig Interface Adapter (VIA). Igen bruger jeg en WDC -version af 6522, da det er et perfekt match til deres 6502. Ikke kun gør disse nye c
6502 Minimal computer (med Arduino MEGA) Del 1: 7 trin
6502 Minimal Computer (med Arduino MEGA) Del 1: 6502 mikroprocessoren optrådte første gang i 1975 og blev designet af et lille team ledet af Chuck Peddle for MOS Technology. Dengang blev det brugt i videokonsoller og hjemmecomputere, herunder Atari, Apple II, Nintendo Entertainment System, BBC Micr
Minimal Fire X 12 Volt Rover Chassis Med GoBILDA: 10 trin
Minimal Four X 12 Volt Rover Chassis Med GoBILDA: Jeg vil vise dig, hvordan jeg byggede et RC eller autonomt rover -chassis ved hjælp af goBILDA -komponenter. Jeg skal tilføje her, at jeg ikke har nogen forbindelse med goBILDA andet end som en stort set tilfreds kunde. Jeg har inkluderet en komplet reservedelsliste under Suppl
Brug af PSP som computer -joystick og derefter kontrollere din computer med PSP: 5 trin (med billeder)
Brug af PSP som computer joystick og derefter styring af din computer med PSP: Du kan gøre mange fede ting med PSP homebrew, og i denne instruktive vil jeg lære dig, hvordan du bruger din PSP som et joystick til at spille spil, men der er også et program, der giver dig mulighed for at bruge dit joystick som din mus. Her er materien