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

    Unit NEWFONT; {VGA Textfont & color changer. Source.}
            {
                    Version: 1.0 (Beta/not all mode tested)

                    Author: Nilton Castillo Albarrac¡n.
                            ncastill@araucaria.cec.uchile.cl
                            El Boldo 275 Est.Central Santiago Chile

                    Tested on a VGA card only. CardWare. Use at own risk!
                    I take no responsability of any damage that may occur
                    to your hardware. Currently I've tested only the modes with
                    CharSizeByte=16.
    -----------------------------------------------------------------------------
              SETRGB(color,R,G,B)  Sets the Red/Green/Blue values for the
                                   desired color (0 to 15).
                                   R, G & B go from 0 to 63.
    -----------------------------------------------------------------------------
              SetFont(filename:string;csb:byte)
                                   Loads a new font into memory.
                                   csb is the charsize of the font in bytes,
                                   it depends on the current graphical/text mode
    -----------------------------------------------------------------------------
              SETMODE(mode)        Sets the graphical/text mode
                                   Warning: Some modes may damage your monitor.
                                   Below is a listing of save modes.
    -----------------------------------------------------------------------------
              GetMode:word;        Get the current graphical/text mode
    -----------------------------------------------------------------------------
              Border (color);      Change the border color.
    -----------------------------------------------------------------------------

                     Mode     Alpha  Resolution Colors CharSize CharSizeBytes(CSB)
                     ------------------------------------------------------
                     $3(VGA)  80x25  640x350     16     8x16     16
                     $7(Vga)  80x25  720x400      2     9x16     18?
                     $7(Ega)  80x25  720x350      2     9x14
                     $50      80x30  640x480     16     8x16     16
                     $51      80x43  640x473     16     8x11     11
                     $52      80x60  640x480     16     8x8      8
                     $53     132x25 1056x350     16     8x14     14
                     $54     132x30 1056x480     16     8x16     16
                     $55     132x43 1056x473     16     8x11     11
                     $56     132x60 1056x480     16     8x8      8

                  These are 'save' modes to use, all VGA monitors should support
                  these modes. Higher modes may not be that kind to your monitor.

            Q: What is CardWare?
            A: It's like shareware: if you like it, send me a postcard.
               (with nice stamps on it! :) )

            Q: How do I make my own fonts?
            A: For textmode fonts, download EVAFONT.ZIP an editor by
               Pete Kvitek. It's excelent!
               For a font collection: Fntcol16.zip... many fonts, but no editor!

            Q: I need this to work for mode $10,$12 or $13 ...
            A: Email me, and I will send you some hints to make the fonts
               load in these modes...

            }
    interface
             procedure SetRGB (color:integer;r,g,b:byte);
             procedure SetFont(filename:string;csb:byte);
             procedure SetMode(Mode: word);
             Function  GetMode:word;
             procedure Border(color: byte);

    implementation
    uses DOS;
    var  FONT:array[0..4095] of byte;

    procedure Border(color: byte);
    begin
         asm
          mov AX,$0B00;
          mov BH,$00;
          mov BL,color;
          int 10h
        end;
    end;

    procedure SetRGB (color:integer;r,g,b:byte);
    begin
         if color>5 then    { this is to make color changes work with        }
              case color of { textcolor() & textbackground()...but why?      }
              6: color:=20; { note: for fast palette fadings use color 0 to 5}
              8: color:=56;
              9: color:=57;
              10: color:=58;
              11: color:=59;
              12: color:=60;
              13: color:=61;
              14: color:=62;
              15: color:=63;
              end;
        asm
          mov AX,$1010;
          mov BX,color;
          mov DH,R;
          mov CH,G;
          mov CL,B;
          int 10h
        end;
    end;

    procedure SETFont(filename:string;csb:byte); {ONLY for TextModes}
    var
      Regs : Registers;
      f:file;
      d:integer;
    begin
         assign(f,filename);
         reset(f,1);
         blockread(f,font,sizeof(font),d);
         close(f);

          regs.AH:=$11;
          regs.AL:=$0;
          regs.BH:=csb; {bytes per char}
          regs.BL:=0; {what is this? }
          regs.CX:=$254; {how many chars}
          regs.DX:=$0; {start at char code}
          regs.ES:=seg(font);
          regs.BP:=ofs(font);
          Intr ($10, Regs);
    end;
    procedure SetMode (Mode : word);
    begin
      asm
        mov ax,Mode;
        int 10h
      end;
    end;
    Function Getmode:word;
    begin
    getmode:=Mem[$0040:$0049];
    end;

    END.

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