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.

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 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.

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: Select graphics mode

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.

GMC.COM (below) accesses the following bits of this register:

Bit    2: Set with GMC /M. Cleared by mode set or GMC /I.
Bits 4-5: Values are:
           00: Normal video
           01: 640x200 CGA-compatible graphics
           10: Reverse video
           11: 80x25 MDA-compatible text

My guess at the meanings of these bits is:

Bit    0: Set to map the full graphics framebuffer into memory.
Bit    2: Possibly connected with the '512-character font' that the brochure
         advertises? 
Bit    4: Set for CGA-compatible graphics, clear for native graphics
Bit    5: Set for reverse video (black text on white). Clear for normal. 

03B1h: Written by GMC.COM

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

My interpretation: Bits 0-1 are character cell height
00: 15 pixels
01: 14 pixels
02: 13 pixels
03: 12 pixels

Bit 4 is set to double scanlines. I don't know the purpose of bit 7.

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 / 03D8h: MDA and CGA Mode Control Registers

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

	mov	dx, 3D8h	;CGA Mode Control
	mov	al, 8		;Enable display
	out	dx, al
	mov	dx, 3B8h	;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	;CGA Mode Control
	mov	al, 0		;Disable display
	out	dx, al
	mov	dx, 3B8h	;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:   Clear bit 2 of port 03B0h  (implied by selecting any mode)
M:   Set bit 2 of port 03B0h
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 18 March 2017