CP/M移植(1)
2024.02.15
2004年頃にMZ-2000へのCP/M移植をした話は、すでに自分のサイトで書いた。ちょっと久しぶりに思い出してみる。
最初に取り組んだのは高校生の頃で、昭和の末期だった。
図書館から借りてきた本によると、CP/Mは移植できるようだ。その程度の知識からのスタートだった。
ちょうど親戚からもらったMZ-2000が有り、64KB RAM空間だからCP/Mを動かすのにはちょうど良い。
そして当時は、開発ツールがないからハンドアセンブルしかなかった。Z80の命令表を下敷きに入れて持ち歩き、それを見ながらニーモニックをマシン語へ変換していく。
良く出てくる命令は、前に使った部分から書き写せば良いし、やっているうちに覚えてしまい、今でも覚えている。
ある番地から別の番地へのブロック転送は、21 00 00 11 00 80 01 00 20 ED B0 C9 とか。
こんな事に脳の記憶容量を浪費しているなんて。
ハンドアセンブルから脱却しないと、ある程度の規模のプログラムを作るのは非常に効率が悪い。とにかく開発ツールが欲しかった。CP/M上でM80を動かしたかった。
CP/Mはどこから持ってくるかと考えて、いけない事だがPC-8001用とX1用をどこからか入手した。
これを元にして、基本的にはBIOSをMZ-2000用に作れば良い。フロッピーからロードする手段は、また別に必要になる。
PC-8001用やX1用のフロッピーは、MZ-2000で直接読み出す事はできない。直接、というのはたとえばBASICでFILESとやればファイル名のリストが出てきてLOADできるとか、そんなレベルの話。こんなふうに簡単にはできないということ。
とりあえずセクターダンプでは中身をのぞくことができた。但し、FDCの違いによってバスの論理が逆転しているから(MZ-2000はMB8876、他の機種はMB8877など)、論理反転して読み込んでみた。
何番のセクターからどこまでがどのファイルか、なんてのは当時わからなかったから、とにかくひとつずつ読み込んでみて、たぶんここからここまでかな、この分があのファイルじゃないだろうか、と推測していた。
ダンプしていくとテキストファイルだと文字が見えてきて、どうやらこれはBIOSのソースだなと把握することができた。
こうして抽出したテキストをファイル化して、ソースを別のPC上に再現したのは2004年の話。
高校生の当時は、紙にプリントして、うーんと考えるばかり。どこをどう直したら良いんだ?しかもハンドアセンブルで全体を・・・? まだまだ実力が足りなかった。
2004年に取り組んだ時には、別のPC上でソースをアセンブルできる環境があったから、とにかく仕事が進んだ。
ん? 開発環境があるなら今更MZに移植しなくても? (まあ、いいじゃないですか)
最初は1文字入力と出力をシリアル通信に割り当てて、WindowsのPCから通信してCP/Mを動かしていた。そのうちにMZの画面に文字表示できるように作っていったっけ。キーボード入力は作るのが面倒くさくて結局作ってない。
フロッピーから直接CP/M本体を読み込んでブートする方法は最初自分でできなかったから、考えたのはBASICからBLOADすることだった。
とにかくBASIC上で、RAMの空いたところにCP/Mのファイルを読み込んでいき、そこで修正をかけたものをBSAVEして保存すれば!
ちょうど良いことにCP/Mの存在するアドレスとBASICのワークエリアとは干渉しない。
一部だぶったっけ。もう忘れたが、とにかく最初BASICが起動し、それからCP/MをBLOADして、CP/Mへジャンプしたら後はCP/Mだけが動く世界。
最初に取り組んだのは高校生の頃で、昭和の末期だった。
図書館から借りてきた本によると、CP/Mは移植できるようだ。その程度の知識からのスタートだった。
ちょうど親戚からもらったMZ-2000が有り、64KB RAM空間だからCP/Mを動かすのにはちょうど良い。
そして当時は、開発ツールがないからハンドアセンブルしかなかった。Z80の命令表を下敷きに入れて持ち歩き、それを見ながらニーモニックをマシン語へ変換していく。
良く出てくる命令は、前に使った部分から書き写せば良いし、やっているうちに覚えてしまい、今でも覚えている。
ある番地から別の番地へのブロック転送は、21 00 00 11 00 80 01 00 20 ED B0 C9 とか。
こんな事に脳の記憶容量を浪費しているなんて。
ハンドアセンブルから脱却しないと、ある程度の規模のプログラムを作るのは非常に効率が悪い。とにかく開発ツールが欲しかった。CP/M上でM80を動かしたかった。
CP/Mはどこから持ってくるかと考えて、いけない事だがPC-8001用とX1用をどこからか入手した。
これを元にして、基本的にはBIOSをMZ-2000用に作れば良い。フロッピーからロードする手段は、また別に必要になる。
PC-8001用やX1用のフロッピーは、MZ-2000で直接読み出す事はできない。直接、というのはたとえばBASICでFILESとやればファイル名のリストが出てきてLOADできるとか、そんなレベルの話。こんなふうに簡単にはできないということ。
とりあえずセクターダンプでは中身をのぞくことができた。但し、FDCの違いによってバスの論理が逆転しているから(MZ-2000はMB8876、他の機種はMB8877など)、論理反転して読み込んでみた。
何番のセクターからどこまでがどのファイルか、なんてのは当時わからなかったから、とにかくひとつずつ読み込んでみて、たぶんここからここまでかな、この分があのファイルじゃないだろうか、と推測していた。
ダンプしていくとテキストファイルだと文字が見えてきて、どうやらこれはBIOSのソースだなと把握することができた。
こうして抽出したテキストをファイル化して、ソースを別のPC上に再現したのは2004年の話。
高校生の当時は、紙にプリントして、うーんと考えるばかり。どこをどう直したら良いんだ?しかもハンドアセンブルで全体を・・・? まだまだ実力が足りなかった。
2004年に取り組んだ時には、別のPC上でソースをアセンブルできる環境があったから、とにかく仕事が進んだ。
ん? 開発環境があるなら今更MZに移植しなくても? (まあ、いいじゃないですか)
最初は1文字入力と出力をシリアル通信に割り当てて、WindowsのPCから通信してCP/Mを動かしていた。そのうちにMZの画面に文字表示できるように作っていったっけ。キーボード入力は作るのが面倒くさくて結局作ってない。
フロッピーから直接CP/M本体を読み込んでブートする方法は最初自分でできなかったから、考えたのはBASICからBLOADすることだった。
とにかくBASIC上で、RAMの空いたところにCP/Mのファイルを読み込んでいき、そこで修正をかけたものをBSAVEして保存すれば!
ちょうど良いことにCP/Mの存在するアドレスとBASICのワークエリアとは干渉しない。
一部だぶったっけ。もう忘れたが、とにかく最初BASICが起動し、それからCP/MをBLOADして、CP/Mへジャンプしたら後はCP/Mだけが動く世界。
トラックバックURL
トラックバック一覧
コメント一覧
kanitama - 2024年02月15日 21:07
移植作業は大変ですね。今となってはよい思い出になっています。Z80マイコンはMZ-2000だけでなく自社のマイコンにも搭載されています。シリーズのどれかにCP/Mを移植することですべてが供養されそうな気がします。いまどき純正のZ80CPUを使ったマイコンは少なくなりました。それだけにCP/Mの存在も薄くなってしまうのでしょうか。
コメント投稿