program fraktal_3; { programmed by Kristian Peters (c) Copyright 1995-2004 Korseby released under the terms of GPL contact: kristian.peters@korseby.net web: http://www.korseby.net } uses crt; const origmode=0; var c,cc,j,k,i:integer; randomizer:byte; schnelligkeit:byte; ch:char; var cr,cg,cb:byte; {@def_asm} procedure setint(b:shortint); begin asm; mov ah,0 mov al,b int 16 end; end; {def_proc} procedure setpal(c:byte;r,g,b:shortint); begin port[$3C8]:=c; port[$3C9]:=r; port[$3C9]:=g; port[$3C9]:=b; end; {@def_proc} procedure setrgb(b:byte); begin if randomizer=1 then begin for c:= 1 to 41 do setpal(c+b*2,63,63 ,22+c ); for c:= 42 to 43 do setpal(c+b*2,63,63 ,63 ); for c:= 44 to 64 do setpal(c+b*2,63-(c-1)+42,64-(c*2)+22 ,63); for c:= 65 to 128 do setpal(c+b*2,42,c-65 ,63 ); for c:=129 to 169 do setpal(c+b*2,42-c-65,c-129 xor 63,c-129 xor 63); for c:=170 to 192 do setpal(c+b*2,42-c-129 xor 63,c-129 xor 63,c-193 xor 63); for c:=193 to 233 do setpal(c+b*2,23+c-193,c-193 ,0 ); for c:=234 to 256 do setpal(c+b*2,63,c-193 ,c-234 ); end; if randomizer=2 then begin for c:= 1 to 41 do setpal(c+b*2,63 ,22+c ,63); for c:= 42 to 43 do setpal(c+b*2,63 ,63 ,63); for c:= 44 to 64 do setpal(c+b*2,64-(c*2)+22 ,63 ,63-(c-1)+42); for c:= 65 to 128 do setpal(c+b*2,c-65 ,63 ,42); for c:=129 to 169 do setpal(c+b*2,c-129 xor 63,c-129 xor 63,42-c-65); for c:=170 to 192 do setpal(c+b*2,c-129 xor 63,c-193 xor 63,42-c-129 xor 63); for c:=193 to 233 do setpal(c+b*2,c-193 ,0 ,23+c-193 ); for c:=234 to 256 do setpal(c+b*2,c-193 ,c-234 ,63 ); end; if randomizer=3 then begin for c:= 1 to 41 do setpal(c+b*2,22+c ,63 ,63); for c:= 42 to 43 do setpal(c+b*2,63 ,63 ,63); for c:= 44 to 64 do setpal(c+b*2,63 ,64-(c*2)+22 ,63-(c-1)+42); for c:= 65 to 128 do setpal(c+b*2,63 ,c-65 ,42); for c:=129 to 169 do setpal(c+b*2,c-129 xor 63,c-129 xor 63,42-c-65); for c:=170 to 192 do setpal(c+b*2,c-193 xor 63,c-129 xor 63,42-c-129 xor 63); for c:=193 to 233 do setpal(c+b*2,0 ,c-193 ,23+c-193 ); for c:=234 to 256 do setpal(c+b*2,c-234 ,c-193 ,63 ); end; if randomizer=4 then begin for c:= 0 to 41 do setpal(c+b*2,63 ,63,22+c ); for c:= 42 to 43 do setpal(c+b*2,63 ,63,63 ); for c:= 44 to 64 do setpal(c+b*2,64-(c*2)+22 ,63-(c-1)+42,63 ); for c:= 65 to 128 do setpal(c+b*2,c-65 ,42,63 ); for c:=129 to 169 do setpal(c+b*2,c-129 xor 63,42-c-65,c-129 xor 63); for c:=170 to 192 do setpal(c+b*2,c-129 xor 63,42-c-129 xor 63,c-193 xor 63); for c:=193 to 233 do setpal(c+b*2,c-193 ,23+c-193 ,0 ); for c:=234 to 256 do setpal(c+b*2,c-193 ,63 ,c-234 ); end; end; {@def_asm} procedure wait(s:word); var ms:word; begin asm mov ax,1000 mul s mov cx,dx mov dx,ax mov ah,$86 int $15 end; end; {@def_main} begin setint(19); randomize; randomizer:=random(4)+1; cr:=random(3)+1; repeat cg:=random(3)+1; until cg<>cr; repeat cb:=random(3)+1; until cb<>(cr)and(cg); setrgb(origmode); for c:=0 to 181 do for k:=0 to 319 do mem[$A000:k+320*(c+1)]:=round(k+c*c/60); schnelligkeit:=8; i:=0; j:=random(2); ch:=#0; repeat if j=1 then inc(i); if j=0 then dec(i); setrgb(i); if keypressed then begin ch:=readkey; case ch of '+': if schnelligkeit>0 then dec(schnelligkeit); '-': if schnelligkeit<255 then inc(schnelligkeit); end; end; wait(schnelligkeit); until ch=#27; setint(3); end.