Vintage PC pages
Home -> Vintage PCs -> MDSI Genius Display

MDSI Genius Display

The MDSI Genius (or 'TheGenius', 'Genius VHR') display system is one of those things that seems to have left only the vaguest footprints in computing history: a full-page A4 display for IBM-compatible PCs, from the days when a top-end system had a 286 and EGA. The only reason I came across it was because a driver for it was included in the GEM/3 source tree.

Since I originally wrote this page, a manual and drivers for this card have surfaced and can be found at archive.org. I have updated this page to reflect the information in the manual.

The hardware

I don't have one of these cards; my information comes from the GEM driver source tree, disassembly of the Windows 1.04 driver GENIUS.DRV, the Interrupt List, a brochure for the card, the manual and a review of it in Volume 6 issue 10 of PC Magazine.

The latter source includes a picture of the original monitor, which looks exactly like an MDA monitor that's been stretched in the vertical direction.

The card has two ROMs. One appears to be used for address decoding; the other is a 27C64 EPROM containing the font.

VHR font

Memory Map

According to the review, there are three modes in which the card can be used:

Register I/O

Registers appear to be based on the standard MDA / CGA register set, with the following differences:

03B0h: CRT Control Register 2

The GEM and Windows drivers write 01h to this port to select the native graphics mode, 00h to return to text mode. They don't appear to do any sort of CRTC programming, which makes me think that perhaps this card doesn't have a reprogrammable CRTC — just a fixed set of timings.

The bits are defined in the manual as follows:

Bit 0: Set for MDS modes (66 lines text / 728×1008 graphics). 
       Clear for IBM-compatible modes (25 lines text / 640×200 graphics).
Bit 1: If set, 'blink' attribute selects the second half of the character set
       (characters 256-511 as seen in the ROM dump)
Bit 2: Set for MDS enhanced character attributes, cleared for IBM-compatible
       character attributes. Set with GMC /M; cleared by mode set or GMC /I.
Bit 3: Set for 8×15 character cell. Clear for 9×15 character cell.
Bit 4: Set for reverse video graphics. Clear for normal video graphics.
Bit 5: Set for reverse video text. Clear for normal. 
        GMC.COM (below) sets bits 4 and 5 to:
        00: Normal video
        01: 640x200 CGA-compatible graphics
        10: Reverse video
        11: 80x25 MDA-compatible text
Bit 6: Interrupt (IRQ2) at start of vertical retrace
Bit 7: Interrupt (IRQ2) at end of each line

If character attributes are IBM-compatible, the attribute byte is interpreted in a similar way to MDA:

Bit    7: Blink
Bits 6-4: Background (7 for reverse video, 0 for normal)
Bit    3: Bold
Bits 0-2: Foreground / underline (1 for underline, 0 for black, 7 for white)

With MDS enhanced attributes it is treated as:

Bit    7: Blink / extended character set
Bit    6: Alternate character set
Bits 5-4: Background colour (0=black 1=normal 2=dim 3=bold)
Bits 3-2: Foreground colour (0=black 1=normal 2=dim 3=bold)
Bits 0-1: Font effect (0=subscript 1=underline 2=superscript 3=normal)

03B1h: CRT Control Register 3

Bits 0-1: Character cell height
          00: 15 pixels
          01: 14 pixels
          02: 13 pixels
          03: 12 pixels
Bits 2-3: Always 0
Bit    4: Double height 
Bit    5: Double width
Bit    6: Always 0
Bit    7: No reset of scroll register. 

GMC.COM writes the following values to this port when selecting video mode:

00h: 66 lines text,  or GMC /H
81h: 70 lines text
83h: 82 lines text
90h: MDA-compatible, or GMC /S
93h: 41 lines text

03B4h-03B5h / 03D4h-03D5h: Emulated CRTC

GMC.COM and GMC_ANSI.SYS write to these CRTC registers:

0Ah: Cursor shape and blink rate (as on a real 6845):
	Bits 4-0: Top scanline
	Bits 6-5: Blink rate

03B8h: CRT Control Port 1 / MDA Mode Control Register

Only two bits of this register are used: Bit 3 (enable video) and bit 5 (enable blink). Bit 3 is set to 'enable' for text modes, 'disable' for graphics modes.

03D8h: Graphics Control Register / CGA Mode Control Register

Only bit 3 (Enable video) is used. Bit 3 is set to 'enable' for graphics modes, 'disable' for text modes.

The GEM and Windows video drivers access the mode control registers when switching in and out of the native graphics mode:

	mov	dx, 3D8h	;Graphics Control Register / CGA Mode Control
	mov	al, 8		;Enable display
	out	dx, al
	mov	dx, 3B8h	;CRT Control Port 1 / MDA Mode Control
	mov	al, 0		;Disable display
	out	dx, al
	mov	dx, 3B0h	
	mov	al, 1		;Switch to graphics mode
	out	dx, al

and when switching back to text mode:

	mov	dx, 3D8h	;Graphics Control Register / CGA Mode Control
	mov	al, 0		;Disable display
	out	dx, al
	mov	dx, 3B8h	;CRT Control Port 1 / MDA Mode Control
	mov	al, 8		;Enable display
	out	dx, al
	mov	dx, 3B0h	
	mov	al, 0		;Switch to text mode
	out	dx, al

In other words, to select graphics mode, disable the MDA display, enable the CGA display, and write 1 to 3B0h. To change back, disable the CGA, enable the MDA and write 0 to 3B0h. Windows skips enabling the MDA, and instead relies on a full mode set (INT 10h / AH=0) to re-enable it.

My guess is that enabling the MDA display shows the text framebuffer at B0000h, and enabling the CGA display shows the graphics framebuffer (either in native mode, or in CGA mode). The dual-head mode would then be achieved by enabling both displays simultaneously.

Driver

The Interrupt List documents a number of interrupts provide by VHRBIOS.SYS, a loadable driver which appears to serve as the card's BIOS ROM. It describes the driver as providing functions on INT 10h, including:

AH=0F0h
Installation check. Call with BX=0; returns BX=4F4Bh ('OK') if VHRBIOS.SYS is loaded. The Windows 1.04 driver checks that this call works before attempting to set the video mode. It does not appear to make any other calls to VHRBIOS.
AH=0F1h
Set reverse video. Call with AL=new video state; bit 5 set for black on white, clear for white on black.
AH=0F4h
Get driver version. Returns AX=driver version; AH=major, AL=minor.
AH=0F5h
Get vendor ID. Returns AX=4D44h ('MD'), BX=5349h ('SI').

This copyright registration also refers to a VHR_ANSI.ASM, the source code for a driver which (presumably) provides ANSI terminal emulation.

GMC_ANSI.SYS / INS_ANSI.SYS

What appear to be drivers for an MCA version of the card can be found at mpoli.fi. Two drivers are included which appear to be the equivalent of VHRBIOS.SYS: GMC_ANSI.SYS and INS_ANSI.SYS. The difference between them is that GMC_ANSI includes the full functionality of ANSI.SYS, while INS_ANSI (contrary to its name) is a minimal video BIOS with no support for ANSI escape codes.

Of the above calls, both drivers implement only AH=0F0h, but in different ways:

AH=0F0h (GMC_ANSI)
Installation check / disable mode changes. Call with BX=0, AL = 0 (enable mode changes) or AL nonzero (disable mode changes). Returns BX=4F4Bh ('OK') if GMC_ANSI.SYS is loaded.
AH=0F0h (INS_ANSI)
Installation check. Call with BX=0; returns BX=4F4Bh ('OK').

GMC.COM

GMC.COM is used to select the video mode. Its help screen does not list the full syntax, which is:

   GMC {mode{*}}{/options}

mode is one of:
OFF:  Disable Genius card, enable motherboard VGA 
ON:   Enable Genius card, disable motherboard VGA
IBM:  Select MDA-compatible text mode, 80 x 25 text
CGA:  Select CGA-compatible graphics mode, 640 x 200 graphics
DUAL: Select both of the above modes, displayed one above the other
MDS:  Select native mode, 66 text lines
M41:  Select native mode, 41 text lines
M70:  Select native mode, 70 text lines
M82:  Select native mode, 82 text lines

If mode is followed by a *, attempts to change the video mode with INT 10h / AH=00h will be ignored until the next time GMC is used.

options are:
0-6: Set cursor blink rate 
D:   Disable CGA-style graphics (implied by selecting MDA or native mode)
G:   Enable CGA-style graphics  (implied by selecting CGA or DUAL mode)
H:   Write 00h to port 03B1h    (single-height text; implied by selecting CGA, DUAL or MDS mode)
I:   IBM-compatible text attributes  (implied by selecting any mode)
M:   MDS extended text attributes
N:   Select black on white video
R:   Select white on black video (implied by selecting DUAL or native mode)
S:   Write 90h to port 03B1h     (double-height text; implied by selecting MDA mode)

John Elliott 27 November 2022