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


program multicolourtextscroll;
uses crt;
const sseg : word = $b800; hi = 16; wideness = 1;
  txt : string = 'Multicoloured smooth text scroller!   ';
  maxcols = 17; cols : array[0..maxcols] of byte =
    (8, 8, 8, 7, 8, 7, 7, 15, 7, 15, 15, 15, 7, 15, 7, 7, 8, 7);
var idx : word; i, cur, line, bitpos : byte;
    ccol : byte; colw : byte; ch : char;

procedure retrace; assembler;
asm
  mov dx,3dah;
  @l1: in al,dx; test al,8; jnz @l1;
  @l2: in al,dx; test al,8; jz @l2;
end;

procedure movecharsleft(startingrow : word); assembler;
asm
  push  ds;
  mov   ax,$b800;
  mov   ds,ax;
  mov   di,2
  @@MoveByte:
    add   di,startingrow;
    mov   al,[ds:di];
    sub   di,2
    mov   [ds:di],al;
    sub   di,startingrow;
    add   di,4
    cmp   di,160
  jl      @@MoveByte;
  pop   ds
end;

procedure movecolsright(startingrow : word); assembler;
asm
  push  ds
  mov   ax,$b800
  mov   ds,ax
  mov   di,161
  @@MoveByte:
    add   di,startingrow
    sub   di,4
    mov   al,[ds:di]
    add   di,2
    mov   [ds:di],al
    sub   di,startingrow
    cmp   di,0001
  ja      @@MoveByte
  pop   ds
end;


begin
  textattr := 7; clrscr; ccol := 1; idx := 1; colw := 0;
  repeat
    inc(colw);
    retrace;
    mem[$b800:hi*160+158] := ord(txt[idx]);
    movecharsleft(hi*160);
    if (colw > 1) then begin
      colw := 0; inc(ccol);
      mem[$b800:hi*160+1] := cols[ccol mod (maxcols+1)];
      movecolsright(hi*160);
    end;
    if not keypressed then idx := 1 + idx mod length(txt);
  until keypressed;
  while keypressed do ch := readkey; textattr := 7; clrscr;
end.

The push/pop ds might be superfluous... I don't know if you need them or not...
I'm just starting assembly, you know.  :^)
It's kinda like the one you made, but it doesn't lock up on my computer -- you
can't check port[$60] on XTs.  :^)
And in this, the colours move one way, and the text, the other.  It's kinda
distracting when you're trying to read the scroll, but oh well...
C-YA.


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