Isi kandungan:

6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1: 7 Langkah
6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1: 7 Langkah

Video: 6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1: 7 Langkah

Video: 6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1: 7 Langkah
Video: Mikroprosessor#1-Pengantar Mikroprosessor 2024, Julai
Anonim
6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1
6502 Komputer Minimal (dengan Arduino MEGA) Bahagian 1

Mikroprosesor 6502 pertama kali muncul pada tahun 1975 dan dirancang oleh pasukan kecil yang diketuai oleh Chuck Peddle untuk Teknologi MOS. Pada masa itu ia digunakan di konsol video dan komputer rumah termasuk Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 dan 64. Pada masa itu ia adalah salah satu yang paling murah di pasaran. Itu tidak pernah hilang dan sekarang digunakan oleh peminat dan profesional untuk banyak aplikasi.

Versi yang saya gunakan adalah W65C02S6TPG-14 yang dibuat oleh Western Design Center dan menggunakan kuasa sepuluh kali lebih sedikit daripada yang asal. Ia istimewa kerana ia tidak perlu berjalan pada 1 MHz seperti cip asal. Ia dapat berjalan dengan lebih perlahan atau digunakan untuk melangkah melalui program dan bahkan meningkat hingga 14 MHz. Lembaran Data untuk cip menerangkan keupayaannya. Cip 6502 lain tidak mempunyai kemampuan ini dan tidak akan berjalan seperti ini. Cip ini kini terdapat di Ebay serta sumber lain.

Bekalan

Semua bahagian yang digunakan kini tersedia di Ebay, AliExpress dan lain-lain.

Langkah 1: Konsep

Saya mendapat inspirasi dari Ben Eater yang telah menghasilkan siri video di YouTube mengenai 6502 dan banyak aspek lain dalam membina komputer dan litar. Program ini ditulis olehnya pada asalnya dan saya telah mengubahsuai ini dan beberapa reka bentuknya untuk menghasilkan Instructable ini. Orang lain yang memberi inspirasi kepada saya adalah Andrew Jacobs yang mempunyai bahagian di GitHub di mana dia menggunakan mikro PIC untuk mengawal 6502nya.

Seperti Ben, saya menggunakan Arduino MEGA untuk memantau 6502. Saya juga menggunakan MEGA untuk memberikan isyarat jam tidak seperti Ben. Pada masa ini saya tidak menggunakan EEPROM atau RAM.

Langkah 2: Keperluan

Keperluan
Keperluan

Untuk membina "komputer" ini senarai item adalah seperti berikut:

1 x Arduino MEGA

1 x Pusat Reka Bentuk Barat W65C02S6TPG-14

1 x 74HC00N IC (gerbang NAND Quad 2-input) atau yang serupa

1 x 74HC373N IC (kait telus jenis Octal D) atau yang serupa

Papan roti lubang 2 x 830 (1 secubit)

Pelbagai wayar lelaki dan wayar pautan lelaki Dupont

2 x LED (saya menggunakan warna biru 5mm kerana anda boleh melarikan diri tanpa perintang)

1 x 12mm Tentil Tushile Push Button Switch PCB Mounted SPST atau yang serupa

Perintang 1 x 1K

Kapasitor seramik 2 x 0.1 uF

1 x 8 Way Water Light Marquee 5mm LED merah (seperti di atas) atau 8 LED dan perintang

CATATAN: Sekiranya anda mendapat kit yang tidak diselesaikan, anda boleh memasukkan LED dengan cara yang salah sehingga katod biasa. Saya melampirkan plumbum lalat (bukannya pin) supaya mudah tersambung ke tempat lain. VCC kini menjadi Ground. Anda tentu saja boleh menghidupkan LED (pada item yang dipasang) dan memasangnya semula, tetapi ini adalah banyak perkara! Kit kini tersedia di AliExpress.

Langkah 3: Menyatukannya

Menggabungkannya
Menggabungkannya
Menggabungkannya
Menggabungkannya

Saya merasa lebih senang menggunakan wayar DuPont baru yang tidak terlepas dari pita mereka untuk bas alamat dan data.

Sambungkan pin 9 (A0) dari 6502 ke pin 52 MEGA, pin 10 (A1) dari 6502 hingga pin 50 dll …

sehingga

Sambungkan pin 25 (A15) dari 6502 ke pin 22 MEGA.

16 sambungan setakat ini.

Begitu juga

Sambungkan pin 26 (D7) dari 6502 ke pin 39 MEGA, pin 27 (D6) dari 6502 hingga pin 41 dan lain-lain…

sehingga

Sambungkan pin 33 (D0) dari 6502 ke pin 53 MEGA.

8 lagi sambungan.

Sambungkan pin 8 (VDD) ke 5v pada MEGA.

Kapasitor 0.1uF yang disambungkan dari pin 8 ke Gnd papan roti mungkin berguna di sini tetapi tidak perlu.

Sambungkan pin 21 (VSS) ke Gnd di MEGA.

Pin 2, 4, 6, 36 dan 38 boleh diikat pada 5v

Sambungkan pin 37 (Jam) ke pin 2 dan pin 7 dari MEGA.

Sambungkan pin 34 (RWB) ke pin 3 MEGA.

Sambungkan pin 40 (Reset) seperti rajah di atas.

Langkah 4: Menguji Litar

Menguji Litar
Menguji Litar

Pada tahap ini 6502 akan berfungsi dan program1 dapat digunakan. Sekiranya anda menggunakan marquee 8 arah (seperti di atas), ia boleh dimasukkan terus ke papan roti dan plumbum lalat disambungkan ke tanah, atau anda boleh menggunakan 8 LED dan perintang. LEDS akan menunjukkan apa yang ada di bas data.

Pada tahap ini adalah baik untuk menetapkan kelewatan dalam Loop () ke 500 atau lebih, untuk mengikuti apa yang sedang terjadi.

Anda harus mendapat output yang serupa pada Serial Monitor seperti yang di atas. Apabila Reset ditekan, pemproses melalui 7 kitaran dan kemudian mencari permulaan program di lokasi $ FFFC dan $ FFFD. Oleh kerana tidak ada alamat fizikal untuk 6502 untuk dibaca, kami harus membekalkannya dari MEGA.

Dalam output di atas, 6502 membaca $ FFFC dan $ FFFD dan mendapat $ 00 dan $ 10 (Low byte, High byte) yang merupakan permulaan program pada $ 1000. Pemproses kemudian mula melaksanakan program di lokasi $ 1000 (seperti di atas). Dalam kes ini, ia berbunyi $ A9 dan $ 55, iaitu LDA # $ 55 (Muat 85 ke dalam akumulator). Sekali lagi kerana tidak ada lokasi memori fizikal, MEGA mensimulasikan apa yang dibaca dari bas data.

$ 55 (85) memberikan corak binari 01010101 dan apabila dipusingkan 1 bit kiri memberikan $ AA (170) 10101010.

Program menunjukkan bahawa pemproses berfungsi dengan betul tetapi tidak lama lagi menjadi sedikit membosankan, seterusnya ke bahagian seterusnya.

Langkah 5: Langkah seterusnya

Langkah seterusnya
Langkah seterusnya
Langkah seterusnya
Langkah seterusnya

"Tumpukan spageti" di atas mungkin seperti yang anda akan dapat selepas peringkat ini.

Seterusnya anda perlu menambahkan IC 74HC373N dan 74HC00N ke papan roti.

Malangnya pin 373 tidak sesuai dengan bas data, jadi perlu disambungkan dengan wayar.

Sambungkan 5v ke pin 20.

Sambungkan Ground ke pin 10.

Sambungkan pin 33 (D0) dari 6502 ke pin 3 (D0) 74HC373N

dan begitu juga dengan pin D1 hingga D7.

Q0 hingga Q7 adalah output dan ini perlu disambungkan ke LED marquee atau LED individu dan perintang.

Dengan 74HC00 hanya 2 pintu yang diperlukan

Sambungkan 5v ke pin 14.

Sambungkan Ground ke pin 7.

Sambungkan pin 17 (A8) dari 6502 ke pin 1 (1A) 74HC00

Sambungkan pin 25 (A15) dari 6502 ke pin 2 (1B) 74HC00

Sambungkan pin 34 (R / W) dari 6502 ke pin 5 (2B) 74HC00

Sambungkan pin 3 (1Y) 74HC00 ke pin 4 (2A) 74HC00

Sambungkan pin 6 (2Y) 74HC00 ke pin 11 (LE) 74HC373N

Sambungkan pin 11 (LE) 74HC373N ke pin 1 (OE) 74HC373N

Anda boleh menyambungkan LED biru ke 1Y dan tanah serta 2Y ke tanah, ini akan menunjukkan bila pintu aktif.

Akhirnya ubah baris dalam prosedur onClock dari program1 ke program2

setDataPins (program2 [offset]);

Langkah 6: Program

Program yang
Program yang
Program yang
Program yang

Program 6502-Monitor mengandungi dua rutin 6502 yang dijelaskan di atas.

Program ini masih dalam pembangunan dan agak tidak kemas.

Semasa menjalankan program2, kelewatan dalam gelung () dapat 50 atau kurang dan bahkan dihapuskan sama sekali. Mengulas garis Serial.print () juga menjadikan 6502 berjalan lebih pantas. Memutuskan pin 1 (OE) dari 373 dari pin 11 (LE) menghasilkan hasil yang berbeza. Memutuskan pin 1 dan pin 11 dari 373 dari gerbang NAND membolehkan anda melihat apa yang ada di bas data pada setiap pusingan jam.

Anda mungkin perlu mengikat OE ke tanah daripada membiarkannya melayang kerana 8 saluran output dilumpuhkan jika pin ini naik tinggi. Apabila pin LE tinggi, pin output sama dengan input. Mengambil pin LE terkunci rendah outputnya, jika pin input berubah, output tetap sama.

Saya telah berusaha memastikan program ini sesederhana mungkin agar lebih mudah difahami.

Mengeksperimen dengan kelewatan masa membolehkan anda mengikuti dengan tepat apa yang dilakukan oleh 6502.

Berikut adalah dua program (kedua-duanya dijalankan pada alamat $ 1000) di 6502 Assembler:

program1

LDA # $ 55

NOP

ROL

STA $ 1010

JMP $ 1000

ROL memutarkan kandungan akumulator satu baki sedikit yang bermaksud $ 55 kini menjadi $ AA.

Dalam kod mesin (hex): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA # $ 01

STA $ 8100

ADC # $ 03

STA $ 8100

JMP $ 1005

Dalam kod mesin (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Dalam program2 sekarang terdapat alamat fizikal $ 8100 di mana 74HC373 terletak di bas alamat.

iaitu A15 dari 6502 adalah 32768 ($ 8000) dan A8 ialah 256 ($ 0100) = 33024 ($ 8100).

Jadi apabila 6502 menulis ke $ 8100 (STA $ 8100) R / W dari 6502 rendah dan data pada bas data 6502 terkunci ketika 373 LE menjadi rendah. Kerana Pintu NAND 74HC00, isyarat terbalik.

Dalam cetakan skrin di atas, tulisan kedua meningkat sebanyak 3 (ADC # $ 03) - naik dari $ 7F menjadi $ 82.

Pada kenyataannya, lebih daripada 2 baris bus alamat akan digunakan untuk lokasi khusus 373. Oleh kerana ini adalah satu-satunya alamat fizikal dari 65536 yang mungkin, ia menunjukkan bagaimana bas alamat berfungsi. Anda boleh bereksperimen dengan pin alamat yang berbeza dan meletakkannya di lokasi yang berbeza. Sudah tentu, anda perlu menukar operan STA ke lokasi baru. cth. Sekiranya anda menggunakan baris alamat A15 dan A9, alamatnya adalah $ 8200 (32768 + 512).

Langkah 7: Kesimpulannya

Kesimpulannya
Kesimpulannya

Saya telah mencuba untuk menunjukkan betapa mudahnya menjalankan dan menjalankan 6502.

Saya bukan pakar dalam bidang ini jadi saya mengalu-alukan sebarang komen atau maklumat yang membina.

Anda dipersilakan untuk mengembangkannya lebih jauh dan saya berminat dengan apa yang telah anda lakukan.

Saya berhasrat untuk menambah EEPROM, SRAM dan 6522 ke projek tersebut dan juga meletakkannya di jalur papan pada masa akan datang.

Disyorkan: