The CRT Displays

The 9845 CRT display is directly connected to the mainframe through a digital interface without any intermediate cable. This makes monitor positioning a bit less flexible compared to a standard PC (monitor position is fixed). Moreover, the connection interface is completely proprietary, so it isn't possible to connect anything but an HP 9845 monitor. All video signals are generated inside the monitor, the interface to the computer is completely digital, comparable to DVI in contrast to VGA. In principle, there was a special RGB interface (product no. 98776A), however this device is very rare and will be extremely hard to find.

The display system consists of four parts:

The display system can operate in two modes, the alpha mode and the graphics mode.

The Alpha Display

In alpha mode, all display information is stored as characters in the alpha memory buffer, a part of the PPU R/W memory. The buffer can be directly written both by the PPU and the LPU. Any display operation in alpha mode is done by just writing to the alpha memory buffer, which is located in the PPU R/W memory block 1 at octal address 70000 for the standard display and 60000 for enhanced monochrome and color displays. The alpha display controller reads out the alpha memory buffer 60 times in a second. The character information is decoded and transferred as 16-bit data (8-bit character information, and 7-bit attribute information plus one control bit) via the connector in the left monitor leg to the CRT monitor circuits with the required timing. The CRT monitor circuit takes the data from the alpha control assembly and converts those information with the help of a character ROM to compose the current scanline (each character provides 9 horizontal pixels to a scanline).

Each character is made up of the following bits:

Character Info

where

I0..I6 ASCII character code between 0 and 127
CS Character set select: 0 = standard set, 1 = foreign characters
CUR Cursor
IV Inverse video
B Blinking
UL Underline
RDA Red color (98770A only)
GRA Green color (98770A only)
BLA Blue color (98770A only)
Ctrl Control bit

When set, the control bit instructs the alpha logic to process the data word not as character but as command (similar to a display list). There are three commands:

Alpha Commands

where an X designates arbitrary contents.

The End-of-Line command is intended for efficient use of the refresh buffer. When a "character" word of this format is read, the next character word is assumed to be at the beginning of the next line (same as CR/LF).

The New Address command is used to re-position the character pointer to another memory address. When a "character" word in this format is read, the next character word is assumed as the new memory address. This feature can be used to skip portions of the refresh memory (or even loop through the refresh memory).

The No Operation command specifies that the character word should be ignored.

The first word at address 70000 for the 98750A standard CRT monitor or address 60000 for the 98770A and the 98780A has a special meaning. For the 98750A, bit 15 of this word toggles between alpha and graphics mode (if set, graphics mode is enabled). For the 98770A or the 98780A monitor, bit 15 switches the graphics mode on, and bit 14 the alpha mode (so both modes can be operated in parallel). The remaining 14 bits specifiy the first address of the next character word. This feature enables a "windowing" capability: Since an efficiently managed refresh buffer can store much more content than a display can hold, a text window can be used to move along the buffer (including scrolling) without the need to re-write the display data, just by re-positioning the pointer at address 60000 or 70000, respectively.

The CRT unit takes over the attributed character information and generates characters from a character ROM on the scanlines of the display. The alpha display provides 25 lines of 80 characters each on a 720 x 375 dot raster for the 98750A display and 28 lines of 80 characters each on a 720 x 420 dot raster for the 98770A and the 98780A displays.

Normally, the 9845 alpha display is split into several areas:

The 98770A and 98780A displays add three more lines:

However, this separation is specific for BASIC programs and has nothing to do with the underlaying alpha control logic, except that a split alpha display including separate scroll areas is easy to implement by using the New Address alpha logic command. Programs not implemented in BASIC can easily overcome this artificial restriction.

The Graphics Display

The graphics subsystem is placed inside the monitor and directly connected to the IOD bus through a connector in the right monitor leg. The graphics subsystem is controlled by a seqence of commands, which are sent to the graphics system from the PPU via the IOD peripheral bus.

For the graphics hardware, the following commands are supported:

Graphics
Primitive
Mnemonic Attributes Parameters Operation Opcode
Standard Enhanced
Monochrome
Color
write pixel   INT, DMA word address, bit address, value
Writing individual pixels
11 n/a n/a
write words MWC INT, DMA word address (standard only), data
Writing full words
10 10 00
read words MRC INT, DMA word address (standard only), data
Reading full words
14 11 01
  LXC n/a X coordinate, cursor type
X cursor position
04 17 17
  LYC n/a Y coordinate, cursor color
Y cursor position
n/a 16 16
    n/a Y coordinate
Y position (small blinking)
00 n/a n/a
    n/a Y coordinate
Y position (full-screen)
01 n/a n/a
    n/a Y coordinate
Y position (small horizontal)
02 n/a n/a
set line type/area fill SLT INT, DMA repeat factor, line type/area fill select, line type/area fill pattern
Setting line types
n/a 06 13
load memory control SMG INT, DMA dominance, erase/write, enable
Loading memory control
n/a 12 12
load end points LEP INT, DMA move/draw, end point[, rubber band*]
Specifying and points for drawing vectors
n/a 01 15
load I/O address   INT increment, y line address, increment, x pixel address
Loading (X,Y) I/O address
n/a 07 n/a
load X I/O address LXA INT, DMA word address
Loading X I/O address
n/a n/a 10
load Y I/O address LYA INT, DMA word address
Loading Y I/O address
n/a n/a 11
clear words   INT, DMA word address, dummy data
Clearing full words
12 n/a n/a
fast clear   INT ?
Filling and clearing the screen
n/a 15 n/a
clear/set words   INT, DMA dummy data
Clearing and setting full words
n/a n/a 02
load color mask   INT, DMA color mask
Loading color mask
n/a n/a 04

* A special feature is the rubber band/drag function. The idea behind is to provide means for lines which are drawn without destroying the current background image, similar to the Sprites concept. However, the overlay isn't built from a bitmap but from an arbitrary vector object. Rubber band is a line with a fixed start point and a moveable end point (ideally in combination with a light-pen or graphics tablet device). The mechanism works with multi-vector objects and can be used to move ("drag") even more complex objects in non-destructive manner over the screen. So this feature can be used to implement drag-and-drop funtionalities for graphical user interfaces. The feature is implemented in hardware for the 98780A enhanced monochrome display only and can support objects with up to 4095 pixels, which is more than enough to implement a full-screen selection-type square rubber band. There is a software emulation for the rubber band feature (without support for multi-line objects) for the 98770A color display requiring either a special binary routine (RUBBND) or an Enhanced Graphics option ROM.

Most graphics primitives consist of a command part with following graphics data, e.g. a "write pixel" command with a following list of pixel coordinates. In general, the PPU first allocates a memory buffer in its R/W memory, writes all the pixel coordinates into that buffer and then sends the "write pixel" command via IOD bus to the graphics subsystem, ideally with DMA enabled. The graphics system then fetches all the pixel data from the buffer and sets the graphics pixels accordingly while the PPU may already fill another buffer with new pixel data.

The graphics display uses a different part of the screen. The alpha dislay is optimized for using the full horizontal width whereas the graphics display area should use as much of the whole display as possible. So for graphics a modified raster of 560 x 455 pixels is used.

The graphics memory is located inside the CRT monitor and can be accessed via one of the graphics primitives. For the 98750A standard display, all pixel data is written with "write pixel" command. The 98770A and 98780A displays offer more sophisticated vector drawing and area fill commands, which speeds up graphics by a factor of 50. Alternatively, for all displays the graphics memory can be more directly accessed via the "read word" and "write word" primitives, ideally with DMA activated. This is the way how screendumps are generated. Unfortunately, the vector engines in the 98770A and 98780A can be active only during the retrace phases, when the graphics buffers are available for writing. Modern system would use dual-ported RAM or double-buffering, both techniques which would have been too expensive for the 9845.

All graphics pixels are represented as bits in a 16 kWord graphics buffer. Each graphics line is made up of 520 bits or 35 words. Color information in the 98770A is done by combining three separate buffers (memory planes). So each pixel consists of three bits which can select one of eight possible colors. Each memory plane can be freely assigned to any of the eight primary colors (black, red, green, blue, magenta, cyan, yellow and white) via a look-up-register, the so-called "musical memories". The color information of each memory plane is triggered by the particular bit in each memory plane, and the color information of each plane is or'ed to the final color (see the 9845C section for details).

Common Features

Alpha mode and graphics mode can be enabled at the same time only with the 98780A enhanced monochrome display or the 98770A color display, not with the 98750A standard display.

The whole system was quite sophisticated for the time, and flexible enough to support different types of monitors through the same connection (98750A standard monochrome, 98780A enhanced monochrome, 98770A color monitor). The enhanced and the color monitor had a very special feature, a vector generation hardware. The vector engine was built for the 98770A by a bit-slice processor - a quite popular type of implementation for hardware accelerated graphics, and for the later 98780A with a custom chip.

The 98750A standard monitor required an optional graphics module for graphics capability. The 98770A color monitor was a bit delicate, it had its own highly complex PSU and color convergence had to be adjusted via 39 (!) potentiometers. Both the 98780A enhanced monochrome monitor and the 98770A color monitor had integrated soft-keys and could be equipped with light-pen logic. Both the soft-keys and the light-pen could be traced with additional commands via the IOD interface. Today those monitors, if your're lucky enough to acquire one, mostly suffer from a defective PSU (which was even more complex than the one for the option 200 mainframes).

In principle, all monitors should be compatible with all mainframes, except that some specialities of a monitor might not be used accordingly due to different display firmware. You should better not combine the 98780A enhanced monochrome CRT with a standard 9845B, since the 98780A will take too much power from the standard PSU (the 98780A is intended to operate in combination with the enhanced option 200 PSU).

In principle, the alpha control assembly should be the one that suits to the monitor, especially for driving the graphics and alpha enable signals. Another point is that the Color and Enhanced Graphics option ROMs assume the refresh memory at the address 60000, not at 70000, which must also match with the appropriate type of alpha control assembly. However, I've never tried, and I'll probably never do (those instruments are too valuable for me to do such kind of testing).

The 9845 mainframe senses the presence of a monitor through the vertical retrace signal, which is passed through the monitor connectors to the processors (DC/ flag for the 9845A and HLT/ flag for the 9845B/C). Once this signal is missing, the mainframe won't start up correctly (instead a repeated beeping sound is generated).

The RGB Interface

The original design of the 9845C did not include means for providing the CRT signal towards other monitor devices. The 9845C CRT monitor was mostly self-contained, it was built as an integrated unit of digital graphics hardware and analog CRT system in one single cabinet, so the interface between the 9845C mainframe and the 98770A color monitor is completely digital. The concept of connecting 'dumb' CRT systems with analog video signal input was not yet an option at the design time of the 98770A color monitor.

However, because of the (at the time) tremendous graphics capabilities, there soon arose the need for high-quality hard copies and graphics display recording. One option was the 98777A camera attachment, especially in combination with large-format polaroid camera devices like the Dunn Instruments cameras (most of the screenshots available in HP's own publications were procuced in this way). Another alternative was to connect another high-resolution display via the HP-IB interface and to 'plot' the graphics on graphics CRT controllers like the 1350A Graphics Translator with vector display (see the Screen Arts section for the War Games movie, which was produced with this kind of technique).

With the 98776A RGB interface, HP obviously tried to address the need for delivering display information directly from the 98770A monitor to other raster display/recording devices simply as a standard analog RGB signal. Assuming you got the monitor with the right RGB and sync input, you can use this interface to connect a standard RGB monitor to the 9845C. Both the 98777A camera attachment and the 98776A RGB interface were introduced at the same time in 1981.

The principle for the 98776A RGB interface was quite simple. As the 98770A color monitor already had the necessary analog logic built into the cabinet, the required RGB signals were available as inverted TTL RGB signals anyway, so the signals just had to be diverged at the right points and inverted/normalized towards standard RGB levels. Also, the internal sync signals had to be ORed in order to derive the correct horizontal and vertical sync signals for RGB monitors.

The funny side is how this was achieved. It was real handwork. First, a small intermediate edge-connector PCB had to be installed in the light pen slot of the 98770A color monitor and connected to the internal 8-pole RGB cable in order to take off the necessary sync signals from the analog circuit board and the RGB signals from the RGB cable (this PCB also had a couple of active components and resistors for producing the standard RGB and sync signals). Then three plastic struts from the 98770A back cover had to be cut off and a rectangular hole was carved, in which another PCB with five BNC connectors was installed. The BNC PCB was then connected to the intermediate edge-connector PCB with a ten wire ribbon cable and the 98770A was readily equipped with a perfect RGB interface output.

98776A RGB Interface

98776A RGB Interface

In order to use this RGB interface with a standard RGB monitor, the monitor has to support a non-interlaced bandwith of at least 30 MHz (pixel clock is exactly 29.7984 MHz) and the following sync timings:

Vertical sync: 60 Hz with 550 µsec low during vertical blank every 16.7 msec

Horizontal sync: 29.1 kHz with 10.2 µsec low during horizontal blank every 34.4 µsec

In some cases where just the CRT analog amplifier logic (A6 assembly) or the CRT tube itself is defective and can't be repaired, the RGB interface - as it is quite easy to built - can be an alternative for providing a VGA output signal, which then can be displayed on a standard SVGA multisync monitor. Signal normalization is peformed with one 74S140 dual 4-input NAND line driver and one 74128 quad 2-input NOR line driver plus five resistors. If you exchange the resistors used for the 98776A RGB interface (4 x 49 Ohms 1/8 Watts, 1 x 1 Ohm) with 5 x 470 Ohms you'll get the 0.7 Volts levels required by a standard VGA monitor. If the circuit is placed directly by the monitor, impedance won't matter.

Unfortunately, the RGB interface is no replacement for a completely defective 98770A monitor.

Thanks to François, the original schematics for the RGB interface are available, including a description on how to modify an existing 98770A color monitor.