HN 日本語サマリー

← 一覧へ戻る
プログラミング

Apple IIにおけるSierra製デジタルカメラ

Sierra digital cameras on the Apple II (colino.net)

37 pointsby ibobev6 コメント

要約

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は任意の数のドライバーで拡張可能になります!

[画像: Sanyo VPC-G1 (1995)]

[画像: Sanyo VPC-G200 (1997)]

以下は、ボイラープレートコードのみを実行する私の「スケルトン」ドライバーです。これは基本的に、サポートされている機能のビットフィールドと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から直接撮影された、木々のある建物の写真]

サポートされるカメラ

私がテストしたカメラのみを記載します。これにより、以下のカメラのサポートが追加されます。

以下のカメラも、おそらくそのまま動作するだろうと強く推測しますが、未テストです。

再度のリファクタリングと次のステップ

Sierraドライバーが完成し、カメラドライバー自体はフロッピーディスク上で(zx02を使用して)圧縮されているにもかかわらず、プログラムのフロッピーディスクには6kBしか残っていませんでした。重要なものを追加するには全く足りません…そして、さらに多くのカメラドライバーを追加する予定です!

そこで、UIと画像デコーダーのバイナリ自体も圧縮しました。自己解凍型にすることもできましたが、それはバイナリごとにデコンプレッサーのコピーが複数必要になることを意味します。そのため、代わりにOliver SchmidtのLOADE.SYSTEMを拡張して、zx02圧縮バイナリを扱えるようにしました。

次のステップは、実装する新しいカメラドライバーを見つけることです。それはCanon PowerShot 350になります。これは1998年のカメラで、Apple IIより18歳若く、明らかにとんでもないプロトコルを持っています。

Apple IIでサポートするカメラがますます増えているという事実を反映して、Quicktake for Apple IIプロジェクトの名前を変更すべきか疑問に思っていますか?しかし、現在の名前は気に入っていますし、他に良いアイデアもありません。