Впервые я прочитал о фракталах больше 40 лет назад, классе в пятом-шестом, в журнале "Техника — молодежи". Помню, там была изображена снежинка Коха. Слово "фрактал" происходит от латинского "дробный", так как у этих математических фигур дробная размерность.
"Облака — не сферы, горы — не конусы, береговые линии — не окружности, древесная кора не гладкая, молния распространяется не по прямой" — писал Бенуа Мандельброт — первооткрыватель самого известного фрактала, названного в его честь — множества Мандельброта.

Фрагмент множества Мандельброта для примера
Изобразить его стало возможно только после появления компьютеров. Без расчетов его форму не узнать никак, а расчетов требуется намного больше, чем возможно выполнить вручную. Поэтому изображения множества Мандельброта — это показатель высокого уровня цивилизации. Археологи не находят этих картин в прошлом Земли, значит, у древних народов не было такого уровня развития.

Фрагмент множества Мандельброта для примера
Существует много программ для построения фракталов, я тоже написал такую программу. И так сложилось, что написал ее на языке ассемблера. Поэтому она работает быстро и занимает очень мало места на диске. И она бесплатна!
flat assembler 1.73.32 for Windows
https://flatassembler.net/download.php
Tomasz Grysztar!
Кроме FASM.EXE нужно INCLUDE.
И три файла:
Mandelbrot.asm
params.bmp
Mandelbrot.ico
После того как Mandelbrot.exe не просто фрагмент множества Мандельброта а анимация или мультипликация — технические приёмы создания иллюзии движущихся изображений до 60 кадров в секунду. Смотрим на картинка!

600 × 600 pixels, file size: 69.85 MB, MIME type: image/gif, looped, 255 frames.
https://upload.wikimedia.org/wikipedia/commons/1/1e/Mandelbrot_Set_Color_Cycling_Animation_600px.gif
Еще мне кажется что объёмный а не плоский мир! Иллюзия? Вы тоже видите?
Однако приступим!
format PE GUI 4.0 include 'include\win32a.inc' entry start section '.code' code readable executable start: invoke GetModuleHandle,0 mov [clsHInstance],eax invoke LoadIcon,eax,9955 mov [clsHIcon],eax invoke LoadCursor,0,IDC_HAND mov [clsHCursor],eax invoke RegisterClass,clsStyle invoke CreateWindowEx,0,splclassname,spltitlename,WS_VISIBLE+WS_POPUP,100,70,1600,900,0,0,[clsHInstance],0 mov [newhwnd],eax invoke GetDC,[newhwnd] mov [MyDC],eax invoke CreateDIBSection,[MyDC],bhead,0,tut,0,0 mov [HBitmap],eax mov esi,bhead+1064 mov edi,[tut] mov ecx,1440000 repe movsb invoke CreateCompatibleDC,[MyDC] mov [CoDC],eax invoke SelectObject,[CoDC],[HBitmap] mov [OBitmap],eax invoke CreateThread,0,0,Thr1Proc,0,0,Thr1ID mov [t1hndl],eax
Здесь окно изначально отображается и всплывающее. 1600 и 900. И 1 440 000 байт фрагмент множества Мандельброта неподвижный.

Фрагмент множества Мандельброта для примера
msg_loop: invoke GetMessage,msHWND,0,0,0 or eax,eax jz end_loop invoke DispatchMessage,msHWND jmp msg_loop end_loop: invoke SelectObject,[CoDC],[OBitmap] invoke DeleteObject,[HBitmap] invoke DeleteDC,[CoDC] invoke ReleaseDC,[newhwnd],[MyDC] invoke CloseHandle,[t1hndl] invoke ExitProcess,0
Здесь ExitProcess — предпочтительный метод завершения процесса. Эта функция обеспечивает чистое отключение процесса.

Фрагмент множества Мандельброта для примера
proc WndProc, hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_DESTROY je wmdestroy cmp [wmsg],WM_KEYDOWN je wmdestroy cmp [wmsg],WM_NCHITTEST jne nonchi invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] cmp eax,1 jne finish mov eax,2 jmp finish nonchi: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp finish wmdestroy: invoke PostQuitMessage,0 xor eax,eax finish: pop edi esi ebx ret endp
Здесь WM_NCHITTEST — всякий раз, когда происходит событие от нажатия кнопки мыши. Посмотрите! И WM_DESTROY для выход.

Фрагмент множества Мандельброта для примера
proc Thr1Proc,Paramx align 16 again: std mov esi,bhead+40 add esi,1016 mov edi,esi lodsd mov ecx,254 repe movsd stosd cld invoke SetDIBColorTable,[CoDC],0,256,bhead+40 invoke DwmFlush invoke BitBlt,[MyDC],0,0,1600,900,[CoDC],0,0,SRCCOPY jmp again endp
Значимая часть! Анимация — сменяющих друг друга с большой частот��й до 60 кадров в секунду! Это DwmFlush! И BitBlt для 1600 х 900. Кстати только несколько процентов всего! Несмотря на 60 кадров в секунду.

Фрагмент множества Мандельброта для примера
section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ user,'USER32.DLL',\ gdi,'GDI32.DLL',\ dwmapi,'DWMAPI.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ CreateThread,'CreateThread',\ CloseHandle,'CloseHandle',\ ExitProcess,'ExitProcess' import user,\ RegisterClass,'RegisterClassA',\ CreateWindowEx,'CreateWindowExA',\ DefWindowProc,'DefWindowProcA',\ GetMessage,'GetMessageA',\ DispatchMessage,'DispatchMessageA',\ LoadCursor,'LoadCursorA',\ LoadIcon,'LoadIconA',\ GetDC,'GetDC',\ ReleaseDC,'ReleaseDC',\ PostQuitMessage,'PostQuitMessage' import gdi,\ CreateDIBSection,'CreateDIBSection',\ CreateCompatibleDC,'CreateCompatibleDC',\ SelectObject,'SelectObject',\ DeleteObject,'DeleteObject',\ DeleteDC,'DeleteDC',\ SetDIBColorTable,'SetDIBColorTable',\ BitBlt,'BitBlt' import dwmapi,\ DwmFlush,'DwmFlush'
Все! Это import kernel, user, gdi и dwmapi.

Фрагмент множества Мандельброта для примера
section '.data' data readable writeable clsStyle dd 0 clsLpfnWndProc dd WndProc clsCbClsExtra dd 0 clsCbWndExtra dd 0 clsHInstance dd ? clsHIcon dd ? clsHCursor dd ? clsHbrBackground dd COLOR_BTNFACE+1 clsLpszMenuName dd 0 clsLpszClassName dd splclassname spltitlename db 'Mandelbrot',0 splclassname db 'ekjgddirkul2',0 bhead file 'params.bmp':0eh Thr1ID rd 1 t1hndl rd 1 newhwnd rd 1 tut rd 1 HBitmap rd 1 OBitmap rd 1 MyDC rd 1 CoDC rd 1 msHWND rd 1 msMESSAGE rd 1 msWPARAM rd 1 msLPARAM rd 1 msTIME rd 1 msPT rd 2
Это много dd и file params.bmp.

section '.rsrc' resource data readable directory RT_ICON,splico,RT_GROUP_ICON,splgroup resource splico,8855,0,ico0 resource splgroup,9955,0,grp0 icon grp0,ico0,'Mandelbrot.ico'
Здесь Mandelbrot.ico иконка 256 x 256.
Собираем.


Готово! Файл Mandelbrot.exe готов. Если Far, то видим так:

Вот так выполнили Mandelbrot.exe:

Но конечно вы не видите анимация 60 кадров в секунду! Сделайте сами.
И последнее. У меня три статьи:
ЦВЕТА белиссимо
Забытый порт 3c0, или видят ли камеры иллюзии
Фрагмент множества Мандельброта с анимация
Можете ли вы английский язык? Что бы распространять в Великобритания, Северная Америка, Австралия? Не я. Вы. Я больше года назад перенес инсульт. И вряли что могу. Я почти не ходячий! И скоро вероятно умру. А статьи может бы не знаю… Но я слышал что Creative Commons — некоммерческая организация, которая создала бесплатные для использования свободные публичные лицензии...
Я знаю Wikimedia Commons Aokoroko, где много моих фрагмент множества Мандельброта.
А вот нашел! Намного большие!
https://splushka.narod.ru/soft/SplMandelbrot.zip
