Julia
-- Sebastian Pawlak, 1997.
Zamieszczony poniżej kod wykreśla w czasie rzeczywistym animację fraktala Julii.
W programie użyłem funkcji koprocesora.
; code by TrIx Code SEGMENT Assume Cs:Code .386 .387 org 100h Start: jmp Main ;°°°°°°°°°°°°°°°° Stale i dane °°°°°°°°°°°°°°°° a dd 0 b dd 0 sw1 db 0 cx_ dd 0 cy_ dd 0 zx dd 0 zy dd 0 stx dd 0 sty dd 0 min dd -2.0 max dd 2.0 pow2 dd 2.0 pow3 dd 3.5 krok_X dd 0.0125 krok_Y dd 0.02 cx_krok dd 0.01 cx_krok_min dd -0.01 pow1_8 dd 1.8 pow0_8_min dd -0.8 pow0_7 dd 0.7 ;˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ Poczatek programu ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ Main: mov ax,13h ; tryb graficzny int 10h mov dx,3c8h mov al,1 out dx,al inc dx mov bl, 17 petlapal: mov al,bl out dx, al mov al,0 out dx, al mov al,bl add al,5 shl al,1 out dx, al dec bl jne petlapal ;°°°°°°°°°°°°°°°° GLOWNA PETLA PROGRAMU °°°°°°°°°°°°°°°° push 0a000h pop es mov bp,32000 mov dx,320 petla: ; petla glowna mov di,0 cld mov ax,0 fld min fst sty ; sty=-2. fstp stx ; stx=-2. ; petla przelatujaca po poszczegolnych punktach ekranu ScreenOffset: fld stx fstp zx fld sty fstp zy mov ch,0 mov cl,16 Iter_petla: ; for (k=0;k<16;k++) fld zx fmul st(0),st(0) ; a=zx*zx fst a fld zy fmul st(0),st(0) ; b=zy*zy fst b faddp st(1),st(0) ; a*b fld pow3 fcompp st(1),st ; if (a+b>3) { PutPixel (bufor,i,g,k); goto NextPoint; } fstsw ax sahf jb NextPoint ; jb fld a fld b fsubp st(1),st fld cx_ faddp st(1),st ; NewZx=a-b+cx fld zx fld zy fmulp st(1),st ; NewZy=2*zx*zy+cy fld pow2 fmulp st(1),st fld cy_ faddp st(1),st fstp zy ; zx=NewZx fstp zx ; zy=NewZy dec cl jne Iter_petla mov cl,7 ; PutPixel (bufor,i,g,20); NextPoint: mov al,cl ; PutPixel (bufor,i,g,cl); stosb NextEnd: fld stx fld krok_x faddp st(1),st fstp stx dec dx jne NicNieRob ; test konca wiersza mov dx,320 fld min fstp stx fld sty fld krok_y faddp st(1),st fstp sty NicNieRob: cmp di,bp jne ScreenOffset ;Kopiowanie polowy w odbiciu lustrzanym mov cx,320*100 mov di,0 mov si,64000 kop_X: mov al,es:di mov es:si,al inc di dec si dec cx jne kop_X mov es:si,al cmp sw1,0 jne sw1_ fld cx_ fld cx_krok faddp st(1),st fst cx_ fld pow1_8 fcompp st(1),st fstsw ax sahf ja sw_end ; jb mov al,1 mov sw1,al jmp sw_end sw1_: fld cx_ fld cx_krok_min faddp st(1),st fst cx_ fld pow0_8_min fcompp st(1),st fstsw ax sahf jb sw_end ; jb mov al,0 mov sw1,al sw_end: fld cy_ fld pow0_7 fcompp st(1),st fstsw ax sahf jb cy_end ; jb fld cy_ fld cx_krok faddp st(1),st fstp cy_ cy_end: ; if (sw1==0) { cx+=0.01; if (cx>1.8) sw1=1; } ; else if (sw1==1) { cx-=0.01; if (cx<-0.8) sw1=0; } ; if (cy<0.7) cy+=0.01; mov ah,1 int 16h jz petla ;°°°°°°°°°°°°°°°° Koniec °°°°°°°°°°°°°°°° ; mov ax,03h ; int 10h mov ah,09h mov dx,offset Info int 21h mov ah,4ch int 21h Info DB 'TrIx$' ends end Start