1 poin oleh GN⁺ 3 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 3 jam lalu
Komentar Hacker News
  • Saat mengikuti ini, aku malah terjebak dalam lubang kelinci selama satu jam, dan pada akhirnya bahkan menonton video dua orang yang membuat segitiga Sierpinski dengan presentasi PowerPoint rekursif
    https://youtu.be/b-Fa6HtvGtQ?si=LpQszgA9_K-m3V3-
    • Matt Parker dan Steve Mould adalah dua pendidik STEM papan atas di YouTube
      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
  • Dulu aku sungguh mengira demo 32-byte yang pernah kulihat adalah batas seberapa kecil biner bisa dibuat sambil tetap enak dipandang
    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
  • Setiap kali melihat kode generatif sekecil ini, rasanya ingin berteriak, “penyihir!”
    Bravo
  • Aku menonton rainbow surf dari demo yang ditautkan seperti terhipnotis
    https://www.youtube.com/watch?v=QKLhH_ANwIc
    • Orang yang membuat "wake up" juga yang membuatnya. Ya, demo itu yang membuatku aktif lagi
      Komunitas size coding kami sempat mengira semua trik cellular automata sudah ditemukan beberapa tahun lalu, lalu Plex muncul dan membuktikan bahwa itu tidak benar ♥
  • Benar-benar keren
    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/
  • Karya-karya keren seperti inilah yang membuat kita bersemangat dengan teknologi
  • Awalnya kupikir ini bukan demo 16-byte, melainkan LLM dengan 16B parameter
    • Aku juga. Tapi ini jauh lebih keren
    • Bedanya 9 digit
  • Aku benar-benar terkesan. Hal-hal seperti inilah yang membuatku suka pemrograman dan komputasi
    Semuanya begitu indah, benar-benar seni. Sedihnya, di industri sekarang yang isinya AI dan semacamnya, biasanya tidak banyak kesempatan untuk membuat hal seperti ini
    • Kalau dibuat dengan Electron, mungkin jadinya unduhan 300MB dan memakai RAM sekitar 1GB
  • Aku masih berusaha mencerna bahwa ini memang mungkin