前回は「シンボリックでない」デバッガの代表選手、DDTを動かしてみました。インテル8080用です。さて「シンボリックな」デバッガに進みて~と思ったのですが、まずはシンボルファイルを生成できないと話になりません。ここでアセンブラも交代っす。ASMからMACね。MACといってもアレではありませんぞ。マクロアセンブラね。
※Windows11上のWSL2上のUbuntu20.04LTS上のAltairZ80シミュレータ上のCP/M 2.2を懐かしく使わせていただいております。
※CP/Mは「今は亡き」デジタルリサーチ社のオペレーティングシステムです(ぶっちゃけMS-DOS以前のレトロな世界で一世を風靡したOSっす。)今は亡きティム様の以下の偉業によって旧デジタルリサーチ社の資産をやましからずに動かしてみることができるようになっております。感謝。
Tim Olmstead Memorial Digital Research CP/M Library
マクロアセンブラ
現代的なアセンブラの代表、Gnu様のGASもマクロは使えるのですが、皆さんマクロのことなど気にもとめていないようです。GASはGCCのバックエンドとしてひたすらコンパイラの吐き出したソースをバイナリに変換するばかりだからかと。しかし、ごく一部、ベタなアセンブラを直接記述されている皆さまにとってはマクロが無いと途方に暮れるやもしれませぬ(言い過ぎ?)メンドイ、何度もこの繰り返しを書かんといかんのか。。。
CP/Mに標準で付属のアセンブラASMはマクロ無のアセンブラです。メンドイ奴。しかしデジタルリサーチ社から、MAC、マクロアセンブラを購入すれば(当時のお値段いくらくらいだったのだろ~)マクロが使えるようになりました、そしてシンボルファイルも生成できるようになるのでした。ASMの上位互換?的な。最初からMAC付属させてくれよ、と誰も言わんかったのか?
ちょっと脱線しますが、今に至るまでこの老人の心の中の「最強のマクロアセンブラ」は、インテル製(インテルISISオペレーティングシステム用。どこかのテロリストではないよん)のASM86であります。8086用のマクロアセンブラね。アセンブラの疑似命令(関数)に、EQとかCONDとかEVALとかがあったと言えばその「強力さ」と同時に「過激なユニークさ」もお分かりいただけるかと。ただしあまりにユニークであったがためか、その後のASM286ではフツーのマクロアセンブラに戻ってしまいました。残念。
さてデジタルリサーチのMACですが、AltairZ80シミュレータ付属の「充実の」ディスクイメージには含まれておりません。付属ディスクにはマイクロソフトのM80(マクロエイティ、8080とZ80両対応のマクロアセンブラ)が含まれているので、機能が被るデジタルリサーチのMAC(インテル8080用)まで限られたディスクスペース(1Mバイト程)に入れる必要ないだろ~ということでしょうか。
そこで偉大な以下のサイトからMAC BINARYを拾ってきて、CP/M 2.2のディスクに書き込んで使ってみました。
MACをインストールしてサンプルをアセンブル
上記からバイナリ(サンプルプログラムや各種ライブラリを含みます)を取得して展開すればCP/M 2.2環境へのインストールは簡単。コピーするだけ。こんな感じ。
MACとサンプルプログラムソースをBディスクに書き込みました。
さっそくサンプルプログラムをアセンブルしてみるとこんな感じ。
ASMとほぼほぼ同様な素っ気ない表示です。しかし、生成されたファイル(下の黄色枠内)をみてみると、ASMのときに無かった SAMPLE.SYMが生成されております。これがシンボリックデバッグで使われるSYMファイルね。
およよ、サンプルプログラムを走らせると、一文字 ‘?’ が画面に表示されるハズなのだけれど、画面には何もでません。
PRNファイルの中身を確認してみるとその理由が分かりました。
上の赤線のところね、C, ‘?’ って書いてあるけど E, ‘?’ でないんかい。サンプルプログラムに「仕込み」が入っているとは。エラーの修正の演習用のファイルだったのか?知らんけど。
エラーを修正して(たった1文字だけれど、CP/M上のED使わず、Linux上でソースを編集しなおしてます。ヘタレ。)
修正後はこんな感じ。
予定どおり ‘?’ が印字されたました。とりあえず拾ってきたMAC、動いたみたい。次はマクロ書いて「シンボリックデバッグ」やね。