PacificPage P·E PostScript Cartridge for HP LaserJet II/III

PostScript came to the desktop in 1985 with the Apple LaserWriter, and within a year or two several other companies had joined Adobe’s licensee list. HP was late — its own Adobe PostScript cartridge for the LaserJet II/III family didn’t ship until 1991.

Pacific Data Products started filling the gap in 1989 with its “PacificPage PostScript Language Emulation Cartridge”, which

  • uses a reimplementation of the PostScript interpreter in place of Adobe’s reference code and
  • Bitstream’s clone fonts in place of the Linotype/ITC originals.

And all this in a clever custom cartridge that was designed for cheap updates.

Article Series

This is the third article in a series that dissects ROMs related to the HP LaserJet family:

Year Name Description
1990 PacificPage P·E (← this article) Phoenix PostScript Level 1 emulation
1991 HP LaserJet PostScript Cartridge Adobe PostScript Level 1
1991 HP LaserJet III PostScript Cartridge Plus Adobe PostScript Level 2

HP’s own Adobe cartridges shipped in 1991 at roughly $695; PacificPage P·E1 undercut them at $495.

Cartridge

The cartridge is about 9×14 cm in size — the same dimensions as HP’s own font and PostScript cartridges, so it plugs straight into the LaserJet cartridge slot.

The front says

POSTSCRIPT® LANGUAGE EMULATION
PacificPage™ P·E
Install in left slot only.
© 1990 Pacific Data Products, Inc.
Made in the U.S.A.
PhoenixPage
PACIFIC DATA PRODUCTS

The back carries a plain white sticker:

010570 REV G VERSION 4.1
PACIFIC PAGE P.E.
IIP SINGLE SLOT; IID/III/IIID LEFT SLOT

Board

The board contains

  • 4x 74ALS244AN: Octal Buffer and Line Driver with 3-State Output [U1-U4]
  • 1x Lattice GAL16V8-25LP: Generic Array Logic, socketed [U5]
  • 2x 27C512 EPROM, 64 KB, DIP28 in a DIP32 socket [U6, U9]
  • 2x Sharp mask ROM, 256 KB, 27C020 pinout, DIP32 [U7, U10]
  • 2x Toshiba TC534000P mask ROM, 512 KB, 27C040 pinout, DIP32 [U8, U11]

The Sharp mask ROMs are marked with

PN 012132 REV A
PACIFIC DATA
© 1991 SHARP JAPAN
9109 D

and

PN 012133 REV A
PACIFIC DATA
© 1991 SHARP JAPAN
9109 D

The Toshiba mask ROMs are marked with

T 010732 9114EBI
TC534000P-F985
PACIFIC DATA

and

T 010733 9114EBI
TC534000P-F986
PACIFIC DATA

The socketed EPROMs and the GAL16V8 carry printed paper labels — 013247 REV. A/013249 REV. A, and 013112 REV. A respectively.

Here is the PCB with the GAL and the ROMs removed:

The silkscreen reads © 1990 PACIFIC DATA / GENERIC FONT / P/N 009785.

ROM

These are the raw ROM dumps:

Since the LaserJet’s Motorola 68000 CPU reads 16 bits at a time, adjacent bytes are interleaved from each pair to form three combined 16-bit images:

Both the code and the patch images start with SYST — the magic signature the LaserJet’s boot ROM checks to identify a code cartridge rather than a pure font cartridge. The images also contain the following messages near the beginning:

PacPage
Copyright 1989, 1990 by Pacific Data Products, Inc. 9125 Rehco Road San Diego Califonia [sic] 92121 (619) 552-0880.

The code ROM contains a version number of “4.00”; the patch ROM says “4.10”.

The Patch EPROM

Mask ROMs are the cheapest way to hold large amounts of code once a design is stable and committed to volume, but respinning one for a bug fix is slow and expensive. EPROMs are the opposite: more expensive per chip, but programmable in small batches at the factory. Put both on the same board and let a GAL16V8 decide at address-decode time which chip answers which read, and you get the best of both: ship the stable interpreter as mask ROM, and override anything that needs fixing after release by programming a fresh EPROM instead of cutting a new mask ROM. That’s what this cartridge does.

In this configuration of the GAL, the first 128 KB of read accesses that would go to the code mask ROM are redirected to the patch EPROM instead, so the CPU sees a single contiguous 512 KB code window assembled from two physical chips:

            code mask ROM (4.00)                  patch EPROM (4.10)
            512 KB                                128 KB

0x00000  ┌────────────────────┐                ┌────────────────────┐
         │   first 128 KB     │  ◀── override  │     128 KB         │
         │   (hidden)         │                │                    │
0x20000  ├────────────────────┤                └────────────────────┘
         │                    │
         │                    │
         │   next 384 KB      │
         │                    │
         │                    │
0x80000  └────────────────────┘

The mask ROM carries version 4.00, the EPROM carries 4.10, so the EPROM is a post-release bug-fix pass over the first 128 KB of the original interpreter.

The EPROMs and the GAL sit in sockets rather than soldered down, so upgrading the firmware is a chip swap, though nothing in the user documentation treats that as an end-user path; the User’s Guide points owners at a mail-in upgrade channel via the registration card.

The mechanism isn’t fixed at 128 KB: the patch sockets are DIP32 even though this cartridge fits them with smaller DIP28 EPROMs (pin-offset in). Dropping in 27C020 or 27C040 parts with a matching fuse map could expand the patch window to any 2ⁿ-aligned region up to the full 512 KB — overriding the whole interpreter if needed.

ROM Contents

The 1.5 MB of firmware (512 KB code with a 128 KB patch + 1 MB fonts) breaks down into three components, each covered in its own section below:

  1. PhoenixPage: Phoenix Technologies’ PostScript interpreter compiled for the 68000.
  2. Bitstream Speedo fonts: the 35 outline typefaces the interpreter draws from.
  3. HP LaserJet integration: the glue that binds the interpreter to the printer’s hardware.

PhoenixPage

Near the end of the code ROM:

PhoenixPage ™
Copyright © 1987,1988,1989,1990 Phoenix Technologies Ltd.

Adobe defined PostScript, published a spec (incomplete, hinting stayed proprietary), and licensed its interpreter to OEMs for per-unit royalties. Phoenix Technologies reimplemented PostScript clean-room and sold the clone cheaper. This 1990 build is Level 1; the Products Catalogue (p. 8, see below) gives the PhoenixPage version as 51.9.

Font Engines: Type 1 and Speedo

Any PostScript interpreter has to rasterize Adobe Type 1 fonts at minimum, because a conforming PostScript job can embed Type 1 font data inline and the interpreter must install and use those fonts for the duration of the job.

For the built-in fonts, however, Pacific Data skipped Type 1 entirely. They shipped Bitstream’s Speedo format2 instead, a scalable outline format Bitstream had developed in the mid-1980s as its own entrant in the emerging font wars. Adobe’s Type 1 (1984) owned the PostScript printing market and Adobe refused to publish its hinting algorithm; Apple announced TrueType in 1989 specifically to break that lock; Bitstream positioned Speedo as the third option: an independent, licensable scalable format for OEMs who wanted neither to pay Adobe nor wait for TrueType to mature.

Bitstream pushed Speedo aggressively across every segment it could reach. At the 1987 Seybold conference six PostScript-clone vendors including Phoenix had committed to Bitstream’s Fontware Quality Enhancement Module, effectively lining up every non-Adobe PostScript interpreter on the market behind a single Bitstream-supplied font stack. Around the same time Atari licensed the Speedo rasterizer from Bitstream to build SpeedoGDOS, the scalable-font add-on to its Graphics Device Operating System; Speedo also shipped in early versions of WordPerfect and on Windows 3.0 as Bitstream FaceLift (1990). And in March 1991 Bitstream contributed the Speedo format and eight fonts to the X Consortium, where it shipped in X11 until being retired in 2005.
Ten SCCS-tagged C source filenames leak through the code image, all matching Bitstream’s Speedo rasterizer sources: do_char.c, do_trns.c, out_outl.c, out_scrn.c, out_bl2d.c, out_blk.c, out_util.c, set_spcs.c, set_trns.c, reset.c

Built-in Fonts

The cartridge ships the 35 PostScript base fonts, but not Adobe’s originals. Adobe had paid Linotype and ITC for trademark-cleared licenses: Times, Helvetica, Palatino], and the rest; Pacific Data didn’t, and ships Bitstream’s metric-compatible lookalikes in Speedo format under Bitstream’s own names. PostScript jobs still reference the Adobe names; the cartridge resolves each to its Bitstream face.

The fonts ROM is structured as a small filesystem. It opens with an 8-byte header (32-bit BE count+1, 32-bit BE base address), followed by 27 × 24-byte directory entries starting at offset 8:

Offset in entry Field Size
0 ASCIIZ filename, bt22XXXX.sp, NUL-padded to 16 bytes 16 B
16 32-bit BE absolute file start address (offset in the ROM image + base address) 4 B
20 32-bit BE length-like field — doesn’t match the actual file span; purpose unclear 4 B

File data starts right after the directory.

The fonts can be extracted with this script:

File Face PostScript name Built
bt223000.sp Dutch 801 Roman Times-Roman 12 Oct 89
bt223001.sp Dutch 801 Italic Times-Italic 29 Aug 89
bt223002.sp Dutch 801 Bold Times-Bold 29 Aug 89
bt223003.sp Dutch 801 Bold Italic Times-BoldItalic 12 Oct 89
bt223004.sp Swiss 721 Helvetica 28 Aug 89
bt223006.sp Swiss 721 Bold Helvetica-Bold 28 Aug 89
bt223008.sp Courier 10 Pitch Courier 12 Oct 89
bt223010.sp Courier Bold 10 Pitch Courier-Bold 12 Oct 89
bt223012.sp Symbol Symbol 28 Aug 89
bt223013.sp Zapf Calligraphic 801 Palatino-Roman 02 Dec 89
bt223014.sp Zapf Calligraphic 801 Italic Palatino-Italic 03 Dec 89
bt223015.sp Zapf Calligraphic 801 Bold Palatino-Bold 02 Dec 89
bt223016.sp Zapf Calligraphic 801 Bold Italic Palatino-BoldItalic 03 Dec 89
bt223017.sp Geometric 711 Book AvantGarde-Book 01 Dec 89
bt223018.sp Geometric 711 Book Oblique AvantGarde-BookOblique 01 Dec 89
bt223019.sp Geometric 711 Demi AvantGarde-Demi 01 Dec 89
bt223020.sp Geometric 711 Demi Oblique AvantGarde-DemiOblique 01 Dec 89
bt223021.sp Revival 711 Light Bookman-Light 03 Dec 89
bt223022.sp Revival 711 Light Italic Bookman-LightItalic 04 Dec 89
bt223023.sp Revival 711 Demi Bookman-Demi 04 Dec 89
bt223024.sp Revival 711 Demi Italic Bookman-DemiItalic 04 Dec 89
bt223029.sp Chancery 801 Medium Italic ZapfChancery-MediumItalic 04 Dec 89
bt223030.sp ITC Zapf Dingbats ZapfDingbats 01 Dec 89
bt223031.sp Century 702 NewCenturySchlbk-Roman 30 Nov 89
bt223032.sp Century 702 Italic NewCenturySchlbk-Italic 30 Nov 89
bt223033.sp Century 702 Bold NewCenturySchlbk-Bold 30 Nov 89
bt223034.sp Century 702 Bold Italic NewCenturySchlbk-BoldItalic 30 Nov 89

The 27 files cover the 35 PostScript faces; the missing 8 are synthesized at runtime from the others3.

HP LaserJet Integration

Beyond the PostScript interpreter and font outlines, the ROM carries a layer of LaserJet-specific glue that ties PhoenixPage to the printer’s user interface and error-handling paths.

The cartridge drives status and error messages on the LaserJet’s 15-character front-panel LCD: Init PacPage, CART RESET, OUT OF PAPER, PAPER JAMMED, TONER LOW, Font Page, Test Page, and so on, plus a full set of names for the 68000 CPU exceptions it can catch. While a job is arriving, the LCD shows a running byte count (XXXXK File Size) until the firmware sees the end-of-file ^D (User’s Guide p. 3-10).

PostScript Files in ROM

Two test pages are embedded as PostScript source in the ROM:

Font Sample Page. Displays the ten Bitstream typefaces in Normal / Bold / Italic / Bold-Italic across three point sizes, headed “Pacific Data Products, Inc. / PacificPage™ PERSONAL·EDITION Fonts”. A footnote points the reader to the User’s Manual for “Apple LaserWriter® equivalent font family names”. A developer comment in the source reads: “Helen Quach and Lee Oeth are the Funky Font Meisters of the known universe!”
fontpage.ps (source)
fontpage.pdf (rendered)
I/O Settings Page. Prints the cartridge’s current Mode, Baud Rate, Data Bits, Stop Bits, Parity, Robust XON, DTR Polarity, and firmware version. The source in the ROM is a PostScript template: at emit time the firmware patches literal values ((Parallel), (HIGH), etc.) into holes in the source, then sends the completed program to the engine.
io_settings.ps (source, as-extracted)
io_settings.pdf (fixed and rendered)

Install Disks

The cartridge ships with four 5.25-inch floppy disks in a single software pack (part 20383.00 REV 00):

Disk PN Format Label
1 012245 REV. A HD 35 PacificPage Scalable Screenfonts for Windows 3.x (part 1 of 3)
2 012246 REV. A HD 35 PacificPage Scalable Screenfonts for Windows 3.x (part 2 of 3)
3 012247 REV. A HD 35 PacificPage Scalable Screenfonts for Windows 3.x (part 3 of 3)
4 011952 REV A DD Printer Control Panel 2.0-P, © 1990 LaserTools Corporation

The earlier Documentation Update (p. 3-18) identifies the three font disks as a customised build of Bitstream’s FaceLift: the Windows-side Speedo rasterizer that matches the Fontware code already compiled into the cartridge. Disk 4 holds LaserTools Corporation’s DOS utility, licensed to Pacific Data under the retail name Printer Control Panel. None of the four floppies have been imaged.

Manuals and Extras

Thirteen printed documents shipped in the retail box:

Manual Pages Description
PacificPage P·E User’s Guide 68 The cartridge’s main manual: installation, front-panel operation, troubleshooting.
Application Setup and Printing Guide 68 Per-application instructions for driving the cartridge from WordPerfect, Word, Ventura Publisher, PageMaker, and others via their generic PostScript drivers.
Documentation Update, earlier revision 36 An earlier version of the Documentation Update pamphlet.
Documentation Update 1 Addendum to the main PacificPage user’s guide.
Printer Control Panel User’s Guide 56 LaserTools’ Printer Control Panel 2.0-P — the DOS utility shipped on disk 4.
Control Panel Documentation Update 1 Addendum to the Control Panel user’s guide.
Pacific Data Products Catalogue 20 Pacific Data’s full product line at the time.
Registration Card 4 Warranty registration to be returned to Pacific Data.
Free Disk Conversion Offer 2 Mail-in coupon to swap the 5.25″ DSHD media for 5.25″ DSDD or 3.5″ diskettes, or download via Pacific Data’s BBS.
Software License Agreement 2 End-user software license covering the cartridge firmware and the install disks.
Product Guarantee 1 Pacific Data’s product guarantee statement.
Limited Warranty 1 Hardware warranty terms.
Technical Support 1 Contact information for technical support, including the Pacific Data BBS.

Future Work

  • Image and analyse the four install floppies.
  • Find and dump a cartridge with a lower sticker version.
  • Find and dump the PacificPage XL, a 1991 Intel i960 RISC accelerator board, runs the same PE 4.0 software stack, and is marketed at 2–8× the cartridge’s speed.

  1. The cartridge’s built-in font sample page prints the full product name as “PacificPage™ PERSONAL·EDITION Fonts”.

  2. The major outline font formats of the era differ in what kind of Bézier curves they use. Adobe Type 1 (and the CFF flavour of OpenType) use cubic Béziers: three control points per segment, finer per-segment control. TrueType (and the glyf flavour of OpenType) uses quadratic Béziers: two control points per segment, computationally cheaper to evaluate. Bitstream Speedo is cubic like Type 1.

  3. The 8 missing faces are all synthesized at runtime from the stored uprights. Four — Helvetica-Narrow, Helvetica-Narrow-Oblique, Helvetica-Narrow-Bold, Helvetica-Narrow-BoldOblique, derived from Helvetica and Helvetica-Bold by 0.82× horizontal scaling (plus slanting for the two oblique variants) — are handled the same way by Adobe. The other four — Helvetica-Oblique, Helvetica-BoldOblique, Courier-Oblique, Courier-BoldOblique, slanted from their uprights — Adobe ships as hand-designed outlines with optically corrected stroke weights; slanting is a quality shortcut.

Leave a Comment