レトロな(1) CPM 2.2とAltairZ80シミュレータの操作方法 その1

Joseph Halfmoon

AltairZ80シミュレータで懐かしのCP/M 2.2を動かす」でCP/Mを起動し熱狂。ああここにノスタルジアありと。そこで1シリーズをデディケートいたしまする、『レトロな』。まあなんでもかんでもレトロなマシン、レトロなOSはここだと。当分はAltairZ80使ってCPM 2.2ね。でも使い方が。。。

※「レトロな」投稿順index

所詮、忘却力の年寄なんであります。CP/Mを使ったことあり、といっても遥かな古代の話、とうにその記憶は失われております。またその上今回は、

    1. Windows11上の
    2. WSL2上の
    3. Ubuntu20.04LTS上の
    4. AltairZ80シミュレータ上の
    5. CP/M 2.2

であります。当然、5と3の間でファイルのやりとりなども行いたく、「その方法はどうなのよ」。また、4の使用方法なども知らないと話になりません。CP/Mの使い方を思い出しつつ(今は亡きティム様の以下の偉業によって資料は沢山拝見できるのです)調べていきたいと思います。

Tim Olmstead Memorial Digital Research CP/M Library

CP/M 2.2 とホストOS間のファイル転送

インストールした環境を調べていて気付きました。昔の「CP/Mには存在しない」プログラムのいくつかがA DISKに含まれていることを。そのうち

    • R.COM
    • W.COM

こそが、CP/Mから見える仮想の「フロッピーディスク」と「ハードディスク」とホストOS間のファイル転送ソフトなのでした。Write_cpm_file_to_hostOS

 

上記のように、wにつづけて、CP/M上のファイル名を入力すれば、ホストOS側の「起動ディレクトリ」に該当ファイルが書き込まれます。なお、CP/MはMS-DOSの先駆的な存在でもあり、テキストの行末は CR LF です。

今度は、R.COMを使えば、逆方向にホストOS側のファイルをコピーすることも可能。Read_Host_File_to_cpm

なお、上記のIドライブには、「大容量8Mバイト」のHDDイメージがマウントされとりました。書き込みもOKだね。

CP/M 2.2 のメモリマップと「見えてる」CPU

メモリマップは、以下ようにすることで見ることができます。SURVEY

なんと64Kバイト空間全てが実装されております(仮想環境なんだし当たりまえだろう。)Memory mapの0の下のところだけが黒く抜けているのは、0x00番地から0xFF番地はワーク領域だからでしょう。たしかCCB(コンソール・コマンド・ブロック?)と呼ばれていたのでなかったか。Tと書かれている部分がTPA(トランジェント・プログラム・エリア?)、ユーザープログラムが使っていい部分ですな。そして通常のプログラムは固定0x100番地スタートです。上位アドレスには、Cと記されたBDOS=CP/MのOS本体、Bと書かれたBIOS、そしてRのROMが配置されております。いい感じだな。

どんなCPUが動いているのか(あるいは何を動かすのか指定する)ためには、CP/Mから抜けてシミュレータのプロンプトに一度落ちるといいです。

A> halt

これでSimHシミュレータのプロンプトが現れますです。

CPUのタイプは以下で。SIM_SHOW_CPU

 

 

Z80でした。しかし、いろいろ設定がありそうですが想像つかないものもあり、後々しらべがいがありそうな。

AltairZ80シミュレータ

今回使用させていただいている AltairZ80シミュレータ  は、SimHという歴史的なコンピュータをシミュレーションするためのプロジェクトの成果物であるようです。SimHのユーザーズガイドが以下に。

SIMH Users’ Guide, V3.12-3 05-Dec-2022

SimHが、CPUであったり周辺デバイスであったりをシミュレートしてくれているので、SimHのコマンドを「駆使」することでCP/Mが動いている仮想的なハードウエアの内情を知ることができます。こんな感じ。SIM_REG_MEM

regコマンドを使えば、Z80のレジスタの様子が見えるし、memコマンドを使えばメモリダンプも可能です。SIM環境は一種のデバッガ類似なので、ブレークポイントかけて実行中の環境から脱出してきたり、元に戻ったりが可能みたいです(まだやっておらんけど。)一方シミュレータ環境からホストのファイルなども操作できます。

一端、Halt命令でCP/MからSIMに「落ちた」後、戻る方法はというと、戻り先にHalt命令が書き込まれているのでそのままContinueではダメみたいです。そこで以下のようにしてみました。RESETかけてRUNすればよかったのね。SIM_RESET

CP/MのAプロンプトが復活。次回は Hello World.してみますか?

やっつけな日常(56) AltairZ80シミュレータで懐かしのCP/M 2.2を動かす へ戻る

レトロな(2) AltairZ80シミュレータ上のCP/MでHello World. へ進む