İçindekiler:

6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1: 7 Adım
6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1: 7 Adım

Video: 6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1: 7 Adım

Video: 6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1: 7 Adım
Video: Street Fighter 2'de C64'te Neler Yanlış Gidiyor | Nostalji Nerd 2024, Kasım
Anonim
6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1
6502 Minimal Bilgisayar (Arduino MEGA ile) Bölüm 1

6502 mikroişlemci ilk olarak 1975'te ortaya çıktı ve MOS Teknolojisi için Chuck Peddle liderliğindeki küçük bir ekip tarafından tasarlandı. O zamanlar Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 ve 64 gibi video konsollarında ve ev bilgisayarlarında kullanılıyordu. O zamanlar piyasadaki en ucuzlardan biriydi. Asla gerçekten kaybolmadı ve şimdi birçok uygulama için hobiler ve profesyoneller tarafından kullanılıyor.

Kullandığım sürüm, Western Design Center tarafından yapılan ve orijinalinden on kat daha az güç kullanan W65C02S6TPG-14. Orijinal çip gibi 1 MHz'de çalışması gerekmediği için özeldir. Çok daha yavaş çalışabilir veya bir programda tek adımda kullanılabilir ve hatta 14 MHz'e kadar çıkabilir. Çipin Veri Sayfası yeteneklerini açıklar. Diğer 6502 yongaları bu yeteneğe sahip değildir ve bu şekilde çalışmayacaktır. Çipler şu anda Ebay'de ve diğer kaynaklarda mevcuttur.

Gereçler

Kullanılan tüm parçalar şu anda Ebay, AliExpress ve diğerlerinde mevcuttur.

Adım 1: Konsept

İlhamımı, YouTube'da 6502 ve bilgisayar ve devre inşa etmenin diğer birçok yönü hakkında bir dizi video hazırlayan Ben Eater'den aldım. Program orijinal olarak onun tarafından yazılmıştır ve ben bunu ve tasarımlarından bazılarını bu Eğitilebilir Tabloyu ortaya çıkarmak için değiştirdim. Bana ilham veren başka bir kişi, GitHub'da 6502'sini kontrol etmek için bir PIC mikro kullandığı bir bölümü olan Andrew Jacobs'du.

Ben gibi, 6502'yi izlemek için bir Arduino MEGA kullanıyorum. Ben'in aksine saat sinyalini sağlamak için MEGA'yı da kullanıyorum. Şu anda herhangi bir EEPROM veya RAM kullanmıyorum.

2. Adım: Gereksinimler

Gereksinimler
Gereksinimler

Bu "bilgisayarı" oluşturmak için bir öğe listesi aşağıdaki gibidir:

1 x Arduino MEGA

1 x Batı Tasarım Merkezi W65C02S6TPG-14

1 x 74HC00N IC (Dörtlü 2 girişli NAND geçidi) veya benzeri

1 x 74HC373N IC (Sekizli D tipi şeffaf mandal) veya benzeri

2 x 830 delikli ekmek tahtası (1 tutam)

Çeşitli Dupont erkek - erkek uçlar ve bağlantı telleri

2 x LED (direnç olmadan kurtulabileceğiniz için 5 mm mavi kullandım)

1 x 12mm Anlık Dokunsal Basmalı Düğme Anahtarı PCB'ye Monte SPST veya benzeri

1 x 1K direnç

2 x 0.1 uF seramik kapasitör

1 x 8 Yollu Su Işığı Çerçeve 5mm kırmızı LED (yukarıdaki gibi) veya 8 LED ve direnç

NOT: Lehimlenmemiş kiti alırsanız, LED'leri ortak katot olacak şekilde yanlış şekilde takabilirsiniz. Başka bir yere kolayca bağlanabilmesi için bir uç (pim yerine) takıyorum. VCC şimdi Ground olur. Elbette LED'leri (birleştirilmiş bir üründe) çevirebilir ve yeniden lehimleyebilirsiniz, ancak bu çok fazla faff! Kitler şu anda AliExpress'te mevcuttur.

Adım 3: Bir araya getirmek

Bir araya getirmek
Bir araya getirmek
Bir araya getirmek
Bir araya getirmek

Adres ve veri yolları için şeritlerinden ayrılmamış yeni DuPont kablolarını kullanmayı daha kolay buldum.

6502'nin 9 (A0) pimini MEGA'nın 52 pimine bağlayın, 6502'nin pin 10'u (A1) pin 50'ye vs…

a kadar

6502'nin 25 (A15) pimini MEGA'nın 22 pimine bağlayın.

Şimdiye kadar 16 bağlantı.

aynı şekilde

6502'nin 26 (D7) pinini MEGA'nın pin 39'una bağlayın, 6502'nin pim 27'si (D6), pim 41'e vb.

a kadar

6502'nin 33 (D0) pimini MEGA'nın 53 pimine bağlayın.

8 bağlantı daha.

MEGA'daki pim 8'i (VDD) 5v'ye bağlayın.

Pin 8'den breadboard'un Gnd'sine bağlanan 0.1 uF'lik bir kapasitör burada faydalı olabilir ancak gerekli değildir.

Pin 21'i (VSS) MEGA üzerindeki Gnd'ye bağlayın.

2, 4, 6, 36 ve 38 numaralı pinler 5v'a bağlanabilir

Pim 37'yi (Saat) MEGA'nın pim 2 ve pim 7'sine bağlayın.

Pim 34'ü (RWB) MEGA'nın pin 3'üne bağlayın.

Pim 40'ı (Sıfırlama) yukarıdaki şemaya göre bağlayın.

Adım 4: Devreyi Test Etme

Devreyi Test Etme
Devreyi Test Etme

Bu aşamada 6502 çalışacak ve program1 kullanılabilir. 8 yollu kayan yazı (yukarıdaki gibi) kullanıyorsanız, doğrudan devre tahtasına takılabilir ve fly lead toprağa bağlı olabilir veya 8 LED ve direnç kullanabilirsiniz. LED'ler veri yolunda ne olduğunu gösterecektir.

Bu aşamada, neler olduğunu takip etmek için Loop()'taki gecikmeleri 500 veya daha fazlasına ayarlamak iyi olacaktır.

Seri Monitörde yukarıdakine benzer bir çıktı almalısınız. Sıfırla'ya basıldığında, işlemci 7 döngüden geçer ve ardından programın başlangıcını $FFFC ve $FFFD konumlarında arar. 6502'nin okuyacağı fiziksel bir adres olmadığından, bunları MEGA'dan sağlamamız gerekiyor.

Yukarıdaki çıktıda, 6502 $FFFC ve $FFFD okur ve 1000$'dan programın başlangıcı olan 00$ ve 10$ (Düşük bayt, Yüksek bayt) alır. İşlemci daha sonra programı $1000 konumunda (yukarıdaki gibi) yürütmeye başlar. Bu durumda $A9 ve $55 okur, yani LDA#$55 (akümülatöre 85 yükleyin). Yine fiziksel bir bellek konumu olmadığı için MEGA, veri yolundan okunanları simüle eder.

55$ (85), 01010101 ikili düzenini verir ve 1 bit sola döndürüldüğünde, $AA (170) 10101010 değerini verir.

Program, işlemcinin düzgün çalıştığını ancak kısa sürede biraz sıkıcı hale geldiğini gösteriyor, bu nedenle bir sonraki bölüme geçiyor.

Adım 5: Sonraki Adım

Sonraki adım
Sonraki adım
Sonraki adım
Sonraki adım

Yukarıdaki "spagetti yığını" muhtemelen bu aşamadan sonra sahip olacağınız şeye benzer.

Ardından, 74HC373N ve 74HC00N IC'lerini devre tahtasına eklemeniz gerekir.

Ne yazık ki 373'ün pinleri veri yolu ile aynı hizada değil, bu yüzden kablolarla bağlanması gerekecek.

5v'yi pin 20'ye bağlayın.

Topraklamayı pim 10'a bağlayın.

6502'nin 33 (D0) pimini 74HC373N'nin 3 (D0) pimine bağlayın

ve aynı şekilde D1 ila D7 pinleri ile.

Q0 ila Q7 çıkışlardır ve bunların LED çerçevesine veya ayrı LED'lere ve dirençlere bağlanması gerekir.

74HC00 ile kapılarından sadece 2 tanesine ihtiyaç vardır

5v'yi pim 14'e bağlayın.

Topraklamayı pim 7'ye bağlayın.

6502'nin 17 (A8) pimini 74HC00'ün 1 (1A) pimine bağlayın

6502'nin 25 (A15) pimini 74HC00'ün 2 (1B) pimine bağlayın

6502'nin 34(R/W) pinini 74HC00'ün 5 (2B) pinine bağlayın

74HC00'ün 3 (1Y) pimini 74HC00'ün 4 (2A) pimine bağlayın

74HC00'ün 6 (2Y) pimini 74HC373N'nin 11 (LE) pimine bağlayın

74HC373N'nin 11 (LE) pinini 74HC373N'nin 1 (OE) pinine bağlayın

Mavi bir LED'i 1Y'ye ve toprağa ve 2Y'yi toprağa bağlayabilirsiniz, bu, kapının ne zaman aktif olduğunu gösterecektir.

Son olarak onClock prosedüründeki satırı program1'den program2'ye değiştirin

setDataPins(program2[ofset]);

Adım 6: Program

Program
Program
Program
Program

6502-Monitor programı, yukarıda açıklanan iki 6502 rutinini içerir.

Program hala geliştirilme aşamasındadır ve biraz düzensizdir.

program2'yi çalıştırırken, döngü()'deki gecikmeler 50 veya daha az olabilir ve hatta tamamen kaldırılabilir. Serial.print() satırlarını yorumlamak 6502'nin daha hızlı çalışmasını sağlar. 373'ün pim 1'inin (OE) pim 11'den (LE) ayrılması farklı sonuçlar verir. 373'ün pin 1 ve pin 11'ini NAND kapılarından ayırmak, her saat döngüsünde veri yolunda ne olduğunu görmenizi sağlar.

Bu pin yükselirse, 8 çıkış hattı devre dışı bırakılacağından, OE'yi serbest bırakmak yerine toprağa bağlamanız gerekebilir. LE pini yüksek olduğunda çıkış pinleri girişlerle aynıdır. LE pinini düşük almak çıkışları kilitler, yani giriş pinleri değişirse çıkışlar aynı kalır.

Programın anlaşılmasını kolaylaştırmak için mümkün olduğunca basit tutmaya çalıştım.

Zaman gecikmelerini denemek, 6502'nin tam olarak ne yaptığını takip etmenizi sağlar.

6502 Assembler'da iki program (her ikisi de 1000$ adresinde çalışır) aşağıdadır:

program1

LDA#55$

NOP

ROL

ST$1010

1000$

ROL, akümülatörün içeriğini bir bit sola döndürür, bu da 55$'ın şimdi AA$ olduğu anlamına gelir.

Makine kodunda (hex): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA#01$

ST$8100

ADC#03$

ST$8100

1005 JMP

Makine kodunda (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Program2'de artık 74HC373'ün adres yolunda bulunduğu $8100 fiziksel adresi vardır.

yani 6502'nin A15'i 32768 (8000$) ve A8 256 (0100$) = 33024 (8100$).

Dolayısıyla 6502, 8100$'a (STA$8100) yazdığında, 6502'nin R/W'si düşüktür ve 373 LE düştüğünde 6502 veri yolundaki veriler kilitlenir. 74HC00 NAND Kapısı nedeniyle sinyaller tersine çevrilir.

Yukarıdaki ekran baskısında, ikinci yazma 3 arttı (ADC#$03) - $7F'den 82$'a gitti.

Gerçekte, 373'ün belirli konumu için adres yolunun 2'den fazla satırı kullanılacaktır. Bu, olası 65536'dan tek fiziksel adres olduğundan, adres yolunun nasıl çalıştığını gösterir. Farklı adres pinlerini deneyebilir ve farklı bir yere koyabilirsiniz. Elbette, STA işlenenlerini yeni konuma değiştirmeniz gerekecektir. Örneğin. A15 ve A9 adres satırlarını kullandıysanız, adres 8200 $ (32768 + 512) olacaktır.

7. Adım: Sonuç

Çözüm
Çözüm

Bir 6502'yi çalıştırmanın ne kadar kolay olduğunu göstermeye çalıştım.

Bu alanda uzman değilim, bu nedenle yapıcı yorum veya bilgileri memnuniyetle karşılarım.

Bunu daha da geliştirebilirsin ve yaptıklarınla ilgilenirim.

Projeye bir EEPROM, SRAM ve 6522 eklemeyi ve ileride strip board üzerine koymayı düşünüyorum.

Önerilen: