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 alpha memory buffer,
- an alpha control assembly,
- a graphics subsystem and
- a CRT monitor system.
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:

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:

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 print area, where all output of the BASIC PRINT statement is displayed. The print area uses 20 lines.
- One unused line as separator between print area and the display line,
- the display line, where all output of the BASIC DISP statement is shown
- two lines for user input (keyboard entry area), and
- one line for system messages, including the "run light" for indicating system activity.
The 98770A and 98780A displays add three more lines:
- Another unused line as separator between the system message line and the soft-key labels, and
- two lines for the soft-key labels, defined with the BASIC LABEL KEY# or LABEL KEYS statements.
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).