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

    {
    I see so many messages of people wanting help on drawing in Mode 13H
    So mayB we can start a thread here for people that know as little as myself.

    Following is a complete program to place you in Mode 13H and to draw an
    object 100 times.

    My knowledge of ASM is very limited so mayB you would like to make some
    suggestions on how to do this faster & also how I should keep the object
    in memory in stead of using an array.
    BUT, for the beginners this should be a good start - I hope ??
    }

    Var
       X,Y,I    : Integer;
       Object1  : array[1..40000] of Byte;
       CH       : Char;

    Procedure SetMode13H;
      Begin
        ASM
          mov   ah,0
          mov   al,13H
          int   10h
        END
      End;

    Procedure DrwObj(X,Y,Width : Integer;Size : Word);
      Var
         ROWS : Byte;

      Begin
         ROWS := SIZE DIV WIDTH;
        ASM
          push    ds
          mov     ax,y         {  place X,Y in DI for startpos }
          mov     bx,320       {  " }
          mul     bx           {  " }
          add     ax,x         {  " }
          mov     di,ax        {  " }
          mov     ax,0A000H    { Mode 13h Screen Address }
          mov     es,ax        { into es }

          mov     AX, SEG object1;     { Let DS:SI point to Object 2 B drawn }
          MOV     DS,AX                {  " }
          MOV     AX, OFFSET OBJECT1   { " }
          MOV     SI,AX                { " }
         @DRAWROW:
          MOV     CX,WIDTH
          REP     MOVSB
          ADD     DI,320
          SUB     DI,WIDTH
          DEC     ROWS
          CMP     ROWS,1
          JNZ     @DRAWROW
          pop     ds
        END;
      End;

    BEGIN
      SetMode13H;
      For y := 1 to 100 do
        Begin
          For x := 1 to 20000 do
            Begin
              Object1[x] := x*Y;
              Object1[x+20000] := x*y+x;
            End;
            DrwObj(1,1,300,39900);
        End;
      Readln;
    END.

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