Apple IIにおけるSierra製デジタルカメラ
Sierra digital cameras on the Apple II (colino.net)
要約
Apple II用のQuicktakeプロジェクトで、新たにSierraクラスのデジタルカメラ(約80モデル)への対応が進められています。Sanyo VPC-G1やVPC-G200などのカメラに対応するドライバーが開発され、モジュール化により拡張性が向上しました。ただし、JPEGデコーダーの解像度制限や、シリアル通信速度の制約といった課題も存在します。
全文翻訳
Apple IIでSierra製デジタルカメラをサポート
2026/09/11 - 約5分で読めます
Quicktake for Apple IIでKodak DC-50カメラのサポートを成功させた後、私は「システム要件」が大幅に誇張されていた他のデバイスを調査しました。
[画像: Epson PhotoPCユーザーマニュアルのシステム要件ページ]
libgphoto2のソースコードに基づき、私が(そして彼らが)「Sierraクラス」と呼ぶカメラ群を詳しく調べることにしました。そこには80以上のモデルが参照されており、同じクラスのプロトコルを共有するカメラが多く存在します。Apple IIで利用できるのはそのすべてではありません。私のJPEGデコーダーは640×480ピクセルの画像にハードコードされており、(それを解除するのは可能ですが、メモリとCPUを大量に消費し、すでに十分遅いため、まだ800×600や1024×768のデコードとスケーリングダウンを試す気にはなれません)。640×480ピクセルに限定されたカメラであっても、これにより多くの選択肢が開かれます。
私はeBayで非常に安価なSanyo製カメラを2台購入しました(1995年製のVPC-G1で、Epson PhotoPC PCDC001およびSierra Imaging SD640としても販売されていました。もう1台は1997年製のVPC-G200です)。そして2026年の夏のステイケーション中にドライバーの実装を開始しました。前回のリリースサイクルでKodak DC50のサポートに至る際、コードをリファクタリングし、カメラドライバーを定義されたインターフェースを持つモジュールにしました。これにより、私のプログラムは関連するドライバーのみをメモリにロードできるようになり、フロッピーディスクに収まる限り、Quicktake for Apple IIは任意の数のドライバーで拡張可能になります!
以下は、ボイラープレートコードのみを実行する私の「スケルトン」ドライバーです。これは基本的に、サポートされている機能のビットフィールドと16個の「APIメソッド」を定義しており、そのほとんどはオプションです。必須のエンドポイントは_wakeup、_set_speed、_get_information、_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,
};
最終的に、私のSierraドライバーはプログラムがサポートするほぼすべての機能を実装しました。すべての情報フィールド(カメラ名、カメラ時間、品質モード、フラッシュモード、撮影済み枚数、残り枚数、バッテリーステータス)が読み取り可能で、フラッシュと品質モードは設定可能であり、写真を撮影することもできます。
libgphoto2のSierraドライバーは、機能的で理解しやすいため、作業を非常に容易にしてくれました。あちこちにいくつかのマジックナンバーが散りばめられていましたが、それらは意味を理解して#defineにするのが簡単でした。
利用できない唯一の機能はsierra_get_thumbnailです。実際には実装されています。なぜなら、カメラからサムネイルを取得するのは簡単な手順だからです。これは、2つの異なるカメラレジスタを使用して、画像を取得するのと同じ手順です。しかし、サムネイルはJPEGであるため、UIには組み込まれていません。サムネイルが表示されるUIプログラムにJPEGデコーダーをロードする余裕は全くないため、この機能は除外しました。
Sierraカメラ(少なくとも私が所有している2台のSanyo製)に関するもう一つの小さな煩わしさは、シリアルチップがコスト削減されているように見えることです。PCでは115200bpsで通信できますが、Apple IIではできません。Sigrokで信号をキャプチャした結果によると、ストップビットの後にスタートビットが早すぎるタイミングで開始され、Apple IIのACIA 6551を混乱させ、フレーミングエラーを引き起こします。そのため、速度はIIgsでさえ19200bpsに制限されています。
[画像: スタートビットがストップビット上に開始されているSigrokキャプチャ。ストップビットも早く開始しています。]
[画像: Sanyo VPC-G200から直接撮影された、木々のある建物の写真]
サポートされるカメラ
私がテストしたカメラのみを記載します。これにより、以下のカメラのサポートが追加されます。
以下のカメラも、おそらくそのまま動作するだろうと強く推測しますが、未テストです。
- Agfa ePhoto 307
- Agfa ePhoto 780
- Epson PhotoPC 500
- Epson PhotoPC 550
- Olympus C-400
- Olympus C-400L / D-200L
- Olympus C-410L
- Olympus C-420L / D-220L
- Polaroid PDC-640
- Sanyo VPC-G210
- Sanyo VPC-G250
再度のリファクタリングと次のステップ
Sierraドライバーが完成し、カメラドライバー自体はフロッピーディスク上で(zx02を使用して)圧縮されているにもかかわらず、プログラムのフロッピーディスクには6kBしか残っていませんでした。重要なものを追加するには全く足りません…そして、さらに多くのカメラドライバーを追加する予定です!
そこで、UIと画像デコーダーのバイナリ自体も圧縮しました。自己解凍型にすることもできましたが、それはバイナリごとにデコンプレッサーのコピーが複数必要になることを意味します。そのため、代わりにOliver SchmidtのLOADE.SYSTEMを拡張して、zx02圧縮バイナリを扱えるようにしました。
次のステップは、実装する新しいカメラドライバーを見つけることです。それはCanon PowerShot 350になります。これは1998年のカメラで、Apple IIより18歳若く、明らかにとんでもないプロトコルを持っています。
Apple IIでサポートするカメラがますます増えているという事実を反映して、Quicktake for Apple IIプロジェクトの名前を変更すべきか疑問に思っていますか?しかし、現在の名前は気に入っていますし、他に良いアイデアもありません。