- Wake up! 16b adalah intro DOS mode real x86 16-byte yang diperkenalkan di Outline Demoparty, menciptakan fraktal Sierpinski dan suara secara bersamaan lewat buffer teks
- Dengan
int 10h dan pengaturan ds=0xb800, pola layar awal pada mode teks 40x25 dipakai sebagai ruang komputasi, sehingga byte spasi dan warna memengaruhi output
xor [si], al bekerja seperti penjumlahan tanpa carry, membentuk struktur Sierpinski pada bit 1, lalu byte yang sama dikirim ke speaker PC lewat out 61h, al
- Loop sebenarnya bergerak -56 byte di setiap iterasi dan di-reset setelah 8.192 langkah; suaranya turun satu oktaf dan di layar muncul pola yang tershear menjadi 10 kolom karakter
- Lingkungan eksekusi seperti patch
0xB000 untuk MDA/Hercules dan perbedaan status BIOS·RAM mengubah hasil, sehingga artefak perangkat keras alami menjadi bagian dari sizecoding
Struktur inti intro x86 16-byte
- Wake up! 16b adalah intro assembly DOS mode real x86 16-byte yang diperkenalkan pada Mei 2026 di Outline Demoparty, Ommen, Belanda
- Dengan memakai buffer teks VGA/CGA sebagai ruang komputasi, karya ini membentuk fraktal Sierpinski tak terbatas di layar dan mengirim data yang sama ke port speaker PC untuk menghasilkan suara
- Seluruh kode terdiri dari 16 byte
int 10h ; 2바이트
mov bh, 0xb8 ; 2바이트
mov ds, bx ; 2바이트
L:
lodsb ; 1바이트
sub si, byte 57 ; 3바이트
xor [si], al ; 2바이트
out 61h, al ; 2바이트
jmp short L ; 2바이트
- Dalam proses pengembangannya, dieksplorasi penggunaan cellular automata untuk grafik dan suara sekaligus, instruksi assembly polimorfik
add [bx+si],al yang menjadi 0x0000, serta teknik sizecoding yang mendaur ulang byte dan opcode dengan melompat ke tengah instruksi
- Karya sebelumnya, "M8trix", adalah intro 8-byte dan 7-byte dari 2014 yang membuat karakter pseudorandom menyebar di layar; di Wake up! 16b, suara muncul lebih dulu lalu efek visual menyusul
Layar teks yang telah diinisialisasi
int 10h mengatur video mode 0, sehingga terbentuk kisi mode teks 40x25
mov bh, 0xb8 dan mov ds, bx menyetel segmen data ds ke alamat buffer teks VGA/CGA, yaitu 0xb800
- Saat BIOS membersihkan layar, memori tidak diisi nol, melainkan 2.000 slot karakter diisi dengan byte karakter
0x20 (spasi) dan atribut warna 0x07 (abu-abu terang di atas latar hitam)
- Layar tampak kosong, tetapi di memori tertinggal pola seragam, dan keadaan awal ini memengaruhi output suara maupun visual
- Data di depan dan belakang memori video yang terlihat, serta cara inisialisasi setelah “clear screen”, ikut tercampur ke hasil, menghasilkan suara yang lebih kasar dan unik dari perkiraan
Jumlah kumulatif dan struktur binomial
- Jika hanya melihat struktur matematisnya, keadaan awal bisa dianggap 0 alih-alih
0x20, memakai add alih-alih xor, bergerak 16 byte per langkah, dan al dimulai dari 2
- Segmen DOS berukuran tepat 65.536 byte, dan jika bergerak 16 byte per langkah, diperlukan 4.096 langkah untuk mengelilingi seluruh segmen
- Karena 4.096 adalah kelipatan dari 256, ukuran register 8-bit, carry-over akan tetap selaras saat segmen melakukan wrap, dan di awal setiap sweep
al kembali ke 2
- Jika nilai antar sel terus dijumlahkan, terbentuk partial sum (prefix sum), dan nilainya berkembang seperti deret koefisien binomial yang diskalakan 2x
- Jika beberapa pass pada 16 sel pertama diamati, nilainya terakumulasi per baris, dan karena nilainya 8-bit, bagian yang melebihi 256 akan wrap dan kembali muncul sebagai nilai kecil
XOR dan struktur Sierpinski
- Berdasarkan sifat kombinatorik modulo 2, muncul segitiga Sierpinski, dan bit ini langsung dikeluarkan ke speaker PC
- Pada level bit, penjumlahan tanpa carry adalah XOR, sehingga kode memakai
xor [si], al alih-alih add
- Nilai awal 2 adalah biner
00000010, jadi hanya bit 1 yang toggle antara 0x00 dan 0x02
- Pola ini sesuai dengan rule 60 pada elementary cellular automata
- Menurut teorema Lucas, pola ini cocok dengan bit 1 dari tabel penjumlahan, dan pada tabel posisi dengan bit 1 aktif ditunjukkan sebagai
2
Bagaimana data menjadi suara
out 61h, al mengirim byte yang telah dihitung ke port 61h yang terhubung ke speaker PC
- Bit 1 pada port
61h menentukan apakah kerucut speaker didorong ke luar atau ditarik ke dalam
- Kode menghitung fraktal dengan XOR, menulis hasilnya ke memori, lalu segera mengirim byte yang sama ke port speaker
- Nilai 1 dan 0 yang muncul dari fraktal membentuk gelombang kotak (square wave) dengan lebar pulsa dan frekuensi yang berubah secara alami; ketika diputar linewise, hasilnya menjadi bytebeat yang self-similar dan hampir tidak berubah tempo
- Suara output tidak hanya mencampurkan buffer teks, tetapi juga byte lain di sisa segmen 64KB; karena ada kode shadowed video ROM BIOS di dalamnya, terdengar suara yang lebih kasar dan funky dibanding overlayed rectangle wave bytebeat berbasis garis Sierpinski yang diharapkan
Langkah 56 byte: oktaf dan shear diagonal
- Kode sebenarnya tidak bergerak 16 byte per langkah; kombinasi
lodsb dan sub si, byte 57 membuatnya bergerak -56 byte mundur di setiap iterasi
- Lebar langkah ini membuat layar terisi lebih jarang sambil menjaga agar buffer suara tidak terlalu besar, dan dipakai untuk mereproduksi efek visual seperti M8trix
-
Audio
- 56 tidak membagi 65.536 secara tepat
- Kode hanya mengunjungi offset kelipatan 8, dan baru reset setelah 8.192 langkah dan 7 kali wrap
- Karena panjang siklus menjadi dua kali lipat, frekuensi dasarnya turun setengah sehingga suara turun satu oktaf
-
Visual
- Pada layar selebar 80 byte, perpindahan -56 byte setara dengan maju 24 byte, yaitu berpindah 12 kolom
- Hanya ada 10 kolom berbeda yang benar-benar dikunjungi
- Fraktal tidak tampil sebagai gambar penuh, melainkan tershear secara diagonal menjadi 10 kolom karakter yang bergerak ke bagian atas layar
- Segitiga sebenarnya lebarnya 8.192 “piksel”, tetapi satu baris karakter hanya 80 byte, jadi gerakannya terasa namun struktur keseluruhannya sulit dilihat langsung
- Jika digambar sekaligus tanpa melewati piksel atau memakai layar yang jauh lebih besar, segitiganya bisa terlihat
Menjalankan di perangkat keras nyata
- Scener miragept menjalankannya di perangkat keras nyata dengan mem-patch alamat dari
0xB800 ke 0xB000 yang dipakai MDA, demi teks hijau yang cocok untuk MDA/Hercules
- Perangkat yang dipakai bukan komputer IBM yang benar-benar asli, melainkan 286 dengan kartu EGA yang dapat mengemulasikan MDA/Hercules, serta monitor MDA sungguhan
- Audio hasil capture bercampur dengan noise konstan dari mesinnya sendiri, dan monitor IBM 5151 memiliki afterglow fosfor yang panjang, sehingga kurang cocok untuk tampilan yang sangat cepat
- Karena perubahan byte alamat, suaranya sedikit berubah, tetapi tetap bekerja sesuai niat, dan pada bagian akhir struktur Sierpinski terlihat lebih jelas daripada versi aslinya
- Bergantung pada emulator dan versi BIOS, artefak yang tertinggal di RAM bisa berbeda, dan karena kode melakukan XOR pada keadaan memori itu, outputnya sensitif terhadap lingkungan eksekusi
- Memori bisa dibersihkan lebih dulu untuk mendapatkan output yang seragam, tetapi itu memerlukan byte tambahan; pendekatan menerima keadaan perangkat keras yang alami tetap menjadi daya tarik sizecoding
Materi terkait
1 komentar
Komentar Hacker News
https://youtu.be/b-Fa6HtvGtQ?si=LpQszgA9_K-m3V3-
Keduanya cerdas dan eksperimental. Parker lebih dekat ke matematika murni, sedangkan Mould melintasi berbagai bidang dan benar-benar memuaskan hasrat eksperimen/DIY
Kalau suka video ini, sangat disarankan untuk menonton kedua kanal itu lebih banyak
https://www.youtube.com/@standupmaths
https://www.youtube.com/@SteveMould
Demo itu bahkan tidak punya suara
Ini benar-benar pekerjaan yang luar biasa, sebuah mahakarya yang layak dijadikan karya pensiun. Atau lebih realistisnya, nanti akan dikejar lagi di arsitektur lain
Bravo
https://www.youtube.com/watch?v=QKLhH_ANwIc
Komunitas size coding kami sempat mengira semua trik cellular automata sudah ditemukan beberapa tahun lalu, lalu Plex muncul dan membuktikan bahwa itu tidak benar ♥
Tidak tahu apakah pernah ada tulisan tentang pendahulunya, m8trix, tapi aku pernah membedahnya sedikit saat baru keluar pada 2014: https://scot.tg/2014/05/31/amazing-code-density/
Semuanya begitu indah, benar-benar seni. Sedihnya, di industri sekarang yang isinya AI dan semacamnya, biasanya tidak banyak kesempatan untuk membuat hal seperti ini