Hacker News 中文摘要

RSS订阅

在浏览器中运行Adobe 1991年的PostScript解释器 -- Running Adobe's 1991 PostScript Interpreter in the Browser

文章摘要

文章介绍了如何将1991年Adobe的PostScript解释器移植到浏览器中运行。通过模拟M68K处理器和HP LaserJet硬件环境,开发者将原版ROM中的PostScript Level 2解释器成功运行在现代浏览器中,可直接渲染PS文件而无需服务器支持。这展示了经典代码在现代技术中的实用价值。

文章总结

标题:在浏览器中运行Adobe 1991年版PostScript解释器——pagetable.com

1991年推出的HP C2089A "PostScript Cartridge Plus"是一款为LaserJet II/III设计的附加组件,通过2MB ROM上的Adobe官方参考解释器(版本2010.118)实现了PostScript Level 2支持。

三十五年过去,这个ROM仍然是有效的PostScript实现:它能正确渲染语言,而该语言本身也未曾改变。虽然我们现在有Ghostscript,但这可是Adobe的官方参考实现!旧代码未必就是过时的代码:为何不让它继续发挥作用呢?

retro-ps项目提取该ROM,模拟其运行的M68K处理器,虚拟化周边LaserJet主板环境,最终在命令行或浏览器(pagetable.com/retro-ps)中运行。用户只需将.ps文件拖入页面,该卡带自带的栅格化程序就能在客户端完成渲染——整个过程无需服务器参与。

图1:浏览器中的retro-ps正在渲染卡带自带的测试页面

硬件细节

该卡带基于LaserJet III主机运行。其格式化主板配备8MHz的Motorola 68000处理器、1MB系统内存(可扩展至4MB)、可将外部ROM映射到CPU地址空间的卡带接口,以及用于连接打印引擎的内存映射寄存器。C2089A卡带即插入此接口,其ROM中运行着PostScript解释器、字体、半色调和分带处理程序,通过主板RAM进行工作。

模拟器内部机制

原卡带专为LaserJet III设计:300DPI分辨率、固定纸张尺寸、0.25英寸硬件边距。但其内置PostScript解释器是通用的——这些限制来自打印机而非语言本身。retro-ps移除了这些限制:支持任意DPI(不超过解释器上限)、任意纸张尺寸、任意半色调频率和无边距设置(使用--lj3参数可恢复原始限制)。关键技术包括:

  • CPU与内存:模拟器采用68020处理器,支持16MB内存,远超原68000的寻址能力,使卡带无需重写分配器即可渲染高DPI页面。
  • 虚拟化环境:由于缺少主板ROM和打印引擎,模拟器通过软陷阱模拟主板功能(打印机型号字节、IPC字节流、引擎状态轮询),并伪造引擎完成中断以推进卡带状态机。
  • 半色调优化:针对300DPI优化的默认半色调单元在高DPI下会显得稀疏,模拟器通过注入DPI自适应的setscreen序言解决。
  • 像素上限:解释器的clip操作符限制单轴约16000像素,这是Adobe代码的固有限制,实际最大DPI随纸张尺寸变化(Letter尺寸下约1450DPI)。

未来计划

  • 支持其他卡带ROM,如Pacific Page P·E
  • 适配LaserJet 4M及后续机型:这些设备使用Intel i960处理器,直接将PostScript Level 2集成在格式化ROM中,无需外置卡带。

(注:已删除原文中关于硬件规格的冗余描述,保留技术实现的关键细节;优化了专业术语的译法;调整了技术要点的呈现逻辑以符合中文阅读习惯。)

评论总结

以下是评论内容的总结:

  1. 对PostScript技术的兴趣与赞赏

    • 多位用户表达了对PostScript技术的喜爱和对其在浏览器中应用的兴趣。
      • "People must really love PostScript!" (评论1)
      • "Sun NeWS in the browser would be cool as well." (评论2)
      • "postscript hacks are fun!" (评论4)
  2. 技术比较与实用性讨论

    • 用户讨论了PostScript与其他技术(如pdf.js)的比较,并分享了个人经验。
      • "I wonder if this is better than running pdf.js...using pdf.js wasn't gonna work and be too slow" (评论3)
      • "After some manual culling of code I got the wasm module down to 27kb with no glue." (评论3)
  3. 历史与行业影响

    • 评论提到了PostScript的历史和其对印刷行业的影响。
      • "the encryption on Type 1 fonts in 1987 was broken by Harvey Grosser" (评论4)
      • "every print publication in existence was faced with 'do or die' in digital production." (评论4)
  4. 使用体验与问题反馈

    • 部分用户分享了使用PostScript时的体验和遇到的问题。
      • "Dropped a .ps in there, it's just stuck 'rendering'." (评论7)
      • "Minus the colors, they worked and look pretty good." (评论9)
  5. 对Adobe的调侃与对macOS的遗憾

    • 有用户对Adobe进行了调侃,并对macOS取消PostScript支持表示遗憾。
      • "How much does a subscription for this website costs per month? After all it says Adobe in the title." (评论5)
      • "Such a shame that macOS lost all its built-in postscript support including Preview.app in recent versions :(" (评论10)
  6. 幽默与怀旧

    • 一些评论带有幽默和怀旧的色彩。
      • "But does it say 'PC LOAD LETTER'?" (评论8)
      • "Wonderful." (评论6)