;******************************************************************************; ; Little Blobs - 256 byte Intro for CONTEST'99 by A'rpi/Astral ; ;******************************************************************************; VAR: .ALIGN 4 .386 AL:=13H//BIOS ; Set 320x200x256 ; Set greyscale palette DX:=03C8H AX:=9000H // FS:=AX OUTAL ++DX LOOP(256+1) OUTAL//OUTAL//++AX ; CX=0 ; AL=1 ; DI=? CONST FRAME:DW=0 CONST _7:DW=4 ;-------------- y(x)=R/SQRT(x) -------------------- PRECALC BLOB TABLE! FINIT FILD DPT FRAME ; 70000H FLDZ ; x=0 DI:=0 @: FIADD WPT 1 ; x+=1 FLD ST//FSQRT ; ûx x R FDIVR ST,ST(2) ; R/ûx x R FISTP WPT [FS:DI] ++++DI ;DI+=2 JNZ @ ;FCOMPP ;-------------------------------------------------- ; CX=0 ; AL=1 ; DI=0 ES=0A000H --CX REP STOSB ;==============================================================================; GOLYO_DB=5 XX=5CH GOLYO_TABL=5Eh ; PSP, 1st FCB REPEAT ;=============== move blobs ======================== XOR EBX BP:=2*GOLYO_DB*4 WPT [BX+XX]:=10 @: FILD FRAME//FIDIV WPT [BX+XX]//FSIN//FIMUL 40 FISTP WPT GOLYO_TABL[BP-2] WPT [BX+XX]+=2 ----BP JNZ @ ++FRAME XSIZE=80 ;100 YSIZE=64 ;80 DI:=160-XSIZE + (100-YSIZE)*320 FORS CX:=-YSIZE TO YSIZE FORS DX:=-XSIZE TO XSIZE ^D=5 AX:=0 IF BPT[ES:DI]=AL AND BPT[ES:DI+^D]=AL AND BPT[ES:DI-^D]=AL AND BPT[ES:DI-^D*320]=AL AND BPT[ES:DI+^D*320]=AL THEN ^MEGVAN SI:=GOLYO_TABL @: AX:=[SI+4]//AX-=CX//IMUL AX,AX//[SI]:=AX AX:=[SI+2]//AX-=DX//IMUL AX,AX//[SI]+=AX SI+=8//IF SI8000h) BP+=FS:[EBX+EBX] ; AX+=1/SQRT(BX) JS ^MEGVAN ^SKIP: SI+=8//IF SI