program stars; const maxstars = 200; var star : array[0..maxstars] of word; speed : array[0..maxstars] of byte; i : word; procedure create; begin for i := 0 to maxstars do begin star[i] := random(320) + random(200) * 320; speed[i] := random(3) + 1; if mem[$a000:star[i]] = 0 then mem[$a000:star[i]] := 100; end; end; Procedure moveit; assembler; asm xor bp,bp mov ax,0a000h mov es,ax lea bx,star lea si,speed mov cx,320 @l1: mov di,[bx] mov al,es:[di] cmp al,100 jne @j1 xor al,al stosb @j1: mov al,[si] xor ah,ah add [bx],ax mov ax,bx xor dx,dx div cx mul cx mov dx,bx sub dx,ax cmp dx,319 jle @j3 sub [bx],cx @j3: mov di,[bx] mov al,es:[di] or al,al jnz @j2 mov al,100 stosb @j2: add bx,2 inc si inc bp cmp bp,maxstars jle @l1 end; begin asm mov ax,13h int 10h call create @l1: mov dx,3dah @r1: in al,dx test al,8 je @r1 call moveit in al,60h cmp al,1 jne @l1; end; end.