SHARP MZ-2000/2200 CP/M V2.2 (64K) TF-Edition

Last updated 2023/11/23 since 1995

«Quick Links» 1. 概要 (summary)
2. 使い方 (how to use)  a) CRT Input - キーボード操作 (keyboard operation)  b) CRT Output - コントロールコードとエスケープシーケンス (control code and escape sequence)  c) CRT Output - 最下段ステータス表示行 (status line)  d) Disk Drive と割り当て (and assignments)  e) Device I/O と割り当て (and assignments)  f) Command "SETUP"  g) ディスク・ユーティリティ (disk utilities)
3. 使い方詳細(ハッカー向け) (how to use for hackers)  a. トラックバッファのモードについて (about track buffer mode)  b. BIOS インターフェースのモードについて (about BIOS interface mode)  c. 本CP/Mを再構築する方法 (how to rebuild this CP/M)  d. 本CP/Mのカスタマイズ (customize to this CP/M)  e. 5/3.5' 2DD System Disk の作り方 (how to make)
4. メモリマップとディスク配置マップ (memory map and disk location map)  5. 動作環境 (require environment)  6. ライセンス (license)  7. ダウンロード (download)  8. 変更履歴とバグ情報 (changes and bug info.)  9. リンク集 (link)


1. 概要 (Summary)

これは、SHARP MZ-2000/2200用の自作のCP/M v2.2です。
完全なオリジナルで、MSA社より販売されていたものとは完全に違うものです。 ただし、デバイス等の外部仕様はある程度合わせてあります。
可能な限りいろいろな機能を盛りこんだ結果、 おそらくCP/Mの実装としては世界一高機能なのではと思えるようになりました。 ただし、処理速度の方はtrack bufferを持っているため、 5'2DディスクのCP/Mとしては高速ですが、G-RAMアクセスのオーバーヘッド等 (MZはラスタスキャン中WAITのまま…)のために、 コンソールのテキスト表示等の通常動作が遅いアンバランスなCP/Mになりました。 ディスクアクセスもほとんどの場合は高速なのですが、必ずトラック単位でデータを読み込むため、 ランダムアクセスの相性によっては余分な時間がかかってしまいます。
CP/Mのプログラムは多くのファイルを同時に開く傾向があるので、 track bufferが5本程度持てるなら大幅な高速化が可能でしょうが、 そんなメモリもこれ以上複雑なプログラムを入れる隙間もありません。
そもそも、MZで64K CP/Mを実現する時点でとてもトリッキーになっています。

結局、まとめると以下のようなCP/Mとなりました。

このプログラムは、'90年頃を最後にMZごと放置されて忘れ去られていました。 (最後はmuLISP80マシンでした。学校の課題用^^; その後、X68kを中古で入手したので。 一応、Turbo Pascal、BDS-C等、 いろいろなプログラミング言語のお勉強用や、学校の課題で活躍した)
今更ながらではありますが、昔中途半端にしていた仕様やバグを直してあります。 また、MZ-2500の2DDや拡張されたキーにも対応させました。

CP/M screen shot
実行画面


2. 使い方 (How to Use)

a) CRT Input - キーボード操作 (Keyboard Operation)

コンソールのキーボード入力について説明します。

- 入力モードキー カナ/Graph/SftLock

SftLockはCtrlキーになっており、キーの意味がShiftによって変更されます。

    ---------+-----------+-----------
      キー   |  Shift無  |  Shift有
    ---------+-----------+-----------
      カナ   |   カナ    |   ESC
      Graph  |   Graph   |   TAB
    ---------+-----------+-----------

  * SETUPコマンドで、Shiftの有無を反転させることができます。
  * かな入力モードは、カーソルキーが'■'になります。
  * Graph文字入力モードは、カーソルキーが'●'になります。
  * CapsLockキーはShift+F1です。F2,F3にGraph,カナがあります。

- 特殊キー INST/DEL/HOME/CLR/CURSOR

  SETUP(旧rel 1.0のSYSINIT)コマンドで自由に割り当て可能となっています。
  使用するエディタのコントロールキー・バインドへ割り当てして使用します。
  カーソルキーは、シフト併用で別のコードが割り当てできますので、
  PageUp/Downキーのような使い方ができます。SETUPコマンドの説明を参照し
  てください。

  * キー入力コードのデフォルトは、カーソルキーがCtrl+A〜D(シフトも同じ)、
    HOME/CLRがCtrl+K/L, DEL/INSTがCtrl+H/Jです。
    カーソルキーを$1C〜$1F等と設定すれば、X1 CP/Mと互換にできます。

- ファンクションキー

  F1〜F10               通常の文字列
  F11(Shift+F1)         CapsLock
  F12(Shift+F2)         Graph
  F13(Shift+F3)         カナ
  F14(Shift+F4)         テンプレートもどき (OS-9のCtrl+Aと同じ)
  F15(Shift+F5)         画面最下行のファンクションキー内容表示がトグル
                        する。
  F16(Shift+F6)         通常の文字列
  F17(Shift+F7)         通常の文字列
  F18(Shift+F8)         通常の文字列 (画面クリア)
  F19(Shift+F9)         FDDのモーター停止
  F20(Shift+F10)        トラックバッファの書き戻しと無効化

  * 通常の文字列は内容をSETUPコマンドで変更できます
  * F19ともかく、F20については重要です。最下行のステータスを見てバッファ
    がクリアされていない場合には、ディスクの入れ換え時には必ず御使用く
    ださい。F20を実行せず、一度Ctrl+Cでリブートしてディスク入れ替え後、
    Ctrl+Cで再リブートしても安全です。
  * MSAのMZ版は1分程度のタイマーでFDのモータが停止しますが、このCP/Mで
    はF19キーの手動停止のみです。mustで停止させなければならない必要性
    はありません。

- テンキー

  Shift+00              000
  Shift+4               A
  Shift+5               B
  Shift+6               C
  Shift+7               D
  Shift+8               E
  Shift+9               F
  Shift++               *
  Shift+-               /
  Shift+.               ,

- その他

  Break                 ESC
  Shift + Break         ^C(Break)
  Shift + Ctrl + 0-+   トラックバッファを書き戻した後、IPL起動
         (Shift,Ctrl,テンキーの0,-,+を順番に同時押しします)
  MZ-2500 extended keys (ESC, BS=DEL, etc)

b) CRT Output - コントロールコードとエスケープシーケンス (Control Code and Escape Sequence)

コンソールを示すCRTデバイスの制御文字とエスケープシーケンスについて説
明します。まず、制御文字について示します。キーボードの制御キー割り当て
は、自由に変更できますのでほとんどは直接対応しません。
基本的にX1互換です。1A(^Z)が画面クリアではないので、ADM 3A互換を満たし
ていません。Soroc IQ120互換でもありません。

文字コード          実行内容
07(^G)          ... bell
08(^H)          ... back space
09(^I,TAB)      ... TAB
0A(^J)          ... new line
0B(^K)          ... cursor home
0C(^L)          ... clear screen
0D(^M,CR/ENTER) ... return
1B(^[,ESC)      ... ESC
1C              ... cursor right
1D              ... cursor left
1E              ... cursor up
1F              ... cursor town

続いて、エスケープシーケンスを示します。これらは当時の業界標準である
ADM 3AやSoroc IQ120互換等です。但し、PC-8001/8801やX1のCP/Mのエスケー
プシーケンスも解釈したり無視しますし、1文字のみのエスケープシーケンス
に関しても無視します。他機種用にカスタマイズされたアプリケーションの多
くが動作します。

- Soroc IQ120 compatible
ESC T   ... カーソル以降を行クリア
ESC Y   ... カーソル以降を画面末までクリア
ESC *   ... 画面クリア
ESC ?   ... カーソル位置取得 (左上ホームポジションは0,0)
            行、桁を、各々$20を加えたASCIIコードを1文字と
            して、計2文字をキー入力文字として予約します。

- ADM 3A / Soroc IQ120 compatible
ESC (   ... 何もしない
            (MSA MZ版はCONSOLE R, ADM 3Aはbackground(反転色文字),
            Soroc IQ120は書き込み禁止終了(通常色文字))
ESC )   ... 何もしない
            (MSA MZ版はCONSOLE N, ADM 3Aはforeground(通常色文字),
            Soroc IQ120は書き込み禁止開始(反転色文字))
ESC = <row> <column>
        ... カーソル位置指定 (左上ホームポジションは0,0)
            行<row> 桁<column>は、各々$20を加えたASCIIコードの1文字で
            指定します。

- SHARP X1 compatible
ESC + ... キー入力ステータス ON
          (キー入力が効くようになります)
ESC - ... キー入力ステータス OFF
          (キー入力が効かなくなります)
ESC [<0〜9> | .] ... 何もしない (カラー文字色設定を無視)

- NEC PC-8001/8801 compatible
ESC C <n>
      ... 何もしない (カラー文字色設定を無視)
ESC V <ST> , <ED+1> , <n> , <n> <$0D>
      ... S-BASICの"CONSOLE S<ST>,<ED>"
          (HuBASICの"CONSOLE <ST>,<ED>,<n>,<n>")
          * スクロールウインドウの設定です
          * <n>はダミーのASCII文字10進数数値で、任意の,以降を省略可能
          * $0D以外でも、<=$1Aの任意の文字でコマンド終了
ESC W <SX> , <n> <$0D>
      ... S-BASICの"CONSOLE C<SX>"
          (HuBASICの"WIDTH <SX>", 但し、SX=40 or 80)
          * 文字の横幅モードの設定です
          * <n>はダミーのASCII文字10進数数値で、任意の,以降を省略可能
          * $0D以外でも、<=$1Aの任意の文字でコマンド終了

- etc.
ESC <任意文字> ... 何もしない

c) CRT Output - 最下段ステータス表示行 (Status Line)

コンソールの最下行に表示されるステータス行について説明します。

 1 DIR 2 DIR A: 3 DIR B: ... 10 EMACS F:ABC:M:R
 ------------------------------------ - --- - -
            (A)                      (B)(C)(D)(E)

  (A) ファンクションキー内容表示
      (Shift+F5で通常モードとShiftモードを切替え可能です)

  (B) ファンクション表示モード

        F ... 通常ファンクション表示中
        f ... Shiftファンクション表示中

  (C) キーボードモード

        abc ... 小文字モード
        ABC ... 大文字モード(CAPS LOCK)

  (D) 動作中コンテキスト表示

        M ... BIOS実行中 (メインメモリで動作中)
        G ... BDOS/CCP/アプリケーションの実行中 (G-RAM上で動作中)

  (E) トラックバッファ (R/W/none)

        R ... readバッファが存在
        W ... writeバッファが存在

        * Wの時にディスクを抜き出すと確実にディスクを破壊します。
          Rの時にディスクを入れ換えると、リブートしない場合は誤動作し
	  ます。
        * 一度Ctrl+Cでリブートしてディスク入れ替え後、Ctrl+Cで再リブー
          トする操作を行っていれば安全です。

d) Disk Drive と割り当て (and Assignments)

  フロッピーディスクトライブにはトラックバッファがありますが、状況は最
下行のステータスに表示されています。バッファが空の場合以外は、ディスク
の入れ換え前にキーボードでバッファを空にしなければなりません。また、モー
ターはアクセスを始めると回転したままで、キーボードで停止させなくてはな
りません。キーボード説明のF19,F20(Shift+F9,F10)を参照してください。

  フロッピーディスクドライブの割り当ては次のようになっていて、実際のド
ライブの接続状況に関らず固定となっています。ドライブの選択はユーザの責
任で行わなければなりません。

A: MZ-2000/2200/80B/X1 5'2D 320KB drive 1 (X1 CP/M DPB)
B: MZ-2000/2200/80B/X1 5'2D 320KB drive 2 (X1 CP/M DPB)
C: MZ-2000/2200/80B/X1 5'2D 320KB drive 3 (X1 CP/M DPB)
D: MZ-2000/2200/80B/X1 5'2D 320KB drive 4 (X1 CP/M DPB)
E: MZ-2500/PC98 3.5/5'2DD 640KB drive 1
F: MZ-2500/PC98 3.5/5'2DD 640KB drive 2
G: MZ-2500/PC98 3.5/5'2DD 640KB drive 3
H: MZ-2500/PC98 3.5/5'2DD 640KB drive 4
I: G-RAMDISK (24KB)
J: PC98 CP/M86 5'2D 320KB format drive 2

* 起動時のデフォルトは起動ドライブの起動メディアですが、A:ドライブは
  CP/Mの仕様で必ずFDが入っていなければなりません。2DDのドライブ1である
  E:で起動した時も同様で、内部的にはA:としてもアクセスされています。こ
  の時に、A:へはアクセスしないようにユーザが気を付ける必要があります。

* 2Dと2DD等の物理ドライブが同じ、かつフォーマットが異なるディスクは混
  在使用しないようにユーザ側で気を付ける必要があります。CP/Mの仕様で何
  のチェックもできませんので、フォーマット直後のディスク等を両方でアク
  セスできます。その後に書き込みした場合はかなり悲惨なことになります。

* TPA/BDOS/BIOS(part-I)とCPPを除いた24KBのG-RAMは、ramdiskになります。
  Device Type-Bではramdiskは使用できません。PIPやSTAT等を入れておくと、
  リブート時にCCPを読まないため、ディスクへシステムが入っている必要が
  ないので、ファイルコピーが便利です。ただし、MZのIPLはG-RAMを必ずクリ
  アしてしまいます。
  一応、G-RAMのページ1のみは、G-RAMとしてアプリケーションで使用するこ
  とも可能です。再フォーマットされないので、使用後は非表示にしてE5で埋
  める必要があります。

* ドライブ割り当ては、ソースを変更することで変更可能です。BIOSDとBIOSM
  を変更します。

* MSA MZ-2000/2200/80B版は280KB formatですが、読み込む分には問題ありま
  せんし、280KB以降を使用しなければ書き込んでも問題ありません。ただし、
  他機種の物でも同じことですが、物理的にInterleave Formatされている分、
  アクセスが大変遅くなってしまいます。
  MSA製MZ用の280KB対応のDPBは、X1と比較してdisksizeのみが異なっていま
  す(320KB=151,280KB=127)ので、ここのみ注意が必要です。

* PC-9801のCP/M86 2D/2DDやP-CP/Mの2DDではシステム領域にローダしか入っ
  ていないためか、offsetがずれており、即ち、開始位置が異なっているため
  互換性がまったくありません。それ故に、X1turbo CP/Mの2DDと本CP/Mの2DD
  はまったく互換性がありません。

* rel.1.0からは大きく変更されています。

e) Device I/O と割り当て (and Assignments)

各デバイスの割り当ては次のようになっています。

CRT   ... internal keyboard and display      (in/out)
PTP   ... serial interface RS-232C channel A (out)
PTR   ... serial interface RS-232C channel A (in)
TTY   ... serial interface RS-232C channel B (in/out)
PRT   ... printer interface                  (out)

* 起動時のI/Oバイトのデフォルト割り当ては次のようになっています。
    CON:=CRT, RDR:=TTY, PUN:=TTY, LST:=PRT
  MZ-ModeのTRK:00/SCT:01 offset +$24を変更することで変更可能です。
  (デフォルト値 $81)

* シリアルインターフェース(MZ-8BIO3,MZ-1E24等)の設定は以下で固定です。
    8bit, stop bit 1, non parity, RTS/CTS
  但し、SETUPコマンドが必ずZ80 SIOを再初期化するようになっており、
  SETUPコマンドのoffset +$20,+$22にそれぞれRS-232C ch.A, ch.Bへの初期
  化ルーチンのアドレスがありますので、DDT等で書き換えておけば変更でき、
  システム起動毎に自動設定できます。
  なお、ボーレート設定は、MZの仕様でディップスイッチです。(2500は毎回R
  を押しながらIPL起動して設定しなければならない)

f) Command "SETUP" (=OLD rel.1.0 SYSINIT)

本CP/Mの様々な設定を、SETUPコマンドで行うことができます。
SETUPコマンドは、システムの状態を自分自身に反映して、セーブ可能な状態にできます。 その状態でセーブすれば次のシステム起動時からは、カスタマイズ設定で起動できるようになります。 その他、起動コマンドも設定すること等が可能です。

詳細は、SETUP -?とすると、オプション等の簡易説明が表示されるので、こちらを参照してください。
他に、Word MasterやEmacs向けのキーバインドを設定する カスタマイズ・ファイルwmsys.subやemacssys.subも参考にできます。

g) ディスク・ユーティリティ (Disk Utilities)

ディスクユーティリティとして、FORMAT/COPYDISK/COPYSYSが存在します。
コマンドラインは解釈しませんが、ドライブと対応メディア(2D/2DD)をキー入力で選択できます。 1 to 4でドライブ番号を、Mでディスク密度を選択しますが、 使い方は特に説明する必要はないと思います。
COPYDISKやCOPYSYSは必ず2ドライブ必要です。 同じドライブを指定するとそれなりの動作をしてしまうはずですのでご注意ください。


3. 使い方詳細(ハッカー向け) (How to Use for Hackers)

a. トラックバッファのモードについて (about Track Buffer Mode)


Track bufferには二つの動作モードがあります。

A) Device Type-A (1.0) : directory専用のbufferを持たないモード
B) Device TYpe-B (2.0) : directory専用のbufferを持つモード

Type-Aはバッファサイズ4KBのみで、Type-Bはバッファサイズ4KB + 2KBです。
起動時のメッセージで判別できて、Type-Aは、Device 1.0(旧rel.1.0では0.1)
Type-Bは、Device 2.0(旧rel.1.0では0.2)として表示されます。
デフォルトは、Type-Aです。

Type-BのDevice 2.0は、ディレクトリ位置がトラックNo.4の前半固定のみです
ので、MZ-2500用P-CP/Mの2DDやPC-9801用CP/M86の2D/2DDのようなoffset=1の
ドライブでは、トラックNo.2にディレクトリが存在するため、違う意味になっ
てしまい有効に働きません。また、ユーザの操作ミスによってFDを破壊しやす
いと思います。そして、G-RAMディスクの制御プログラムを入れるスペースが
なくなってしまったため、これが削除されています。
デバイスを入れ換えるためには、ディスクへ直接バイナリを書き込んでデバイ
スdisk管理部を交換する必要があります。(旧rel.1.0ではsetdevというコマン
ドが使えそうでしたが、記憶にないと思っていたら中身をインプリメントしな
いまま、MZごと放置されていたことが判明したので削除しました)

ちなみに、MACによるMSA CP/M BIOSソースのアセンブルの実行時間で計測する
と、次のようになっています。

    Type-A    (non interleave)  ...     7分30秒
    Type-B    (non interleave)  ...     7分
    MSA版CP/M (MSA interleave)  ...     10分

通常のコマンド実行では大変高速なのですが、MACは同時にファイルをたくさ
ん開くので、劇的には高速化されませんでした。

b. BIOS インターフェースのモードについて (about BIOS Interface Mode)


BIOSモードが2種類(デフォルトとtype-B)があり、その違いはRSTを使わないか、
MicrosoftのBASICが動くかです。(旧rel.1.0でのtype-Cをデフォルトと呼びま
す)
本CP/Mではたくさんのドライブ(DPB情報)を持った上で64KB CP/Mを実現するた
め、メモリを節約するためにBIOSのジャンプべクトルを工夫しています。
結局3種類実験されました。

・デフォルト (旧rel.1.0でのtype-C)
C3 xx xx C3 xx xx ... F7 F7 ... (全部F7の書かれたアドレスへジャンプし
                                てRST命令のスタック内容で判別)
・type-B (旧rel.1.0でのtype-Aの改良型)
CD xx xx CD xx xx CD xx xx  ... (同じアドレスをコールしてスタック内容
                                で判別)
・削除済 (旧rel.1.0でのtype-A)
3E 00 01 3E 01 01 3E 02 01  ... (そもそもジャンプしない)

削除済の旧rel.1.0でのtype-Aはメリットがないので現存しておりません。
MicrosoftのBASICは、インタプリタ、コンパイラ共に起動時にBIOS部のジャン
プテーブルからジャンプ先アドレスをの内容を読みとって自分自身へパッチし
ますので、RSTを一つ使用してしまうデフォルト(旧type-C)でなければ正しく
動作しません。
type-Bへの切替えはSETUPコマンドで行うことができますが、その必要はあり
ません。将来の版がもし登場したら、消える予定です。

c. 本CP/Mを再構築する方法 (How to Rebuild this CP/M)

BIOS等のソースリストはTF-DOS上のSuperBASEで記述されています。
起動時のプログラムはアセンブルし、場合によってはJコマンドで転送して、 TF-DOSのWRITEコマンドで所定のディスク位置へ直接書き込みます。 詳細は、各ソースリストの頭にアセンブル方法等はコマンドの羅列として記述されています。 CP/Mのモジュール、BIOS/BDOS/CCP/IPLは、disk location mapを参考にTF-DOSのWRITEコマンドを使って直接ディスクに書き込みますが、普通は変更する必要がないはずです。
TF-DOSではMODEコマンドで、X1/88 floppy modeと、MZ floppy modeが変えられます。 IPLはMZ modeで、それ以外はすべてX1/PC80/88 modeで書き込みます。 これもソースの頭にMODE 0等と書いてあります。
SETUP,FORMAT,COPYDISK,COPYSYSの各コマンドは、アセンブルした後メモリ上にプログラムが設置されますので、ブートしてCP/Mを立ち上げた後、CP/M上でセーブします。 セーブ方法はディスク内の.SUBファイルに記述してあり、これをSUBMITコマンドで実行するだけです。

d. 本CP/Mのカスタマイズ (Customize to this CP/M)

MZ-ModeでTRK:00/SCT:01の$20〜$24の値を書き換えることにより、CP/Mのカスタマイズが可能です。
(rel.1.2以降で追加、外部ディスクユーティリティ・コマンドもこれを参照するので、 旧版と互換性がありません。)


$20 ... 2D/2DD system select
$21 ... FDC restore command ($FF5D)
$22 ... FDC seek command ($FF5E)
$23 ... FDC seek command with error check ($FF5F)
$24 ... Default IO byte ($FF7F)

2D/2DDシステムセレクトは、次節に使用例があります。
デフォルト I/Oバイトは、CP/Mのデバイス割り当てのデフォルトで、 「Device I/O と割り当て (and Assignments)」 を参照してください。
FDCコマンドは、ビット0〜3の値を変更することにより、 シークタイムの変更が可能です。設定例は、 動作環境 (Require Environment) を参照してください。

e. 5/3.5' 2DD System Disk の作り方 (How to Make)

5/3.5'2DDでシステムが入った起動ディスクの作成方法を簡単に記述します。 formatコマンドで物理フォーマットした後、CPM上から

を実行したCOPYSYS可能なシステム領域確保済ディスクを用意します。
TF-DOS上からX1/PC80/88モード(デフォルト)で、以下を実行します。
READコマンドで、2DシステムのTRK:00/SCT:01以降を2000〜3FFFへ読み込む
WRITEコマンドで、2DDブランクのTRK:00/SCT:01以降を2000〜3FFFへ書き込む
READコマンドで、2DシステムのTRK:02/SCT:01以降を2000〜3FFFへ読み込む
WRITEコマンドで、2DDブランクのTRK:03/SCT:01以降へ2000〜3FFFへ書き込む
続いて、MODE 0として、MZモードにします。
DUMPコマンドで、2DDブランクのTRK:00/SCT:01を読み込み、offset +$20の00 -> 01とします。 以上で、2DDブランクディスクが起動可能な2DDシステムになりました。 後はPIPコマンドで全ファイルをコピーしてください。 一度作成したら、COPYSYSコマンドを使用できます。

* 5'2D時にTRK:04/SCT:01〜08にあったディレクトリエリアは、 5/3.5'2DDではTRK:02/SCT:01〜$10(16)になるので上記のような対応が必要です。 これは2Dの場合はDPBのoffset=2になっており、 2DDの場合はoffset=1としていることが理由です。


4. メモリマップとディスク配置マップ (Memory Map and Disk Location Map)

0000 ------------
     |CP/M work |
0100 |----------|
     |          |
     |          |
     |          |
     |          |
     |          |
     |          |
     |   TPA    |
     |          |
     |          |
     |          |
     |          |
     |          |
     |          |
     |          |
C000 |----------|  ------------  ------------  ------------
     |          |  |          |  |          |  |   TPA    |
C400 |Disk Cache|  |          |  |          |  |----------|
     |(1-trackK)|  |          |  |          |  |  (CCP)   |
CC00 |          |  |          |  |          |  |----------|
     |          |  |          |  |          |  |          |
D000 |----------|  |          |  |          |  |          |  ------------
     |Disk Cache|  |          |  |          |  |          |  | Text     |
     |(only DIR)|  |          |  |          |  |          |  |    V-RAM |
D800 |----------|  |          |  | G-RAM    |  |          |  |----------|
     | (no use) |  |          |  |    disk  |  |          |  |          |
DB00 |----------|  |          |  |          |  |          |  |(Image of |
     | KeyInput |  |          |  |          |  |          |  | Text     |
     | (SETUP)  |  |          |  |          |  |  BDOS    |  |    V-RAM |
DF00 |----------|  |          |  |          |  |          |  |No usable)|
     | (no use) |  |          |  |          |  |          |  |          |
E000 |----------|  |          |  |----------|  |          |  ------------
     |          |  |          |  |          |  |          |
     |          |  |          |  |   BDOS   |  |          |
     |          |  | G-RAM    |  |(for Boot)|  |          |
EE00 |  BIOSM   |  |    disk  |  |----------|  |          |
     |          |  |          |  | (nouse)  |  |          |
F000 |          |  |          |  |----------|  |          |
     |          |  |          |  |          |  |          |
F200 |----------|  |          |  |   CCP    |  |          |
     |          |  |          |  |(forWBoot)|  |          |
F800 | Disk I/O |  |          |  |----------|  |          |
     |          |  |          |  |          |  |          |
FA00 |----------|  |          |  |          |  |----------|
     |  BIOSM2  |  |          |  | (nouse)  |  |  BIOS-1  |
     | (dqbase) |  |          |  |          |  |          |
FF00 |----------|  |----------|  |----------|  |----------|
     |  BIOS-2  |  |  BIOS-2  |  |  BIOS-2  |  |  BIOS-2  |
FFFF ------------  ------------  ------------  ------------
       Main Mem      G-RAM 1       G-RAM 2       G-RAM 3     Text V-RAM
                                        (running CP/M application)
                          Fig.1 Memory Map
(No MZ-MODE, surface reverse)
TRK:00 SCT:01 BDOS              to G-RAM page-2     $E000-$EDFF
TRK:00 SCT:0F BIOS-1            to G-RAM page-3     $FA00-$FAFF
TRK:00 SCT:10 BIOS-2            to ALL              $FF00-$FFFF
TRK:01 SCT:01 LDCPM             to memory           $0000-$04FF by IPL
TRK:01 SCT:08 CCP               to G-RAM page-2     $F000-$F7FF
TRK:02 SCT:01 BIOSM             to memory & G-RAM 3 $E000-$F1FF
TRK:03 SCT:03 DISK I/O          to memory           $F200-$F94F
TRK:03 SCT:0B BIOSM2 (dqbase)   to memory & G-RAM 3 $FA00-$FEFF
TRK:04 SCT:01 CP/M disk directory
TRK:04 SCT:09 disk free area
SETUP.COM                       to memory           $DB00-$DEFF

        Fig.2 Disk Location Map - 1/2 (5/3.5'2D 320KB only)
TRK:02 SCT:01 CP/M disk directory
TRK:03 SCT:01 BIOSM             to memory & G-RAM 3 $E000-$F1FF
TRK:04 SCT:03 DISK I/O          to memory           $F200-$F94F
TRK:04 SCT:0B BIOSM2 (dqbase)   to memory & G-RAM 3 $FA00-$FEFF

TRK:05 SCT:01 disk free area
                   (setup.com)  to memory           $DB00-$DEFF

        Fig.2 Disk Location Map - 2/2 (5/3.5'2DD 640KB diff. only)

* SETUP.COMは初回起動時にキー処理(KeyInput)をメモリ上へ転送します。
したがって、起動時には必ずSETUP.COMが必要で、読み込みに失敗すれば以後キー入力ができません。


5. 動作環境 (Require Environment)


6. ライセンス (License)

This is a public domain software. NO LIMITs, NO WARRENTALies.

古い8ビットPC専用ソフトウエアのため、パブリック・ドメインです。 但し、無責任、無保証です。
本プログラムには、パブリック・ドメインのフリーソフトウエアとしてインターネット上に公開されている、 Digital Researchのモジュールが含まれています。

但し、ソースファイルは、TF-DOS+Super BASEで記述されているので、 再アセンブルには、Carry lab社のSuper BASEが必要です。 TF-DOS用Super BASEの作り方は、TF-DOSの説明を御覧ください。


7. ダウンロード (Download)

mz64cpmb.d88.gz ... 64K CP/M v2.2 rel.1.2 System Disk (Binaries) (2013/09/13)

mz64cpms.d88.gz ... 64K CP/M v2.2 rel.1.2 Source Files with TF-DOS (2013/09/13)

* D88形式 5'2D 320KBフロッピーディスクのイメージです。
    (5'2D 320KB floppy diskette D88 image)


8. 変更履歴とバグ情報 (Changes and Bug Info.)

1985/xx/xx-                    I am interested in CP/M, and
                               customize the BIOS. (MSA CP/M)
1988/xx/xx                     Full made 56KB-60KB version is
                               working..., change to 64KB version.
1989/08/22-1989/11/11          64KB CP/M first version.
          -1990/11/04 rel.1.0  Latest version in 19xx.
2011/10/25-2011/12/08 rel.1.1  for MZ-2500 extended keys and 2DD,
                               change drive assignment for 2DD,
                               change the utility command names:
                               - SYSINIT -> SETUP
                               - DISKCOPY -> COPYDISK
                               - SYSGEN -> COPYSYS
                               A few bugs were fixed, etc.
2013/09/12            rel.1.2  Add the work addresses for seek time
                               setting, etc. The new ver. utilities
			       reference the work addresses. Also, it
                               has no compatiblility with rel.1.1

更に、以下のTF-DOSと同じMB88xx系FDC共通のバグを発見、修正することないかも。
write protectedを検出した時、 write protectedが解除された状態でreadしない限りwrite protectedになってしまい書けない。 アクセス前にチェックしているのがまずいという当たり前のことに今更気付いたという面白い話…
(2018年夏に30年ぶりにこんな基本的なの発見してCP/Mに至っては気づいてなかった)
更にもう一つ追加、40文字にした時にファンクション表示がないのはいいのだけど、80文字にしても消えたまま。 SETUPコマンドを実行したら再表示される。
修正することないかもとかいいつつ、そのうち修正されるかもしれないが…


9. リンク集 (Link)

MZ用CP/Mに関する、リンク情報です。

http://www.sharpmz.org/ ... SHARPMZ.ORG
最近(2015年頃かな?)リニューアルされたのですが、 旧WEBhttp://original.sharpmz.org/の、 Download - MZ-80B - Operating Systems - MZ-80B disk collectionに、MZ-80B用のCP/Mがあります。 なんと、こちらも64KB CP/Mです。ただし、セクタ長512バイト・フォーマット。

http://madlabo.oops.jp/MAD/0094/0094.htm ... MZ-2000とCP/M移植
世の中は広いもので、最近CP/Mを独自に移植された方が。 MSA版と私の以外に、海外製MZ-80B用もあるが、更に別のCP/M実装が登場。 多分他にもいくつかあるのでしょう。

以上