Sommario:

6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: 4 passaggi
6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: 4 passaggi

Video: 6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: 4 passaggi

Video: 6502 e 6522 Minimal Computer (con Arduino MEGA) Parte 2: 4 passaggi
Video: Соберите «минимальный компьютер UART» на печатной плате — простейший пригодный для использования ПК № 2. 2024, Novembre
Anonim
6502 e 6522 Computer minimale (con Arduino MEGA) Parte 2
6502 e 6522 Computer minimale (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 chip utilizzano molta meno energia rispetto alle versioni MOS originali, ma possono essere eseguiti a velocità inferiori o addirittura attraversati un programma senza problemi.

Il programma Arduino è stato originariamente scritto da Ben Eater (che ha molti video su YouTube) ed è stato modificato da me per ottenere questo risultato.

Forniture

1 x processore WDC W65C02

1 x adattatore di interfaccia versatile WDC W65C22

1 x 74HC00N IC (gate NAND quadruplo a 2 ingressi) o simile

1 x 10 cm di larghezza (35 linee) Stripboard

2 prese DIL a 40 pin

1 presa DIL a 14 pin

Pin header PCB 2,54 mm

Prese per PCB da 2,54 mm

1 x interruttore a pulsante tattile momentaneo da 12 mm montato su PCB SPST o simile

1 x 1K resistore

1 x 3K3 resistore

2 condensatori ceramici da 0,1 uF

1 x LED rosso da 5 mm con luce ad acqua a 8 vie

Cavo di vari colori per i collegamenti

8 fili di collegamento maschio - maschio

Passaggio 1: il circuito stampato

Il circuito stampato
Il circuito stampato
Il circuito stampato
Il circuito stampato

Il circuito è abbastanza compatto e la parte inferiore si collega direttamente all'Arduino MEGA. Per ottenere ciò, i perni vengono spinti il più possibile nei supporti in plastica prima di essere saldati alla parte inferiore della scheda. Avrebbero potuto essere usati pin più lunghi per questo, ma i pin standard significano che la scheda poggia saldamente sulla MEGA.

Ho allineato i circuiti integrati 6502 e 6522 in modo che utilizzino le piste della scheda strip per connettersi al MEGA. Ci sono anche alcune connessioni per il 6502 nascoste sotto l'IC. Quando si realizza la scheda, la prima cosa da fare è stata tagliare le 16 strisce che si collegheranno alla doppia fila di zoccoli dell'Arduino. I 2 esterni non devono essere tagliati poiché 5v e Gnd sono su entrambi i lati. Successivamente saldare nelle 2 file di 18 pin sul lato inferiore e nelle 2 file di 18 prese sul lato superiore.

Successivamente le prese DIL sono state saldate in posizione e le tracce sono state tagliate tra di loro. Avrei potuto salvare una connessione posizionando il pin 14 del 74HC00 sullo stesso binario di 5v. Ho tagliato le tracce solo quando ero sicuro che dovevano essere mentre stavo saldando i fili di collegamento. Tuttavia, le cose non vanno sempre secondo i piani, originariamente ho progettato la strip board dalla precedente breadboard usando i pin 2, 3 e 7 dell'Arduino, ma questi non si allineano con i fori nella strip board, quindi ho dovuto usare pin 18, 31 e 37. Da qui i collegamenti sulla mia scheda su 31 e 37. Potresti chiederti perché non ho usato uno dei pin inutilizzati (23, 24 ecc.) per l'orologio, questo perché non supportano interrupt, quindi ho dovuto usare i pin 18, 19, 20 o 21 che lo fanno. Fortunatamente questi 4 perni si allineano con i fori nella striscia e mantengono tutto compatto. Il pin 18 è anche il più lontano da tutti gli altri fili.

Potresti anche notare che la mia scheda completata non è esattamente la stessa del mio diagramma. Questo perché stavo seguendo il diagramma di qualcun altro. Da qui i collegamenti al 74HC00. Ho anche aggiunto un LED di alimentazione e altre 2 file di prese per Gnd e 5v, nonché un paio di condensatori in più.

Avrei potuto collegare le 2 prese dati, ma questo significherebbe molti più fili che attraversano la scheda. Ho optato per 8 cavi di collegamento per farlo come misura temporanea.

Le porte A e B del 6522 hanno prese saldate alle loro tracce in modo che le marche LED possano essere facilmente inserite.

Ci sono molti meno fili ora di quanti ce ne fossero nella versione breadboard.

Fase 2: Teoria della programmazione

Teoria della programmazione
Teoria della programmazione

Il 6522 ha due porte I/O e molte altre funzioni, ma le porte A e B sono facilmente accessibili. Per inviare i dati sulla porta, è necessario impostare di conseguenza il registro di direzione dei dati (DDR) e inviare i dati alla porta stessa.

Con la configurazione di cui sopra, il 6522 si trova a $ E000.

Per inviare i dati sulla porta B, il DDR a $E002 è impostato su $FF (255 - tutte le uscite) e i dati vengono inviati a $E000.

Per inviare i dati sulla porta A, il DDR a $E003 è impostato su $FF (255 - tutte le uscite) e i dati vengono inviati a $E001.

Il codice seguente carica $FF nel registro 6502 A e lo scrive in DDR B a $E002. Quindi carica $ 55 e lo scrive su ORB. Il codice viene ruotato (dando $AA) e scritto su ORB. Il programma torna indietro di $ 1005 e si ripete all'infinito. NOTA: il DDR deve essere inizializzato solo una volta.

Indirizzo Hexdump Disassemblaggio

$1000 a9 ff LDA #$ff $1002 8d 02 e0 STA $e002 $1005 a9 55 LDA #$55 $1007 8d 00 e0 STA $e000 $100a 6a ROR A $100b 8d 00 e0 STA $e000 $100e 4c 05 10 JMP $1005

$55 in binario è 010101010 e $AA è 10101010, il che fa sì che i LED si alternino tra 4 accesi e 4 spenti.

Soluzione rapida e sporca:

Sostituisci il 74HC00 (Quad 2 input NAND Gate) con un 74HC08 (Quad 2 input AND Gate) e il 6522 si trova ora a $ 6000 invece di $ E000. Questo lo sposta dai 32K superiori ai 32K inferiori della memoria indirizzabile del 6502.

Passaggio 3: il programma e l'output Arduino

Il programma e l'output di Arduino
Il programma e l'output di Arduino

Poiché il 6502 non ha RAM da cui leggere, Arduino fornisce il programma per la lettura. Quando viene rilevato un impulso di clock sul pin 18, Arduino inserisce i dati del programma sul bus dati (pin 39, 41, 43, 45, 47, 49, 51 e 53 di Arduino). Il 6502 genera i propri indirizzi che sono monitorati solo dall'Arduino sui pin pari da 22 a 52. L'Arduino fornisce anche l'impulso di clock sul pin 37. La linea R/W del 6502 è monitorata sul pin 31.

Poiché Arduino sta fornendo i dati, finora non è stato possibile far sì che il 6502 inserisca i dati dal VIA (a meno che tu non lo sappia meglio).

Il programma Arduino è sotto e un output di esempio dal monitor seriale è sopra.

Passaggio 4: conclusione

Anche in questo caso ho cercato di mostrare come impostare un "computer 6502 minimo".

In questa fase il 6502 fa ancora affidamento sull'Arduino per fornirgli un programma e un impulso di clock affinché possa funzionare.

È un passo in più rispetto a quando l'ho installato su breadboard.

Questa volta non ho usato il 74HC373, ma il più complesso 6522 per bloccare le uscite dei dati. Anche il 6522 ha due porte I/O.

Intendo portare avanti questo progetto installando un po' di SRAM o una EEPROM.

Consigliato: