fbpx
4.4 C
София

Демонстрационната програма Gespensterwald има само 62 байта x86 код

Най-четени

Даниел Десподовhttps://www.kaldata.com/
Ежедневен автор на новини. Увличам се от съвременни технологии, оръжие, информационна безопасност, спорт, наука и концепцията Internet of Things.

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

Авторът на тази интересна демонстрационна програма се е постарал в едва няколко реда код да представи триизмерна анимация на тъмната и страшна гора, близо до която живее. HellMood е добавил в своето демо и специфичното бучене, което понякога се появява в истинската гора.

Gespensterwald Nienhagen е гора в Германия, намираща се на брега на Балтийско море. Там могат да се видят големи странни дървета, които изглеждат зловещо. Когато вали дъжд или има мъгла се създава впечатление за нещо мистично.

Ето го и сорс кода на демонстрационната програма 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 байта.

Абонирай се
Извести ме за
guest
0 Коментара
Отзиви
Всички коментари

Нови ревюта

Подобни новини