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

    {
    From: sean.palmer@delta.com (Sean Palmer)

    >Here it is, the latest collection of VGA 80 character text modes. So fa
    >have been able to collect 14 text modes, 10 of them being actually usef
    >(i.e. 25x80 or larger). The plum in the pudding is a 60x80 character te
    >mode, for people who are really desperate to spoil their eyes. All the
    >modes should operate on standard VGA cards.

    Cool.

    >Have fun, and let me (or the newsgroup) know of any suggestions, bugs o
    >improvements you might have. I have heard rumours of x90 character mode
    >Anybody know about that? If it gets rid of the 1 pixel spacing between
    >character cells, wouldn't all the letters run together?

    No. They have 2 pixel gaps normally.

    Once you turn off 9th bit padding, you have to adjust the bios save data
    area appropriately or it freaks out.
    }

    const HorizParms:array[0..1,0..6]of word=
     (($6A00,$5901,$5A02,$8D03,$6004,$8505,$2D13),
      ($5F00,$4F01,$5002,$8203,$5504,$8105,$2813));

    procedure SetCharWidth(w:word); assembler; asm
     mov ax,$40; mov es,ax;
     mov dx,es:[$63];  {locate CRTC}
     mov al,$11; out dx,al; inc dx; in al,dx; dec dx;
     mov ah,al; mov al,$11; push ax; and ah,$7F; out dx,ax; {no write protect}
     mov bx,w; sub bl,8; neg bx; and bx,14; lea si,horizParms[bx];
     mov cx,7
    @L: lodsw; out dx,ax; loop @L;
     pop ax; out dx,ax; {restore write protect}
     mov dx,$3C4;   {sequencer}
     cli
     mov ax,$100; out dx,ax;
     mov bx,1; cmp byte ptr w,8; je @S; mov bx,$800; @S:
     mov ah,bl; mov al,1; out dx,ax;
     mov ax,$300; out dx,ax;
     sti
     xor dx,dx; mov ax,720; div w; mov es:[$4A],ax;  {set bios cols}
     end;

    var i:word;

    begin
     setCharWidth(8);
     writeln('Hellacious dude!');
     for i:=1 to 9 do write('!---------');
     readln;
     setCharWidth(9);
     writeln('Hellacious dude!');
     for i:=1 to 9 do write('!---------');
     readln;
     asm mov ax,3; int $10; end;
    end.

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