[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]
{
BERNIE PALLEK
>Would anyone happen to know how I can use the ASCII Characters
>while in Video mode $13 (320x200x256)? Or better yet, make a message
>scroll across the screen like in them neat intros and demos..
The easiest way to do it is to set DirectVideo to False (if you are using
the Crt Unit). This disables direct Writes to the screen, meaning that
the BIOS does screen writing, and the BIOS works in just about every
screen mode. Then, you can just use Write and WriteLn to display Text
Characters (I think GotoXY will even work). As For scrolling...
Since mode 13h ($13) has linearly addressed video memory (just a run
of 64,000 contiguous Bytes), do something like this:
this is untested, but it might actually work :')
}
Uses
Crt;
Const
msgRow = 23;
waitTime = 1; { adjust suit your CPU speed }
myMessage : String = 'This is a test message. It should be more ' +
'than 40 Characters long so the scrolling can be demonstrated.';
Var
sx, xpos : Byte;
Procedure MoveCharsLeft;
Var
curLine : Word;
begin
{ shift the row left 1 pixel }
For curLine := (msgRow * 8) to (msgRow * 8) + 7 DO
Move(Mem[$A000 : curLine * 320 + 1], Mem[$A000 : curLine * 320], 319);
{ clear the trailing pixels }
For curLine := (msgRow * 8) to (msgRow * 8) + 7 DO
Mem[$A000 : curLine * 320 + 319] := 0;
end;
begin
Asm
MOV AX, $13
INT $10
end;
DirectVideo := False;
GotoXY(1, msgRow + 1);
Write(Copy(myMessage, 1, 40));
{ 'myMessage' must be a String With a Length > 40 }
For xpos := 41 to Length(myMessage) do
begin
For sx := 0 to 7 do
begin
MoveCharsLeft;
Delay(waitTime);
end;
GotoXY(40, msgRow + 1);
Write(myMessage[xpos]);
end;
Asm
MOV AX, $3
INT $10
end;
end.
{
This may not be very efficiently coded. As well, it could benefit from
an Assembler version. But it should at least demonstrate a technique
you can learn from. }
[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]