Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Mengikuti Instruksi saya sebelumnya, saya sekarang telah memasang 6502 ke papan strip dan menambahkan 6522 Versatile Interface Adapter (VIA). Sekali lagi, saya menggunakan versi WDC dari 6522, karena ini adalah pasangan yang sempurna untuk 6502 mereka. Chip baru ini tidak hanya menggunakan daya yang jauh lebih sedikit daripada versi MOS asli, tetapi juga dapat dijalankan pada kecepatan yang lebih lambat atau bahkan melewatinya. program tanpa masalah.
Program Arduino awalnya ditulis oleh Ben Eater (yang memiliki banyak video di YouTube) dan telah saya modifikasi untuk mencapai hasil ini.
Perlengkapan
1 x Prosesor WDC W65C02
1 x WDC W65C22 Adaptor Antarmuka Serbaguna
1 x 74HC00N IC (Gerbang NAND 2-input Quad) atau serupa
1 x 10cm lebar (35 baris) Papan strip
2 x 40 pin soket DIL
1x14 pin soket DIL
Pin Header PCB 2.54mm
Soket Header PCB 2.54mm
1 x 12mm Sesaat Taktil Push Button Switch PCB Mounted SPST atau serupa
1 x 1K resistor
1 x 3K3 resistor
2 x 0,1 uF kapasitor keramik
1 x 8 Way Water Light Marquee 5mm LED merah
Berbagai kabel berwarna untuk koneksi
8 kabel penghubung pria - pria
Langkah 1: Papan Sirkuit
Papan sirkuit cukup kompak dan bagian bawah dihubungkan langsung ke Arduino MEGA. Untuk mencapai ini, pin didorong sejauh mungkin ke dalam pemegang plastik sebelum disolder ke bagian bawah papan. Pin yang lebih panjang dapat digunakan untuk ini, tetapi pin standar berarti bahwa papan diletakkan dengan kuat di atas MEGA.
Saya telah memasang IC 6502 dan 6522 sehingga mereka menggunakan jalur papan strip untuk terhubung ke MEGA. Ada juga beberapa koneksi untuk 6502 yang tersembunyi di bawah IC. Saat membuat papan, hal pertama yang harus dilakukan adalah memotong 16 strip yang akan terhubung ke dua baris soket Arduino. 2 luar tidak perlu dipotong karena 5v dan Gnd berada di kedua sisi. Selanjutnya solder di 2 baris 18 pin di bagian bawah, dan 2 baris 18 soket di sisi atas.
Setelah itu soket DIL disolder di tempatnya dan trek dipotong di antara mereka. Saya bisa menyelamatkan koneksi dengan menempatkan pin 14 dari 74HC00 pada jalur yang sama dengan 5v. Saya hanya memotong rel ketika saya yakin itu perlu saat saya menyolder kabel penghubung. Namun, hal-hal tidak selalu berjalan sesuai rencana, saya awalnya merancang papan strip dari papan roti sebelumnya menggunakan pin 2, 3 dan 7 dari Arduino, tetapi ini tidak sejajar dengan lubang di papan strip, jadi harus menggunakan pin 18, 31 dan 37. Oleh karena itu tautan di papan saya pada 31 dan 37. Anda mungkin bertanya-tanya mengapa saya tidak menggunakan salah satu pin yang tidak digunakan (23, 24 dll) untuk jam, ini karena mereka tidak mendukung interupsi, jadi harus menggunakan pin 18, 19, 20 atau 21 yang berfungsi. Untungnya 4 pin ini sejajar dengan lubang di papan strip dan menjaga semuanya tetap kompak. Pin 18 juga terjauh dari semua kabel lainnya.
Anda mungkin juga memperhatikan bahwa papan saya yang sudah selesai tidak persis sama dengan diagram saya. Ini karena saya mengikuti diagram orang lain. Oleh karena itu koneksi ke 74HC00. Saya juga telah menambahkan LED daya dan 2 baris soket tambahan untuk Gnd dan 5v serta beberapa kapasitor lagi.
Saya bisa menghubungkan 2 soket data, tetapi ini berarti lebih banyak kabel yang melintasi papan. Saya memilih 8 kabel tautan untuk melakukan ini sebagai tindakan sementara.
Port A dan B 6522 memiliki soket yang disolder ke jalurnya sehingga tanda LED dapat dengan mudah dimasukkan.
Ada jauh lebih sedikit kabel sekarang daripada yang ada di versi papan roti.
Langkah 2: Teori Pemrograman
6522 memiliki dua port I/O serta banyak fitur lainnya, tetapi port A dan B mudah diakses. Untuk mengeluarkan data pada port, Data Direction Register (DDR) perlu diatur sesuai dan data dikirim ke port itu sendiri.
Dengan pengaturan di atas, 6522 terletak di $E000.
Untuk mengeluarkan data pada port B, DDR pada $E002 diatur ke $FF (255 - semua keluaran) dan data dikirim ke $E000.
Untuk mengeluarkan data pada port A, DDR pada $E003 diatur ke $FF (255 - semua keluaran) dan data dikirim ke $E001.
Kode di bawah memuat $FF ke dalam register 6502 A dan menuliskannya ke DDR B pada $E002. Kemudian memuat $55 dan menulisnya ke ORB. Kode diputar (memberikan $AA) dan ditulis ke ORB. Program melompat kembali ke $1005 dan berulang tanpa henti. CATATAN: DDR hanya perlu diinisialisasi sekali.
Alamat Pembongkaran Hexdump
$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
$55 dalam biner adalah 010101010 dan $AA adalah 10101010 yang menyebabkan LED bergantian 4 menyala, 4 mati.
Perbaikan cepat dan kotor:
Ganti 74HC00 (Quad 2 input NAND Gate) dengan 74HC08 (Quad 2 input AND Gate) dan 6522 sekarang terletak di $6000 bukannya $E000. Ini memindahkannya dari 32K atas ke 32K bawah dari memori beralamat 6502.
Langkah 3: Program dan Output Arduino
Karena 6502 tidak memiliki RAM untuk dibaca, Arduino menyediakan program untuk dibaca. Ketika pulsa clock terdeteksi pada pin 18, Arduino menempatkan data program ke bus data (pin Arduino 39, 41, 43, 45, 47, 49, 51 dan 53). 6502 menghasilkan alamatnya sendiri yang hanya dipantau oleh Arduino pada pin bernomor genap 22 hingga 52. Arduino juga memasok pulsa clock pada pin 37. Garis R/W 6502 dipantau pada pin 31.
Karena Arduino memasok data, sejauh ini tidak mungkin untuk mendapatkan 6502 untuk memasukkan data dari VIA (kecuali Anda tahu lebih baik).
Program Arduino di bawah dan contoh output dari Serial Monitor di atas.
Langkah 4: Kesimpulan
Sekali lagi saya telah mencoba menunjukkan cara mengatur "6502 Komputer" minimal.
Pada tahap ini 6502 masih mengandalkan Arduino untuk mensuplai program dan pulsa clock agar dapat berjalan.
Ini selangkah lebih maju daripada saat saya memasangnya di papan roti.
Saya belum menggunakan 74HC373 kali ini tetapi 6522 yang lebih kompleks untuk mengunci output data. Juga 6522 memiliki dua port I/O.
Saya bermaksud mengambil proyek ini lebih jauh dengan menginstal beberapa SRAM atau EEPROM.