
„wake up! 16b“: 16 ბაიტი x86 კოდი, რომელიც ფრაქტალს ხატავს და აჟღერებს
დემოსცენერმა HellMood-მა გამოაქვეყნა დეტალური აღწერა ინტროსი „wake up! 16b“, რომელიც Outline-ის დემოპარტიზე წარადგინა. 16-ბაიტიანი DOS-პროგრამა ტექსტურ მეხსიერებაში უსასრულო სიერპინსკის ფრაქტალს ხატავს, იმავე ბაიტებით კი დინამიკს აჟღერებს.
დემოსცენერმა HellMood-მა გამოაქვეყნა დეტალური აღწერა ინტროსი „wake up! 16b“, რომელიც 2026 წლის მაისში Outline-ის დემოპარტიზე, ნიდერლანდების ქალაქ ომენში, წარადგინა. 16-ბაიტიანი real-mode DOS-პროგრამა ტექსტურ მეხსიერებაში უსასრულო სიერპინსკის ფრაქტალს ხატავს და იმავე ბაიტებით კომპიუტერის დინამიკს აჟღერებს.
თექვსმეტი ბაიტი და წინასწარ მომზადებული ტილო
მთელი პროგრამა რამდენიმე ინსტრუქციაა: BIOS-ის გამოძახება, რომელიც ვიდეორეჟიმს 0-ზე აყენებს — 40×25 სიმბოლოს ბადე; ოპერაცია, რომელიც მონაცემთა სეგმენტს 0xb800-ზე მიუთითებს, CGA/VGA-ს ტექსტურ ბუფერზე; შემდეგ ციკლი, რომელიც კითხულობს ბაიტს, საწყის ინდექსს 56 ბაიტით უკან წევს, ამ ბაიტს XOR-ით ურთავს ვიდეომეხსიერებას და წერს 61h პორტზე — კომპიუტერის დინამიკის პორტზე. მნიშვნელობის პირველი ბიტი დინამიკის დიაფრაგმას გარეთ ან შიგნით უბიძგებს.
ტილო ცარიელი არ არის. როცა BIOS ეკრანს წმენდს, ის 2000 სიმბოლოს უჯრას 0x20-ით (ინტერვალი) და 0x07-ით (ღია ნაცრისფერი შავ ფონზე) ავსებს, ამიტომ კოდი XOR-ს ნულზე კი არა, უკვე არსებულ ერთგვაროვან ნიმუშზე აკეთებს.
სიერპინსკი პრეფიქსული ჯამიდან
თუ კოდს სუფთა მათემატიკამდე შევამცირებთ, ციკლი ორზე გამრავლებულ ბინომურ მიმდევრობას ითვლის: ყოველი უჯრა თავისი წინამორბედების მიმდინარე ჯამი ხდება. რადგან XOR არის შეკრება გადატანის გარეშე, ამ მიმდევრობის მოდულ-ორი ხედვა პასკალის სამკუთხედის მოდულ-ორია — სიერპინსკის ხალიჩა. ავტორი ამ ქცევას ელემენტარული უჯრედული ავტომატების 60-ე წესსა და ლუკასის თეორემას უკავშირებს, რომელიც ამ ეკვივალენტობას იძლევა.
რატომ ჟღერს ასე
ნაბიჯი −56 ბაიტია და არა −16, ამიტომ კოდი მხოლოდ რვის ჯერად ოფსეტებს ეხება: 8192 ნაბიჯი, რომელიც 64-კილობაიტიან სეგმენტს შვიდჯერ შემოუვლის. ეს ციკლს აორმაგებს, ფუნდამენტური სიხშირე კი განახევრდება — ბგერა ერთი ოქტავით ეშვება. იგივე ოფსეტი სურათს დიაგონალურად კვეთს: 80-სვეტიან ეკრანზე 56 ბაიტით უკან სვლა 24 ბაიტით წინ სვლის ტოლია, ამიტომ მხოლოდ ათი განსხვავებული სვეტი იწერება და ფრაქტალი ეკრანზე აღმავალი სიმბოლოების ათ სვეტად ჩანს.
დინამიკზე ყველაფერი ფრაქტალიდან არ მიდის. სეგმენტში ასევე დევს ვიდეო-BIOS-ის ჩრდილოვანი კოდი და სწორედ იმაზე XOR-ის გაკეთება, რაც firmware-მა მეხსიერებაში დატოვა, ანიჭებს ინტროს ამ უხეშ, კონკრეტულ მანქანაზე დამოკიდებულ ჟღერადობას. HellMood აღნიშნავს, რომ შედეგი ძალიან მგრძნობიარეა ემულატორისა და BIOS-ის ვერსიის მიმართ და რომ მეხსიერების წინასწარი განულება სრულ ერთგვაროვნებას მისცემდა — იმ ბაიტების ხარჯზე, რომლებიც ავტორს არ აქვს.
რეალურ ტექნიკაზე
დემოსცენერმა miragept-მა ინტრო იმ ეპოქის ტექნიკაზე ჩაწერა და მისამართი 0xb800-დან 0xb000-ზე შეცვალა, რომ ის MDA/Hercules-ის დისპლეიზე გამოსულიყო: 286 პროცესორი EGA-ს ბარათითა და IBM 5151 მონიტორით. HellMood-ის ადრინდელი „M8trix“ (2014) რვა ბაიტში ეკრანზე ფსევდოშემთხვევით ასოებს ფანტავდა; ამჯერად, მისივე სიტყვებით, ბგერა პირველი იყო.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.