世界を動かす技術を、日本語で。

Snow - クラシックMacintoshエミュレーター

概要

Snow は、Motorola 680x0ベースの クラシックMacintosh をハードウェアレベルでエミュレートするソフトウェア。 Rust製 で開発され、MITライセンスの オープンソース プロジェクト。 GUIによる操作や 高度なデバッグ機能 を搭載。 現在は複数の初期Macモデルをサポート。 最新情報やダウンロードは 公式ドキュメント やGitHubで確認可能。

Snowエミュレーターの特徴

  • Motorola 680x0アーキテクチャ を搭載したクラシックMacintoshの ハードウェアレベルエミュレーション
  • ROMパッチやシステムコールのインターセプトを行わない 純粋なエミュレーション方式
  • グラフィカルユーザーインターフェース(GUI) による直感的な操作性
  • 高度なデバッグ機能 を標準搭載
  • サポート機種
    • Macintosh 128K
    • Macintosh 512K
    • Macintosh Plus
    • Macintosh SE
    • Macintosh Classic
    • Macintosh II
  • プロジェクトは Rust で記述
  • MITライセンス で公開されるオープンソースプロジェクト

ダウンロードと利用方法

  • 最新ビルド(bleeding edge builds)のみ提供
    • 開発進行に合わせて自動生成されるビルド
  • 対応OSとアーキテクチャ
    • Windows 10以降 :x86(64ビット)
    • macOS 11.7 (Big Sur)以降 :Universal
    • Linux :x86(64ビット)
  • オンラインデモ も利用可能(GUIやフル機能は非搭載、エミュレートマシンのみ)
  • セットアップ方法や詳細情報 は公式オンラインドキュメントを参照

サポート・連絡先

Snowの設計思想と他エミュレーターとの違い

  • ROMパッチやシステムコールのインターセプトを行わず、実機に近い ハードウェア挙動の再現 を目指す設計
  • デバッグ機能が豊富 で、開発者や研究者にも適した環境
  • オープンソースのため コミュニティによる改良・拡張が容易

まとめ

  • Snow は、クラシックMacintoshを 高精度で再現するエミュレーター
  • Rust製のモダンな実装オープンソース での公開
  • 初心者から開発者まで幅広く利用可能 な設計
  • 最新情報は GitHubや公式ドキュメント で随時確認可能

Hackerたちの意見

クラシックMacシステムのポータブルで使いやすいハードウェアレベルのエミュレーターがなぜ重要なのか、2020年のこのブログ記事を見てみてね:https://invisibleup.com/articles/30/ ゲーム機に関しては、Nestopiaやbsnes、Dolphin、Duckstationといったエミュレーターが何年も前からあるけど、PCではVMWareやVirtualBoxのような仮想化システムがほとんどの人のニーズを満たしてきた。最近では86BoxやMartyPCのような高忠実度のエミュレーターも出てきた。C64にはVICE、AmigaにはWinUAE、Apple IIにはKEGSやAppleWinのような高品質のエミュレーターがあるけど、Macは主にBasilisk IIのような高レベルで近似的なエミュレーターに限られているんだよね。

その記事は客観的には正しいけど…人々が無償でやってきた努力をこんなにひどく軽視するのは見たことがない。

互換性に関しては、他のエミュレーターよりもずっと悪いけど、Executorっていうのもあるよ:https://en.wikipedia.org/wiki/Executor_(software) これを使うと、ブラウザでMacintosh版のソリティアを動かせるんだ。ブラウザがMS-DOSをエミュレートして、その後Executor/DOSを動かす感じね:https://archive.org/details/executor Executor/DOSの他にも、未リリースのバージョンがSun 3ワークステーションで動いてた(そっちも680x0プロセッサを使ってた)し、Executor/NEXTSTEPはNeXTマシンでも動いてた。ExecutorはAppleの知的財産を使ってないから、互換性が一番低かったんだ。ROMやシステムソフトウェアの代替品は、クリーンルームで書かれていて、AppleのROMやシステムファイルの逆アセンブルはしてないんだ。ExecutorにはLinuxポートがあるみたいだけど、構築するのは難しいかも(ここ20年は試してないけど)。80386プロセッサから最大のパフォーマンスを引き出すために、合成CPUはgcc特有の拡張に依存してたからね。Executorについては結構詳しいけど、初期バージョンを書いたのは僕なんだ。ただ、すごい部分(合成68kエミュレーターやカラーユニットなど)は、僕よりも優れたプログラマーが書いたものだよ。

「ユーザーフレンドリー」とは言えないかもしれないけど、MAMEはMacintoshとApple IIのハードウェアレベルのエミュレーションをしてるよ(KEGSやAppleWinよりも正確で周辺機器も多いけど、使い勝手は劣る)。

Macエミュレーションのユーザーフレンドリーさは確かに改善の余地があるよね(minivmacのコンパイル時設定は本当にイライラする)。でも、ほとんどのエミュレーターと比べるのはちょっと不公平だと思う。VMwareやVirtualBoxは数十億ドルの企業に支えられてるし、16ビットマシンはMacよりずっとシンプルだし、ゲーム機は非常に均一で文書化されたハードウェアを持っていて、数もずっと多かったからね(スーパーファミコンだけで1987年から1995年までの全てのMacよりも多く売れた)。だから、開発者やユーザーを引き寄せるコミュニティが大きいんだ。NESエミュレーターを書くのは今やほぼ週末プロジェクトみたいなもんだよ、すごく文書化されてるから。

miniVMACと68kを忘れてるよ。QemuはMacPPCをちゃんとエミュレートできるよ。

ソフトウェアについてはそうだけど、ハードウェア(FPGA HDL)もあるよ、例えばMacPlus-miSTerコアね。[0] 0. https://github.com/MiSTer-devel/MacPlus_MiSTer

大学卒業後の初期の仕事のデータは、Macフォーマットのベルヌーイディスクに保存されてるんだ。ソフトウェアを動かすにはADBドングルが必要だから、物理的なハードウェアが必要なんだよね。あのADBからUSBへのアダプターがエミュレーターにマッピングできるかどうか気になるな。

もしバックアップを取っていなかったら、そのデータはもう無くなってるかもしれないよ。もし大事なデータなら、早めに確認した方がいいと思う。

知ってる限りのADBからUSBへのアダプターは、マウスとキーボードしかサポートしてなくて、内部ファームウェアがUSB HIDにマッピングされてるんだ。エミュレーターに生のパススルーをするにはカスタムファームウェアを書かなきゃいけない…ソフトウェアをハックする方が簡単かもね!

動作するベルヌーイボックスを持ってる人は、たぶんそれに合う古いMacも持ってるだろうね。

これがうまくいくかも? https://www.bigmessowires.com/usb-wombat/

ちょっと助けてほしいんだけど、ROMをどうやって探せばいいの?Googleで見つけたサイトからいくつかダウンロードしようとしたけど、エミュレーターが「不明またはサポートされていないROMファイル」と言ってくる。使えるROMを見つけるにはどうすればいい?

ちょっと助けてほしいんだけど、ROMをどうやって見つければいいの?Googleで見つけたサイトからいくつかダウンロードしてみたけど、エミュレーターが「不明またはサポートされていないROMファイル」って言うんだ。使えるROMを見つけるにはどうしたらいいの?これなら動くみたいだよ: https://archive.org/details/mac_rom_archive_-_as_of_8-19-201...

https://macintoshgarden.org/ は、俺にとってはいつもゴールドスタンダードのソースだね!

正確性のおかげで、これにはBasiliskIIの killer featuresがいくつかないんだろうね。OSやROMをパッチして超高解像度をサポートしたり、ホストのファイルシステムやネットワークとほぼシームレスに統合したりする機能があるからさ。Basiliskは、もしかしたらその不正確だけど魅力的な機能のせいで、ちょっと不安定なんだよね。でも、ちゃんと動くときは本当に使いやすくて驚くほど楽しいよ。

クリーンなコードベースの正確なエミュレーターは、パッチやショートカットを追加するのにいい出発点だよ。Basiliskのパッチコードを見たけど、そんなに複雑じゃないし、BasiliskやExecutor(コメント欄に作者がいる)、MACEなどの部分的なToolboxの再実装がいくつかあるんだ。ポートするのはちょっと手間だけど、基本的にはコードの直接翻訳とテストインフラの追加で済むよ。

これってMartyPCからインスパイアされたの?

面白いことに、実はtwvdと友達で、同じGUIツールキットを使ってるから、ディスコードサーバーでUIアイデアを交換してるんだ。Snowは、MartyPCのために作ったディスクイメージライブラリを使ってるよ。「インスパイアされた」って言葉は強すぎるけど、正確なエミュレーターの概念を発明したわけじゃないけど、彼のアプローチには確かにファンだね。

マックもリサみたいにハードウェアのサイクル精度エミュレーションが必要なのかな?lisaemでちょっと遊んでQemuでも実験してみたけど、リサのOSはハードウェアのタイミングに関して前提を持ってるから、Qemuではそれに対応できないんだよね。

初期のMacはIWMを使っていて、これは基本的にWozniakが1977年に作ったDisk IIコントローラーを一つのチップにまとめたものなんだ。Apple IIで使われたサイクル精度のコードのトリックが、Macでも使われてる。だから、ディスクに書き込んでるときにカーソルが時々止まっちゃうんだよね。Macには60Hzの割り込みタイマーがあって、これがカーソルも追跡してるから、書き込み中はオフにしないといけないんだ。Andy HertzfeldがFolklore.orgに書いた話の中で、これに触れてる部分があるよね。> Wozのディスク技術は、ソフトウェアが正確に32マイクロ秒ごとに新しいデータを供給する必要があったんだ。もし1マイクロ秒でも早かったり遅かったりすると、データにグリッチが起きて壊れちゃう。ルーチンを書くためには、Macintoshが各命令をどれくらいの速さで実行するかを知る必要があった。マニュアルには各命令のクロック数が書いてあったけど、メモリから取得するのにどれくらい時間がかかるかは分からなかった。だから、もちろんBurrellにタイミングを聞いたんだけど、彼の返事には驚いたよ。> 「分からないよ。MacはApple IIと同じように同期式だから、各命令は実行するたびに同じタイミングになる。だから、正確なタイミングのディスクルーチンを書けるはずだ。何秒かは分からないから、測定しよう。君がルーチンを書いて、ロジックアナライザーで測定しよう。」 -- https://www.folklore.org/Nybbles.html これを聞いて思い出したけど、Apple IIのスパイラルトラックや異なるサイズのセクター、異なるニブル化スキームみたいな変わったディスク技術も、理論的にはMacでも可能だったんだよね。これらがコピー保護に使われたことがあったのかな?

標準のMac OS 7.1インストールディスクを使って、Mac PlusのROMでこれを読み込もうとしたんだけど、ドライブ0: ディスクが取り出されました?Mini vMacは動いてるみたい。まだちょっと手を加える必要がありそうだね。

すごくリアルに感じる、素晴らしい仕事だね。これをアタリSTのエミュレーションにできる可能性はある?

Hatariはもう素晴らしいの?https://github.com/hatari/hatari それにClock Signal (CLK)もあるよ。「レイテンシーが嫌いなエミュレーターで、アコーンエレクトロンやアーキメデス、アムストラッドCPC、Apple II/II+/IIe、初期のマッキントッシュ、アタリ2600やST、コレコビジョン、エンタープライズ64/128、コモドールVic-20やアミガ、MSX 1/2、オリック1/アトモス、初期のPC互換機、セガマスターシステム、シンクレアZX80/81やZXスペクトラムをエミュレートする。」https://github.com/TomHarte/CLK

HD20サポートがSEやIIなどに対して「該当せず」とされてるのに驚いたよ。IIを除くすべてのモデルにはROMにHD20ブートサポートがあると思う。物理的なMac SEでHD20エミュレーターを使ってるけど、エミュレーターや物理フロッピーディスクエミュレーターに任意のサイズのディスクイメージを入れるのに最も便利な方法の一つだよ。