Vga Fonts

 BBS: Inland Empire Archive
Date: 07-03-92 (22:39)             Number: 2016
From: MIKE KELLY                   Refer#: NONE
  To: BRUCE GROEN                   Recvd: NO  
Subj: Vga Fonts                      Conf: (2) Quik_Bas
In a message of <Jul 02 16:35>, Bruce Groen (1:300/21) writes:

Bruce,

If you want to keep up, you must read _every_ message in
this echo (apologies to all others for repeating this
code:)

 >Could someone post some code showing how to change the VGA font
 >from QB?  I am assuming you would do it with interrupts but I am
 >not sure.  And how do you create a font?  Does the font have to be
 >a separate file or can it be within your program?  As you can see I
 >am new to this type of thing.  I just got a VGA monitor and want
 >to be able to take advantage of it when I program.  Thanks for any
 >help you can give.


' Load with /L command line option
TYPE regtypeX
  ax    AS INTEGER
  bx    AS INTEGER
  cx    AS INTEGER
  dx    AS INTEGER
  bp    AS INTEGER
  si    AS INTEGER
  di    AS INTEGER
  flags AS INTEGER
  ds    AS INTEGER
  es    AS INTEGER
END TYPE

DECLARE SUB InterruptX (i AS INTEGER, a AS regtypeX, b AS regtypeX)
DECLARE SUB LoadFont (DisplayType$)
DECLARE SUB ReSetFont (DisplayType$)

DisplayType$ = "VGA"   ' or "EGA" or "MCGA"
LoadFont DisplayType$
CLS
PRINT "     Cyrillic High-bit Character Set (code page 863)"
PRINT
FOR x% = 128 TO 255
  PRINT x%; CHR$(x%); " ";
  IF (x% + 1) MOD 8 = 0 THEN PRINT
NEXT
q$ = INPUT$(1)
ReSetFont DisplayType$

SUB LoadFont (DisplayType$)
  SELECT CASE DisplayType$
    CASE "EGA"
      CharBytes% = &HE00
      font$ = "cyrillic.ega"
    CASE "VGA", "MCGA"
      CharBytes% = &H1000           ' BH = Number of bytes/character
                                    ' BL = Block to load in map 2
      font$ = "cyrillic.vga"
  END SELECT
  DIM reg AS regtypeX               ' Standard DIM
  font1% = FREEFILE                 ' No duplicate problems!
  OPEN font$ FOR BINARY AS #font1%  ' Open font file for easy access
  total% = LOF(1)                   ' Total file size
  t$ = STRING$(total%, 32)          ' Define as string for the font
  GET #1, , t$                      ' Get the font
  CLOSE #font1%                     ' Close the file
  reg.ax = &H1100                   ' AH = &H11
                                    ' AL = 0 - load user font
  reg.cx = &H80                     ' Number of chars to load (256)
  reg.bx = CharBytes%
  reg.dx = &H0                      ' DX = Offset into map 2 block (0)
  reg.es = VARSEG(t$)               ' Pointer to user table
  reg.bp = SADD(t$)                 ' Pointer to user table
                                    ' PDS uses ?VARPTR?
  InterruptX &H10, reg, reg         ' CALL Interrupt 10
  reg.ax = &H1103                   ' AH = &H11
                                    ' AL = 3- Set block specifier
  reg.bx = 0                        ' BL = Block to load
  InterruptX &H10, reg, reg         ' CALL Interrupt 10
  t$ = ""                           ' Free up some memory
END SUB

SUB ReSetFont (DisplayType$)
  SELECT CASE DisplayType$
    CASE "EGA"
      ROMfont% = 1                  ' 8x14 ROM font
    CASE "VGA", "MCGA"
      ROMfont% = 4                  ' 8x16 ROM font
  END SELECT
  DIM reg AS regtypeX               ' Standard DIM
  reg.ax = &H1100 + ROMfont%        ' AH = &H11, AL = ROM font to load
  reg.bx = &H0                      ' BL = Block to load
  InterruptX &H10, reg, reg         ' CALL Interrupt 10
END SUB

You can do this as data within your program, but an
external file is 10 to 1000 (or more [slight exaggeration,
perhaps, eh, no flames, ok?]) times faster depending on
your CPU/HD.

Mike




--- QM v1.00
 * Origin: Russian House, Portland, OR, USA (1:105/23.48)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET