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

    { DANIEL SCHLENZIG }

    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 EGAVGA SWAG index] [Back to Main SWAG index] [Original]