GPU chip is U1 on "Logic B PCA", part number 1LL3-0005. DIP48 package, CMOS. Microcoded (21 bit wide x 1536 words). Bus interface is 8-bit, internals are 16-bit, memory accesses are either 16- or 32-bit. Microcode can be dumped electronically (per HPJ article, p. 11).
Supports up to 1024x1024 monochrome display (CRT or EL), configured for 512x255 (not 256) in the IPC and for 640x400 in 9808A prototype. Pixel addressing starts at 0,0 in upper left corner.
Supports up to 128KB of VRAM (not mapped into CPU memory space), IPC has 32KB. IPC firmware probes VRAM size and will work with 128KB as well.
GPU can do line drawing with user-defined pattern, text output with user-defined proportional font, area fill with user-defined pattern, bitblt operations with 16 raster ops, and handles two sprites (mouse and text cursors). Sprites and area fill pattern are 16x16 px, font characters up to 16x16 in size. Both sprites are always drawn using XOR.
-- HP Journal issue dedicated to the IPC
bitsavers://pdf/hp/integral/00095-90126_Integral_Personal_Computer_Service_Jan86.pdf -- "5.9 Display" section on page 5-11.
include/scrn/dispi.h from IPC_SW_Engineering_ROM_4
disc -- documents command names and IDs.
include/scrn/disp.h -- documents raster ops (same as in another HP GPU, Topcat, recently added to MAME) and ioctl() operations of HP-UX display driver.
hp-ux.5.0.0 from IPC_Driver_Writers_Disc -- kernel symbol table.
GPU to CPU interface:
offset 0 -- command/status register
offset 2 -- data register, 8 bit. 9808A may be using a different revision of GPU -- 'diagb' ROM also accesses this register at offset 3.
interrupt request line -- causes autovectored interrupt at level 4. reason for interrupt is unknown.
I do not recall where I found this info, there was no detail. MAME keeps 0 low, 1 high, 3 tracks actual vblank.
0 -- GPU is busy
1 -- data is ready
3 -- vertical blank is active
7 -- 'out of window'
There are 5 command types. Data can be sent before and/or after a command, depending on command type.
type 0 -- no data are expected from the host or sent back
type 1 -- send 1 word of data, then command
type 2 -- send 2 words of data, then command
type 3 -- send command, then 12 words of data
type 4 -- send 1 word of data, then command, then read or write data, then send NOP.
Known commands by type:
NOP -- terminates type 4 commands
ENVID, DISVID -- enable/disable video output
ENSP, DISSP -- enable/disable mouse cursor (sprite) at current sprite location
ENCURS, DISCURS -- enable/disable text cursor at current pointer location
CRLF -- move pointer to start of next line
WRSAD -- set memory address of visible area
WRDAD -- set memory address of data area (holds 3 16x16 bitmaps -- fill pattern, sprite and cursor)
WRFAD -- set memory address of font area
WRUDL -- set user-defined line pattern
WRRR -- set raster op (replacement rule)
WRORG -- set memory address of active window. Used by FILL, COPY, RDWIN and WDWIN
FILL -- fill currently defined window with bitmap number word(0)
LABEL -- write text character at current pointer location, with clipping to current window boundaries
DRAWPX -- draw one pixel at given coordinates, using RR
WRWINSZ -- define window size
WRWINORG -- define window origin coordinates
MOVEP -- move pointer absolute
MOVESP -- move sprite absolute
DRAWP -- draw a line from current pointer location to absolute coordinates
COPY -- copy contents of currently defined window to absolute coordinates
SCROLUP, SCROLDN, SCROLRT, SCROLLF -- scroll urrently defined window by word(1) pixels and fill the rest with bitmap number word(0)
CONF -- configures display size, monitor timind, and memory configuration; word 9 is display width in words, word 10 -- display height in pixels.
RDMEM, WRMEM -- read/write GPU memory; command argument -- starting offset
RDWIN, WRWIN -- read/write currently defined window; command argument -- ???
Data area (DAD) layout
+20h fill pattern 1
+30h fill pattern 2 -- used by SCROLxx
Font area (FAD) layout
+00h font height
+02h size of width table
+04h width table
??? bitmap data (16 words per char)