[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]