[Assembler, Компьютерная анимация, Звук] Демка Gespensterwald умещается в 62 байта кода языка ассемблера x86

Автор Сообщение
news_bot ®

Стаж: 6 лет 5 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
05-Окт-2020 21:31


В начале октября 2020 года программист-энтузиаст HellMood из группы DESiRE выпустил демку для MS-DOS/FreeDos под названием Gespensterwald. Программа размером в 62 байта написана на ассемблере. Демка сейчас занимает первое место в соревновании разработчиков Inércia Demoparty 2020 Combined Tiny Intro.
Автор демо постарался показать в нескольких строчках кода в 3D анимации угрюмый и жуткий лес, около которого он живет. HellMood добавил в демо необычное гудение, которое иногда возникает в этом реальном лесу.
Gespensterwald Nienhagen — это небольшой старый лес Нинхаген в Германии на побережье Балтийского моря (между Хайлигендаммом и Варнемюнде). У него причудливые деревья, которые выглядят зловеще. Когда идет дождь или лес окружает туман, создается впечатление, будто в нем происходит что-то мистическое. Лесополоса занимает площадь протяженностью 100 метров и шириной 1,3 километра. В лесу растут 130-летние дубы, буки, грабы и ясени.
Извините, данный ресурс не поддреживается. :(
Код демки Gespensterwald.
DB      60              ; 1st run piano, then french horn
        DB      0x9B, 25, 114   ; play note 25 with volume 114
        NOP                     ; align executable music data
        MOV     AL, 13h         ; set graphic mode
        INT     10h             ; 320x200 pixels, 256 colors
Y:      MOV     CL, 62          ; 62 = length of this code
        PUSH    SI              ; save pointer to music data
        MOV     DX, 0x330       ; MIDI port (requires UART)
        REP     OUTSB           ; send code as data to MIDI port
        POP     SI              ; restore pointer to music data
        PUSH    0xA000          ; set ES to start of visible screen
        POP     ES              ; 2 extra bytes to work everywhere
X:      MOV     BL, 126         ; Depth D, start at ~0 (signed)
L:      INC     BX              ; D++, advance ray
        MOV     AX, 0xCCCD      ; Rrrola trick, convert screen
        MUL     DI              ; ... pointer DI to Y,X in DH, DL
        MOV     AL, DH          ; get Y in AL
        ADD     AL, 92          ; center forest in the middle
        IMUL    BL              ; Y' projection, result in AH
        XCHG    AX, DX          ; save Y' in DH, get X in AL
        MUL     BL              ; X' projection, result in AH
        ADD     AX, BP          ; X'' = X' + T (high byte of BP)
        OR      AH, BL          ; sierpinski pyramid formula
        AND     AH, DH          ; H = ( X'' | D ) & Y'
        JNZ     L               ; if not hit, continue ray
        XCHG    BX, AX          ; get number of steps in AL
        INC     AX              ; map number of steps ...
        SHR     AL, 3           ; .. to black white scale
        STOSB                   ; write pixel value and advance
        IMUL    DI, BYTE 85     ; antiflicker, rough look
        LOOP    X               ; frame loop (65536 pixels)
        ADD     BP, SI          ; T++, high byte of BP (SI=100h)
        JMP     SHORT Y         ; repeat, also change instrument...

Вариант демки Gespensterwald без звука занимает 44 байта.

===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_assembler, #_kompjuternaja_animatsija (Компьютерная анимация), #_zvuk (Звук), #_gespensterwald, #_64_bajta (64 байта), #_assembler (ассемблер), #_assembler, #_kompjuternaja_animatsija (
Компьютерная анимация
)
, #_zvuk (
Звук
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 09-Июл 01:30
Часовой пояс: UTC + 5