Daftar Isi:

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

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

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

Pindah lebih jauh, saya sekarang telah menambahkan Latch Oktal, 8 LED persegi panjang dan array resistor 220 Ohm ke papan utama. Ada juga jumper antara pin umum dan ground array, sehingga LED dapat dimatikan. Gerbang NAND 74HC00 telah diganti dengan gerbang AND 78LS08, kabel ke gerbang juga telah diubah. Gerbang AND berarti 6522 sekarang terletak di $6000, bukan $E000.

Ada juga pin untuk koneksi jam eksternal untuk menggerakkan 6502. Dengan koneksi ini, MEGA tidak perlu memberikan sinyal jam. MEGA masih memantau apa yang terjadi dengan prosesor seperti sebelumnya.

Saya menggunakan 20 pin 74HC373 untuk kait karena saya punya beberapa. Ini baik-baik saja ketika di papan tempat memotong roti, tetapi 74HC573 kompatibel dengan bus dan akan menghemat banyak kabel. UCN5801A yang merupakan IC 22 pin mungkin juga dipertimbangkan dalam rangkaian, tetapi pengkabelannya akan sedikit berbeda.

LED oranye tunggal atas adalah indikator daya dan merah kiri bawah menunjukkan saat menulis sedang berlangsung. Yang terakhir tidak akan signifikan jika papan dijalankan pada kecepatan yang lebih tinggi.

Sirkuit yang dimodifikasi ada di atas (dengan 74HC573).

Langkah 1: Program Demonstrasi

Program Demonstrasi
Program Demonstrasi

Dua program demonstrasi sederhana disertakan dalam monitor 6502 dan kode yang dibongkar ada di sini.

Program ini memuat 1 ke dalam register 6502 A dan menyimpannya di gerendel. Kemudian menambahkan 1 ke register A dan menyimpannya di gerendel. Kemudian melompat kembali ke $1005 dan proses berulang untuk selama-lamanya.

* = 1000

1000 A9 01 LDA #$01 1002 8D 00 41 STA $4100 1005 69 01 ADC #$01 1007 8D 00 41 STA $4100 100A 4C 05 10 JMP $1005 100D. END

Program ini pertama-tama menyetel DDR dari 6522 port B ke output. Kemudian menyimpan $55 (B01010101) di port serta kaitnya. Register A kemudian berputar 1 langkah ke kanan dan sekarang memegang $AA (B10101010). Ini lagi disimpan di port B dan kait. Program melompat kembali ke $1005 dan berlanjut selamanya.

* = 1000

1000 A9 FF LDA #$FF 1002 8D 02 60 STA $6002 1005 A9 55 LDA #$55 1007 38 SEC 1008 8D 00 60 STA $6000 100B 8D 00 41 STA $4100 100E 6A ROR A 100F 8D 00 60 STA $6000 1012 8D 00 41 STA $4100 1015 4C 05 10 JMP $1005 1018. END

Mata tajam di antara Anda mungkin memperhatikan bahwa LED berwarna menunjukkan pola yang berbeda dari yang hijau. Ini karena kabel umum terhubung ke 5v pada kabel berwarna dan kabel umum hijau terhubung ke ground.

Ubah baris kode ini menjadi program2 atau program3.

setDataPins(program3[offset]);

A 6502 Assembler dan Disassembler adalah alat yang berguna untuk membantu mengkodekan program Anda.

Langkah 2: Menambahkan EEPROM

Menambahkan EEPROM
Menambahkan EEPROM
Menambahkan EEPROM
Menambahkan EEPROM
Menambahkan EEPROM
Menambahkan EEPROM

Untuk papan EEPROM, saya menggunakan papan strip 950 x 650 mm dan pin header jantan 19mm untuk memungkinkan papan membersihkan yang ada di bawahnya. Papan ini dihubungkan ke papan 6502 di bawah ini. EEPROM adalah ATMEL 28C256 yang memiliki 28 pin dan berisi memori 32k x 8 bit. Ini lebih dari cukup untuk program kecil yang digunakan saat ini.

Saya belum membuat diagram sirkuit untuk papan ini, tetapi cukup lurus ke depan bagaimana menghubungkan ke papan 6502 di bawah ini. Chip EEPROM ini tidak ramah bus sehingga harus disambungkan ke masing-masing pin, maka semua "spageti hijau dan putih". Saya telah memecahkan masalah menjembatani pada papan sebelumnya dengan menghubungkan jalur data bersama-sama di bagian bawah papan.

14 pin alamat EEPROM terhubung ke pin yang sesuai di sisi kiri (kabel hijau) dan pin I/O ke pin data di sebelah kanan (kabel putih). Pin 27 (WE) terhubung ke pin 28 (5v), pin 22 (OE) terhubung ke ground dan pin 20 (CE) terhubung ke gerbang NAND. 2 input dari gerbang NAND terhubung ke A15 pada papan utama. Ini berarti bahwa ketika pin ini menjadi tinggi, gerbang NAND memberikan sinyal rendah ke pin CE dari EEPROM yang membuatnya aktif. Dengan pengaturan ini berarti EEPROM hanya dapat dibaca oleh 6502.

Karena EEPROM berada di 32k teratas pada peta memori, itu berarti bahwa $FFFC dan $FFFD dapat menyimpan alamat awal untuk 6502 setelah direset. Dengan 6522 yang memiliki alamat antara $6000 dan $600F dan kaitnya berada pada $4100, ia menghentikan konflik memori apa pun.

Vektor NMI ($FFFA dan $FFFB) dan vektor BRK / IRQ ($FFFE dan $FFFF) juga dapat ditulis dengan cara yang sama.

Langkah 3: Memprogram EEPROM

Memprogram EEPROM
Memprogram EEPROM
Memprogram EEPROM
Memprogram EEPROM

Untuk menyimpan sebuah program pada EEPROM, dibutuhkan seorang programmer. Saya membuatnya dari papan strip, Arduino Pro Mini, beberapa soket 74HC595 dan dan ZIF. Awalnya, programmer dibuat untuk AT28C16 yang memiliki baris alamat lebih sedikit daripada AT28C256 sehingga harus dimodifikasi.

Diagram sirkuit menunjukkan cara menghubungkan kedua EEPROM ini. Tidak jelas dari foto bahwa dua chip 595 terbalik dan tidak seperti yang ditunjukkan pada diagram. Pin 1 hingga 7 dari 595/1 sejajar dengan A1 hingga A7 dari EEPROM terlepas dari mana yang digunakan. Ini menghemat 7 kabel penghubung. Papan sekarang terlihat agak ketat dan ini karena awalnya saya menggunakan soket DIL 24 pin yang sekarang telah diganti dengan soket ZIF 28 pin yang jauh lebih besar.

Sebuah program disertakan yang bekerja dengan papan saya. Program ini akan bekerja dengan Arduino dan 595 apa pun di sirkuit seperti yang ditunjukkan. Saya memilih 5v Pro Mini karena ringkas dan cukup murah untuk dipasang.

Langkah 4: Program EEPROM

Program EEPROM
Program EEPROM

Ada tiga program sederhana dalam programmer EEPROM. Untuk menggunakannya, cukup batalkan komentar pada baris yang ingin Anda gunakan.

// Baca dari port A 6522

//konst byte data = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Program menunjukkan dump memori setelah selesai. Bagian dari program di bawah ini memberi Anda kendali penuh atas apa yang ingin Anda tulis atau hapus, set $FFFC & $FFFD dan kemudian menampilkan konten dari rentang tertentu. Cukup batalkan komentar atau ubah parameter sesuai kebutuhan. Alamat juga dapat dimasukkan dalam format desimal.

// hapusEEPROM(422, 930, 0x41); // Gunakan untuk menghapus seluruh atau sebagian EEPROM - mulai, akhir, byte

Serial.println("Pemrograman EEPROM"); jumlah = program_numeric_data(0x1000); writeEEPROM(0x7ffc, 0x00); // Setel $FFFC untuk 6502 writeEEPROM(0x7ffd, 0x90); // Set $FFFD untuk 6502 //writeEEPROM(0x1000, 0xA9); // Tulis 1 byte data Serial.println("selesai"); String outline = " Tertulis " + (String)jumlah + " byte"; Serial.println(garis besar); Serial.println("Membaca EEPROM"); printContents(0x0000, 0x112f); // Atur rentang untuk menampilkan printContents(0x7ff0, 0x7fff); // Membaca 16 byte terakhir di EEPROM

Output singkat dari program di atas.

Langkah 5: Menjalankan 6502 Dari EEPROM

Menjalankan 6502 Dari EEPROM
Menjalankan 6502 Dari EEPROM
Menjalankan 6502 Dari EEPROM
Menjalankan 6502 Dari EEPROM
Menjalankan 6502 Dari EEPROM
Menjalankan 6502 Dari EEPROM

EEPROM yang telah diprogram sekarang dapat dimasukkan ke dalam boardnya dan piggy ini bersandar pada board 6502 utama yang disandarkan pada MEGA. Foto tampak samping dan atas di atas menunjukkan bagaimana semuanya cocok satu sama lain.

6502 sekarang dapat membaca vektor awal dari $FFFC dan $FFFD (yaitu $9000) dan kemudian melompat ke program yang disimpan di sana. MEGA masih menyediakan sinyal clock dan programnya perlu diubah untuk menyediakan sinyal clock saja dan memantau 6502. Program yang dimodifikasi disediakan untuk melakukan ini.

Foto yang sedang berjalan menunjukkan program ini sedang berjalan.

9000 LDA #$00 A9 00

9002 STA $6003 8D 03 60 9005 LDA #$FF A9 FF 9007 STA $6002 8D 02 60 900A LDA $6001 AD 01 60 900D STA $6000 8D 00 60 9010 EOR #$FF 49 FF 9012 STA $4100 8D 00 41 9015 JMP $900A 4C 0A 90

Sakelar dicolokkan ke port A dan program menampilkan nilai yang dibacanya pada port B dan 74HC373 (yang saat ini dikaburkan). sakelar terhubung ke ground dan LED terhubung ke 5v. EOR #$FF mengoreksi masalah latch dan port B menampilkan pola yang berbeda dengan membalik bit sebelum menulis ke latch.

Langkah 6: Sinyal Waktu Eksternal

Sinyal Waktu Eksternal
Sinyal Waktu Eksternal

Jika sinyal clock diterapkan ke pin di bagian atas papan, 6502 sekarang dapat berjalan secara independen dari MEGA. Tentu saja itu juga membutuhkan catu daya. Saya telah bereksperimen dengan jam yang berbeda dan bahkan menjalankan 6502 pada 1MHz dengan osilator kristal. MEGA tidak dapat mengikuti kecepatan yang lebih cepat, jadi harus dilepas.

Saya juga mencoba output dari timer 555 tapi itu tidak berhasil. Saya pikir itu mungkin karena itu bukan gelombang persegi? Ketika terhubung ke salah satu output CD4017, itu mendorong 6502. Saya menambal ke salah satu kit di atas untuk mencoba dan mendapatkan sinyal clock.

Saya masih mencari metode yang berbeda untuk mendapatkan sinyal clock.

Langkah 7: Kesimpulan

Saya telah menunjukkan bagaimana membangun beberapa sirkuit yang kompleks dan mendapatkan "komputer" yang sangat sederhana untuk bekerja dengan jumlah bagian yang minimal. Memang, komputer tidak dapat melakukan banyak hal saat ini atau kemungkinan akan melakukannya di masa depan.

Kembali di awal 80-an, dengan VIC20 saya, saya biasa bertanya-tanya pada mesin yang luar biasa dan tidak memiliki ide pertama tentang bagaimana memulai menyatukannya. Waktu telah berlalu dan begitu pula teknologi, tetapi masih menyenangkan untuk kembali ke dasar dan bangga dengan sesuatu yang telah Anda bangun dari awal.

Untuk lebih mengembangkan komputer ini, saya bermaksud untuk menempatkan 2k SRAM pada $0000 hingga $2047 dan menambahkan osilator 1 MHz. Mungkin akan menambahkan sesuatu seperti CD4040 (12-Stage Binary Ripple Counter / Divider) sehingga saya dapat memanfaatkan kecepatan clock yang berbeda.

Bahkan mungkin menambahkan layar LCD untuk memberikan output teks daripada hanya lampu berkedip. Pemrogram EEPROM juga perlu dimodifikasi untuk menangani program yang lebih besar yang diperlukan untuk menjalankan layar LCD.

Meskipun MEGA menjadi tidak diperlukan untuk menjalankan 6502, itu masih berguna untuk men-debug kode mesin. Seperti yang diketahui semua orang, kode mesin selalu mengandung bug!

Direkomendasikan: