Q44273: Facts About MSHERC.COM; Why Hercules Support Must Be TSR

Article: Q44273
Version(s): 1.00 1.01 2.00
Operating System: MS-DOS
Flags: ENDUSER | s_c
Last Modified: 31-MAY-1989

MSHERC.COM is a TSR (Terminate and Stay Resident) graphics driver that
is supplied with Microsoft QuickC, QuickBASIC, and the C Compiler. It
provides high-resolution graphics capability (720 x 348, 2 colors) for
the popular Hercules graphics adapter. MSHERC.COM was written in-house
at Microsoft, and first shipped as QBHERC.COM with QuickBASIC. It is
provided, in compiled form, with the above-mentioned packages, and may
be distributed by programmers writing market applications with one of
these languages.

Four of the most common questions regarding MSHERC are as follows
(this question is usually generated by one of the following three):

1. Is the source code available? Under no circumstances. Releasing the
   source code for MSHERC would limit the development team's ability
   to change the application for increased efficiency at some time in
   the future (implementation change, with the user interface kept as
   it is).

2. Why can't Hercules support be done with a BIOS call, like any other
   video support?

   The Hercules card is not part of the IBM standard. There is no BIOS
   support. The card is easily programmable, and the manuals that
   ship with a TRUE Hercules card explain in detail how to program for
   the card. Clone cards frequently do not provide this information.
   The MSHERC driver does the translation for the card, in a fashion
   that is transparent to the user.

3. Can I build MSHERC into my program, so that I don't have to ship
   the driver with my program?

   No. The reason that this is a common question is that most
   individuals don't realize that the driver is an active TSR, and not
   just a sequence of initialization code for the Hercules Card. It
   would be possible to build this support into each of the routines
   in the graphics library, but it would involve quite an increase in
   the size of each routine, since every time that a routine did a
   BIOS call for graphic output, an alternate jump would have to be
   added to a routine that performed the same operation via the
   Hercules card. To build in this functionality would require the
   rewriting of many graphics functions. Although the run-time source
   to C 5.10 is available, this does not include any of the graphics

4. Can I use the System or spawn commands to call MSHERC from within
   my program, so that I don't have to load it independently?

   No. The C and QuickC compilers do memory initialization at start-up
   time. At this time, memory that has been allocated through DOS
   (such as a device driver or TSR program) is passed to the compiler.
   Going back to DOS via a System call and loading a TSR is a very
   risky proposition, because the compiler will have no knowledge of
   this operation. Possible consequences include memory fragmentation,
   memory overwrites, and hanging. Also, the hardware configuration
   is checked during start-up initialization. Therefore, after
   start-up has confirmed that no Hercules card is present, loading
   MSHERC.COM would not do any good.