前回はLinux上のAltairZ80シミュレータ上のCP/M2.2の使い方を調べてみました。今回は定石通り、Hello WorldをCP/M上でやってみたいと思います。使用するのは古き良き時代のアセンブラ、デジタル・リサーチのASMであります。シミュレータはZ80ですが、ニーモニックは懐かしのインテル8080とな。
前回も長々と書きました。Windows11上のWSL2上のUbuntu20.04LTS上のAltairZ80シミュレータ上のCP/M 2.2なんであります。「今は亡き」デジタルリサーチ社のCP/Mはもともとインテル8080用のオペレーティングシステムです。今は亡きティム様の以下の偉業によって旧デジタルリサーチ社の資産を動かしてみることができるようになっており。
Tim Olmstead Memorial Digital Research CP/M Library
コマケー話、16進数表現
C言語の普及にともなって16進数リテラルは、
0x00
みたいな記法を用いるようになって久しいです。しかしこの老人がマイコンを学び始めた太古の昔(の80系)は異なりました。
00h
などと書いておりました。16進なのでAからFまでの文字も用いるのですが、AからFまでが先頭にくる場合は、
0ABh
のように頭に0を置くのがお作法でした。インテルニーモニックに慣れ親しんだものにとっては故郷の方言というべきか。今回使用のアセンブラはそれです。
8080とZ80、8085
インテル8080、8ビットCPUは、インベータ・ゲームで大ブレークを果たしたことで知られるとおり、デジタルな世の中の最初の1里塚的なCPUでした。しかし、当時のN-MOSのLSIは3電源を必要としました。メンドクセー。ということでその後継機種が2種。本家インテルは8085という単電源機種を出荷。8085は命令セットはほぼほぼ8080と同じ(2命令のみ追加)です。一方、元インテルの8080設計者が設立のザイログ社も単電源化した8080の上位互換(追加命令多数)のZ80を開発。世間的には80系8ビットの本流はZ80の側に流れた感じであります。
機械語レベルでZ80はインテル8080の上位互換ですが、アセンブラレベルのニーモニックは異なります。ぱっと見で分かるのはインテルはMOVと書くけど、ザイログはLDと書くと。著作権的な配慮だったらしいです、マニュアルの。
今回使用させていただいているAltairZ80シミュレータは、8080CPUを使用した初期の「パソコン(マイコン)」の偉大な金字塔 Altair社のマシンをシミュレートしているのですが、CPUはZ80に取り換えた「新式」バージョンのシミュレータみたいです。今回はオリジナルCP/Mの8080用のアセンブラを動かしてみるので、インテルニーモニックです。
エディタはLinux上のnanoね
CP/M上には悪名高い?EDエディタがあり、昔使ってましたが今は忘れてます(思い出したくない?)今回の環境にはスクリーンエディタの嚆矢ともいえるWM(ワードマスター)も含まれてました。忘却力の年寄が太古の時代のスクリーンエディタのキーストロークなど覚えているわけありません。いまさらだしな~。
ということで、ソースの編集は、Linux上でnanoエディタで行うことにいたしました。なお、nanoにはCP/Mにピッタンコの機能があるのです。
nanoでファイルセーブするときに CTRL-O キーを押しますが、そのとき、以下のようなメニューが出るのをお気づきでしたか?
手元の環境では MetaキーはALTキーであったので、ALT+D押すとこんな感じです。 DOS Formatとな。
これでCP/M世界用に行末 CR+LF にすることができました。DOSの行末がCR+LFになったのは元はといえばCP/M由来かと。
CP/Mは大文字小文字関係ねーケド
さて、CP/M上では大文字小文字は関係ねーです。皆、大文字で認識される世界。昔のMS-DOSと同じね。しかし、うっかりLinux上で小文字のファイル名でファイルを作ってしまったので、以下のようにしたら以下のように怒られました。トホホ。
CP/M内からLinux上のファイルをGetするつもりなら、大文字のファイル名にしておく方が良いみたいです。
いよいよアセンブル
ソースファイルさえできてしまえば、アセンブルは簡単。Iディスク(今回環境では8Mバイトの「大きな」HDDらしいっす)から、ブートのAディスク上の各種コマンドを呼んでいきます。
-
- Rコマンドで、外のLinux環境からソースファイルをリード。
- ASMコマンドでソースファイルをアセンブル(拡張子は.ASMが既定。)
- LOADコマンドでアセンブル結果のインテルHEXフォーマットのオブジェクトファイルをCP/MがローダブルなCOM形式(単なる100H番地スタートのバイナリ)に変換。
ASMによって生成されるのは、まずはアセンブラリスティングファイル、拡張子PRNです。
ちょっとTABストップがデコボコしてしまったのは、現代的なnanoでは1タブ4空白設定であったものを1タブ8空白のCP/Mの伝統的な世界に持ち込んでしまったためみたいデス。知らんけど。今度は気をつけよう。
インテルHEXファイルが以下に。伝統の”:”始まりデス。まあ、インテルHEXもいくつか形式ありーの。その中でも一番簡単なやつね。
Hello World
生成された HELLO.COM を実行するときは、helloっと(大文字小文字関係ない。)
8080アセンブラを何十年かぶりに動かしましたな。