Okay, I would suggest the following:
You can change the Write() function in SuperFastConsole as follows:
function TSuperFastConsoleStream.Write(const ABuffer; ACount: longint): longint;
var
LNumberOfCharsToWritten: longword;
LStdHandle: HANDLE;
BufChar: PChar; // <--- add this variable
begin
LNumberOfCharsToWritten := 0;
LStdHandle := GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(LStdHandle, TextAttr);
WriteConsole(LStdHandle, @ABuffer, ACount, LNumberOfCharsToWritten, nil);
Result := LNumberOfCharsToWritten;
// add the following
BufChar := @ABuffer;
Inc(BufChar, ACount - 1);
if BufChar^ = #10 then
GotoXY(WindMinX, WhereY32);
end;
When you do a Writeln() there is always a #10 printed at the end. In Write() you can check for this #10 and if so you can set the new cursor position at the new line (the linefeed is already done) at the first position of the Window (which is WindMinX).
The only problem would be if you did something like this:
Writeln('This is a test' + #13 + #10 + 'This is line 2');
(but my expectation is that you don't use #13+#10 in strings yourself.)
If you do have #13+#10 in your strings you need to split them in write() and write them individual to screen with the correct gotoxy between them.
This also doesn't scroll and wrap automatically within the given window (which crt does). If you want the scrolling and wrapping you'll need to expand the superfastconsole a whole lot more to mimic crt.