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

    {
    SEAN PALMER

    > I don't know if you'd be interested, but here's my version of a
    > direct-video writer: QWRITE.

    I've optimized it a little, if you're interested... 8)

    This is WITHOUT using inline ASM... I have routines that would put this
    optimized version to shame, in assembler....

    This runs 2290 times in the time it took yours to run 1754 times in a
    test I ran.

    I suggest removing the f and b parameters, and using the crt.textAttr
    variable so the user can set textcolor() and textbackground() before
    calling the routine and it'll come out ok, since you depend on crt
    anyway for the lastmode var... actually why not use wherex() and
    wherey() instead of passing THOSE as parameters too... hmm...
    }

    procedure qwrite(x, y : byte; s : string; f, b : byte);

    { Does a direct video write -- extremely fast.  <----hehehe
      X, Y = screen location of first byte;
      S = string to display;
      F = foreground color;
      B = background color. }

    var
      cnter  : word;
      vidPtr : ^word;
      attrib : word;

    begin
      attrib := swap((b shl 4) + f);
      vidptr := ptr($B800, 2 * (80 * pred(y) + pred(x)));
      if lastmode = 7 then
        dec(longint(vidptr), $08000000);
      for cnter := 1 to length(s) do
      begin
        vidptr^ := attrib or byte (s[cnter]);
        inc(vidptr);
      end;
    end;

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