LoginSignup
1

More than 1 year has passed since last update.

CP/Mの開発

Last updated at Posted at 2019-07-01

CP/M用のプログラムを8080アセンブラを使って作る方法は以下のようなパターンが考えられます。

EDなどのCP/M上のエディタで8080のアセンブラを書きASM.COMでアセンブルする方法

8080asm.png

ASMはMac上のエディタで作成して、それをCP/Mに転送してASM.COMでアセンブする方法。CP/Mの改行コードはDOSと同じCR+LFです。

8080asm2.png

ASMをMac上のエディタで作成して、Mac上のasm8080でアセンブルしてHEXファイルをCP/Mに転送する方法

8080asm3.png

hex2binを使ってcomまでMac上で作ってcomを転送することもできます。

8080asm4.png

$ asm8080 hello.asm
$ hex2bin -m 80 -p 0 -e com hello.hex 
hex2bin v2.5, Copyright (C) 2017 Jacques Pelletier & contributors

Allocate_Memory_and_Rewind:
Lowest address:   00000100
Highest address:  00000211
Starting address: 00000100
Max Length:       274

Binary file start = 00000100
Records start     = 00000100
Highest address   = 00000211
Pad Byte          = 0
Extended
Highest address:  0000027F
Max Length:       384

これでも良いのですが、asm8080が吐くbinファイルはパディングされてませんが、中身はcomと同じものなのでbinをそのままでも大丈夫そうです。

cpm8266のxmodemコマンド(xs,xr)はlrzszではうまく動かないことがあったので、Mac用のコマンドを簡単に作ってみました。

送信のxs.cは128バイトのあまり部分に0x1aを埋めていますが、xr.cはそのままにしてます。xmodemでバイナリを送信する時にバイナリの終端に0x1aがあると削られてファイルが壊れます。おそらく当時はこの問題が起きないように圧縮するなり、なんらかのテキストエンコードで送っていたのではないでしょうか。

xmodemは最後のブロックのあまりに0x1aを埋めるのですが、受信している時にそのブロックが最後かはわからず、次のブロックのリクエストがSOHではなくてEOTだと、その前のブロックが最後だったのがわかる仕組みになっています。なので0x1aを削る処理はEOTを受けてからしかできず、面倒なんので実装しませんでした。

xmodemでは受信側が最初のバイトの送信を行います。xr.cは自分がバイトを送信した後にシーケンスが続くので普通に実装しましたが、xs.cは送られてきているデータを処理することを考えてkqueueを使っています。今の所あまり必要なさそうですが、またいじる時にはなにかの役に立つかもしれません。

2022/7: xs,xrコマンドに標準入力のサポートを入れました。引数が一つでデバイス名がない場合は標準入出力で処理します。

Z80のニモニック(命令の文字列)は8080と違っているので、Z80では別のツールを使う必要があります。

Z80の事は以下のページに詳しく書いてありました。

マイクロソフトがCP/M用のアセンブラとして販売していた、MACRO-80は8080とZ80に対応していて中間ファイルの生成をおこない、LINK-80でバイナリにしていました。MACRO-80の最終バージョンは3.44だったようです。

8080の最初の頃の開発環境はPDP-11などクロスアセンブラでした。CP/Mが出てきた事で、セルフでの開発ができるようになりました。CP/Mは非常に重要なターニングポイントであったと思われます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1