Mündəricat:

6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə: 7 addım
6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə: 7 addım

Video: 6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə: 7 addım

Video: 6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə: 7 addım
Video: Arduino Mega 6502 - Work in Progress #1 2024, Noyabr
Anonim
6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə
6502 Minimal Kompüter (Arduino MEGA ilə) 3 -cü hissə

Daha da irəliləyərək, indi ana lövhəyə Octal Latch, 8 düzbucaqlı LED və 220 Ohm rezistor dəsti əlavə etdim. LED -lərin söndürülməsi üçün dizinin ümumi pimi ilə zəmini arasında bir tullanan da var. 74HC00 NAND qapısı 78LS08 AND qapısı ilə dəyişdirildi, qapının naqilləri də dəyişdirildi. AND qapısı, 6522 -nin E000 dollar əvəzinə 6000 dollar olduğu anlamına gəlir.

6502 -ni idarə etmək üçün xarici bir saat bağlantısı üçün bir pin də var. Bu əlaqə ilə MEGA -nın bir saat siqnalı verməsinə ehtiyac yoxdur. MEGA hələ də əvvəlki kimi prosessorla baş verənləri izləyir.

Kilid üçün 20 pinli 74HC373 istifadə etdim, çünki bir az idi. Çörək taxtasında bu yaxşı idi, amma 74HC573 avtobusa uyğundur və çoxlu naqilləri xilas etmiş olardı. 22 pinli IC olan UCN5801A da dövrədə nəzərdən keçirilə bilər, ancaq naqillər bir az fərqli olacaq.

Üst, tək narıncı LED güc göstəricisidir və sol alt qırmızı işıq yazmanın nə vaxt baş verdiyini göstərir. Lövhə daha yüksək sürətlə işlədilsə, ikincisi əhəmiyyətsiz olacaq.

Dəyişdirilmiş dövrə yuxarıdadır (74HC573 ilə).

Addım 1: Nümayiş Proqramları

Nümayiş Proqramları
Nümayiş Proqramları

6502 monitoruna iki sadə nümayiş proqramı daxildir və onların sökülmüş kodu burada.

Bu proqram 1 -i 6502 A reyestrinə yükləyir və kiliddə saxlayır. Daha sonra A reyestrinə 1 əlavə edir və onu mandalda saxlayır. Sonra 1005 dollara qayıdır və proses sonsuza qədər təkrarlanır.

* = 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

Bu proqram əvvəlcə 6522 port B -nin DDR -ni çıxışa qoyur. Daha sonra limanda 55 dollar (B01010101) saxlayır. A reyestri daha sonra 1 addım sağa dönər və indi $ AA (B10101010) tutar. Bu yenidən B portunda və mandalda saxlanılır. Proqram 1005 dollara qayıdır və sonsuza qədər davam edir.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #55 1007 38 SEC 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

Aranızdakı iti gözlülər, rəngli LED -lərin yaşıllardan fərqli bir model göstərdiyini görə bilərlər. Bunun səbəbi, ümumi qurğunun rəngli olanlarda 5v -yə, yaşıldakı ortağın isə yerə bağlı olmasıdır.

Bu kod xəttini program2 və ya program3 olaraq dəyişdirin.

setDataPins (proqram3 [ofset]);

6502 Assembler və Disassembler proqramlarınızı kodlaşdırmağa kömək edən faydalı vasitələrdir.

Addım 2: EEPROM əlavə edin

EEPROM əlavə edin
EEPROM əlavə edin
EEPROM əlavə edin
EEPROM əlavə edin
EEPROM əlavə edin
EEPROM əlavə edin

EEPROM lövhəsi üçün, lövhənin altındakı lövhəni təmizləməsini təmin etmək üçün 950 x 650 mm şerit lövhə və 19 mm kişi başlıq pinlərindən istifadə etdim. Bu lövhə aşağıdakı 6502 lövhəsinə qoşulur. EEPROM, 28 pinli və 32k x 8 bit yaddaşa malik ATMEL 28C256 -dır. Bu, hazırda istifadə olunan kiçik proqramlar üçün kifayət qədər çoxdur.

Bu lövhə üçün bir dövrə diaqramı etməmişəm, ancaq aşağıda 6502 lövhəsinə necə bağlandığı olduqca düzdür. Bu EEPROM çipləri avtobus dostu deyil, buna görə də ayrı -ayrı sancaqlara, buna görə də bütün "yaşıl və ağ spagetti" lərə bağlamaq lazımdır. Məlumat xəttlərini lövhənin alt tərəfinə bağlayaraq əvvəlki lövhədəki körpü problemini həll etdim.

EEPROM -un 14 ünvan pimi, sol tərəfdəki müvafiq pinlərə (yaşıl tellər) və G/Ç pinləri sağdakı məlumat pinlərinə (ağ tellər) bağlanır. Pin 27 (WE) 28 pininə (5v), pin 22 (OE) yerə və pin 20 (CE) NAND qapısına bağlıdır. NAND qapısının 2 girişi A15 -ə bağlıdır ana lövhə. Bu o deməkdir ki, bu pin yüksəldikdə, NAND qapısı EEPROM -un CE pininə aşağı siqnal verir və bu onu aktiv edir. Bu quruluşla, EEPROM -un yalnız 6502 tərəfindən oxunması deməkdir.

EEPROM, yaddaş xəritəsindəki ilk 32k -də yaşadığı üçün, $ FFFC və $ FFFD -nin sıfırlandıqdan sonra 6502 üçün başlanğıc ünvanını saxlaya biləcəyi mənasına gəlir. 6522 ünvanlarının 6000 ilə 600F arasında olması və mandalın 4100 dollar olması ilə hər hansı bir yaddaş çatışmazlığını dayandırır.

NMI vektoru ($ FFFA və $ FFFB) və BRK / IRQ vektoru ($ FFFE anf $ FFFF) də eyni şəkildə yazıla bilər.

Addım 3: EEPROM proqramlaşdırılması

EEPROM proqramlaşdırılması
EEPROM proqramlaşdırılması
EEPROM proqramlaşdırılması
EEPROM proqramlaşdırılması

Bir proqramı EEPROM -da saxlamaq üçün proqramçıya ehtiyac var. Bir zolaq taxtası, bir Arduino Pro Mini, bir neçə 74HC595 və ZIF prizindən hazırladım. Əvvəlcə proqramçı, dəyişdirilməli olan AT28C256 -dan daha az ünvan xəttinə malik olan bir AT28C16 üçün hazırlanmışdır.

Dövrə diaqramı, bu EEPROMların hər ikisinin necə bağlanacağını göstərir. Fotoşəkildən aydın deyil ki, iki 595 çipi tərsinə çevrilib və diaqramda göstərildiyi kimi deyil. 595/1 nömrəli 1 -dən 7 -ə qədər olan pinlər, istifadə olunmasından asılı olmayaraq EEPROM -un A1 -dən A7 -yə uyğun gəlir. Bu, 7 birləşdirici teldən qənaət edir. Lövhə indi bir az sıx görünür və bunun səbəbi əvvəlcə daha böyük 28 pinli ZIF yuvası ilə əvəzlənmiş 24 pinli DIL yuvası istifadə etməyimdir.

Lövhəmlə işləyən bir proqram daxildir. Proqram, göstərildiyi kimi bir dövrədə hər hansı bir Arduino və 595s ilə işləyəcək. 5v Pro Mini seçdim, çünki kompakt və quruluşda buraxmaq üçün kifayət qədər ucuzdur.

Addım 4: EEPROM Proqramları

EEPROM Proqramları
EEPROM Proqramları

EEPROM proqramçıda üç sadə proqram var. Onlardan istifadə etmək üçün istifadə etmək istədiyiniz xətti qeyd edin.

// 6522 A limanından oxuyun

// const bayt məlumatları = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Proqram bitdikdə bir yaddaş zibilini göstərir. Proqramın aşağıdakı hissəsi yazmaq və ya silmək istədiyinizə tam nəzarət edir, $ FFFC & $ FFFD təyin edir və sonra müəyyən bir aralığın məzmununu göstərir. Parametrləri istədiyiniz kimi şərh edin və ya dəyişdirin. Ünvanlar ondalık formatda da daxil edilə bilər.

// silməEEPROM (422, 930, 0x41); // EEPROM -un tamamını və ya bir hissəsini silmək üçün istifadə edin - başlanğıc, son, bayt

Serial.println ("Proqramlaşdırma EEPROM"); məbləğ = proqram_sayı_data (0x1000); writeEEPROM (0x7ffc, 0x00); // 6502 writeEEPROM (0x7ffd, 0x90) üçün $ FFFC qurun; // 6502 üçün $ FFFD təyin edin // writeEEPROM (0x1000, 0xA9); // 1 bayt məlumat yazın Serial.println ("bitdi"); String konturu = "Yazılı" + (String) məbləği + "bayt"; Serial.println (kontur); Serial.println ("EEPROM oxunur"); printContents (0x0000, 0x112f); // printContents (0x7ff0, 0x7fff) göstərmək üçün aralığı təyin edin; // EEPROM -da son 16 baytı oxuyur

Proqramdan qısaldılmış bir nəticə yuxarıdadır.

Addım 5: 6502 -ni EEPROM -dan işə salın

6502 -ni EEPROM -dan işlətmək
6502 -ni EEPROM -dan işlətmək
6502 -ni EEPROM -dan işlətmək
6502 -ni EEPROM -dan işlətmək
6502 -ni EEPROM -dan işlətmək
6502 -ni EEPROM -dan işlətmək

Proqramlaşdırılmış EEPROM artıq lövhəsinə daxil edilə bilər və bu donuz əti MEGA -ya dəstəklənən əsas 6502 lövhəsinə arxalanır. Yuxarıdakı yan və üst görünüş fotoşəkilləri, hamısının bir -birinə necə uyğun olduğunu göstərir.

6502, $ FFFC və $ FFFD ($ 9000) olan başlanğıc vektorunu oxuya bilər və sonra orada saxlanılan proqrama keçə bilər. MEGA hələ də saat siqnalı verir və proqramını yalnız saat siqnalı vermək və 6502 -ni izləmək üçün dəyişdirmək lazımdır. Bunun üçün dəyişdirilmiş bir proqram təmin edilmişdir.

İşləyən foto bu proqramın işlədiyini göstərir.

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

Açarlar A limanına bağlanır və proqram B portunda və 74HC373 -də oxuduğu dəyəri göstərir (hazırda gizlidir). açarlar yerə və LEDlər 5v -ə qoşulur. EOR #$ FF, mandala yazmadan əvvəl bitləri çevirərək fərqli nümunələri göstərən mandal və B port problemini düzəldir.

Addım 6: Xarici Zaman Siqnalı

Xarici vaxt siqnalı
Xarici vaxt siqnalı

Lövhənin yuxarısındakı pimə bir saat siqnalı tətbiq olunarsa, 6502 artıq MEGA -dan asılı olmayaraq işləyə bilər. Əlbəttə ki, bir enerji təchizatı da lazımdır. Fərqli saatlarla sınaqdan keçirdim və hətta 6502 -ni 1MHz -də kristal osilatorla işlədim. MEGA daha yüksək sürətlə ayaqlaşa bilməz, buna görə də çıxarılmalıdır.

Çıxışı 555 taymerdən də sınadım, amma bu işləmir. Düşünürəm ki, bu bir kvadrat dalğa olmadığı üçün ola bilərmi? CD4017 çıxışlarından birinə qoşulduqda, 6502 -ni idarə etdi. Saat siqnalını sınamaq üçün yuxarıdakı dəstlərdən birinə yapışdırdım.

Hələ də saat siqnalı almaq üçün müxtəlif üsullara baxıram.

Addım 7: Nəticə

Bəzi mürəkkəb sxemlərin necə qurulacağını və minimal miqdarda hissələrlə işləmək üçün çox sadə bir "kompüter" əldə etməyi göstərdim. Düzdür, kompüter hazırda çox şey edə bilməz və ya gələcəkdə də edə bilər.

80 -ci illərin əvvəllərində, VIC20 ilə, zəhmli maşına təəccüb edirdim və bir araya gətirməyə necə başlayacağım haqqında ilk fikirim yox idi. Zamanlar keçdi və texnologiya da dəyişdi, amma yenə də əsaslara qayıtmaq və sıfırdan qurduğunuz bir şeylə fəxr etmək hələ də xoşdur.

Bu kompüteri daha da inkişaf etdirmək üçün, 2k SRAM -ı 0000 dollardan 2047 dollara qoyub 1 MHz tezlikli osilator əlavə etmək niyyətindəyəm. Fərqli saat sürətlərindən istifadə edə biləcəyim üçün yəqin ki, CD4040 (12 Mərhələli İkili Ripple Sayıcı / Bölücü) kimi bir şey əlavə edəcəyəm.

Yalnız yanıb -sönən işıqlardan çox mətn çıxışı vermək üçün bir LCD ekran əlavə edə bilərsiniz. EEPROM proqramçısı, LCD ekranı işə salmaq üçün lazım olan daha böyük proqramlarla məşğul olmaq üçün də dəyişdirilməlidir.

MEGA, 6502 -nin işləməsi üçün lazımsız hala gəlsə də, maşın kodunu düzəltmək üçün hələ də əlverişlidir. Hər kəsin bildiyi kimi, maşın kodunda həmişə səhvlər var!

Tövsiyə: