[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]