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

    {
    Ok, without even going back to my compiler I can improve yer design.  i
    forgot that on 386 and up that a mov [addr],al is faster than a single
    stosb etc, so that was likely my largest time deficit.  Yours is the
    Imul.  I'll add the color into mine, but I thought that passing up one
    less param MIGHT increase the speed slightly.
    }
    procedure Putstr(x,y:integer;s:string;attr:byte);assembler;
    asm
      push ds {that's all you really need}

      mov bx,y
      shl bx,1
      mov ax,bx
      shl bx,2
      add ax,bx
      add ax,$b800
      mov es,ax     { es:=$B800 + (Yx$80 + Yx$20) shr 4 or $B800+Y*$A }
      mov di,x
      shl di,1      { di:=x shl 1 }

      lds si,s
      mov cl,byte ptr [si]
      inc si
      mov ah,attr
    @1:
      mov al,byte ptr [si]
      mov word ptr es:[di],ax
      inc si
      add di,2
      dec cl
      jnz @1

      pop ds
    end;
    (*
      |    Mov AX,Col                  { Load Column to write to.              }
      |    Shl AX,1                    { Column = Column * 2.                  }
      |    Mov BX,AX                   { Copy AX to BX.                        }
      |    Mov AX,Row                  { Load Row to write to.                 }
      |    Mov CX,160                  { Row = Row * 160.                      }
      |    IMul CX
      |    Add AX,BX                   { Offset = (Col * 2) + (Row * 160).     }
      |    Mov DI,AX

    ugh, comments.  You freaking PD coder, you.  You probably like windows
    too huh?  This is the only section that I have improved on yer design.
    I only discovered the optimize cause I was writing a faster putpixel.

    Questions/comments:

        Xor CH,CH

    You don't need this line at all.  that's 2 opcode tiks for me.
    (ahhhh, obsessed)

    Is "mov cl, byte ptr ds:[si]" any slower than "mov cl,[si]" ?

    I know that "add di,2" is faster than "inc di;inc di" and
    "dec cl" is better than "dec cx" and
    "xor cx,cx" is faster than "mov cx,0"

    GE|BEGIN
      |  Start := ReadTimer;
      |   FOR X := -MaxInt TO MaxInt DO
      |    FastWr(40,5,2,'Greg Estabrooks!');
                           ^^^^^^^^^^^^^^,
    see that's the problem right there.  It should read: 'Jamie - coder god'

    The only differences between our code:
      I used lodsb/stosw out of lasyness.
      You used xor ch,ch
      You used imul where I did shifts ( faster, but not the slowest part of
                                         the code, so not a big deal )
    *)

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