В начале октября 2020 года программист-энтузиаст HellMood из группы DESiRE выпустил демку для MS-DOS/FreeDos под названием Gespensterwald. Программа размером в 62 байта написана на ассемблере. Демка сейчас занимает первое место в соревновании разработчиков Inercia 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
См. также:
Oxyd
Отчего-то захотелось футболку с кодом этой демки. ;-)
balamutang
Его даже в qr код можно втиснуть
perfect_genius
Код можно на белом прямоугольнике, а вся остальная футболка — с этим самым узором.
DreamingKitten
Некоторое дежа-вю habr.com/ru/post/495408
axifive
Стоит и саму демку тогда на футболку добавить)