🗂

ブートセクタで動く512バイト(510バイト)のオセロを作った話

2025/03/24に公開

はじめに

ブートセクタで動くオセロゲームをアセンブリで作りました。実質510バイトで書いており、BIOS上であればOS無しで動きます。

https://github.com/couyoh/boot_reversi

対人戦です。交互に先手と後手になり、どちらの場合もユーザが石を置く場所を入力して指定します。
石の場所はx軸をa〜h、y軸を1〜8で指定します。例えば左上はa1、右下はh8です。

下のリンクからブラウザでも試せます。ただし、スマートフォンではキーボードが表示されないため、石の座標を入力することが難しいと思います。
https://couyoh.github.io/boot_reversi/

本作品はイベントで展示したものです。

ブートセクタとは

ディスクの最初の1セクタです。BIOSはそのセクタの最後が0x55 0xAAで終わる場合、そのセクタをメモリ上にロードして実行します[1]。本来はWindowsやLinuxなどをロードするためのコード(のコード)が書かれています。

このように、本来はOSをロードする部分でオセロを書いたため、OS無しで動作します。一方で、1セクタのみなため、最大で512バイト(シグネチャを除くと510バイト)までという制約もあります。

なお、最近のPCはUEFIが主流なので動きません。レガシーモードにすれば動くはずです。

おわりに

本記事ではブートセクタで動くオセロを開発したことについて紹介しました。特に512バイトであること、OS無しで動くこと、アセンブリで開発したことがポイントです。

本作品は「510バイト以内」の制約がすごく難しく、特に斜めの石判定を加えるとどうしても510バイトをオーバすることが最大の困難でした。それゆえに完成したときの達成感も大きかったです。

脚注
  1. ちなみにフロッピーディスクに書き込む場合はシグネチャの必要はないそうです。そういえばフロッピーを入れたままPCを起動すると立ち上がりませんでしたね。でもBochsで動かす場合はフロッピーでもシグネチャがないとロードしてくれないです…… ↩︎

Discussion