6502 & 6522 Komputer Minimal (dengan Arduino MEGA) Bahagian 2: 4 Langkah
6502 & 6522 Komputer Minimal (dengan Arduino MEGA) Bahagian 2: 4 Langkah
Anonim
6502 & 6522 Komputer Minimal (dengan Arduino MEGA) Bahagian 2
6502 & 6522 Komputer Minimal (dengan Arduino MEGA) Bahagian 2

Setelah mengikuti Instructable sebelumnya, saya sekarang meletakkan 6502 pada papan jalur dan menambahkan 6522 Versatile Interface Adapter (VIA). Sekali lagi, saya menggunakan versi WDC 6522, kerana ia sangat sesuai untuk 6502 mereka. Bukan sahaja cip baru ini menggunakan kuasa yang jauh lebih rendah daripada versi MOS yang asal, tetapi ia dapat dijalankan dengan kelajuan yang lebih perlahan atau bahkan melangkah lebih jauh program tanpa masalah.

Program Arduino pada mulanya ditulis oleh Ben Eater (yang mempunyai banyak video di YouTube) dan telah diubah suai oleh saya untuk mencapai hasil ini.

Bekalan

Pemproses 1 x WDC W65C02

1 x Penyesuai Antaramuka Serbaguna WDC W65C22

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

Lebar 1 x 10cm (garis 35) Papan jalur

Soket DIL 2 x 40 pin

Soket DIL 1 x 14 pin

Pin Header PCB 2.54mm

Soket Header PCB 2.54mm

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

Perintang 1 x 1K

Perintang 1 x 3K3

Kapasitor seramik 2 x 0.1 uF

1 x 8 Way Water Light Marquee LED merah 5mm

Pelbagai wayar berwarna untuk sambungan

8 wayar pautan lelaki - lelaki

Langkah 1: Papan Litar

Papan Litar
Papan Litar
Papan Litar
Papan Litar

Papan litar cukup padat dan bahagian bawahnya disambungkan terus ke Arduino MEGA. Untuk mencapai ini, pin ditolak sejauh mungkin ke dalam pemegang plastik sebelum disolder ke bahagian bawah papan. Pin yang lebih panjang mungkin digunakan untuk ini, tetapi pin standard bermaksud bahawa papan diletakkan dengan kuat di atas MEGA.

Saya telah membariskan IC 6502 dan 6522 sehingga mereka menggunakan trek papan jalur untuk menyambung ke MEGA. Terdapat juga beberapa sambungan untuk 6502 yang tersembunyi di bawah IC. Semasa membuat papan, perkara pertama yang perlu dilakukan ialah memotong 16 helai yang akan bersambung dengan soket Arduino yang berganda. Bahagian luar 2 tidak perlu dipotong kerana 5v dan Gnd berada di kedua sisi. Pateri seterusnya dalam 2 baris 18 pin di bahagian bawah, dan 2 baris 18 soket di bahagian atas.

Selepas itu soket DIL disolder di tempatnya dan trek dipotong di antara mereka. Saya dapat menyelamatkan sambungan dengan meletakkan pin 14 dari 74HC00 pada landasan yang sama dengan 5v. Saya hanya memotong trek ketika saya yakin bahawa ia mesti berada semasa saya menyolder wayar penyambung. Walau bagaimanapun, perkara tidak selalu sesuai, saya pada mulanya merancang papan jalur dari papan roti sebelumnya menggunakan pin 2, 3 dan 7 Arduino, tetapi ini tidak selaras dengan lubang di papan jalur, jadi terpaksa menggunakan pin 18, 31 dan 37. Oleh itu pautan di papan saya pada 31 dan 37. Anda mungkin tertanya-tanya mengapa saya tidak menggunakan salah satu pin yang tidak digunakan (23, 24 dan lain-lain) untuk jam, ini kerana ia tidak menyokong mengganggu, jadi terpaksa menggunakan pin 18, 19, 20 atau 21 yang berlaku. Nasib baik 4 pin ini sejajar dengan lubang di papan jalur dan memastikan semuanya tetap padat. Pin 18 juga paling jauh dari semua wayar lain.

Anda juga mungkin menyedari bahawa papan lengkung saya tidak sama dengan rajah saya. Ini kerana saya mengikuti rajah orang lain. Oleh itu sambungan ke 74HC00. Saya juga telah menambahkan LED kuasa dan 2 baris soket tambahan untuk Gnd dan 5v serta beberapa kapasitor lagi.

Saya mungkin menghubungkan 2 soket data, tetapi ini bermaksud lebih banyak wayar melintasi papan. Saya memilih 8 wayar pautan untuk melakukan ini sebagai langkah sementara.

Pelabuhan 6522 A dan B mempunyai soket yang disolder ke trek mereka sehingga cermin LED dapat dimasukkan dengan mudah.

Terdapat lebih banyak wayar sekarang daripada versi papan roti.

Langkah 2: Teori Pengaturcaraan

Teori Pengaturcaraan
Teori Pengaturcaraan

6522 mempunyai dua port I / O serta banyak ciri lain, tetapi port A dan B mudah diakses. Untuk mengeluarkan data di port, Data Direction Register (DDR) perlu disetel dengan tepat dan data dihantar ke port itu sendiri.

Dengan penyediaan di atas, 6522 berada pada harga $ E000.

Untuk mengeluarkan data di port B, DDR pada $ E002 ditetapkan ke $ FF (255 - semua output) dan data dikirim ke $ E000.

Untuk mengeluarkan data di port A, DDR pada $ E003 ditetapkan ke $ FF (255 - semua output) dan data dikirim ke $ E001.

Kod di bawah memuat $ FF ke dalam daftar 6502 A dan menulisnya ke DDR B pada harga $ E002. Ia kemudian memuat $ 55 dan menulisnya ke ORB. Kod tersebut diputar (memberikan $ AA) dan ditulis kepada ORB. Program ini melonjak kembali $ 1005 dan berulang tanpa henti. CATATAN: DDR hanya perlu dimulakan sekali sahaja.

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 binari adalah 010101010 dan $ AA ialah 10101010 yang menyebabkan LED bergantian 4 pada, 4 mati.

Pembaikan cepat dan kotor:

Gantikan 74HC00 (Quad 2 input NAND Gate) dengan 74HC08 (Quad 2 input AND Gate) dan 6522 kini terletak pada $ 6000 dan bukannya $ E000. Ini memindahkannya dari 32K atas ke 32K bawah dari memori 6502 yang dapat dialamatkan.

Langkah 3: Program dan Hasil Arduino

Program dan Hasil Arduino
Program dan Hasil Arduino

Oleh kerana 6502 tidak mempunyai RAM untuk dibaca, Arduino menyediakan program untuk dibaca. Apabila denyut jam dikesan pada pin 18, Arduino meletakkan data program ke bus data (pin Arduino 39, 41, 43, 45, 47, 49, 51 dan 53). 6502 menghasilkan alamat sendiri yang hanya dipantau oleh Arduino pada pin bernombor genap 22 hingga 52. Arduino juga membekalkan denyut jam pada pin 37. Garis R / W 6502 dipantau pada pin 31.

Oleh kerana Arduino menyediakan data, sejauh ini tidak mungkin untuk mendapatkan 6502 untuk memasukkan data dari VIA (kecuali jika anda tahu lebih baik).

Program Arduino ada di bawah dan contoh output dari Serial Monitor ada di atas.

Langkah 4: Kesimpulannya

Sekali lagi saya telah cuba menunjukkan cara menyediakan "6502 Computer" minimum.

Pada tahap ini 6502 masih bergantung pada Arduino untuk menyediakannya dengan program dan denyut jam agar dapat berjalan.

Ini adalah langkah lebih jauh daripada ketika saya memasangnya di papan roti.

Saya tidak menggunakan 74HC373 kali ini tetapi 6522 yang lebih kompleks untuk memasukkan output data. Juga 6522 mempunyai dua port I / O.

Saya berhasrat untuk meneruskan projek ini dengan memasang beberapa SRAM atau EEPROM.

Disyorkan: