İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Önceki Instructable'ımdan sonra, şimdi 6502'yi bir şerit tahtaya koydum ve bir 6522 Çok Yönlü Arayüz Adaptörü (VIA) ekledim. Yine 6522'nin WDC versiyonunu kullanıyorum, çünkü 6502'leri ile mükemmel bir uyum sağlıyor. Bu yeni yongalar sadece orijinal MOS versiyonlarından çok daha az güç kullanmakla kalmıyor, aynı zamanda daha yavaş hızlarda çalıştırılabiliyor ve hatta adım adım atılabiliyor. sorunsuz bir program.
Arduino programı aslen Ben Eater (YouTube'da birçok videosu olan) tarafından yazılmıştır ve bu sonucu elde etmek için tarafımdan değiştirilmiştir.
Gereçler
1 x WDC W65C02 İşlemci
1 x WDC W65C22 Çok Yönlü Arayüz Adaptörü
1 x 74HC00N IC (Dörtlü 2 girişli NAND geçidi) veya benzeri
1 x 10cm genişliğinde (35 hat) Şerit tahtası
2 x 40 pinli DIL soketi
1 x 14 pinli DIL soketi
PCB Başlık Pimleri 2.54mm
PCB Başlık Soketleri 2.54mm
1 x 12mm Anlık Dokunsal Basmalı Düğme Anahtarı PCB'ye Monte SPST veya benzeri
1 x 1K direnç
1 x 3K3 direnç
2 x 0.1 uF seramik kapasitör
1 x 8 Yollu Su Işığı Çerçeveli 5mm kırmızı LED
Bağlantılar için çeşitli renkli tel
8 erkek - erkek bağlantı teli
Adım 1: Devre Kartı
Devre kartı oldukça kompakttır ve alt kısım doğrudan Arduino MEGA'ya takılır. Bunu başarmak için pimler, levhanın alt tarafına lehimlenmeden önce plastik tutucuların içine mümkün olduğunca itilir. Bunun için daha uzun pimler kullanılabilirdi, ancak standart pimler, kartın MEGA'nın üzerine sıkıca oturduğu anlamına gelir.
6502 ve 6522 IC'leri, MEGA'ya bağlanmak için şerit tahta raylarından faydalanmaları için sıraladım. 6502 için IC'nin altına gizlenmiş bazı bağlantılar da var. Kart yapılırken ilk iş Arduino'nun çift sıra soketine bağlanacak olan 16 adet şeridi kesmek oldu. 5v ve Gnd her iki tarafta olduğu için dış 2'nin kesilmesine gerek yoktur. Sonraki lehim, alt tarafta 2 sıra 18 pim ve üst tarafta 2 sıra 18 soket.
Bundan sonra DIL soketleri yerine lehimlendi ve raylar aralarında kesildi. 74HC00'ün 14 numaralı pinini 5v ile aynı yola yerleştirerek bir bağlantı kaydedebilirdim. İzleri sadece bağlantı kablolarını lehimlerken olması gerektiğinden emin olduğumda kestim. Bununla birlikte, işler her zaman planlandığı gibi gitmez, orijinal olarak önceki ekmek tahtasından şerit panosunu Arduino'nun 2, 3 ve 7 pimlerini kullanarak tasarladım, ancak bunlar şerit panosundaki deliklerle aynı hizada değil, bu yüzden kullanmak zorunda kaldım. 18, 31 ve 37 numaralı pinler. 31 ve 37'deki anakartımdaki linkler bu yüzden. Saat için neden kullanılmayan pinlerden (23, 24 vb.) birini kullanmadığımı merak ediyor olabilirsiniz, çünkü bu pinleri desteklemiyorlar. kesintiler, bu yüzden 18, 19, 20 veya 21 numaralı pinleri kullanmak zorunda kaldı. Neyse ki bu 4 pim, şerit levhadaki deliklerle aynı hizadadır ve her şeyi kompakt tutar. Pim 18 ayrıca diğer tüm tellerden en uzaktadır.
Ayrıca tamamlanmış panomun diyagramımla tam olarak aynı olmadığını da fark edebilirsiniz. Bunun nedeni, başka birinin şemasını takip ediyor olmamdı. Bu nedenle 74HC00 ile bağlantılar. Ayrıca bir güç LED'i ve Gnd ve 5v için fazladan 2 sıra soketin yanı sıra birkaç kapasitör ekledim.
2 veri soketini bağlayabilirdim, ancak bu, kartı geçen çok daha fazla kablo anlamına gelir. Bunu geçici bir önlem olarak yapmak için 8 bağlantı teli seçtim.
6522 A ve B bağlantı noktası, LED markaların kolayca yerleştirilebilmesi için raylarına lehimlenmiş soketlere sahiptir.
Artık breadboard versiyonunda olduğundan çok daha az kablo var.
Adım 2: Programlama Teorisi
6522, diğer birçok özelliğin yanı sıra iki G/Ç bağlantı noktasına sahiptir, ancak A ve B bağlantı noktalarına kolayca erişilebilir. Bağlantı noktasındaki verilerin çıktısını almak için, Veri Yön Kaydının (DDR) buna göre ayarlanması ve verilerin bağlantı noktasının kendisine gönderilmesi gerekir.
Yukarıdaki kurulumla 6522, E000$'da bulunuyor.
B bağlantı noktasından veri çıkışı için, $E002'deki DDR $FF (255 - tüm çıkışlar) olarak ayarlanır ve veriler $E000'e gönderilir.
A bağlantı noktasından veri çıkışı için, $E003'teki DDR $FF (255 - tüm çıkışlar) olarak ayarlanır ve veriler $E001'e gönderilir.
Aşağıdaki kod 6502 A kaydına $FF yükler ve $E002'de DDR B'ye yazar. Ardından 55$ yükler ve ORB'ye yazar. Kod döndürülür ($AA vererek) ve ORB'ye yazılır. Program 1005 $ 'a atlar ve durmadan tekrar eder. NOT: DDR'nin yalnızca bir kez başlatılması gerekir.
Adres Hexdump Sökme
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 100 milyar $ 8d 00 e0 STA $e000 $100e 4c 05 10 JMP 1005 $
55 $ ikili dosya 010101010 ve $AA 10101010'dur, bu da LED'lerin sırayla 4 açık, 4 kapalı olmasına neden olur.
Hızlı ve kirli düzeltme:
74HC00'yi (Dörtlü 2 girişli NAND Kapısı) bir 74HC08 (Dörtlü 2 girişli VE Kapısı) ile değiştirin ve 6522 artık $E000 yerine 6000 $'da bulunur. Bu, onu 6502'nin adreslenebilir belleğinin üst 32K'sından alt 32K'sına taşır.
Adım 3: Arduino Programı ve Çıktı
6502'nin okuyacak RAM'i olmadığı için Arduino, okuması için programı sağlıyor. Pin 18'de bir saat darbesi algılandığında, Arduino program verilerini veri yoluna koyar (Arduino pinleri 39, 41, 43, 45, 47, 49, 51 ve 53). 6502, yalnızca Arduino tarafından 22 ila 52 numaralı çift numaralı pinlerde izlenen kendi adreslerini üretir. Arduino ayrıca pin 37'de saat darbesi sağlar. 6502'nin R/W hattı pin 31'de izlenir.
Arduino verileri sağladığı için, şimdiye kadar 6502'nin VIA'dan veri girmesi mümkün olmadı (daha iyisini bilmiyorsanız).
Arduino programı aşağıda ve Seri Monitörden bir örnek çıktı yukarıda.
4. Adım: Sonuç
Yine minimal bir "6502 Bilgisayar" nasıl kurulur onu göstermeye çalıştım.
Bu aşamada 6502, çalışması için bir program ve bir saat darbesi sağlamak için hala Arduino'ya güveniyor.
Ekmek tahtasına kurduğumdan bir adım daha ileri.
Bu sefer 74HC373'ü değil, veri çıkışlarını kilitlemek için daha karmaşık 6522'yi kullandım. Ayrıca 6522'de iki G/Ç bağlantı noktası vardır.
Bazı SRAM veya EEPROM kurarak bu projeyi daha da ileriye götürmeyi düşünüyorum.