コマンドラインに文字を入力できるようになったので、今度は入力文字列を解析して、簡単なコマンドを実行できるようにした。その時、文字列を区切ったり比較するstrtokとstrcmpがないことに気付き、慌てて処理関数を作成した。その過程で、strlenも作ることになった。それほど難しくはないが、細かい部分で色々と配慮しなければならないことが多く、当たり前に使っていた関数が、どんなロジックを持っているのか考えさせられて、先人の知恵に感心した。コマンドを切り出して、コマンド文字列を確認し、対応する関数のポインタで関数を実行するC言語特有のテクニックを使ってみた。コマンドはコマンド文字列と実行関数を配列のテーブルとして設定しておいた。
echoは引数の文字列をそのまま画面表示させるだけなのですぐ完成した。memdmpは先頭アドレスだけ指定して、16バイト*16行だけ表示するようにした。80列x25行のテキストモード画面では、それ以上表示させようとすると、画面から上へはみ出てしまうためだ。無制限に表示させるには、画面表示を高機能に作り直して、スクロールバックの機能を実装しなければならないが、ブートモニターでは、そこまでするつもりはない。
(2022/12/09 追記)コマンドラインで「?」を入力すると、内部コマンドを一覧表示する機能を付け加えた。コマンドの配列テーブルを順番に、コマンド名を表示するだけなので簡単だ。
今回は三日ほどで、作ることができ、順調だ。次は、FATFSというフリーのファイルシステムを移植しようと思っている。これができれば、フロッピーディスクから実行プログラムファイルを読み込んで、実行することができるだろう。(厳密なメモリ管理をせずに、小さいプログラムを一つだけ実行するだけ。現状はシングルタスクなので、複数のプログラムをRAMへロードする必要はない)