How I wrote a SCSI driver from scratch to scan 35mm film on a Mac SE/30 running System 7 The Problem I shoot and develop 35mm film at home. It’s a nice hobby, and I do my own prints in a small darkroom. But sometimes I want digital copies to share online or just to archive. A while ago I found an Epson FilmScan 200 on leboncoin (the French Craigslist) for 10 euros. It’s a dedicated 35mm film scanner from 1997 that scans at 1200 DPI optical. At that price, worth a try. The catch? This scanner only has a SCSI interface and the official drivers only work on Mac System 7/8 or Windows 95/98. My main machines are modern Macs. I could install a virtual machine, but SCSI passthrough is basically impossible. I could use a USB-to-SCSI adapter, but those are expensive and often don’t work well with scanners. But wait. I have a Mac SE/30 sitting on my desk. The same one I brought back to life a few years ago. It has SCSI. It runs System 7. Could I scan directly on it? The official Epson TWAIN driver exists, but it’s a complex plugin designed for Photoshop. I wanted something simpler: a standalone app that scans frames and saves them as files I can transfer via FTP. Time to write my own driver. Understanding the Hardware The first step was understanding how this scanner actually works. I found a service manual PDF online, which gave me crucial information: Spec Value SCSI device type “Processor” (0x03), not a standard scanner Protocol ESC/I commands encapsulated in SCSI SEND/RECEIVE Resolution Up to 1200 DPI optical Frame size 24x36mm = 1120x1680 pixels at max resolution The “Processor” device type was interesting. Unlike standard SCSI scanners that use vendor-specific commands, this one uses generic SEND (0x0A) and RECEIVE (0x08) commands to exchange ESC/I protocol data. The ESC/I protocol is Epson’s standard scanner command language, same family as what their flatbed scanners use. I was surprised by how technical the service manual is. It details SCSI timings, command sequence...
First seen: 2026-01-10 13:54
Last seen: 2026-01-10 21:56