Как вариант:
program Matrix;
uses
Crt, Dos;
var
StdInt8: Pointer;
Sync: Boolean;
procedure Int8; interrupt;
begin
Sync := True;
asm
pushf
call StdInt8
end
end;
var
Buf: array[0..24, 0..79] of Word absolute $B800:0;
y, dy: array[0..79] of Integer;
c: array[0..79] of Word;
i: Integer;
begin
TextMode(CO80);
GetIntVec(8, StdInt8);
SetIntVec(8, @Int8);
for i := 0 to 79 do
begin
y[i] := 24;
dy[i] := 1;
end;
repeat
for i := 0 to 79 do
begin
Buf[y[i], i] := Buf[y[i], i] and not $800;
Inc(y[i], dy[i]);
if y[i] > 24 then
begin
y[i] := 0;
dy[i] := 1 + Random(3);
c[i] := Ord('0') + Random(2) + $A00;
end;
Buf[Random(25), Random(80)] := 0;
Buf[y[i], i] := c[i];
end;
while not Sync do;
Sync := False;
until KeyPressed;
ReadKey;
SetIntVec(8, StdInt8);
end.