Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Əvvəlki Təlimatımdan sonra, indi 6502 -ni bir lövhəyə taxdım və 6522 Çox Yönlü Arayüz Adaptörü (VIA) əlavə etdim. Yenə də 6522 -nin WDC versiyasını istifadə edirəm, çünki onların 6502 -si ilə mükəmməl uyğun gəlir. Bu yeni çiplər orijinal MOS versiyalarına nisbətən daha az enerji sərf edir, həm də daha aşağı sürətlə işləyə və ya hətta keçilə bilər. problemsiz proqram.
Arduino proqramı əvvəlcə Ben Eater tərəfindən yazılmışdır (YouTube -da bir çox videosu var) və bu nəticəni əldə etmək üçün mənim tərəfimdən dəyişdirildi.
Təchizat
1 x WDC W65C02 Prosessor
1 x WDC W65C22 çox yönlü interfeys adapteri
1 x 74HC00N IC (Dörd 2 girişli NAND qapısı) və ya bənzəri
1 x 10 sm enində (35 xətt) Şerit lövhə
2 x 40 pinli DIL prizləri
1 x 14 pinli DIL yuvası
PCB başlıq pinləri 2.54 mm
PCB başlıq yuvaları 2.54 mm
1 x 12 mm ani toxunma düyməsini açarı PCB -yə quraşdırılmış SPST və ya bənzəri
1 x 1K rezistor
1 x 3K3 rezistor
2 x 0.1 uF keramika kondansatörləri
1 x 8 Yollu Su İşığı Marquee 5mm qırmızı LED
Bağlantılar üçün müxtəlif rəngli tellər
8 kişi - kişi keçid telləri
Addım 1: Dövrə lövhəsi
Elektrik lövhəsi olduqca yığcamdır və alt tərəfi birbaşa Arduino MEGA -ya bağlanır. Bunu etmək üçün lövhənin alt tərəfinə lehimlənmədən əvvəl sancaqlar plastik tutacaqlara mümkün qədər itələyir. Bunun üçün daha uzun sancaqlar istifadə edilə bilərdi, amma standart sancaqlar lövhənin MEGA -nın üstündə möhkəm dayandığını bildirir.
6502 və 6522 IC -ləri sıraya düzdüm ki, MEGA -ya qoşulmaq üçün lövhə lövhələrindən istifadə etsinlər. IC altında gizlənmiş 6502 üçün bəzi əlaqələr də var. Lövhə hazırlayarkən, ediləcək ilk şey, Arduinonun ikiqat sıra yuvasına bağlanacaq 16 zolağı kəsmək idi. 5v və Gnd hər iki tərəfdə olduğu üçün xarici 2 -nin kəsilməsinə ehtiyac yoxdur. Növbəti lehim, alt tərəfdəki 18 pimdən ibarət 2 sıra və üst tərəfdəki 18 yuvadan ibarət 2 sıra.
Bundan sonra DIL prizləri yerinə lehimləndi və izlər aralarında kəsildi. 74HC00 -ün 14 -cü pinini 5v ilə eyni yola qoyaraq əlaqəni xilas edə bilərdim. Parçaları yalnız birləşdirici telləri lehimləyərkən lazım olduğuna əmin olduğum zaman kəsdim. Ancaq işlər hər zaman plana uyğun getmir, mən əvvəlcə Arduinonun 2, 3 və 7 sancaqlarından istifadə edərək əvvəlki çörək lövhəsindəki şerit lövhəni hazırladım, amma bunlar şerid lövhəsindəki deliklərə uyğun gəlmir, buna görə də istifadə etməli oldum sancaqlar 18, 31 və 37. Buna görə də 31 və 37 nömrəli lövhəmdəki bağlantılar. Niyə saat üçün istifadə edilməmiş pinlərdən (23, 24 və s.) birini istifadə etmədiyimi düşünə bilərsiniz, bunun səbəbi dəstəkləməmələridir. kəsir, buna görə 18, 19, 20 və ya 21 pin istifadə etmək məcburiyyətində qaldı. Xoşbəxtlikdən bu 4 sancaq şerid taxtasındakı deliklər ilə düzülür və hər şeyi yığcam saxlayır. Pin 18 digər tellərdən ən uzaqdır.
Tamamlanmış lövhəmin diaqramımla tam eyni olmadığını görə bilərsiniz. Bunun səbəbi başqasının sxemini izlədiyimdir. Beləliklə 74HC00 ilə əlaqələr. Gnd və 5v üçün bir güc LED və əlavə 2 sıra yuva və bir neçə daha çox kondansatör əlavə etdim.
2 məlumat yuvasını bağlaya bilərdim, amma bu, lövhəni keçən daha çox tel deməkdir. Bunu müvəqqəti bir tədbir olaraq etmək üçün 8 keçid telini seçdim.
6522 A və B portlarında, lövhələrin lövhələri lehimlənmişdir ki, LED lövhələri asanlıqla daxil edilsin.
Çörək taxtası versiyasına nisbətən indi tellər çox azdır.
Addım 2: Proqramlaşdırma nəzəriyyəsi
6522 -də iki G/Ç portu və bir çox digər xüsusiyyətlər var, lakin A və B portlarına asanlıqla daxil olmaq mümkündür. Limanda məlumat çıxarmaq üçün Məlumat İstiqamət Reyestrini (DDR) buna uyğun olaraq qurmaq və məlumatları limanın özünə göndərmək lazımdır.
Yuxarıdakı quruluşla, 6522 $ E000 -də yerləşir.
B portunda məlumat çıxarmaq üçün $ E002 -dəki DDR $ FF (255 - bütün çıxışlar) olaraq təyin olunur və məlumatlar $ E000 -ə göndərilir.
A portunda məlumat çıxarmaq üçün $ E003 -dəki DDR $ FF (255 - bütün çıxışlar) olaraq təyin olunur və məlumatlar $ E001 -ə göndərilir.
Aşağıdakı kod 6502 A reyestrinə $ FF yükləyir və onu E002 dollarla DDR B -yə yazır. Sonra 55 dollar yükləyir və ORB -a yazır. Kod döndürülür ($ AA verilir) və ORB -a yazılır. Proqram 1005 dollar geri çəkilir və sonsuzca təkrarlanır. Qeyd: DDR yalnız bir dəfə işə salınmalıdır.
Ünvan Hexdump Sökülməsi
$ 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
İkili olaraq 55 dollar 010101010 və AA $ 10101010dur ki, bu da LED -lərin 4 -ü yansın, 4 -ü sönsün.
Tez və çirkli düzəliş:
74HC00 (Quad 2 input NAND Gate) -i 74HC08 (Quad 2 input AND Gate) ilə əvəz edin və 6522 indi E000 $ əvəzinə 6000 $ -da yerləşir. Bu, onu 6502 -nin ünvanlı yaddaşının yuxarı 32K -dan aşağı 32K -na keçirir.
Addım 3: Arduino Proqramı və Çıxış
6502 -nin oxumaq üçün RAM -ı olmadığı üçün Arduino proqramı oxumağı təmin edir. Pin 18 -də bir saat nəbzi aşkar edildikdə, Arduino proqram məlumatlarını məlumat avtobusuna yerləşdirir (Arduino pinləri 39, 41, 43, 45, 47, 49, 51 və 53). 6502, 22 -dən 52 -ə qədər olan cüt nömrəli pinlərdə yalnız Arduino tərəfindən izlənilən öz ünvanlarını yaradır. Arduino, 37 -ci pindəki saat nəbzini də təmin edir. 6502 -nin R/W xətti pin 31 -də izlənilir.
Arduino məlumat verdiyinə görə, bu günə qədər 6502 -ni VIA -dan daxil etmək mümkün olmayıb (daha yaxşı bilmirsinizsə).
Arduino proqramı aşağıda və Serial Monitordan nümunə çıxışı yuxarıdadır.
Addım 4: Nəticə
Yenə minimum "6502 Kompüter" in necə qurulacağını göstərməyə çalışdım.
Bu mərhələdə 6502 hələ də Arduinonun işləməsi üçün bir proqram və bir saat nəbzi ilə təmin edir.
Çörək taxtasına qurduğum vaxtdan bir addım daha uzaqdır.
Bu dəfə 74HC373 -dən istifadə etmədim, ancaq məlumatların çıxışını bağlamaq üçün daha mürəkkəb 6522 -dən istifadə etdim. Həmçinin 6522 -nin iki I/O portu var.
Bəzi SRAM və ya EEPROM quraşdıraraq bu layihəni daha da irəli aparmaq niyyətindəyəm.