Sommario:
- Forniture
- Passaggio 1: il concetto
- Passaggio 2: requisiti
- Passaggio 3: metterlo insieme
- Passaggio 4: test del circuito
- Passaggio 5: passaggio successivo
- Passaggio 6: il programma
- Passaggio 7: conclusione
Video: 6502 Computer minimale (con Arduino MEGA) Parte 1: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Il microprocessore 6502 è apparso per la prima volta nel 1975 ed è stato progettato da un piccolo team guidato da Chuck Peddle per la tecnologia MOS. All'epoca era utilizzato nelle console video e negli home computer inclusi Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 e 64. A quel tempo era uno dei più economici sul mercato. Non è mai andato veramente via e ora è utilizzato da hobbisti e professionisti per molte applicazioni.
La versione che sto usando è la W65C02S6TPG-14 prodotta da Western Design Center e utilizza dieci volte meno energia dell'originale. È speciale in quanto non deve funzionare a 1 MHz come il chip originale. Può funzionare molto più lentamente o essere utilizzato per eseguire un singolo passaggio in un programma e persino aumentare fino a 14 MHz. La scheda tecnica del chip ne spiega le capacità. Altri chip 6502 non hanno questa capacità e non funzioneranno in questo modo. I chip sono attualmente disponibili su Ebay e da altre fonti.
Forniture
Tutte le parti utilizzate sono attualmente disponibili su Ebay, AliExpress e altri.
Passaggio 1: il concetto
Mi sono ispirato a Ben Eater che ha prodotto una serie di video su YouTube sul 6502 e su molti altri aspetti della costruzione di computer e circuiti. Il programma è stato originariamente scritto da lui e ho modificato questo e alcuni dei suoi progetti per creare questo Instructable. Un'altra persona che mi ha ispirato è stato Andrew Jacobs che ha una sezione su GitHub in cui usa un micro PIC per controllare il suo 6502.
Come Ben, sto usando un Arduino MEGA per monitorare il 6502. Sto anche usando il MEGA per fornire il segnale di clock a differenza di Ben. Al momento non sto usando nemmeno EEPROM o RAM.
Passaggio 2: requisiti
Per costruire questo "computer" un elenco di elementi è il seguente:
1 x Arduino MEGA
1 x Centro di progettazione occidentale W65C02S6TPG-14
1 x 74HC00N IC (gate NAND quadruplo a 2 ingressi) o simile
1 x 74HC373N IC (chiusura ottale trasparente di tipo D) o simile
2 taglieri per pane da 830 fori (1 in caso di necessità)
Vari Dupont maschio - cavi maschio e fili di collegamento
2 x LED (ho usato 5 mm blu come puoi farla franca senza resistori)
1 x interruttore a pulsante tattile momentaneo da 12 mm montato su PCB SPST o simile
1 x 1K resistore
2 condensatori ceramici da 0,1 uF
1 x 8 LED Water Light Marquee 5mm LED rosso (come sopra) o 8 LED e resistori
NOTA: Se si acquista il kit dissaldato, è possibile inserire i LED al contrario in modo che siano a catodo comune. Attacco un cavo volante (invece del pin) in modo che possa collegarsi facilmente altrove. VCC ora diventa Ground. Ovviamente puoi girare i LED (su un elemento assemblato) e risaldarli, ma questo è un sacco di guai! I kit sono attualmente disponibili su AliExpress.
Passaggio 3: metterlo insieme
Ho trovato più facile utilizzare i nuovi cavi DuPont che non erano stati separati dal loro nastro per l'indirizzo e i bus dati.
Collegare il pin 9 (A0) del 6502 al pin 52 del MEGA, pin 10 (A1) del 6502 al pin 50 ecc…
fino a
Collegare il pin 25 (A15) del 6502 al pin 22 del MEGA.
Finora 16 collegamenti.
allo stesso modo
Collegare il pin 26 (D7) del 6502 al pin 39 del MEGA, pin 27 (D6) del 6502 al pin 41 ecc…
fino a
Collegare il pin 33 (D0) del 6502 al pin 53 del MEGA.
8 connessioni in più.
Collegare il pin 8 (VDD) a 5v sul MEGA.
Un condensatore da 0.1uF collegato dal pin 8 a Gnd della breadboard potrebbe essere utile qui ma non necessario.
Collegare il pin 21 (VSS) a Gnd sul MEGA.
I pin 2, 4, 6, 36 e 38 possono essere collegati a 5v
Collegare il pin 37 (Clock) al pin 2 e al pin 7 del MEGA.
Collegare il pin 34 (RWB) al pin 3 del MEGA.
Collegare il pin 40 (Reset) come nello schema sopra.
Passaggio 4: test del circuito
A questo punto il 6502 funzionerà e sarà possibile utilizzare il programma1. Se stai usando il tendone a 8 vie (come sopra), può essere inserito direttamente nella breadboard e il cavo volante collegato a terra, oppure puoi usare 8 LED e resistori. I LED mostreranno cosa c'è sul bus dati.
A questo punto sarebbe opportuno impostare i ritardi nel Loop() a 500 o più, per seguire ciò che sta accadendo.
Dovresti ottenere un output simile sul monitor seriale come quello sopra. Quando si preme Reset, il processore esegue 7 cicli e quindi cerca l'inizio del programma nelle posizioni $FFFC e $FFFD. Poiché non ci sono indirizzi fisici da leggere per il 6502, dobbiamo fornirli dal MEGA.
Nell'output sopra, il 6502 legge $FFFC e $FFFD e ottiene $00 e $10 (Low byte, High byte) che è l'inizio del programma a $1000. Il processore avvia quindi l'esecuzione del programma nella posizione $1000 (come sopra). In questo caso legge $A9 e $55, cioè LDA#$55 (Carica 85 nell'accumulatore). Anche in questo caso, poiché non esiste una posizione di memoria fisica, il MEGA simula ciò che viene letto dal bus dati.
$55 (85) fornisce il modello binario 01010101 e quando viene ruotato di 1 bit a sinistra fornisce $AA (170) 10101010.
Il programma mostra che il processore funziona correttamente ma presto diventa un po' noioso, quindi vai alla parte successiva.
Passaggio 5: passaggio successivo
Il "mucchio di spaghetti" sopra è probabilmente qualcosa di simile a quello che avrai dopo questa fase.
Successivamente è necessario aggiungere i circuiti integrati 74HC373N e 74HC00N alla breadboard.
Sfortunatamente i pin del 373 non si allineano con il bus dati, quindi dovranno essere collegati con dei fili.
Collegare 5v al pin 20.
Collegare la terra al pin 10.
Collegare il pin 33 (D0) del 6502 al pin 3 (D0) del 74HC373N
e allo stesso modo con i pin D1 a D7.
Da Q0 a Q7 sono le uscite e queste dovranno essere collegate al tendone LED o ai singoli LED e resistori.
Con il 74HC00 sono necessarie solo 2 delle sue porte
Collegare 5v al pin 14.
Collegare la terra al pin 7.
Collegare il pin 17 (A8) del 6502 al pin 1 (1A) del 74HC00
Collegare il pin 25 (A15) del 6502 al pin 2 (1B) del 74HC00
Collegare il pin 34 (R/W) del 6502 al pin 5 (2B) del 74HC00
Collegare il pin 3 (1Y) del 74HC00 al pin 4 (2A) del 74HC00
Collegare il pin 6 (2Y) del 74HC00 al pin 11 (LE) del 74HC373N
Collegare il pin 11 (LE) del 74HC373N al pin 1 (OE) del 74HC373N
È possibile collegare un LED blu a 1Y e terra e 2Y a terra, questo indicherà quando il cancello è attivo.
Infine cambia la riga nella procedura onClock da program1 a program2
setDataPins(programma2[offset]);
Passaggio 6: il programma
Il programma 6502-Monitor contiene le due routine 6502 descritte sopra.
Il programma è ancora in fase di sviluppo ed è un po' disordinato.
Quando si esegue program2, i ritardi nel loop() possono essere 50 o meno e persino rimossi del tutto. Commentare le righe Serial.print() rende anche il 6502 più veloce. Scollegando il pin 1 (OE) del 373 dal pin 11 (LE) si ottengono risultati diversi. Scollegando il pin 1 e il pin 11 del 373 dalle porte NAND è possibile vedere cosa c'è sul bus dati ad ogni ciclo di clock.
Potrebbe essere necessario collegare OE a terra piuttosto che lasciarlo flottante poiché le 8 linee di uscita sono disabilitate se questo pin diventa alto. Quando il pin LE è alto, i pin di uscita sono gli stessi degli ingressi. Portando il pin LE basso, le uscite vengono bloccate, ovvero se i pin di ingresso cambiano, le uscite rimangono le stesse.
Ho cercato di mantenere il programma il più semplice possibile per renderlo più facile da capire.
Sperimentare con i ritardi ti consente di seguire esattamente ciò che sta facendo il 6502.
Di seguito sono riportati i due programmi (entrambi eseguiti all'indirizzo $1000) in 6502 Assembler:
programma1
LDA#$55
NO
ROL
STA$1010
JMP$ 1000
Il ROL ruota il contenuto dell'accumulatore di un bit a sinistra, il che significa che $ 55 ora diventa $ AA.
In codice macchina (esadecimale): A9 55 EA 2A 8D 10 10 4C 00 10
programma2
LDA#$01
STA$8100
ADC#$03
STA$8100
JMP$ 1005
Nel codice macchina (esadecimale): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10
Nel program2 ora c'è un indirizzo fisico $8100 che è dove si trova il 74HC373 sul bus degli indirizzi.
cioè A15 del 6502 è 32768 ($ 8000) e A8 è 256 ($ 0100) = 33024 ($ 8100).
Quindi, quando il 6502 scrive su $8100 (STA$8100) l'R/W del 6502 è basso e i dati sul bus dati del 6502 sono bloccati quando il 373 LE va basso. A causa del 74HC00 NAND Gate, i segnali sono invertiti.
Nella serigrafia sopra, la seconda scrittura è aumentata di 3 (ADC#$03) - passata da $7F a $82.
In realtà, sarebbero utilizzate più di 2 linee del bus degli indirizzi per la posizione specifica del 373. Poiché questo è l'unico indirizzo fisico tra i possibili 65536, dimostra come funziona il bus degli indirizzi. Potresti sperimentare con diversi pin di indirizzo e metterlo in una posizione diversa. Naturalmente, sarà necessario modificare gli operandi STA nella nuova posizione. per esempio. Se hai usato le linee di indirizzo A15 e A9, l'indirizzo sarebbe $ 8200 (32768 + 512).
Passaggio 7: conclusione
Ho cercato di dimostrare quanto sia facile far funzionare un 6502.
Non sono un esperto in questo campo, quindi sarei lieto di ricevere commenti o informazioni costruttivi.
Sei libero di svilupparlo ulteriormente e sarei interessato a ciò che hai fatto.
Ho intenzione di aggiungere una EEPROM, SRAM e un 6522 al progetto, oltre a metterlo su strip board in futuro.
Consigliato:
6502 Computer minimale (con Arduino MEGA) Parte 3: 7 passaggi
6502 Minimal Computer (con Arduino MEGA) Parte 3: Andando oltre, ho aggiunto un Octal Latch, 8 LED rettangolari e un array di resistori da 220 Ohm alla scheda principale. C'è anche un ponticello tra il pin comune dell'array e la massa, in modo che i LED possano essere spenti. Il cancello 74HC00 NAND h
6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: 4 passaggi
6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: Seguendo il mio precedente Instructable, ora ho messo il 6502 su una strip board e ho aggiunto un 6522 Versatile Interface Adapter (VIA). Ancora una volta, sto usando una versione WDC del 6522, in quanto è un abbinamento perfetto per il loro 6502. Non solo questi nuovi c
Utilizzo della PSP come joystick del computer e quindi controllo del computer con la PSP: 5 passaggi (con immagini)
Utilizzo della PSP come joystick del computer e quindi controllo del computer con la PSP: puoi fare molte cose interessanti con l'homebrew della PSP, e in questo tutorial ti insegnerò come usare la tua PSP come joystick per giocare, ma c'è anche un programma che ti permette di usare il tuo joystick come mouse. Ecco i mater
Come Incidere la Finestra di un Computer (Parte 1): 6 Passaggi
Come incidere la finestra di un computer (parte 1): ho visto molti casi con le finestre trasparenti incise. Avevo deciso di incidere le mie finestre per dare loro un nuovo aspetto. Non è così difficile come sembra, prenditi il tuo tempo e otterrai buoni risultati. Altre istruzioni per la finestra del caso possono essere trovate su Instru
Come Incidere la Finestra di un Computer (Parte 2): 5 Passaggi (con Immagini)
Come incidere una finestra del computer (Parte 2): Questo va con Come incidere una finestra del computer (Parte 1) Questo è facoltativo ma penso che sia bello. La parte 2 è prendere quell'incisione e farla risaltare. Questo fa sembrare la finestra come Tron in un certo senso. Questo è un bell'effetto ma hai bisogno di un po' di bri