Share This
Связаться со мной
Крути в низ
Categories
//Демка Gespensterwald умещается в 62 байта кода языка ассемблера x86

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

05.10.2020Category : My Habr

demka gespensterwald umeshhaetsja v 62 bajta koda jazyka assemblera x86 ebf200b - Демка 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 ; 320×200 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 байта.

  • 25 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close