萌えハッカーニュースリーダー

2025/05/15 14:31 How I fixed the infamous Basilisk II Windows "Black Screen" bug in 2013

出典: https://www.downtowndougbrown.com/2025/05/how-i-fixed-the-infamous-basilisk-ii-windows-black-screen-bug-in-2013/
hakase
博士

やあ、ロボ子。今日はBasilisk IIエミュレータのちょっと変わったバグの話をするのじゃ。

roboko
ロボ子

Basilisk IIですか、博士。古いMacintoshのエミュレータですね。どんなバグがあったんですか?

hakase
博士

そう、ロボ子。新しいWindowsで起動すると、画面が真っ黒になることがあったらしいのじゃ。古いバージョンでは問題なかったのに。

roboko
ロボ子

原因は何だったんでしょう?

hakase
博士

それが面白いところでな、ホストマシンのメモリ空間におけるROMとRAMのアドレス配置が関係していたのじゃ。

roboko
ロボ子

メモリのアドレス配置ですか?

hakase
博士

Windows版のBasilisk IIでは、RAMとROMのメモリ領域を別々に確保していたからの。その結果、ROMのアドレスがRAMのアドレスより低くなることがあって、エミュレータ内のSlot ManagerがROMを正しくロードできなくなることがあったらしいのじゃ。

roboko
ロボ子

なるほど。Direct Addressingモードを使っている場合に発生したんですね。

hakase
博士

その通り!そこで、Unix版のコードをWindows版に移植して、RAMとROMのメモリ領域を同時に確保するように変更したのじゃ。これで、ROMのアドレスが常にRAMのアドレスより高くなって、問題が解決したというわけ。

roboko
ロボ子

メモリ割り当ての順序が、プログラムの動作に影響を与えることがあるんですね。勉強になります。

hakase
博士

そうじゃろう?エミュレータのDirect Addressingモードでは、ホストマシンのアドレス空間がエミュレートされた環境に影響を与える可能性があるというのも、覚えておくと良いぞ。

roboko
ロボ子

はい、博士。ところで、記事には「Basilisk IIは、無効なMOVEQ命令(0x71xx)をエミュレートされたCPUとホストマシン間の通信メカニズムとして使用」とありますが、これはどういうことですか?

hakase
博士

ふむ、これはちょっと高度な話じゃな。MOVEQ命令は、特定の値をレジスタに高速にロードするための命令なのじゃが、Basilisk IIでは、この命令を特殊な用途に使っているということじゃ。エミュレータとホストの間で情報をやり取りするために、意図的に無効なMOVEQ命令を使っている、ということじゃな。

roboko
ロボ子

なるほど、そういうテクニックもあるんですね。

hakase
博士

そうじゃ。しかし、今回の教訓は、メモリ管理は本当に大切だということじゃな。アドレスの配置一つで、プログラムが動かなくなることもあるんじゃから。

roboko
ロボ子

肝に銘じます。私もいつか、メモリ管理のエキスパートになりたいです。

hakase
博士

素晴らしい心がけじゃ!そういえば、ロボ子。メモリって、英語で言うと何じゃ?

roboko
ロボ子

えっと、memoryです。

hakase
博士

そう! …つまり、メ・モ・リー… 目盛り… 身長を測るにはメモリが大事!… って、オチが弱いか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search