Beta Vibrant driver
No, I wasn't offended per se. I was, however, making a quite serious
suggestion. Unlike some others here, we don't have the time or sufficient
discretionary funds to play around, make jokes, discuss politics or how neat
the pizza is in New York or what have you, in this Forum. When we make a
posting here, it's of serious intent.
Windows does not permit any graphics DOS program to run within a window or
to multitask effectively. Text-only DOS programs work reasonably well under
Windows, but going into ANY graphics mode, even CGA, let alone VGA or VESA, let
alone the numerous non-standard SVGA modes out there, means the program will
come to a screeching halt if you put it in a window.
The ONLY way to allow 3D Studio to run in the background under Windows in
such a way that you can visually monitor its progress and still see your other
applications, is for someone to write either an RCPADI or an Inline driver that
supports VGA's extended text modes. 80×34 is the minimum, but any VGA card can
go to 80×50.
Basically, any VGA card has three fonts in its character generator (not
counting code pages): 8×8 for CGA emulation, 8×14 for EGA emulation, and 8×16
for VGA. Normal VGA text mode has a 640×400 pixel resolution, but the pixels
are not individually addressable — they are only used to build the characters,
and are under the control of the character generator ROM only. CGA text mode
is 640×200. EGA is 640×350. Simple math shows that 200 scan lines divided by
25 rows of text equals 8 scan lines per character row for CGA. 350 scan lines
divided by 25 rows of text equals 14 scan lines per character row for EGA. 400
scan lines divided by 25 rows of text equals 16 scan lines per character row
for VGA.
EGA cards include their own 8×14 font, as well as the 8×8 CGA font for
emulating its modes. By using the 8×8 font in the EGA's 640×350 text mode, you
get 350 / 8 = 43 rows of text instead of 25. You can get to that mode on
either an EGA or VGA card by typing "mode 80,43" at a DOS prompt (if you have
ANSI.SYS loaded).
VGA cards can duplicate that function of EGA, or they can use the CGA's 8×8
font in the VGA's 640×400 text mode to provide 400 / 8 = 50 rows of text. Or
they can use the EGA's 8×14 font in VGA's 640×400 text mode to provide 400 / 14
= 28 rows of text. Those are the standards supported on every VGA card made.
VGA cards can support up to 480 scan lines, so by going 640×480 instead of
640×400, direct programming of a VGA card can yield 80×30 VGA 16-line
characters, 80×34 EGA 14-line characters, or 80×60 CGA 8-line characters. To
see all of these in action, try the various Display modes in the DOSSHELL
program that comes with MS-DOS 5, and on the supplemental utilities disk
available for MS-DOS 6.0 or 6.2.
If 80×34 is all 3DS's UI requires, then you could support 80×43 mode (CGA
font in EGA 640×350 text mode), and not only would this allow 3DS to run as a
slave under Windows, but it would also allow 3DS to run as a slave on an
EGA-equipped machine (to save money on a rendering farm)! Of course that's not
a consideration anymore, since EGA cards are no longer made, and basic VGA
cards are available for as low as $9. It might be better to go with 80×50 (CGA
font in VGA's 640×400 text mode), as Windows has better support for that, even
if 3DS's UI doesn't require that many rows.
I'm going to go out on a limb here and speculate about the nature of 3DS
video drivers. I'm assuming that they are low-level, but not extremely so —
they can accept commands of somewhat higher level than "Set this pixel to this
color." I'm assuming they can accept commands as high-level as "Draw a
character at this location" or even "Draw a string of characters starting at
this location" as well as "Draw a line from here to here" and "Fill a
rectangular area between these two opposing corner points with this particular
color." I base this on the fact that dialog boxes do indeed pop up faster on
GUI-accellerator chipset cards, and rectangle fills are one of the things
greatly speeded up by such cards which dialog boxes could take major advantage
of. I base the bit about drawing strings and/or characters on the fact that
your drivers allow the user to specify which font to use from a nice variety of
supplied fonts. I notice that not all of those fonts are true monospaced fonts
— the "BLOCK##" fonts (as oppposed to the "BLOCK##x##" fonts) do appear to be
proportionally- spaced, but 3DS still draws them as monospaced (watch how the
characters line up in neat columns in the menus even when one of those fonts is
selected).
Apparently, 3DS can specify the location to display text on a pixel basis,
so that the text need not line up on standard character boundaries. This does
complicate matters somewhat, but not that much — one can simply round to the
nearest whole character position. If 3DS says "display this string starting at
location 33,19 (with the origin being 0,0 in the upper left corner), the text
driver can round both of those coordinates to the nearest multiple of 8
resulting in (32,16), and then divide by 8 to get the actual character
coordinates (4,2 — fifth character column over from the left, three rows down
from the top, since we start at 0,0).
Drawing horizontal and vertical lines is more involved, but basically
involves knowing when to use the "-" character (Extended ASCII 196) and when to
use "|" (Extended ASCII 179) and when to use the various corner and connector
characters for single lines (+, +, +, +, -, +, -, |, and +). This means
knowing what character is already at a location before putting a new character
there. If a "-" is at a location and you are told to draw a vertical line
through that location, when you get there you will need to put a "+" there
instead of a "|". Figuring corners and partial connects would be more involved
still: basically, it involves looking at the cells adjacent to the cells you
are drawing through. If a cell to the left of one where you plan on putting a
"|" has a "-" then you would put a "|" in the cell just to the right of the
"-", where you would normally have put a "|", and so on. If this is at the
bottom endpoint of your vertical line, you would put a "+" there instead.
Filling rectangles with color involves the characters " " (space, 32), "_"
(full block, 219), "-" (? block bottom, 220), "|" (? block left, 221), "|" (?
block right, 222), and "-" (? block top, 223). Because ? blocks are available,
rectangles can usually be filled to a ?-cell resolution, rather than a
full-cell (unfortunately, no ? or 3/4-block characters are available for
corners, as they are in the Commodore 64's character set). Anyway, this should
more than suffice for the status bar, dialog boxes, etc.
Diagonal lines would be ignored, as would commands to draw icons for the
icon buttons in the lower right corner, etc. After all, the intent here isn't
for making the UI actually usable, but rather simply to provide a rough
facsimile so that network rendering can take place in text mode.
I really don't see what's so hard about this, or why it would be so
impractical. I could probably do it myself as an RCPADI if I had access to the
Protected-Mode ADI SDK, which I don't.