ブートセクタで動く512バイト(510バイト)のオセロを作った話
はじめに
ブートセクタで動くオセロゲームをアセンブリで作りました。実質510バイトで書いており、BIOS上であればOS無しで動きます。
対人戦です。交互に先手と後手になり、どちらの場合もユーザが石を置く場所を入力して指定します。
石の場所はx軸をa〜h、y軸を1〜8で指定します。例えば左上はa1
、右下はh8
です。
下のリンクからブラウザでも試せます。ただし、スマートフォンではキーボードが表示されないため、石の座標を入力することが難しいと思います。
本作品はイベントで展示したものです。
ブートセクタとは
ディスクの最初の1セクタです。BIOSはそのセクタの最後が0x55
0xAA
で終わる場合、そのセクタをメモリ上にロードして実行します[1]。本来はWindowsやLinuxなどをロードするためのコード(のコード)が書かれています。
このように、本来はOSをロードする部分でオセロを書いたため、OS無しで動作します。一方で、1セクタのみなため、最大で512バイト(シグネチャを除くと510バイト)までという制約もあります。
なお、最近のPCはUEFIが主流なので動きません。レガシーモードにすれば動くはずです。
おわりに
本記事ではブートセクタで動くオセロを開発したことについて紹介しました。特に512バイトであること、OS無しで動くこと、アセンブリで開発したことがポイントです。
本作品は「510バイト以内」の制約がすごく難しく、特に斜めの石判定を加えるとどうしても510バイトをオーバすることが最大の困難でした。それゆえに完成したときの達成感も大きかったです。
-
ちなみにフロッピーディスクに書き込む場合はシグネチャの必要はないそうです。そういえばフロッピーを入れたままPCを起動すると立ち上がりませんでしたね。でもBochsで動かす場合はフロッピーでもシグネチャがないとロードしてくれないです…… ↩︎
Discussion