Kit Simulator Altair 8800 Berbasis Arduino – Bangun dan Program Komputer Retro
Komponen dan Perlengkapan
Berikut adalah daftar komponen yang diperlukan untuk membangun kit simulator komputer retro Altair 8800 berbasis Arduino:
Arduino Mega 2560 atau Arduino Due (salah satu saja, tidak keduanya)
LED (umum) – 36 buah
Transistor NPN untuk tujuan umum – 36 buah
Resistor 10k ohm – 36 buah
Resistor 150 ohm – 36 buah
Saklar toggle mini SPDT On-On – 17 buah (untuk 16 saklar alamat SW15-0 dan saklar daya)
Saklar momenter SPDT (On)-Off-(On) – 8 buah (untuk saklar fungsi RUN/STOP/EXAMINE)
Lemaran logam untuk pelapis panel depan – 1 lembar
Modem Bluetooth SparkFun BlueSMiRF Silver – 1 buah (opsional. Memungkinkan komputer atau ponsel dengan Bluetooth bertindak sebagai terminal serial untuk Altair yang diemulasi)
Kartu microSD dengan adapter SD – 1 buah (opsional. Hanya diperlukan untuk emulasi drive disk, yang tidak diperlukan agar simulator berfungsi)
Aplikasi dan Layanan Online
Arduino IDE
Perpustakaan Arduino DueFlashStorage (Menyimpan data ke memori flash on-chip Arduino Due karena tidak memiliki EEPROM. Semua yang disimpan akan terhapus saat mem-flash ulang Arduino!)
Perpustakaan Arduino Due soft_uart (Implementasi UART perangkat lunak yang memungkinkan pin mana saja digunakan sebagai antarmuka serial. File-file dari perpustakaan ini disertakan dalam sumber simulator karena diperlukan modifikasi kecil untuk mengintegrasikannya)
Tentang Proyek Ini
Jika Anda ingin membangun proyek ini tetapi tidak suka memulai dari nol, silakan periksa Kit Altair-Duino Chris Davis yang dilengkapi dengan semua komponen, PCB, kotak, dan Arduino Due yang sudah terprogram!
Berikut adalah beberapa gambar dari orang-orang yang telah membangun proyek ini dan menjadikannya milik mereka sendiri:
Alan Lowther menemukan kotak logam bagus untuk versinya dan menghubungkan Raspberry Pi untuk input/output serta sintesis bicara.
Martin Zumr membuat kotak kayu yang tampak sangat bagus.
Chris Davis (kb0wwp) membuat PCB dan kotak yang indah.
Justin Davis membuat Altair shield untuk Arduino Due.
Jika orang lain ingin berbagi kreasi mereka, beri tahu saya dan saya akan mempostingnya di sini. Saya ingin melihat berbagai versi yang dibuat orang!
Selama waktu yang lama, saya berpikir akan keren untuk memiliki komputer Altair 8800 untuk bereksperimen. Namun, Altair vintage yang masih beroperasi sangat jarang dan mahal, dengan harga dengan mudah mencapai $1500–$2500 jika tersedia. Ada opsi lain, seperti altairclone.com, tetapi itu masih berharga $600 yang terlalu banyak bagi saya untuk dihabiskan pada komputer yang - meskipun sangat keren - akan memiliki utilitas terbatas. Untungnya, Mike Douglas, pencipta Altair Clone, telah menyediakan kepada komunitas semua dokumen dan perangkat lunak lama yang dia hunt dan gunakan saat menciptakan klonnya. Berkat kerja Mike, terdapat kekayaan informasi tentang cara kerja dalam Altair dan periferal paling populer yang nyaman tersedia.
Pada suatu titik saya melihat spesifikasi Arduino Mega 2560 dan mulai bertanya-tanya apakah akan memiliki cukup pin I/O untuk langsung menghubungkan LED dan tombol dari panel depan Altair dan menulis perangkat lunak emulator sendiri. Ternyata Arduino Mega memiliki tepat jumlah pin I/O yang tepat. Jadi saya hanya perlu membuat klon Altair sendiri.
Penggunaan Arduino Mega untuk mendrive simulator berfungsi baik dan mudah diatur, tetapi emulasi berjalan hanya sekitar 25% kecepatan Altair dan hanya dapat menyediakan 6KB RAM yang diemulasi (meskipun dulu itu dianggap banyak). Kapasitas penyimpanan permanen (untuk menyimpan program/data yang dibuat dalam simulator) juga terbatas karena EEPROM Mega hanya menampung 4KB.
Arduino Due memiliki banyak memori untuk mendukung RAM yang diemulasi sepenuhnya 64KB dan berjalan jauh lebih cepat dari Mega. Selain itu, Due dapat menyimpan data ke memori flash saat runtime. Hal ini memungkinkan penggunaan setiap bagian dari flash 512K yang tidak digunakan oleh simulator itu sendiri untuk penyimpanan permanen.
Dengan menggunakan Due, saya sekarang memiliki simulator Altair 8800 yang berjalan sekitar kecepatan asli, menyediakan 64K RAM yang diemulasi, mencakup banyak perangkat lunak Altair dan masih dapat menyediakan 32K penyimpanan semi-permanen untuk memuat dan menyimpan program dan data dalam emulator.
Tujuan saya untuk proyek ini adalah mendekati nuansa "asli" Altair 8800 sebanyak mungkin saat bekerja dengan simulator. Hal ini mencakup memiliki lampu panel depan yang mencerminkan perilaku asli sebanyak mungkin. Salah satu kriteria untuk itu adalah harus dapat memainkan permainan panel depan "Kill-the-Bit" - dan ini memungkinkan:
Ternyata simulasi cukup akurat terhadap aslinya sehingga bahkan demo musik Altair 8800 berfungsi. Perhatikan bahwa ini bergantung pada radio AM yang menangkap gangguan elektromagnetik yang dihasilkan oleh rangkaian Altair!
Dulu, Processor Technology merilis papan ekstensi kecil untuk Altair (hanya beberapa kapasitor dan resistor) dengan perangkat lunak pendamping yang mengubah Altair menjadi sistem musik yang layak (untuk zamannya). Penambahan yang sama dapat dilakukan pada Simulator (lihat dokumentasi) yang memungkinkannya memainkan musik yang dibuat untuk sistem musik dulu. Berikut adalah contohnya:
Ekstensi penting lainnya yang historically untuk Altair adalah papan grafis Cromemco Dazzler. Menggunakan ekstensi perangkat lunak atau hardware, Simulator juga dapat mengemulasi papan tersebut:
Ekstensi perangkat lunak/hardware lainnya memungkinkan Simulator untuk mengemulasi kartu grafis Processor Technology VDM-1:
Tentu saja di akhirnya saya tidak memiliki Altair asli, jadi semua informasi tentang cara kerjanya harus datang dari dokumen dan video (lihat ucapan terima kasih di bawah). Mungkin ada beberapa perbedaan kecil tetapi secara keseluruhan saya pikir itu mereproduksi perilaku asli dengan cukup baik. Salah satu perbedaan yang diketahui (dan sengaja) adalah lampu status HLDA: Pada aslinya itu menunjukkan bahwa CPU telah mengakui telah dihentikan oleh perangkat eksternal. Fungsionalitas ini tidak pernah digunakan dalam simulator jadi di sini itu menunjukkan bahwa file (tangkapan/pemutaran serial/tape) saat ini terbuka.
Fitur Unggulan
Mereproduksi dengan akurat perilaku elemen panel depan Altair.
Berjalan dengan kecepatan yang sama seperti Altair 8800 asli (saat menggunakan Arduino Due) atau 25% kecepatan asli saat menggunakan Arduino Mega.
Ukuran RAM yang diemulasi adalah 64KB (Due) atau 6K (Mega)
Sejumlah program Altair disertakan dan dapat dengan mudah dimuat ke dalam emulator, termasuk Pong, Altair 4K BASIC (produk pertama Microsoft), Altair Extended BASIC, MITS Programming System II (hanya Due), Altair Time Sharing BASIC (memungkinkan banyak pengguna menggunakan BASIC secara bersamaan).
Contoh program BASIC dan Assembler disertakan dalam perangkat lunak emulator dan dapat dengan mudah dimuat ke dalam BASIC/Assembler.
Mengemulasi satu papan 88-SIO, 88-2SIO dan 88-ACR (antarmuka pemerekam kaset audio). Setiap perangkat serial yang disimulasikan dapat dipetakan ke antarmuka serial Arduino. Secara default, dua yang paling umum (88-SIO dan 88-2SIO port 1) dipetakan ke port serial utama Arduino pada 115200 baud 8n1, yang dapat diakses melalui kabel USB. Saya merekomendasikan menghubungkan dongle serial-to-Bluetooth ke pin serial RX/TX. Dengan cara itu, setiap perangkat yang memiliki Bluetooth dapat berfungsi sebagai terminal untuk Altair.
Pada Arduino Due, baik antarmuka serial utama (USB) maupun antarmuka Serial1 (pin 18/19) dapat digunakan secara bersamaan.
Data yang dikirim ke setiap perangkat serial (termasuk ACR tape) dapat ditangkap dan diputar ulang dalam hingga 256 file yang disimpan di penyimpanan lokal Arduino (EEPROM atau FLASH).
Antarmuka kaset mendukung penggunaan perintah CSAVE/CLOAD dalam BASIC yang diperluas (dukungan otomatis tanpa interaksi pengguna yang diperlukan). Bagus untuk mengembangkan program BASIC Anda sendiri!
Mengemulasi papan grafis Cromemco Dazzler (memerlukan beberapa hardware/software tambahan, lihat di sini)
Mengemulasi papan terminal video Processor Technology VDM1 (memerlukan beberapa hardware/software tambahan, lihat di sini)
Mengemulasi hingga 16 drive disk 88-DCDD (4 dalam konfigurasi default). Emulasi drive disk adalah opsional tetapi memerlukan menghubungkan kartu SD ke header SPI Arduino. Hanya didukung saat menggunakan Arduino Due.
Mengemulasi kontroler drive hard 88-HDSK dengan hingga 4 unit drive hard yang terpasang (1 dalam konfigurasi default) dan 4 piringan per unit.
Mengemulasi papan 88-RTC-VI dengan jam real-time dan penanganan interrupt vektor. Ini memungkinkan menjalankan Altair Time Sharing Basic.
Halaman memori 256-byte dapat disimpan ke penyimpanan permanen dan dimuat kembali ke memori. Ini memberikan cara sederhana untuk menyimpan program yang dimasukkan melalui saklar panel depan.
Banyak pengaturan dapat dengan mudah diubah melalui editor konfigurasi terintegrasi.
Saat menggunakan Due, waspada bahwa semua yang ditangkap atau disimpan dalam simulator akan terhapus jika Anda mengunggah versi baru sketch ke Due. Ini karena data yang disimpan disimpan dalam memori flash yang akan terhapus saat mengunggah sketch baru (Due tidak memiliki EEPROM untuk penyimpanan permanen). Jika kartu SD terhubung ke Due, data yang disimpan disimpan pada kartu SD. Dalam hal itu, data tidak akan hilang saat mengunggah sketch baru.
Dokumentasi
Karena simulator bekerja sama persis dengan Altair 8800, dokumentasi asli Altair (dapat dengan mudah ditemukan di Google) akan menyediakan semua informasi yang diperlukan untuk mengoperasikan saklar panel depan.
Namun, simulator menyertakan sejumlah fungsi tambahan dan perangkat lunak bawaan untuk Altair yang dapat diakses melalui saklar AUX1/AUX2 pada panel depan (yang disertakan tetapi tidak digunakan pada Altair asli). Fungsionalitas itu dijelaskan dalam dokumen terpisah yang saya tulis saat mengembangkan perangkat lunak untuk Simulator. Dokumen ini berjumlah banyak halaman dan informasi yang terkandung di dalamnya akan membanjiri halaman ini, jadi silakan rujuk ke file Documentation.pdf dalam repositori sumber.
Instruksi Pembuatan
Salah satu tujuan adalah menggunakan rangkaian pendukung sebanyak mungkin sedikit. Baik Arduino Mega maupun Due memiliki cukup pin I/O untuk langsung menyambungkan semua elemen panel depan. Rangkaian tambahan yang diperlukan hanyalah transistor dan resistor untuk mendrive 36 LED (jika LED terhubung langsung ke pin output Arduino dan terlalu banyak menyala pada saat yang sama, arus total akan melebihi batas Arduino).
Membuat skema lengkap untuk proyek ini akan melelahkan, repetitif (36 rangkaian driver LED identik, kabel untuk 32 saklar) dan tidak sangat membantu. Jadi dokumen skema sebagai gantinya berisi tabel rinci tentang elemen mana yang terhubung ke pin Arduino mana dan skema untuk sub-rangkaian individu (seperti driver LED). Saya juga menambahkan file Fritzing untuk menunjukkan tata letak komponen driver LED pada papan stripboard.
Untuk membuat panel depan, saya memulai dengan scan berkualitas tinggi dari panel depan Altair (ditemukan di sini di www.vintage-computer.com) dan mencetaknya di toko salinan pada karton. Untuk pelapis (untuk sebenarnya memegang saklar dan LED pada tempatnya) saya menggunakan lembar logam 22 gauge, menggunakan bor daya reguler untuk membuat lubang untuk LED dan saklar. Rangkaian driver LED disolder pada potongan stripboard yang disolder langsung ke LED yang berkatanya dipegang oleh lembar logam.
Panel depan dipegang dan ditegakkan oleh kotak kayu sederhana. Kotak itu tidak dalam seperti Altair asli (karena hanya perlu memegang panel depan dan Arduino).
Untuk menyambungkan saklar On/Off panel depan, saya hanya menambahkan soket daya (sama dengan pada Arduino itu sendiri) ke kotak, menyambungkannya ke saklar panel depan dan dari sana ke soket daya yang dihubungkan ke Arduino.
Saat menggunakan Arduino Due, emulasi hingga 16 drive disk 88-DCDD dapat diaktifkan dengan menghubungkan kartu SD ke port SPI Due. Halaman terakhir dalam dokumen Skema menunjukkan kabel yang diperlukan secara rinci.
Sebelum mengunggah sketch ke Arduino Due, pastikan untuk mengubah pengaturan optimisasi kompiler Arduino menjadi "performance". Secara default diatur ke "size" (tidak tahu mengapa karena Due memiliki memori flash 512k). Untuk melakukannya, muat file
ke dalam editor teks dan ubah semua kemunculan "-Os" menjadi "-O3". Anda dapat melewati langkah ini tetapi kemudian simulator akan berjalan jauh lebih lambat.
Perangkat lunak simulator juga dapat berjalan pada Arduino polos (Mega atau Due) tanpa kontrol panel depan yang terhubung. Ini memungkinkan untuk menjalankan beberapa program yang disertakan (yang sebagian besar menggunakan terminal serial dan tidak elemen panel depan). Untuk melakukannya, edit file sumber config.h dan atur #define STANDALONE 1 (daripada 0). Lihat bagian "Kemampuan Debugging" dalam dokumentasi untuk melihat cara mengoperasikan elemen panel depan virtual dalam pengaturan itu. Ingatlah bahwa ini bukan penggunaan yang dimaksudkan dari simulator. Saya menyarankan menggunakan emulator semua perangkat lunak berbasis PC jika Anda tidak ingin membangun hardware panel depan. File sumber config.h berjumlah saklar yang menyertakan/mengecualikan fungsionalitas simulator. Pengaturan default berfungsi baik tetapi jika Anda ingin menyesuaikan simulator, ini adalah tempat untuk memulai.
Ucapan Terima Kasih
Karena saya tidak memiliki Altair sendiri, saya harus bergantung pada informasi dari internet. Video instruksi Altair 8800 yang diproduksi oleh Mike Douglas (deramp5113) dari altairclone.com sangat membantu dan sangat menarik untuk ditonton. Selain membuat video, Mike telah mengumpulkan kekayaan manual perangkat keras dan perangkat lunak terkait Altair dan menyediakannya di situsnya.
(Catatan: Video Mike sangat membantu untuk mendapatkan beberapa ide tentang apa yang harus dilakukan dengan simulator setelah Anda membangunnya)
Alat ADEXER milik Martin Eberhard sangat berharga untuk debugging tingkat rendah dukungan drive hard. Dia juga menulis dua boot loader yang digunakan oleh simulator: boot loader disk gabungan (CDBL) untuk booting disk dan mini-disk serta boot loader drive hard (HDBL) yang lebih pendek dan lebih stabil dari aslinya.
Saya memang menulis semua kode termasuk emulasi CPU sendiri, tetapi saya mengambil beberapa inspirasi dari proyek model inti i8080 ketika datang ke mengimplementasikan komputasi half-carry dan instruksi DAA secara efisien.
Simulator menyertakan beberapa perangkat lunak asli untuk Altair 8800. Terima kasih besar lagi kepada Mike Douglas yang menghabiskan ratusan jam untuk hunt, mengumpulkan dan membuat perangkat lunak ini berfungsi dan kemudian menyediakannya semua di situs web altairclone.com-nya:
Altair 4K BASIC (MITS 1975)
Altair Extended ROM Basic (MITS 1975)
Altair Time Sharing Basic (MITS 1977)
Permainan Kill-the-Bit (Dean McDaniel, 1975)
Permainan Pong menggunakan panel depan (Mike Douglas)
Musik 'Daisy, Daisy...' (Steve Dompier, 1975)
Sistem Musik (Processor Technology 1977)
MITS Programming System II (MITS 1976)
Altair Turnkey Monitor (MITS 1977)
i8080 CPU Diagnostic (Microcosm Associates, 1980)
i8080 CPU Exerciser (Frank D. Cringle 1994, Ian Bartholomew 2009)
Gambar disk dan drive hard (yang disertakan dalam subdirektori "disks" dari arsip sumber) juga diambil dari altairclone.com serta deramp.com (situs web pribadi Mike Douglas). Ini mencakup CP/M, berbagai versi disk BASIC, Altair DOS (termasuk Fortran) dan lebih banyak. Lagi, Mike telah melakukan pekerjaan luar biasa menemukan semua perangkat lunak itu dan kemudian membuat gambar disk yang berfungsi yang dapat digunakan oleh komunitas Altair. Saya hanya menggunakan sebagian perangkat lunak jadi Anda mungkin ingin pergi ke altairclone.com atau deramp.com dan memeriksa yang lebih banyak.
Forum Diskusi
Chris Davis dari Altairduino.com telah menyiapkan Google Group untuk diskusi seputar pertanyaan terkait Altair-Duino:
Alih-alih menyediakan skema lengkap (sangat repetitif) dokumen ini menjelaskan pin mana yang harus disambungkan ke elemen panel depan mana dan menyediakan skema untuk sub-rangkaian (seperti rangkaian driver LED) Sebuah upaya untuk menunjukkan tata letak stripboard yang LED terhubung. Ini sedikit padat tetapi seharusnya cukup baik untuk melihat bagaimana hal-hal terhubung bersama. Yang penting adalah komponen untuk setiap LED tidak mengambil lebih dari 5 spasi pada stripboard. Dengan cara itu LED dapat cukup dekat bersama untuk memiliki panel depan dengan ukuran asli.ledstrip_4OVCpRyKQS.fzz