「青空の下でLPC800 Mini-KitとUOS-LPC800を楽しもう!」の説明資料を作っていて、レジスタの扱いについて面白く説明する方法はないかなぁ?と考えていました。
オペレーティング・システムを書くとなると、あのレジスタをこっちにやって、このレジスタをあっちにやって・・・とだんだん頭がわけわからなくなってきます。UOS-LPC800のスケジューラを書いている時も、Cortex-M0+の命令セットをどう使うのか頭を悩ませた気がします。もう忘れましたが。
で、それを他人に説明する時の面白い方法が欲しいと思いました。
で、考えたのが「レジスタ将棋」です。
どんなものになるのか自分でもよくわからなかったので試しに百円ショップで将棋セットを購入。
うーん。
この金将とか歩兵とか邪魔だな・・・。
「裏面を使えば良いか!」と考えていたが、よく考えたら彼らはシチュエーションによって色んな奴に化けるのを失念していました。おぉ、両面に文字がある。
「くそぉー」ということで、耐水ペーパーでゴシゴシ削ってレジスタ名を記入することに。
これで「レジスタ将棋」の完成です。
ちなみに、青い字はLow Registersで、Cortex-M0+のSTM、LDM命令でもアクセス可能なレジスタ。
赤い字はHigh Registersで、Cortex-M0+のSTM、LDM命令ではアクセスできないレジスタです。
「レジスタ将棋」の使い方は至って簡単。
スタックポインタを起点に積んでいくレジスタ駒を並べて行くだけ。
レジスタの退避、復旧、複写は、アドレス・インクリメント・モードが複数あったり、他人に説明する場合にややこしくなりがちです。駒を動かして一つずつ操作を理解する事で、楽しくレジスタ操作を把握できるという算段です。
この「レジスタ将棋」のアイデア、駒を動かしてゲーム感覚でレジスタ操作を整理できるので、我ながら気に入っています。みなさまもオペレーティング・システムのスケジューラを書く際の友として如何でしょうか?