Sierra digital cameras on the Apple II

Hacker News Top Tools

Summary

The article describes adding support for Sierra-class digital cameras to the Apple II via the Quicktake software, with implementation details and tested models like Sanyo VPC-G1 and VPC-G200.

No content available
Original Article
View Cached Full Text

Cached at: 09/16/26, 02:58 AM

# Sierra digital cameras on the Apple II Source: [https://www.colino.net/wordpress/archives/2026/09/11/sierra-digital-cameras-on-the-apple-ii/](https://www.colino.net/wordpress/archives/2026/09/11/sierra-digital-cameras-on-the-apple-ii/) 2026/09/11\-About 5 minutes read After successfully adding support for the Kodak DC\-50 camera in[Quicktake for Apple II](https://www.colino.net/wordpress/quicktake-for-apple-ii), I investigated what else was there that had vastly overblown “System requirements”\. [![](https://www.colino.net/wordpress/wp-content/uploads/image-144.png)](https://www.colino.net/wordpress/wp-content/uploads/image-144.png)The Epson PhotoPC user manual page with their System RequirementsBased on libgphoto2’s source code, I chose to give a closer look to what I \(and they\) call the “Sierra\-class” cameras\. There are a lot of cameras sharing the same class of protocol there, more than 80 models are referenced\. Not all of them will be usable on Apple II, as my JPEG decoder is hardcoded to 640×480 images \(de\-hardcoding it would be possible, but memory and CPU expensive, and it’s already slow enough as is that I don’t want – yet – to even try decoding and scaling down 800×600 or 1024×768\)\. Even limited to 640×480 cameras, this will open a number of options\. I bought a pair of very cheap Sanyo cameras on eBay \(a[VPC\-G1](https://www.digitalkameramuseum.de/en/cameras/item/sanyo-vpc-g1)from 1995, also sold as Epson PhotoPC PCDC001 and Sierra Imaging SD640, and a[VPC\-G200](https://www.digitalkameramuseum.de/en/cameras/item/sanyo-vpc-g200)from 1997\), and started my 2026 summer staycation implementing my driver: during the previous release cycle, leading to the[Kodak DC50](https://www.digitalkameramuseum.de/en/cameras/item/kodak-dc50)support, I reworked my code so that cameras drivers are now modules with a defined interface\. This allows my program to only load the relevant driver into memory, making Quicktake for Apple II extensible with an arbitrary number of drivers as long as it fits on the floppy\! [![](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-42-25-386_002-400x300.jpg)](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-42-25-386_002.jpg)Sanyo VPC\-G1 \(1995\)[![](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-42-25-386-400x300.jpg)](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-42-25-386.jpg)Sanyo VPC\-G200 \(1997\)Here’s my[“skeleton” driver](https://github.com/colinleroy/a2tools/blob/main/src/quicktake/cameras/SKEL_DRIVER/sierra-serial.c)that does nothing but the boilerplate\. It basically defines a bitfield of supported features, and 16 “API methods”, most of which being optional\. The only required endpoints are`\_wakeup`,`\_set\_speed`,`\_get\_information`and`\_get\_picture`\. ``` #define sierra_features 0b0000000011011111 // ||||||||_ SET_CAMERA_NAME // |||||||__ SET_CAMERA_TIME // ||||||___ SET_QUALITY, // |||||____ SET_FLASH, // ||||_____ TAKE_PICTURE, // |||______ GET_THUMBNAIL, // ||_______ DELETE_PICTURES, // |________ RESERVED, /* Camera callbacks */ void *sierra_callbacks[] = { /* FEATURES */ (void *)sierra_features, /* WAKEUP */ sierra_wakeup, /* SET_SPEED */ sierra_set_speed, /* SET_CAMERA_NAME */ sierra_set_camera_name, /* SET_CAMERA_TIME */ sierra_set_camera_time, /* GET_INFORMATION */ sierra_get_information, /* SET_QUALITY */ sierra_set_quality, /* SET_FLASH */ sierra_set_flash, /* TAKE_PICTURE */ sierra_take_picture, /* GET_PICTURE */ sierra_get_picture, /* GET_THUMBNAIL */ NULL, /* DELETE_PICTURES */ sierra_delete_pictures, /* GET_FILENAME */ sierra_get_filename, /* THUMB_HISTOGRAM */ NULL, /* THUMB_LOAD_DATA */ NULL, /* GET_QUALITY_STR */ sierra_get_quality_str, /* GET_FLASH_STR */ sierra_get_flash_str, }; ``` In the end, my Sierra driver implements almost everything my program supports: all information fields \(camera name, camera time, quality mode, flash mode, pictures taken, pictures remaining, battery status\) are readable, flash and quality modes are settable, we can snap a picture, etc\. The libgphoto2 Sierra driver has made things very easy as it is functional and easy to understand\. It’s sprinkled with a a few magic numbers here and there, but they were easy to make sense of and \#define\. The only feature not available is`sierra\_get\_thumbnail`\. It actually is implemented, because it is easy to fetch a thumbnail from the camera: it’s the same procedure as getting a picture, using two different camera registers\. But it’s not wired in the UI, as the thumbnails are JPEGs\. There is no way I have room to load the JPEG decoder in the UI program, where thumbs are displayed, so I left it out\. Another small annoyance with the Sierra cameras \(at least the two Sanyos I have\) is that it seems they cheaped out on the serial chip\. I can talk to them at 115200bps on the PC, but not on the Apple II\. Sigrok captures of the signals show that the start bits start too soon after the stop bits, and this confuses the Apple II’s ACIA 6551, which throws framing errors\. So, speed is limited to 19200bps – even on the IIgs\. [![](https://www.colino.net/wordpress/wp-content/uploads/image-145.png)](https://www.colino.net/wordpress/wp-content/uploads/image-145.png)A Sigrok capture, viewed in Pulseview, with the start bit starting on the stop bit\. The stop bit also starts early\.[![](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-54-35-105.jpg)](https://www.colino.net/wordpress/wp-content/uploads/signal-2026-09-09-13-54-35-105.jpg)A picture of a building with trees, straight out of the Sanyo VPC\-G200## Supported cameras Only noting the cameras I tested with, this will add support for: - [Sanyo VPC\-G1](https://www.digitalkameramuseum.de/en/cameras/item/sanyo-vpc-g1) - [Epson PhotoPC PCDC001](https://www.digitalkameramuseum.de/en/cameras/item/epson-photopc) - [Sierra Imaging SD640](https://www.digitalkameramuseum.de/en/cameras/item/sierra-imaging-sd640) - [Sanyo VPC\-G200](https://www.digitalkameramuseum.de/de/digitalkameras/item/sanyo-vpc-g200) I strongly suspect that the following cameras might work out\-of\-the\-box, but that is untested\.: - [Agfa ePhoto 307](https://www.digitalkameramuseum.de/en/cameras/item/agfa-ephoto-307) - [Agfa ePhoto 780](https://www.digitalkameramuseum.de/en/cameras/item/agfa-ephoto-780) - [Epson PhotoPC 500](https://www.digitalkameramuseum.de/en/cameras/item/epson-photopc-500) - [Epson PhotoPC 550](https://www.digitalkameramuseum.de/en/cameras/item/epson-photopc-550) - [Olympus C\-400](https://www.digitalkameramuseum.de/en/cameras/item/olympus-c-400) - [Olympus C\-400L / D\-200L](https://www.digitalkameramuseum.de/en/cameras/item/olympus-c-400l) - [Olympus C\-410L](https://www.digitalkameramuseum.de/en/cameras/item/olympus-c-410l) - [Olympus C\-420L / D\-220L](https://www.digitalkameramuseum.de/en/cameras/item/olympus-c-420l) - [Polaroid PDC\-640](https://www.digitalkameramuseum.de/en/cameras/item/polaroid-pdc-640) - [Sanyo VPC\-G210](https://www.digitalkameramuseum.de/en/cameras/item/sanyo-vpc-g210) - [Sanyo VPC\-G250](https://www.digitalkameramuseum.de/en/cameras/item/sanyo-vpc-g250) ## Refactoring again and next steps Now that the Sierra driver is written, and even if the camera drivers themselves are stored compressed \(using zx02\) on the floppy, I had only 6kB left on the program’s floppy disk\. Not really enough to add anything important… and I plan on adding more camera drivers\! So I kept on compressing things, and compressed the UI and image decoders binaries themselves\. I could have made them self\-decompressing, but that would have meant having multiple copies of the decompressor, one per binary\. So instead, I extended Oliver Schmidt’s LOADER\.SYSTEM to handle zx02\-compressed binaries\. The next step is finding a new camera driver to implement, and it will be the[Canon PowerShot 350](https://www.digitalkameramuseum.de/en/cameras/item/canon-powershot-350), a 1998 camera, 18 years younger than the Apple II, with apparently[a hell of a protocol](https://github.com/gphoto/libgphoto2/blob/master/camlibs/canon/ps350/ps350proto.txt)\. I wonder if I should rename the Quicktake for Apple II project to reflect the fact that it supports more and more cameras? But I like the current name, and I have no better idea\.

Similar Articles

Kodak DC50 now usable on the Apple II

Hacker News Top

A new version of Quicktake for Apple II has been released, adding support for the Kodak DC50 Zoom camera with features like image transfer and settings adjustment on the retro computer.

The Apple Disk II Controller Card

Hacker News Top

This article provides a detailed technical history of the Apple Disk II controller card, explaining its innovative software-driven design by Steve Wozniak and its impact on the Apple II's success.

The Card That Made the Apple II Serious

Lobsters Hottest

A deep dive into the Videx VideoTerm, the 80-column card that transformed the Apple II into a serious business machine, and its modern FPGA emulation via the A2FPGA project, focusing on hardware architecture and the MC6845 CRT controller.

Bringing Swift to the Apple II

Lobsters Hottest

A developer created SwiftII, a Swift-flavored mini development environment for the Apple II, including a REPL, file browser, and text editor, bringing a taste of modern programming to vintage hardware.

Siemens PC-X (2015)

Hacker News Top

The article explores the Siemens PC-X, a 1984 PC that ran SINIX (a Unix-based OS) and featured unique hardware specifications and design, providing historical context for early computing.