Daftar Isi:

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

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

Video: 6502 Komputer Minimal (dengan Arduino MEGA) Bagian 1: 7 Langkah
Video: Tonton Sampai Habis !!! Belajar Arduino Di Jamin Bisa 2024, Juli
Anonim
6502 Komputer Minimal (dengan Arduino MEGA) Bagian 1
6502 Komputer Minimal (dengan Arduino MEGA) Bagian 1

Mikroprosesor 6502 pertama kali muncul pada tahun 1975 dan dirancang oleh tim kecil yang dipimpin oleh Chuck Peddle untuk Teknologi MOS. Saat itu digunakan di konsol video dan komputer rumah termasuk Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 dan 64. Saat itu adalah salah satu yang termurah di pasar. Itu tidak pernah benar-benar hilang dan sekarang digunakan oleh penggemar dan profesional untuk banyak aplikasi.

Versi yang saya gunakan adalah W65C02S6TPG-14 yang dibuat oleh Western Design Center dan menggunakan daya sepuluh kali lebih sedikit dari aslinya. Ini istimewa karena tidak harus berjalan pada 1 MHz seperti chip aslinya. Itu dapat berjalan jauh lebih lambat atau digunakan untuk satu langkah melalui program dan bahkan menggenjot hingga 14 MHz. Lembar Data untuk chip menjelaskan kemampuannya. Chip 6502 lainnya tidak memiliki kemampuan ini dan tidak akan berjalan dengan cara ini. Chip saat ini tersedia di Ebay serta sumber lainnya.

Perlengkapan

Semua suku cadang yang digunakan saat ini tersedia di Ebay, AliExpress, dan lainnya.

Langkah 1: Konsepnya

Saya mendapat inspirasi dari Ben Eater yang telah menghasilkan serangkaian video di YouTube tentang 6502 dan banyak aspek lain dalam membangun komputer dan sirkuit. Program ini awalnya ditulis olehnya dan saya telah memodifikasi ini dan beberapa desainnya untuk menghasilkan Instructable ini. Orang lain yang menginspirasi saya adalah Andrew Jacobs yang memiliki bagian di GitHub di mana dia menggunakan mikro PIC untuk mengontrol 6502-nya.

Seperti Ben, saya menggunakan Arduino MEGA untuk memantau 6502. Saya juga menggunakan MEGA untuk memberikan sinyal clock tidak seperti Ben. Saat ini saya juga tidak menggunakan EEPROM atau RAM.

Langkah 2: Persyaratan

Persyaratan
Persyaratan

Untuk membangun "komputer" ini, daftar itemnya adalah sebagai berikut:

1 x Arduino MEGA

1 x Pusat Desain Barat W65C02S6TPG-14

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

1 x 74HC373N IC (Oktal D-jenis gerendel transparan) atau serupa

2 x 830 papan roti lubang (1 sejumput)

Berbagai Dupont male - lead male dan kabel penghubung

2 x LED (saya menggunakan 5mm biru karena Anda dapat pergi tanpa resistor)

1 x 12mm Sesaat Taktil Push Button Switch PCB Mounted SPST atau serupa

1 x 1K resistor

2 x 0,1 uF kapasitor keramik

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

CATATAN: Jika Anda mendapatkan kit yang tidak disolder, Anda dapat memasukkan LED dengan cara yang salah sehingga menjadi katoda umum. Saya memasang fly lead (bukan pin) sehingga dapat dengan mudah terhubung di tempat lain. VCC sekarang menjadi Ground. Anda tentu saja dapat memutar LED (pada item yang telah dirakit) dan menyoldernya kembali, tetapi ini banyak sekali kesalahannya! Kit saat ini tersedia di AliExpress.

Langkah 3: Menyatukannya

Menyatukannya
Menyatukannya
Menyatukannya
Menyatukannya

Saya merasa lebih mudah menggunakan kabel DuPont baru yang tidak dipisahkan dari pitanya untuk bus alamat dan data.

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

sampai

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

16 koneksi sejauh ini.

juga

Hubungkan pin 26 (D7) dari 6502 ke pin 39 dari MEGA, pin 27 (D6) dari 6502 ke pin 41 dll …

sampai

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

8 koneksi lagi.

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

Kapasitor 0,1uF yang terhubung dari pin 8 ke Gnd papan roti mungkin berguna di sini tetapi tidak perlu.

Hubungkan pin 21 (VSS) ke Gnd pada MEGA.

Pin 2, 4, 6, 36 dan 38 dapat diikat ke 5v

Hubungkan pin 37 (Jam) ke pin 2 dan pin 7 MEGA.

Hubungkan pin 34 (RWB) ke pin 3 MEGA.

Hubungkan pin 40 (Reset) seperti diagram di atas.

Langkah 4: Menguji Sirkuit

Menguji Sirkuit
Menguji Sirkuit

Pada tahap ini 6502 akan bekerja dan program1 dapat digunakan. Jika Anda menggunakan tenda 8 arah (seperti di atas), itu dapat dimasukkan langsung ke papan tempat memotong roti dan kabel terbang terhubung ke ground, atau Anda dapat menggunakan 8 LED dan resistor. LED akan menunjukkan apa yang ada di bus data.

Pada tahap ini, sebaiknya setel penundaan di Loop() menjadi 500 atau lebih, untuk mengikuti apa yang terjadi.

Anda harus mendapatkan output serupa pada Serial Monitor seperti di atas. Ketika Reset ditekan, prosesor melewati 7 siklus dan kemudian mencari awal program di lokasi $FFFC dan $FFFD. Karena tidak ada alamat fisik untuk dibaca 6502, kami harus menyediakannya dari MEGA.

Pada output di atas, 6502 membaca $FFFC dan $FFFD dan mendapatkan $00 dan $10 (byte Rendah, byte Tinggi) yang merupakan awal program pada $1000. Prosesor kemudian mulai menjalankan program di lokasi $1000 (seperti di atas). Dalam hal ini terbaca $A9 dan $55, yaitu LDA#$55 (Muat 85 ke akumulator). Sekali lagi karena tidak ada lokasi memori fisik, MEGA mensimulasikan apa yang dibaca dari bus data.

$55 (85) memberikan pola biner 01010101 dan ketika diputar 1 bit ke kiri menghasilkan $AA (170) 10101010.

Program menunjukkan bahwa prosesor bekerja dengan benar tetapi segera menjadi sedikit membosankan, begitu seterusnya ke bagian berikutnya.

Langkah 5: Langkah Selanjutnya

Langkah berikutnya
Langkah berikutnya
Langkah berikutnya
Langkah berikutnya

"Tumpukan spageti" di atas mungkin seperti apa yang akan Anda miliki setelah tahap ini.

Selanjutnya Anda perlu menambahkan IC 74HC373N dan 74HC00N ke papan tempat memotong roti.

Sayangnya pin 373 tidak sejalan dengan bus data, sehingga perlu dihubungkan dengan kabel.

Hubungkan 5v ke pin 20.

Hubungkan Ground ke pin 10.

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

begitu juga dengan pin D1 sampai D7.

Q0 hingga Q7 adalah output dan ini perlu dihubungkan ke tenda LED atau masing-masing LED dan resistor.

Dengan 74HC00 hanya diperlukan 2 gerbangnya

Hubungkan 5v ke pin 14.

Hubungkan Ground ke pin 7.

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

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

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

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

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

Hubungkan pin 11 (LE) dari 74HC373N ke pin 1 (OE) dari 74HC373N

Anda dapat menghubungkan LED biru ke 1Y dan ground serta 2Y ke ground, ini akan menunjukkan saat gerbang aktif.

Akhirnya ubah baris dalam prosedur onClock dari program1 ke program2

setDataPins(program2[offset]);

Langkah 6: Program

Program
Program
Program
Program

Program 6502-Monitor berisi dua rutinitas 6502 yang dijelaskan di atas.

Program ini masih dalam pengembangan dan sedikit berantakan.

Saat menjalankan program2, penundaan di loop() bisa 50 atau kurang dan bahkan dihapus sama sekali. Mengomentari baris Serial.print() juga membuat 6502 berjalan lebih cepat. Memutuskan sambungan pin 1 (OE) dari 373 dari pin 11 (LE) menghasilkan hasil yang berbeda. Melepaskan pin 1 dan pin 11 dari 373 dari gerbang NAND memungkinkan Anda untuk melihat apa yang ada di bus data pada setiap siklus clock.

Anda mungkin perlu mengikat OE ke ground daripada membiarkannya mengambang karena 8 jalur output dinonaktifkan jika pin ini menjadi tinggi. Ketika pin LE tinggi, pin output sama dengan input. Mengambil pin LE rendah mengunci output yaitu jika pin input berubah, output tetap sama.

Saya telah mencoba untuk membuat program sesederhana mungkin agar lebih mudah dipahami.

Bereksperimen dengan penundaan waktu memungkinkan Anda mengikuti persis apa yang dilakukan 6502.

Di bawah ini adalah dua program (keduanya dijalankan pada alamat $1000) di 6502 Assembler:

program1

LDA#$55

TIDAK

ROL

STA $1010

JMP$1000

ROL memutar isi akumulator satu bit ke kiri yang berarti $55 sekarang menjadi $AA.

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

program2

LDA#$01

STA$8100

ADC#$03

STA$8100

JMP$1005

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

Dalam program2 sekarang ada alamat fisik $8100 yang merupakan tempat 74HC373 berada di bus alamat.

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

Jadi ketika 6502 menulis ke $8100 (STA$8100) R/W 6502 rendah dan data pada bus data 6502 terkunci ketika 373 LE menjadi rendah. Karena Gerbang NAND 74HC00, sinyal dibalik.

Pada cetakan layar di atas, penulisan kedua bertambah 3 (ADC#$03) - berubah dari $7F menjadi $82.

Pada kenyataannya, lebih dari 2 baris bus alamat akan digunakan untuk lokasi spesifik 373. Karena ini adalah satu-satunya alamat fisik dari kemungkinan 65536, ini menunjukkan cara kerja bus alamat. Anda dapat bereksperimen dengan pin alamat yang berbeda dan meletakkannya di lokasi yang berbeda. Tentu saja, Anda perlu mengubah operan STA ke lokasi baru. misalnya Jika Anda menggunakan baris alamat A15 dan A9, alamatnya akan menjadi $8200 (32768 + 512).

Langkah 7: Kesimpulan

Kesimpulan
Kesimpulan

Saya telah mencoba menunjukkan betapa mudahnya menjalankan dan menjalankan 6502.

Saya bukan ahli dalam bidang ini, jadi saya akan menerima komentar atau informasi yang membangun.

Anda dipersilakan untuk mengembangkan ini lebih lanjut dan saya akan tertarik dengan apa yang telah Anda lakukan.

Saya bermaksud untuk menambahkan EEPROM, SRAM dan 6522 ke proyek serta meletakkannya di papan strip di masa depan.

Direkomendasikan: