{"id":1673,"date":"2022-06-21T08:31:49","date_gmt":"2022-06-21T06:31:49","guid":{"rendered":"https:\/\/www.pagetable.com\/?p=1673"},"modified":"2022-06-21T08:31:49","modified_gmt":"2022-06-21T06:31:49","slug":"postscript-cartridge-plus-for-hp-laserjet-iii","status":"publish","type":"post","link":"https:\/\/www.pagetable.com\/?p=1673","title":{"rendered":"PostScript Cartridge Plus for HP LaserJet III"},"content":{"rendered":"<p>The HP LaserJet III laser printer from 1990 used the &ldquo;Printer Command Language&rdquo; PCL 5 by default, but could be upgraded with the &ldquo;HP PostScript Cartridge Plus&rdquo; cartridge, which contained 2 MB of ROM with Adobe&rsquo;s PostScript Level 2 rasterizer. Let&rsquo;s look at the ROM contents and some of its hidden gems.<\/p>\n<p><a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case.jpg\" height=\"303\" width=\"403\" alt=\"\" \/><\/a><\/p>\n<h2 id=\"cartridge\">Cartridge<\/h2>\n<p>The cartridge is about 9&#215;14 cm in size.<\/p>\n<p><a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_front.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_front.jpg\" height=\"380\" width=\"269\" alt=\"\" \/><\/a><a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_back.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_back.jpg\" height=\"391\" width=\"270\" alt=\"\" \/><\/a><\/p>\n<p><a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_side.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_case_side.jpg\" height=\"52\" width=\"270\" alt=\"\" \/><\/a><\/p>\n<p>The front says<\/p>\n<blockquote>\n<p>HEWLETT PACKARD<\/p>\n<p>PostScript Cartridge Plus<\/p>\n<p>ITC Avant Garde Gothic\u00ae<br \/>\nITC Bookman\u00ae<br \/>\nCourier<br \/>\nHelvetica\u00ae<br \/>\nHelvetica-Narrow<br \/>\nNew Century Schoolbook<br \/>\nPalatino\u00ae<br \/>\nTimes\u00ae<br \/>\nITC Zapf Chancery\u00ae<br \/>\nTIC Zapf Dingbats\u00ae<br \/>\nSymbol<br \/>\nC2089A \u00a9Hewlett-Packard 1989, 1990, 1991<\/p>\n<p>HP<br \/>\nLASERJET III<br \/>\nPOSTSCRIPT\u00ae<\/p>\n<\/blockquote>\n<p>The back says<\/p>\n<blockquote>\n<p>Adobe and PostScript are registered trademark of Adobe Systems<br \/>\nIncorporated in the U.S, and other countries. Helvetica, Palatino and<br \/>\nTimes Roman are registered trademarks of Linotype AG and\/<br \/>\nor its subsidiaries in the U.S. and other countries. IT Avant Garde<br \/>\nGothic, ITC Bookman, ITC Zapf Chancery and ITC Zapf Dingbats are<br \/>\nregistered trademarks of International Typeface Corporation in the<br \/>\nU.S, and other countries.<\/p>\n<\/blockquote>\n<h2 id=\"board\">Board<\/h2>\n<p><a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_front.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_front.jpg\" height=\"247\" width=\"377\" alt=\"\" \/><\/a><br \/>\n<a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_back.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_back.jpg\" height=\"257\" width=\"381\" alt=\"\" \/><\/a><\/p>\n<p>Here is the front without the components:<br \/>\n<a href=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_front_empty.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"docs\/postscript_cartridge_plus\/postscript_cartridge_plus_board_front_empty.jpg\" height=\"247\" width=\"377\" alt=\"\" \/><\/a><\/p>\n<p>The board contains 6 74-series logic chips:<\/p>\n<ul>\n<li>1x SN74ALS139N: Dual 2-to-4 Decoder\/Demultiplexer<\/li>\n<li>4x SN74ALS244BN: Octal Buffer and Line Driver with 3-State Output<\/li>\n<li>1x SN74LS32N: Quadruple 2-Input Positive-Or Gates [marked as HP part number 1820-1208]<\/li>\n<\/ul>\n<p>and four 512 KB mask ROM chips of the type Fujitsu MB834200B-15 (27C400 pinout). They are all marked with<\/p>\n<blockquote>\n<p>\u00a9 1991 HP-BOISE<br \/>\n\u00a9 1984-90 ADOBE<br \/>\n\u00a9 1981 LINOTYPE AG<br \/>\n\u00a9 1991 FUJITSU<\/p>\n<\/blockquote>\n<h2 id=\"rom\">ROM<\/h2>\n<p>These are the verbatim dumps (adjacent bytes are swapped):<\/p>\n<ul>\n<li><a href=\"docs\/postscript_cartridge_plus\/1818-5336_16a.bin\">1818-5336 \/ 16A AA<\/a>, MD5 258464faa19a1ff78bbb57270eec8835<\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/1818-5318_03a.bin\">1818-5318 \/ 03A AA<\/a>, MD5 da113b6c6c53e21858b30a71c7be017c<\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/1818-5319_04a.bin\">1818-5319 \/ 04A AA<\/a>, MD5 f6e368806aa8caf22b4c28d235a2df1d<\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/1818-5320_05a.bin\">1818-5320 \/ 05A AA<\/a>, MD5 ed1700895daeac733f80ce20278c4a64<\/li>\n<\/ul>\n<p>This is the combined (<a href=\"docs\/postscript_cartridge_plus\/byteswap.py\">byte-swapped<\/a>) 2 MB ROM image:<\/p>\n<p><a href=\"docs\/postscript_cartridge_plus\/c2089a.bin\">HP PostScript Cartridge Plus C2089A ROM<\/a>, MD5 8a5d1f66ab1624e7188fc07154f4224d<\/p>\n<p>The ROM image starts with a signature of &ldquo;SYST&rdquo; and the following messages at 0x30:<\/p>\n<blockquote>\n<p>V9H-18f PSCRIPT<br \/>\n09.H<br \/>\nCopyright &copy; Hewlett-Packard Company, 1991. All rights reserved.<\/p>\n<\/blockquote>\n<p>The ROM contains Adobe&rsquo;s PostScript Level 2 rasterizer compiled for the 68000 CPU, the PostScript base fonts as well as some LaserJet-specific software (messages, errors and settings texts for the 15 char display in several languages).<\/p>\n<h2 id=\"postscript-files\">PostScript Files<\/h2>\n<p>There is also some PostScript source code in the ROMs!<\/p>\n<ul>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/fontpage.ps\">fontpage.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page.ps\">test_page.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/startup_page.ps\">startup_page.ps<\/a><\/li>\n<\/ul>\n<p>(The missing <code>%!<\/code> file header has been added to the downloads.)<\/p>\n<p>Since this is printer-specific PostScript code, it may not work with computer-based rasterizers, so let&rsquo;s go over them one by one.<\/p>\n<h3 id=\"fontpage\">FONTPAGE<\/h3>\n<p>This is &ldquo;FONTPAGE&rdquo; converted to PDF using GPL GhostScript:<\/p>\n<p><a href=\"docs\/postscript_cartridge_plus\/ps\/fontpage.pdf\">fontpage.pdf<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/fontpage.png\" width=\"319\" height=\"413\"\/><\/p>\n<p>The PostScript code contains the <code>product<\/code> operator, which returns the name of the printer, so the second line \u2013 &ldquo;GPL Ghostscript printer&rdquo; \u2013\u00a0would read &ldquo;HP LaserJet III printer&rdquo; on an actual LaserJet.<\/p>\n<h3 id=\"test-page\">TEST PAGE<\/h3>\n<p>&ldquo;TEST PAGE&rdquo; prints various internal printer settings which are unsupported by computer-based PostScript rasterizers, so some lines had to be removed for the file to work. These are the files hacked for different rasterizers:<\/p>\n<table>\n<tr>\n<td>\nAdobe Acrobat Distiller 5.0 (2001)<\/p>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_acrobat.ps\">test_page_acrobat.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_acrobat.pdf\">test_page_acrobat.pdf<\/a><\/li>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/test_page_acrobat.png\" width=\"319\" height=\"413\"\/>\n<\/td>\n<td>\nmacOS 12.4 PSNormalizer.framework<\/p>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_apple.ps\">test_page_apple.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_apple.pdf\">test_page_apple.pdf<\/a><\/li>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/test_page_apple.png\" width=\"319\" height=\"413\"\/>\n<\/td>\n<\/tr>\n<tr>\n<td>\nGhostScript 9.56.1<\/p>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_gs.ps\">test_page_gs.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_page_gs.pdf\">test_page_gs.pdf<\/a><\/li>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/test_page_gs.png\" width=\"319\" height=\"413\"\/>\n<\/td>\n<\/tr>\n<\/table>\n<p>(The almost identical contents of Acrobat Distiller 5.0 and Apple&rsquo;s PS to PDF converter built into macOS (down to the internal version number!) is no coincidence: Apple&rsquo;s converter is in fact a licensed &ldquo;Adobe Normalizer 5.0&rdquo;<sup id=\"fnref:1\"><a href=\"#fn:1\" rel=\"footnote\">1<\/a><\/sup>, the same engine powering Distiller 5.0.)<\/p>\n<p>There is a second page which only prints if the <code>product<\/code> is &ldquo;HP LaserJet IIP&rdquo; or &ldquo;HP LaserJet IIIP&rdquo;:<\/p>\n<ul>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_cleaning.ps\">test_cleaning.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/test_cleaning.pdf\">test_cleaning.pdf<\/a><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/test_cleaning.png\" width=\"319\" height=\"413\"\/><\/p>\n<h3 id=\"startup-page\">STARTUP PAGE<\/h3>\n<ul>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/startup_page.ps\">startup_page.ps<\/a><\/li>\n<li><a href=\"docs\/postscript_cartridge_plus\/ps\/startup_page.pdf\">startup_page.pdf<\/a><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"1\" src=\"docs\/postscript_cartridge_plus\/ps\/startup_page.png\" width=\"319\" height=\"413\"\/><\/p>\n<p>There is no such device as a &ldquo;LaserJet IIx&rdquo; \u2013\u00a0this is what the PostScript code falls back to if the <code>product<\/code> is none of these:<\/p>\n<ul>\n<li>&ldquo;HP LaserJet IID&rdquo;<\/li>\n<li>&ldquo;HP LaserJet IIP&rdquo;<\/li>\n<li>&ldquo;HP LaserJet III&rdquo;<\/li>\n<li>&ldquo;HP LaserJet IIID&rdquo;<\/li>\n<li>&ldquo;HP LaserJet IIIP&rdquo;<\/li>\n<\/ul>\n<p>Tests for these can be found across all PostScript code in the ROM. The IIID (&ldquo;duplex&rdquo;) and IIIP (&ldquo;personal&rdquo;) and variants of the LaserJet III. HP never offered PostScript for the LaserJet II series, so it is unknown why these product names show up in the ROM.<\/p>\n<h2 id=\"future-work\">Future Work<\/h2>\n<p>There are several open questions that might be interesting:<\/p>\n<ul>\n<li>What&rsquo;s up with PostScript for the LaserJet II?<\/li>\n<li>Did the cartridge extend the printer&rsquo;s internal ROM or replace it?<\/li>\n<li>What other PostScript features are supported that are not official API?<\/li>\n<li>What is the computer inside the LaserJet III like? Can we emulate it and run this rasterizer on a computer?<\/li>\n<li>What is the pinout of the cartridge connector?<\/li>\n<\/ul>\n<div class=\"footnotes\">\n<hr\/>\n<ol>\n<li id=\"fn:1\">\n<p><code>strings \/System\/Library\/PrivateFrameworks\/PSNormalizer.framework\/Versions\/A\/Resources\/PS.VM  | grep -i Adobe<\/code><a href=\"#fnref:1\" rev=\"footnote\">&#8617;<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The HP LaserJet III laser printer from 1990 used the &ldquo;Printer Command Language&rdquo; PCL 5 by default, but could be upgraded with the &ldquo;HP PostScript Cartridge Plus&rdquo; cartridge, which contained 2 MB of ROM with Adobe&rsquo;s PostScript Level 2 rasterizer. Let&rsquo;s look at the ROM contents and some of its hidden gems. Cartridge The cartridge &#8230; <a title=\"PostScript Cartridge Plus for HP LaserJet III\" class=\"read-more\" href=\"https:\/\/www.pagetable.com\/?p=1673\" aria-label=\"Read more about PostScript Cartridge Plus for HP LaserJet III\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,24],"tags":[],"class_list":["post-1673","post","type-post","status-publish","format-standard","hentry","category-archeology","category-postscript"],"_links":{"self":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts\/1673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1673"}],"version-history":[{"count":0,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts\/1673\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}