対実験B-1専用コマンドライン型決戦プログラム作った。

どうも。何でもかんでも自動化したがる大根です。今回は、電気情報物理工学実験の課題B-1「計算機の基礎」のレポート作成を支援する目的で作成したプログラムを公開します。
レポートの作成を支援するソフトなんて、手書きレポート至高主義者が見たら発狂しそうですね。でも、考えても見てください。そもそも、容易に自動化できるようなことをレポートに書けという課題が間違っているのではないでしょうか?自動化は人類の時間の有効活用の味方です。良いことなんです。レポートを手書きすると良いなんて愚かな風習はさっさと捨て去るべきなんです。むしろ、手書きは読みづらいので禁止すべきです。(個人の意見です)

さて、本題ですが、まずは一通り必要なものをダウンロードしてもらいましょうか。
kuechip2_kit.tar.xz
これをダウンロードして解凍すると、

  • KueChip2.pm : エミュレータモジュール
  • sample.pl : sample.sを実行するサンプル
  • sample.s : サンプルプログラム
  • kuechip2_flow.pl : フローチャートジェネレータ

が出てきます。
これらを使ってできることは2つ。
一つは、作成したKue-Chip2のプログラムを動かしてみることで、もう一つが、そのプログラムのフローチャートを作成することです。

実験B-1でどんなくだらない課題が出るのか知らない人のために書いておきます。実験B-1は、教育専用の、実用性皆無の8bitクソザコCPUを載せたボードを使って、リファレンスマニュアル(という名前のアプリケーションノート)に乗っているサンプルプログラムを動かしてみたり、自分でプログラミングしたりする課題です。当然、こんなクソザコマシンで動くコードを生成できるCのコンパイラはないので、アセンブリでプログラミングすることになります。まあ、ここまではそこそこ面白い課題かなと思うんですが、レポート課題が嫌がらせのような苦行なのです。
まず、何故か1ステップごとのCPUの内部状態を(スイッチをかちかちやって手動で読み出して)レポートに書く必要があります。そんなのはデバッガにやらせろ。
しかも、動かしたプログラムすべてについて、何故かほぼ1命令:1ボックス対応のフローチャートを書かされます。フローチャートがプログラムの理解につながると盲信してる愚か者には早く地上から消え去ってほしいものです。一部の無能にはフローチャートがわかりやすいかもしれませんが、そんなものを使って考えている、まともにプログラミングできる人間を、私は知りません。

さて、そんな実験B-1ですが、主に自作プログラムのデバッグとフローチャートの作成を支援すべく、このプログラムは作成されました。
デバッグの方は、KueChip2.pmとかsample.plを見ながら、使い方を察してください。WEB上で動くエミュレータとかもだれかが作ってるので、それを使わせてもらうのもいいでしょう。(わざわざ自作したのは、WEBエミュレータにバグが有るようで、私のプログラムがうまく動かなかったためと、テストケースの入力と答えの確認を自動化してみたかったためです)

フローチャート作成は、こんなコマンドでできます。
./kuechip2_flow.pl sample.s > sample.svg
フローチャートの見た目に影響する各種パラメータが、スクリプトの頭にまとめてあるので、それで見た目をいくらか変更できます。また、出力には処理開始のブロックが描かれないので、これは自力で描いてください。見ればわかるとおり、このプログラムは結果をSVGで出力します。テキスト周りでちょっとレアな機能を、処理を簡略化するために使っているので、一部のレンダラでは正しくレンダリングできない可能性がありますので、注意してください。私が確認した範囲では、ImageMagick, Inkscape, Firefoxはいずれも正しく描画できますが、Libreoffice, eog(librsvg2かな?)は正しく描画できませんでした。多分バージョンによりますので、自分で確かめてください。Inkscapeで、全体選択して、 パス->オブジェクトをパスに ですべてパスに変換してしまうといい具合になると思います。

今回配布したプログラムは、全て無保証です。特に、フローチャートジェネレータを使ってレポートを作って、何か言いがかりをつけられたりしても私は責任をとりません。レポートの作成を手助けするプログラムとしてこのプログラムを作成しましたが、これを使って作るあなたのレポートはあなたのもので、あなたが責任を持って作るべきものだからです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です