Mengapa
Jika Anda seorang penggemar komputer retro, maka Anda dapat dengan aman melewati pidato motivasi dan pergi ke bagian berikutnya.
Semua Agustus 2018, saya dan putra saya 13 tahun
Ivanq menghabiskan waktu untuk menulis demo
Good Apple . Di festival
Chaos Constructions , pekerjaan kami menempati posisi kedua, dan untuk itu kami menerima hadiah uang sebesar 35 ribu rubel, yang kami bagikan dengan jujur. Untuk seorang anak, ini adalah penghasilan yang baik, meskipun dengan membuat situs ia memperoleh jumlah yang sama dalam waktu yang lebih singkat. Jelas, saya bisa menghabiskan waktu saya dengan manfaat ekonomi yang lebih besar ... Tetapi tidak Agustus! Kita harus sekali istirahat dari pekerjaan. Memprogram untuk kesenangan Anda sendiri adalah kemewahan yang hanya bisa Anda dapatkan saat liburan.

Hadiah materi, tentu saja, tidak berfungsi sebagai motivasi, tetapi memperkuat emosi positif. Anehnya, demo untuk komputer Soviet yang terlupakan mengumpulkan
ribuan tampilan di youtube dan berakhir di
daftar putar dengan hampir seratus ribu tampilan. Tetapi yang lebih mengejutkan, pada tahun 2018, hadiah uang tunai diberikan untuknya! Mungkin ketidakmungkinan dari apa yang terjadi menimbulkan peningkatan emosional seperti itu.
Namun, ada sesuatu yang lebih penting.
Saat membuat "Apple Baik" kami harus bekerja dengan perangkat keras nyata, karena kami menggunakan kemampuan komputer, yang emulatornya tidak mereproduksi dengan benar. Pertama-tama, saya ingin mencapai kerja yang sama stabilnya dengan hard disk IDE dan dengan penggantinya yang modern dalam bentuk Compact Flash.
Di proyek inilah putra saya yang berusia 13 tahun memperoleh pengalaman yang tak ternilai dalam pengembangan industri. Besi yang rusak. Perangkat keras yang baik yang tidak berperilaku seperti yang dijelaskan dalam dokumentasi. Dokumentasi yang disusun dengan kesalahan. Kurangnya dokumentasi tentang sejumlah masalah. Menulis tes Anda sendiri untuk mengidentifikasi masalah dengan zat besi. Batas waktu keluar. Menguji berbagai mesin dan konfigurasi. Menulis cross-assembler Anda sendiri (ketika menjadi jelas bahwa solusi yang ada menghambat proses pengembangan). Dan akhirnya, setelah perayaan kesuksesan yang singkat - rilis wajib versi final, memperbaiki sejumlah bug.
Sekilas, tampaknya pengalaman serupa dapat diperoleh dengan beberapa Arduino modern. Bahkan, kami harus terjun ke hutan sirkuit. Kami menghitung jumlah tindakan yang instruksinya dijalankan. Dalam berbagai jenis memori, kali ini berbeda. Pengontrol dan prosesor memori beroperasi pada frekuensi yang berbeda, sehingga perintah yang sama dapat dijalankan pada waktu yang berbeda, bahkan dalam jenis memori yang sama. Durasi pelaksanaan subprogram tidak sama dengan jumlah durasi instruksi subprogram ini. Kami harus menulis alat sendiri untuk menguji dan mengoptimalkan kode pada perangkat keras nyata.

Akhirnya anak saya mempelajari sirkuit BK 0011 (ujung sinyal yang muncul ketika RPLY dipicu, dll. - Saya tidak mengerti apa-apa lagi tentang ini). Jadi dia muncul dengan ide untuk membuat emulator BK-nya sendiri, kompatibel dengan perangkat keras nyata yang akurat untuk irama, dan bahkan menulis kernel ... Namun, ini adalah cerita lain.
Secara total, dalam sebulan - dari mempelajari assembler hingga membuat alat pengembangan Anda sendiri, dari tes keras hingga pekerjaan multimedia yang sudah selesai. Semua ini tidak mungkin tanpa hal utama: Perencanaan. Mungkin pelajaran paling berharga yang dipelajari. Anda mengambil tugas yang mustahil. Anda mengerti bahwa Anda akan menghadapi kesulitan yang tidak dapat diatasi. Sedang merencanakan Kamu lakukan. Hasilnya sangat memukau semua orang sehingga para pecinta pun menyalahkan kecurangan (βAnda overclock prosesor!β).
Mengapa bukan ZX Spectrum?

Sekali lagi, saya akan mulai dengan yang aneh: keuangan. Dilihat oleh pengumuman di Avito, rata-rata, biaya BC 0010 beberapa kali lebih banyak daripada ZX Spectrum. Jelas bahwa untuk instance langka Spectrum asli dalam kondisi sempurna mereka akan meminta jumlah bulat. Tapi BC 0011m yang terisi penuh masih akan keluar lebih mahal. Jika sama sekali dapat menemukan. Harga berbicara sendiri: nilai pengumpulan BC 0010 lebih tinggi. Dan BK 0011m - dan bahkan lebih lagi. Memiliki komputer seperti itu di rumah sangat bagus.
Argumen kedua adalah 16-bit. Tidak ada yang 8-bit di BC 0010. Prosesor bahkan tidak tahu cara menambahkan angka 8-bit, tidak memiliki perintah ADDB. 16-bit dalam segalanya. Alasannya adalah arsitektur DEC PDP-11. Banyak yang menyebut sistem perintah prosesor PDP-11 yang paling sukses dan paling nyaman yang pernah dibuat. Tentu saja, ada orang yang ingin berdebat dengan pernyataan ini. Tapi inilah satu fakta: di Yandex
Demodulation Festival, tiga seminar dikhususkan untuk arsitektur prosesor, dan dua di antaranya tentang PDP-11. Ini, memang, adalah legenda, tonggak penting dalam sejarah teknologi komputer, yang masih terus menggairahkan pikiran para penggemar. BK 0010 memungkinkan untuk menyentuh legenda ini. Dan tidak hanya untuk menyentuh, tetapi untuk memahaminya dengan detail terkecil, untuk merasakan semua keindahan dan keanggunan assembler DEC: register yang benar-benar sama, delapan metode pengalamatan, memori linier - keindahan!
Argumen ketiga: banyak demo telah ditulis untuk ZX Spectrum. Untuk BC 0010 -
kurang dari lima puluh , menghitung 256 byte dan 4 kilobyte kecil. Tempat di demoscene hampir gratis, ada tempat di mana bahkan seorang pemula dapat menunjukkan dirinya sendiri!
Dan pertimbangan terakhir, murni subyektif. Saya telah menonton demoscene Rusia sejak 1994. Bagiku spektrumistov menurutku, sayangnya, lebih beracun dan bermusuhan. Tentu saja, ada orang-orang ramah yang luar biasa! Saya sangat menghormati mereka dan pekerjaan mereka. Tetapi secara umum - mungkin karena karakter massanya - adegan Spectrum dipenuhi dengan konflik, klarifikasi hubungan dan bahkan intrik seperti pemilihan nama (ketika mereka hanya memilih "mereka sendiri" di kontes). Sementara di panggung BC-shnoy kecil mereka tidak mengajukan pertanyaan seperti "siapa yang lebih keren" dan senang untuk setiap peserta baru. Saya ulangi: ini adalah kesan pribadi saya, yang dapat Anda abaikan.
Besi asli
20 tahun berlalu sebelum saya kembali ke program menulis untuk SM. Selama 20 tahun, banyak yang telah berubah. Bagi saya pribadi, perubahan besar terjadi dalam pikiran: "Berpikir Berbeda". Slogan ini ditempatkan di kredit akhir dari demo kami βGood Appleβ.
Kami biasa memuat game dari tape recorder selama 5 menit. Kemudian datang pengendali drive. Di belakang mereka adalah hard drive. Kemudian
replika pengendali yang
baru ditemukan dengan Compact Flash on board. Sekarang sudah biasa untuk meniru flash drive di kancah retro ... Tapi tunggu, pada tahun 2019 kami memiliki sumber suara portabel berkualitas tinggi - iPhone. Jadi mari kita ambil kabel audio standar DIN-5 - mini jack (Anda bahkan tidak perlu solder ulang) dan memuat BK dari iPhone dengan kecepatan tinggi.
Saya menelusuri jejak ROM,
mengungkapkan bagaimana saya bisa sedikit mengakali algoritma boot dari tape recorder dan membuat BC membaca data 4 kali lebih cepat.
Langkah selanjutnya adalah menulis micro-bootloader yang membaca data dalam
format turbo yang dirancang khusus. Baik loader dan data ditempatkan satu demi satu dalam satu file WAV (
konverter ditulis oleh
Lenar Zakirov ). BK 0010 membaca dan secara otomatis memulai microloader, yang, pada gilirannya, membaca sisa data dari file. Frekuensi dalam format turbo mencapai 22 KHz, sehingga persyaratan untuk kualitas sumber suara tinggi. iPhone sedang mengatasinya. Pemutar musik yang bagus. Kartu suara komputer juga.
Kemudian giliran
perakit salib . Ini menambahkan opsi untuk menyimpan program dalam WAV (baik dalam format standar dan turbo). Selain itu, cross-assembler dapat segera memainkan WAV melalui kartu suara. Bayangkan saja bagaimana mempercepat pembangunan! Tidak perlu repot menulis gambar disk ke kartu CF setelah setiap kompilasi. Buat saja perubahan pada kode, klik "Build", suara mengalir dalam CD dan setelah beberapa detik program sudah berjalan pada perangkat keras nyata. Untuk menerima suara dalam format standar, cukup tekan tombol L (Load) dan Enter pada BC 0011 (muat program pertama yang ditemukan). Untuk mengirimkan suara dalam format turbo, Anda harus terlebih dahulu menjalankan micro-bootloader (bagi saya, itu secara otomatis dimulai dari hard drive ketika BC dinyalakan; kapan saja Anda dapat masuk ke sistem dengan menekan tombol STOP).

Cara termudah untuk menghubungkan BK ke TV dalam mode monokrom, dalam input AV komposit biasa. Penting untuk menyolder kabel dengan "tulip" di satu ujung dan DIN-5 di ujung lainnya. Sinyal monokrom berasal dari pin ke-4 DIN-5 dari konektor BK, yang disebut "TV". Tanah secara tradisional dikaitkan dengan pin ke-2 DIN-5.
Secara pribadi, saya penggemar layar CRT monokrom - mereka memberikan kejernihan gambar yang tidak dapat dicapai pada monitor warna dengan gril aperturinya. Tetapi sebagian besar permainan dan semua demo lebih disukai daripada menonton dengan warna. Untuk melakukan ini, gunakan output "TVC" BK dan sambungkan ke TV melalui RGB SCART. Kontak 3, 4, 5 pada DIN-5 - masing-masing merah, biru, hijau. Pin 1 - Sinkronisasi. Pin 2 adalah ground. Ketika terhubung ke TV LCD, penting untuk menerapkan +5 volt ke pin 16 SCART (melalui resistor 200 ohm atau lebih). 5 volt biasanya diambil dari konektor "TV" yang berdekatan (pin 1).
Anda dapat menggunakan konverter SCART-HDMI. Saya akan segera memperingatkan Anda bahwa BC menampilkan gambar dengan frekuensi tidak 48 frame per detik, tetapi 48,83, jadi alih-alih menggulirkan mulus pada monitor LCD, kedutan berkala akan terlihat. Saya memecahkan masalah ini dengan
mengganti resonator kristal kuarsa 12 megahertz pada 12,288 MHz. Namun, berkedut hanya terlihat di beberapa demo. Sebagian besar program BC tidak menggunakan sinkronisasi frame rate.
Mengapa tidak puas dengan emulator, yang mungkin dibutuhkan komputer sungguhan? Saya menemukan empat hal yang ditiru dengan buruk:
- Perilaku pembicara pada frekuensi tinggi.
- Sinkronisasi gambar dan palet dengan balok.
- Waktu pelaksanaan perintah yang tepat (penting untuk musik melalui Covox).
- Bekerja dengan hard drive IDE pada kecepatan tinggi.
Jika Anda tidak berencana untuk melakukan hal di atas, emulator sudah cukup untuk Anda.
Persaingan
Di MacOS, saya menggunakan emulator
BK2010 . Ini tidak terlalu akurat, tetapi cocok untuk sebagian besar tugas.
Emulator
GID paling canggih saat ini berjalan pada Windows. Ini juga berjalan pada CrossOver untuk MacOS dan Wine untuk Linux. Emulator memiliki debugger yang baik, penampil halaman memori dan sejenisnya.
Untuk menulis gambar disk ke Compact Flash, saya menggunakan utilitas multi-platform
Etcher . Tetapi lebih sering saya mengirimkan data melalui saluran audio.
Alat pengembangan

Orang-orang dari kelompok demo
Tim Kelebihan meminta cross-assembler Alexei Morozov. Awalnya kami menggunakannya, tetapi segera Ivanq menulis sendiri - multi-platform, dengan Python. Ini bekerja lebih lambat, tetapi jauh lebih kaya dalam fungsi. Ini termasuk dukungan untuk proyek multi-file, dan ekspresi aritmatika kompleks, tipe data kata ganda, integrasi dengan Sublime Text dan dukungan tambahan untuk kesalahan kompilasi, menyimpan hasil dalam format file suara, kompilasi tidak hanya untuk BC, tetapi juga untuk UKSC, dan banyak lagi. Anda dapat membaca semua ini di dokumentasi resmi.
Assembler silang disebut
PDPy11 .
Beberapa veteran mengeluh bahwa PDPy11 tidak memiliki makro dari assembler makro DEC klasik (Makro-11). Makro assembler, dalam arti tertentu, bahasa yang berbeda. Mungkin bagus untuk menulis program sistem, tetapi permainan dan demo serius untuk BC ditulis, sejauh yang saya tahu, di assembler klasik biasa. Ironisnya: untuk kode sumber program BK, biasanya menggunakan ekstensi file .mac (dari "makro") bahkan pada perakit yang tidak mendukung makro. Bagaimanapun, kemampuan PDPy11 cukup untuk menulis program dengan tingkat kerumitan apa pun.
Debugger dibangun ke dalam emulator
GID . Ini memungkinkan Anda untuk mengatur alamat breakpoint, mengganggu atau melanjutkan eksekusi program kapan saja, melihat isi register dan memori, menjalankan program langkah demi langkah, mengubah isi memori, dll.
Untuk
mengkonversi gambar ke format BC, kami menulis
konverter online . Resolusi BK - 256x256 piksel dalam mode warna atau 512x256 dalam monokrom. Gambar yang lebih besar sebaiknya tidak dimasukkan ke konverter.
Dokumentasi
Sebuah
tutorial yang bagus tentang pemrograman bahasa assembly ditulis oleh Yuri Zaltsman. Perbedaan antara BC 0011m dan BC 0010 ditulis di
sini . Ada juga model BK 0011 (tanpa "m"), tetapi dengan cepat dikeluarkan dari produksi, mengakuinya tidak berhasil.
Terlepas dari kenyataan bahwa BC 0011m memiliki kemampuan hebat (palet warna, halaman memori tambahan), pada awalnya saya menyarankan pemrograman untuk BC 0010 - model ini lebih sederhana dan lebih mudah dimengerti. Program apa pun yang ditulis dengan benar untuk BC 0010 juga akan berjalan pada BC 0011m.
Perangkat prosesor dan set instruksi dijelaskan dengan baik di
Wikipedia .
Untuk yang paling berani -
pemrograman kode .
Halo dunia!
Area memori layar pada BC 0010 dimulai dengan alamat 40000 (sudut kiri atas) dan berakhir dengan alamat 77777 (sudut kanan bawah layar). Seperti yang Anda duga, arsitektur PDP-11 menggunakan sistem angka 8-desimal. Tetapi cross-assembler PDPy11, tentu saja, memungkinkan Anda untuk menulis angka juga dalam sistem biner, desimal, dan heksadesimal - lakukan sesuka Anda.
Untuk meletakkan
titik di layar , Anda harus menulis beberapa angka di area memori layar. Argumen dalam assembler DEC ditulis dari kiri ke kanan: sumber, lalu penerima Misalnya:
MOV #100000,@#60040 ;
Tanda # berarti bahwa argumennya hanyalah angka (bukan alamat). Tanda @ # berarti bahwa argumen tersebut adalah alamat absolut (artinya, ia tidak akan berubah ketika program dipindahkan ke lokasi memori lain).
Pembersihan layar terlihat seperti ini:
MOV #40000,R1 ; MOV #20000,R0 ; 1: CLR (R1)+ ; , R1 SOB R0,1 ;
Pengalamatan tidak langsung (R1) menggunakan register R1 sebagai penunjuk alamat. Memori dalam BC ditujukan byte demi byte, tetapi instruksi CLR segera membersihkan dua byte yang berdekatan: 40000 dan 40001 pertama, pada langkah berikutnya dari siklus 40002 dan 40003, dan seterusnya. Notasi (R1) + berarti bahwa setelah menggunakan argumen Anda perlu menambahnya. Dalam hal ini, dengan 2, karena perintah memproses 2 byte. Penghitung lingkaran dapat berupa register apa saja. SOB mengurangi unit dari register dan pergi ke label 1. Label lokal ditandai dengan angka dan titik dua, cakupannya antara dua label global. Label global harus dimulai dengan huruf dan diakhiri dengan tanda titik dua.
Instruksi CLR dapat dibuat untuk bekerja dengan byte dengan menambahkan huruf "B". Kemudian CLRB (R1) + akan meningkatkan register R1 bukan dengan 2, tetapi oleh 1.
MOV #40000,R1 MOV R1,R0 ; 1: CLRB (R1)+ SOB R0,1
Anda dapat melakukan hal yang sama lebih pendek. Kami menghapus layar dari bawah ke atas menggunakan metode pengalamatan indeks:
MOV #40000,R0 1: CLRB 37777(R0) ; (37777+R0) SOB R0,1
Jika kecepatan tinggi diperlukan, maka lebih baik untuk menghapus memori bukan dengan byte, tetapi segera dengan kata-kata. Ini akan menjadi dua kali lebih cepat. Tapi Anda bisa mempercepat lebih dari itu: untuk beberapa alasan, perintah CLR lebih lambat dari MOV. Oleh karena itu:
CLR R2 ; R2 MOV #40000,R1 ; MOV #20000,R0 ; 1: MOV R2,(R1)+ ; , R1 SOB R0,1 ;
Sekarang, memilih salah satu dari empat cara untuk menghapus layar, Anda sudah dapat menetapkan poin. Dalam mode warna, setiap titik sesuai dengan dua bit. Dalam monokrom, satu bit. BC tidak memiliki program switch mode layar. Ke output mana saya menghubungkan monitor, saya menerima gambar seperti itu.
Untuk kejelasan, kami menulis warna titik-titik dalam sistem bilangan biner:
MOVB #0b00001100,@#50010 MOVB #0b00110000,@#50112 MOVB #0b11000000,@#50313
Warna dalam setiap pasangan bit dikodekan sebagai berikut: jika hanya bit genap yang diset - titik hijau, hanya bit yang aneh - biru, kedua bit diatur - merah, kedua bit diatur ulang - hitam. Nah, monitor monokrom menunjukkan setiap bit sebagai titik terpisah.
Perintah MOVB menulis 4 poin ke memori di layar sekaligus, dan perintah MOV menulis 8 poin. Jika Anda tidak ingin memengaruhi titik tetangga, gunakan perintah BIC (Bit Clear) dan BIS (Bit Set), misalnya:
BICB #0b00001100,@#50112 ; BISB #0b00000100,@#50112 ;
Suatu hal yang menarik: dalam teks kita menulis bit paling tidak signifikan di sebelah kanan yang paling signifikan. Dan di layar, sebaliknya: titik yang sesuai dengan bit paling signifikan muncul di sebelah kiri.
Itu, sebenarnya, adalah semua tentang perangkat memori di layar BK 0010.
Tapi bagaimana dengan
output teks ?
MOV #Text,R1 ; EMT 20 ; HALT ; Text: .ASCII βHello, World!β .BYTE 0 ;
Tunjukkan sumbernya!

Akan lebih mudah untuk memulai dengan melihat kode sumber demo yang sudah selesai:
Di Ruang Anda - demo untuk Covox, sumber dalam arsip.
Apple Baik - sumber di GitLab (proyek multi-file yang kompleks).
EIS adalah emulator instruksi aritmatika yang diperluas dengan kode sumber.
Sumber dari tiga demo 256-byte.
Dalam edisi ke-28 majalah
Downgrade, sebuah artikel besar tentang evolusi algoritma musik pelacak pada BC 0010, dengan fragmen program dan penjelasan terperinci. Sebuah kisah nostalgia tentang demoscene awal untuk boot.
Kapan memulai?
Sekarang juga. Setelah 4 minggu di Kazan akan diadakan demopati
CAFe 2019 . Program festival ini memiliki kompetisi
BK 0010 - 512 byte . Ukuran ini cocok untuk 85 hingga 256 instruksi - ideal untuk pemula. Dua minggu sudah cukup bagi Anda untuk berurusan dengan alat dan menulis demo sederhana pertama. Setelah itu, masih ada satu setengah minggu untuk menulis pekerjaan kedua yang lebih serius.
Silakan, Anda bisa!
Telegram chat , forum
zx-pk - mereka akan membantu Anda di mana saja. kirim pekerjaan ke kontes, dan lebih baik lagi datang sendiri.
Adegan itu hidup !