Демка Gespensterwald умещается в 62 байта кода языка ассемблера x86



    В начале октября 2020 года программист-энтузиаст HellMood из группы DESiRE выпустил демку для MS-DOS/FreeDos под названием Gespensterwald. Программа размером в 62 байта написана на ассемблере. Демка сейчас занимает первое место в соревновании разработчиков Inércia Demoparty 2020 Combined Tiny Intro.

    Автор демо постарался показать в нескольких строчках кода в 3D анимации угрюмый и жуткий лес, около которого он живет. HellMood добавил в демо необычное гудение, которое иногда возникает в этом реальном лесу.

    Gespensterwald Nienhagen — это небольшой старый лес Нинхаген в Германии на побережье Балтийского моря (между Хайлигендаммом и Варнемюнде). У него причудливые деревья, которые выглядят зловеще. Когда идет дождь или лес окружает туман, создается впечатление, будто в нем происходит что-то мистическое. Лесополоса занимает площадь протяженностью 1,25 км и около 100 метров. В лесу растут 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 байта.
    mov al,13h
    int 0x10
    push 0xa000
    pop es
    pop ds
    X: mov bl,126
    L: inc bx
    mov ax,0xcccd
    mul di
    mov al,dh
    add al,92
    imul bl
    xchg ax,dx
    mul bl
    add ah,[0x46c]
    or ah,bl
    and ah,dh
    jnz L
    xchg bx,ax
    inc ax
    shr al,3
    stosb
    jmp short X
    

    См. также:

    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 13

      +4
      Отчего-то захотелось футболку с кодом этой демки. ;-)
        +3

        Его даже в qr код можно втиснуть

          +6

          Код можно на белом прямоугольнике, а вся остальная футболка — с этим самым узором.

            +2
            Некоторое дежа-вю habr.com/ru/post/495408
              +2

              Стоит и саму демку тогда на футболку добавить)

              +3
              Любопытная демка. С одной стороны — требуется минимум 80186 для сборки, а с другой стороны, если запускать на чём-то хуже ~Pentium 166 — анимация слишком медленная.
                +1
                Das ist fantastisch!
                  0
                  Ого, даже со звуком! Круто.
                    0
                    Ха, 62 байта.
                    Есть демки из 2 (двух) байт
                    habr.com/ru/post/495042
                      0

                      Это не демка в два байта, это демка через параметры командной строки, которые явно больше размером, чем два байта. Так нечестно! (Я угадал один байт из демки — 0xEB, jmp short, но думал, что прыжок будет каким-нибудь другим)

                      +1
                      А насчет футболки с кодом, идея вполне годная :)
                        +3
                        На случай, если кто-то хочет реальных картинок этого леса,
                        то вот.
                          0

                          В имени файла написано 62байта, но на видео в Ютубе и по ссылке рейтинга — написано 64.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое