Poprask by Řrřola [web]
; Poprask
; a 32-byte intro by Rrrola <rrrola@gmail.com>
; greets to everyone who thinks 32 bytes are not enough
; Why:
; I wanted to make a variation of Blake 32 (45-degree turns,
; [x,y] -> [x+y, y-x]) with a Zima-like nonlinearity.
; In the end I couldn't find a way to restrict all colors
; to 16..31 while keeping the nonlinearity, but it was fun.
; What is it:
; A recursive feedback fractal.
; The function is [x, y] -> [x + y*(y-x) + t, y - x + t/256].
; The blocking shape is two right triangles.
org 100h ; assume ah=0 bx=0 bp=09?? [0]=20cd [2]=9f??
mov al,0x13
int 10h ; 320x200, 256 colors
M les si,[bx] ; si=20cd(iteration) es=~9fff(screen segment)
mul di ; dh=y dl=x
L mov al,dh
sub dh,dl
mul dh ; y*(y-x)
sub dx,bp ;<- add time, can be anywhere between L and dec
; (can modify the blocking shape)
add dl,ah ; cf = blocking shape hit?
dec si ; zf = last iteration? (si==0)
; inc si ; inverse colors
jnbe L ; end when blocked (cf) or last iteration (zf)
xchg ax,si
add ax,0xac53 ; al=0x1f-i ah=0xcd, close enough to 0xcccd
; add ax,0xac42 ; al=0x10+i ; inverse colors
stosb
; You can save 1 byte, but the starting time will be random:
; use "sub dx,[fs:0x46c]" instead of "sub dx,bp"
; and remove these lines:
loop M ; do 65536 pixels before hlt (18.2 fps)
hlt
dec bp
jmp M[ back to the prod ]
