FM-7/8シリーズ FM-CP/M 画面キャプチャ集(by はせりん)


本ページの各画面キャプチャについては、XM7 V1.1 L77SXeFM8(emufm8),eFM77(emufm77)、 (初期の頃は XM73ZIP) を使用させていただきました。
PI.さん、たけがみりうさん、Artaneさん、Apolloさん、いつも感謝しております。
(XM7がなかったらこんなページを作ろうという気にはなりませんでした。^^;)
お急ぎの方へ。
DIR実行サポートデバイスドライブレター画面制御/Escapeシーケンス漢字表示機能
メモリマップBIOS構造ディスクフォーマットCP/M年表Windows ファイル交換
\.COMコマンドMODSYS.COMコマンドSELCODE.COMコマンド
FM-CP/Mデモ参考文献

4. CP/M-80編

FM-8,7,77シリーズまでは、オプションのZ80カードとともにCP/M-80が提供されていました。
(Z80カードに関してはこちらのアドオンCPUカードのページで紹介しています。)
FM77AV以降で Z80カードが提供されなくなったのは非常に残念です。
それはさておき、まずは各機種用のCP/M-80の起動画面です。
(各画像をクリックするとフルサイズの画像になります。)

<市販のもの>

CPM8_MSA
CPM8_2ND
CPM7_56
CPM77_56
CPM11_L10_8210
CPM11_L10_8301
CPM11_L10_2HD
CPM11_L10_8308
CPM11_L11_8407

CP/M関連の製品一覧です。FM-8 と FM-7以降で販売形態が異なっています。
機種 型格 内容 価格 発売時期
FM-8 MB22401 Z80カード \11,700 1981年5月
SM07217-M011 CP/M-80 V2.2(5インチ版) \65,000 1981年10月
SM07217-M011 CP/M-80 V2.2(5インチ版) 2nd Version \65,000 1982年6月
SM07217-M012 CP/M-80 V2.2(8インチ版) 2nd Version \65,000 1982年6月
FM-7
FM-NEW7
MB28021
┣MB2240?
┗SM07317-M111
Z80カード + CP/M-80(5インチ版) セット
┣Z80カード
┗CP/M-80 V2.2 L1.0(5インチ版)
\35,000 1982年12月
FM-77 MB28021J
┣MB2240?
┗SM07317-M113
Z80カード + CP/M-80(3.5インチ版) セット
┣Z80カード(BSCサポートカード)
┗CP/M-80 V2.2 L2.0(3.5インチ版)
\35,000 1984年6月
FM-11 MB28031
┣MB2240?
┗SM07417-M211
Z80カード + CP/M-80(5インチ版) セット
┣Z80カード
┗CP/M-80 V2.2 L1.0(5インチ版)
\45,000 1982年11月
MB28032
┣MB2240?
┗SM07417-M212
Z80カード + CP/M-80(8インチ版) セット
┣Z80カード
┗CP/M-80 V2.2 L1.0(8インチ版)
\45,000 1982年11月

<雑誌・書籍掲載のもの>

EMX80org
CPM_OhFM63K_1

出版元 掲載誌 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 備考
工学社 I/O 1985年4月 EMX80 201 FM-7/8 桂 英治氏
工学社 I/O 1985年6月 [deBUG] EMX80 341 FM-7/8 桂 英治氏 RS232C対応、ソースレベルのパッチ
工学社 I/O 1985年6月 S1版 EMX80 320 MB-S1 桂 英治氏
ソフトバンク Oh!FM 1986年7月 63K CP/Mの制作 78 FM-7/NEW7/77 中山 泰宏氏、橋本 直樹氏

4.1 各CP/MについてDIRを実行してみてみましょう。

<市販のもの>

CPM8_MSA2
CPM8_2ND2
CPM7_562
CPM77_56

これら3機種、4種類のCP/M-80について共通点は次の通りです。
<雑誌・書籍掲載のもの>

EMX80m

CPM_OhFM63K_2

CPM_OhFM63K_3


各CP/M-80の利用可能デバイス(◎○)、起動可能デバイス(◎)、サポート機能についてまとめた表です。
(−は起動しません)
↓ソフトウェア \ 実行ハードウェア→ FM-8 FM-7/
NEW7
FM-77 共通
CP/M 型格 システム
(MODSYS)
32KB
BUBBLE
320KB
FDD
1MB
FDD
320KB
FDD
320KB
FDD
1MB
FDD
RS
232C
PF
KEY
6809
コード
実行
ESC
シー
ケンス
ESC+JIS
漢字表示
SHIFT
JIS
漢字表示
FM-8
SM07217-M011
(初期版)
(出荷状態) × × × × ×
SM07217-M011
(2nd Version)
FMCPM565.COM
(出荷状態)
× ×
FMCPM568.COM ×
FMCPM605.COM × × × × × × × × ×
SM07217-M012 (出荷状態) ×
FM-7
FM-NEW7
SM07317-M111 FMCPM565.SYS
(出荷状態)
× ×
FMCPM568.SYS ×
FMCPM605.SYS × × × × × × × × ×
FM-77
SM07317-M113 (出荷状態)
FMCPM605.SYS × × × × × × ×
FM7CPM80.SYS × ×
雑誌・書籍掲載のもの
EMX80 (60K CP/M) × × ×
Oh!FM版 63K CP/M × × × ×

似たような表が続いて恐縮ですが、ドライブレター一覧表です。
↓ソフトウェア \ 実行ハードウェア→ FM-8 FM-7/
NEW7
FM-77
CP/M 型格 システム 32KB
BUBBLE
320KB
FDD
1MB
FDD
320KB
FDD
320KB
FDD
1MB
FDD
FM-8
SM07217-M011
(初期版)
(出荷状態) M: N: A: B: C: D: × A: B: C: D: A: B: C: D: ×
SM07217-M011
(2nd Version)
FMCPM565.COM
(出荷状態)
M: N: A: B: C: D: E: F: G: H: A: B: C: D: A: B: C: D: ×
FMCPM568.COM M: N: E: F: G: H: A: B: C: D:
FMCPM605.COM × A: B: C: D: × A: B: C: D: A: B: C: D: ×
SM07217-M012 (出荷状態) M: N: E: F: G: H: A: B: C: D:
FM-7
FM-NEW7
SM07317-M111 FMCPM565.SYS
(出荷状態)
M: N: A: B: C: D: E: F: G: H: A: B: C: D: A: B: C: D: ×
FMCPM568.SYS M: N: E: F: G: H: A: B: C: D:
FMCPM605.SYS × A: B: C: D: × A: B: C: D: A: B: C: D: ×
FM-77
SM07317-M113 (出荷状態) A: B: C: D: E: F: G: H:
FMCPM605.SYS A: B: C: D: ×
FM7CPM80.SYS M: N: A: B: C: D: E: F: G: H: A: B: C: D: A: B: C: D: ×
雑誌・書籍掲載のもの
EMX80 (60K CP/M) × A: B: C: D: × A: B: C: D: A: B: C: D: ×
Oh!FM版 63K CP/M A: B: A: B: ×
EMX80は 4ドライブ使えるのではなく、2つの物理ドライブに対して、
A: B: で X1用CP/Mと互換のファイルシステム、
C: D: で FM-CP/Mと互換のファイルシステムで読み書きします。

さて、バブルカセットと1MBフロッピーについて見てみましょう。
CPM_FM8_MSA_eFM8
CPM_FM77_2HD_eFM77

4.2 画面制御/Escapeシーケンスのサポート状況です。

まずは一覧表です。
コード 参考:ADM-3A機能 FM-CP/Mにおける機能 FM-8
初期版
FM-8 2nd版 FM-7 FM-77 EMX80
60K
Oh!FM版
63K
FM-11
56K
16進 記号表記 56K 60K 56K 60K 56K 60K
05H <CTRL>'E' ENQ Erase to End of Field ×
07H <CTRL>'G' BELL BELL ×
08H <CTRL>'H' BS(←) BS(←)
09H <CTRL>'I' HT(TAB) HT(TAB)
0AH <CTRL>'J' LF(↓) LF(↓)
0BH <CTRL>'K' VT(↑) Home Cursor
0CH <CTRL>'L' FF(→) Clear Screen
0DH <CTRL>'M' CR CR
0EH <CTRL>'N' SO - × × × × × × × × × ×
0FH <CTRL>'O' SI - × × × × × × × × × ×
11H <CTRL>'Q' - Start Field × × × × × ×
12H <CTRL>'R' - Cursor Address × × × × ×
13H <CTRL>'S' - Repeat Character × × × × ×
1AH <CTRL>'Z' SUB(Clear Screen) - × × × × × × × × × ×
1BH <CTRL>'[' ESC Escape Sequence 下表を参照
1CH <CTRL>']' - Cursor Right(→)
1DH <CTRL>'\' - Cursor Left(←)
1EH <CTRL>'^' RS(Home Cursor) Cursor Up(↑)
1FH <CTRL>'_' - Cursor Down(↓)
Esacpe Sequence
1B63H <ESC>'c' - Console Initialize × × × × × ×
1B43H <ESC>'C' - Color/Back Ground Color × × × × ×
1B47H <ESC>'G' Video Attribute - × × × × × × × × ×
1B50H <ESC>'P' - Hard Copy × × × × ×
1B2AH <ESC>'*' - Clear Screen × × ×
1B3DH <ESC>'=' Cursor Address Cursor Address × × ×
1B6EH <ESC>'n' - Kanji Display in JIS Code × × × × × ×
1B54H <ESC>'T' - Erase to End of Line × × × × × × × × ×

参考のため、ADM-3A の制御コードも載せておきましたが、ご覧の通り、ほとんど一致してません。
FM-CP/M は ADM-3Aに準拠した画面制御可能、と書いてある資料がありましたら、それは嘘です。
同じ MSAが開発してた PC-8001/8801用CP/Mでは、ADM-3Aの制御コードがサポートされてるので、
FM-CP/M も?と期待しましたが、この辺の開発は富士通側でやられてたようです。
(あと、FM-11は上記の表以外にも制御コードサポートしてますが、省略してます。)

画面制御コードを大別すると、次の3種類になります。(はせりんによる勝手な分類です)
 (1)シングルバイトオーダー
 (2)マルチバイトオーダー
 (3)エスケープシーケンス

(1)(2)は、サブシステムでサポートされている画面制御機能そのものです。詳細仕様はそちらをご覧ください。
(1)シングルバイトオーダーは、サブシステムにコードを渡すだけですので、全システムでサポートされています。
(2)マルチバイトオーダーは、BIOS側で細工が必要となる関係で、バージョンやメモリサイズによりサポート範囲が異なります。
 ・60Kシステムでは全滅、
 ・FM-8初期版では 12H(Cursor Address) と 13H(Repeat Character)、
 ・それ以外のシステムでは 11H(Start Field)、12H(Cursor Address)、13H(Repeat Character)
がサポートされています。ただし、11H(Start Field) のサポートはマニュアルに記載されていない隠し機能となっています。
(FM-11用CP/Mのマニュアルには記載あり)

11H <CTRL>'Q' Start Field
 11{00-1F}H スタート・フィールド(アトリビュート設定)
bit43210
PRCCC : P=Protect, R=Reverse, CCC=Color(0〜7)
 FM-8初期版では使えません。
 FM-8 2nd版以降ではマニュアルに記載ないですが使えます。

 FM-11ではアトリビュートが拡張されており、次のようになります。
bit543210
IBRCCC : I=Intensity, B=Blink, R=Reverse, CCC=Color(0〜7)

12H <CTRL>'R' Cursor Address
 12{00-4F}{00-18}H カーソル・アドレッシング
 X座標、Y座標の順に指定します。

13H <CTRL>'S' Repeat Character
 12{00-FF}{00-FF}H リピート・キャラクタ
 文字数、文字コードの順に指定します。

(3)エスケープシーケンスの概説

1B63H <ESC>'c' Console Initialize
 1B6330H <ESC>"c0" カラーモードにする (\ Console,,,0 相当)
 1B6331H <ESC>"c1" 単色モードにする (\ Console,,,1 相当)
 これ、無いと不便だよな〜、と思ってたらこっそりFM-8 2nd版以降で追加されてました。
 マニュアルに記載ありません。
 これがあると、いちいちシステムに戻って \ Console,,,0 とかしないで済むので超便利です。

1B43H <ESC>'C' Color/Back Ground Color
 1B43{30-37}55H <ESC>"C{0-7}U" カラー指定 (\ Color {0-7} 相当)
 1B43{41-48}55H <ESC>"C{A-H}U" 反転カラー指定 (\ Color {8-15} 相当, FM-8初期版では使用不可)
 1B43{30-37}{30-37}H <ESC>"C{0-7}{0-7}" カラー&背景色指定 (\ Color {0-7},{0-7} 相当)
 1B43{41-48}{30-37}H <ESC>"C{A-H}{0-7}" 反転カラー&背景色指定 (\ Color {8-15},{0-7} 相当, FM-8初期版では使用不可)
 1B4355{30-37}H <ESC>"CU{0-7}" 背景色のみ指定 (\ Color ,{0-7} 相当)
 <ESC>'C'の後は必ず2文字指定します。'U'が変更なしです。
 <ESC>"CUU" は文法上可能ですが、意味がありません。

1B50H <ESC>'P' Hard Copy
 1B5031H <ESC>"P1" 濃淡付ハードコピー
 1B5032H <ESC>"P2" ドットbyドットハードコピー

1B2AH <ESC>'*' Clear Screen
 1B2A30H <ESC>"*0" 画面消去(\ Cls 0 相当)
 マニュアルには書いてませんが、'0'の部分は読み飛ばしてるだけなので、実は何でもよいです。
 アプリケーションプログラムからは <ESC>"*0" を使うよう推奨されています。

1B3DH <ESC>'=' Cursor Address
 1B3D{20-38}{20-6F}H <ESC>"={ -8}{ -o}" カーソル・アドレッシング
 ADM-3A等と同様、ROW first(Y座標が先)です。
 上記 <CTRL>'R' とは逆なので変換時にご注意。

1B6EH <ESC>'n' Kanji Display in JIS Code
 1B6E jjjj jjjj jjjj ... jjjj 0FH <ESC>'n' JISコード列 <CTRL>'O'
 FM-8 2nd版以降で追加された機能です。

4.2.1 漢字表示について各バージョンの違いを見てみましょう。

CPM7_KANJI
CPM8_MSA_KANJI
CPM8_2ND_KANJI
CPM77_SELCODE_AUTOEXEC

上記の他、拡張BDOSコールによっても漢字が可能です。FM-8版のCP/Mに添付されている KANJIデモ(FM-8)は、その方式を用いています。 (推奨されていない出力方式のため、詳細は省略します。)

4.2.2 SELCODEコマンド

SELCODEコマンドは、FM-11用CP/Mには当初から採用され、 FM-7/8シリーズ向けではFM-77用CP/Mから採用された、表示文字の制御を行うコマンドです。
次の表で、表示モードと文字コードの対応を示します。○は正常表示、×は文字化けします。
ASCIIモード 7bitモード KANJIモード
ASCII文字
Parity付ASCII文字 × ×
半角カナ文字 ×
Escapeシーケンス+JIS漢字
SHIFT-JIS漢字 × ×
・FM-7/8用CP/Mでは、KANJIモードがありません。 SELCODEコマンドはありませんが、ASCIIモードと7bitモードを切り替える事は可能です。
・Parity付ASCII文字 と 半角カナ文字 は排他的な利用になります。
・Escapeシーケンス+JIS漢字 が常に正常表示されるのは、7bitコードを使用しているためです。

CPM77_SELCODE_1
CPM77_SELCODE_2

CPM11_SELCODE_1
CPM11_SELCODE_2
CPM11_SELCODE77_1
CPM11_SELCODE77_2

4.3 FM-7/8/11シリーズ用 CP/M のメモリマップ
   ┏━━━━━━━━━━━━━━━━ FM-CP/M ━━━━━━━━━━━━━━━┓
                     FM-8 2nd版                                         FM-8 2nd版
       FM-8              FM-7版          FM-77版                   FM-7版、FM-77版     Oh!FM版
       初期版        56K CP/M時       56K CP/M時          FM-11版       60K CP/M時     63K CP/M

0000 -+------+   0000 -+------+   0000 -+------+   0000 -+------+   0000 -+------+   0000 -+------+
      |WORK  |         |WORK  |         |WORK  |         |WORK  |         |WORK  |         |WORK  |
0100 -+------+   0100 -+------+   0100 -+------+   0100 -+------+   0100 -+------+   0100 -+------+
      |TPA   |         |TPA   |         |TPA   |         |TPA   |         |TPA   |         |TPA   |
C400 -+------+   C400 -+------+   C400 -+------+   C400 -+------+         |      |         |      |
      |CCP   |         |CCP   |         |CCP   |         |CCP   |         |      |         |      |
CC00 -+------+   CC00 -+------+   CC00 -+------+   CC00 -+------+         |      |         |      |
      |BDOS  |         |BDOS  |         |BDOS  |         |BDOS  |   D400 -+------+         |      |
DA00 -+------+   DA00 -+------+   DA00 -+------+   DA00 -+------+         |CCP   |         |      |
      |BIOS  |         |BIOS  |         |BIOS  |         |BIOS  |   DC00 -+------+         |      |
DE00 =+======+   DE00 =+======+   DE00 =+======+   DE00 =+======+         |BDOS  |         |      |
      |BIOS09|         |BIOS09|         |BIOS09|         |BIOS09|         |      |   E000 -+------+
      |      |         |      |         |      |         |      |         |      |         |CCP   |
      |      |         |      |         |      |         |      |         |      |   E800 -+------+
      |      |         |      |         |      |         |      |   EA00 -+------+         |BDOS  |
      |      |         |      |         |      |         |      |         |BIOS  |         |      |
      |      |         |      |         |      |         |      |   EC80 =+======+         |      |
      |      |         |      |         |      |         |      |         |BIOS09|         |      |
      |      |         |      |         |      |   EF00 -+------+         |      |         |      |
      |      |         |      |   F000 -+------+         |      |         |      |         |      |
      |      |   F100 -+------+         |      |         |      |         |      |         |      |
F2D8 -+------+         |      |         |      |         |      |   F2D8 -+------+         |      |
      |FBIOS |         |FBIOS |         |FBIOS |         |FBIOS |         |FBIOS |   F600 -+------+
      |      |         |      |         |      |         |      |         |      |         |BIOS80| ↑ココより上はZ80(8080)のコード
FC00 -+------+   FC00 -+------+   FC00 -+------+   FC00 -+------+   FC00 -+------+   FC00 =+======+ ===============================
      |Work  |         |Work  |         |Work  |         |Work  |         |Work  |         |BIOS09| ↓ココより下は6809のコード
FC80 -+------+   FC80 -+------+   FC80 -+------+   FC80 -+------+   FC80 -+------+   FC80 -+------+
      |I/O   |         |I/O   |         |I/O   |         |I/O   |         |I/O   |         |I/O   |
FE00 -+------+   FE00 -+------+   FE00 -+------+   FE00 -+------+   FE00 -+------+   FE00 -+------+
      |BOOT  |         |BOOT  |         |WORK  |         |WORK  |         |BOOT  |         |BOOT  |
FFFF -+------+   FFFF -+------+   FFFF -+------+   FFFF -+------+   FFFF -+------+   FE00 -+------+

FM-77版では、$FE00〜$FFDF を裏RAMに切り替えてディスクバッファやワークエリアとして使用しているため、
FM-7/NEW7/8 では使用できません。
4.3.1 FM-CP/M の BIOS 構造

次のような三層構造になっています。
BIOS80 と BIOS09 のやり取りは CPU の切り替えを伴うため一か所にまとめられています。
また、FBIOS は F-BASIC用のをほぼそのまま使ってるためやはりエントリが一か所です。
したがって、パケット変換とコマンド解釈的な処理を2度も行わなければならず、スループット
が若干低下していると言えます。(ベンチマーク結果でも同じ4MHz機と比較すると遅いです。)

FM-7/8シリーズでは、製品仕様上 Z80 CPU はハードウェアアクセスを保証していないので
I/O処理は全て 6809経由にしないといけないのと、せっかく作った FBIOS を使いまわししたい、
という2つの大きな理由があったのだと思われます。
実際に試してみると、Z80 CPU からもほとんどのハードウェアアクセスは問題ないようです。
この三層構造は必然的なものではなく、メンツを保つためのように見えます。

+--------------------------------------------------------------------------+
|                        BDOS/APPLICATION PROGRAM                          | Z80担当
|                                                                          |
+----------------------------------+---------------------------------------+
                                   |
+----------------------------------+---------------------------------------+
|                                BIOS80                                    | Z80担当
|                                                                          |
+----------------------------------+---------------------------------------+
                                   |
+----------------------------------+---------------------------------------+
|                                BIOS09                                    | 6809担当
|                                                                          |
+----------------------------------+--------------------------------+      |
                                   |                                |      |
+----------------------------------+-------------------------------+|      |
|                                FBIOS                             ||      |
+-----------+                                                      ||      |
|  BOOT ROM |                                                      ||      |
+-----+-----+--------+-----------+-------+-------+----------+------++---+--+
      |              |           |       |       |          |           |
+-----+-----++-------+------++---+---++--+-++----+---++-----+------++---+--+
|Floppy Disk||バブルカセット||漢字ROM||BEEP||プリンタ||サブシステム||RS232C| ハードウェア
+-----------++--------------++-------++----++--------++--+------+--++------+
                                                         |      |
                                                    +----+--++--+-----+
                                                    |Display||Keyboard|
                                                    +-------++--------+

・FM-CP/Mでは使用しない音声合成、アナログ、カセット関係は省略しています。
 しかし依然としてコードは残っているため、貴重なメモリ空間を圧迫しています。
・図では表現しきれてませんが、
 ・割り込みも BIOS09 が担当しています。
 ・Floppy Diskに関しては、BOOT ROM で対応していないデバイスについては
  FBIOSが直接ハンドリングします。
 ・BIOS09 はデバイスドライバ機能だけでなく、メモリ上の 6809コードを
  実行して戻るサービス機能も持っています。(拡張BDOS機能のひとつ)
・純正のZ80カードでは、Z80 と 6809 の並行動作は行われないため、6809 が BIOS
 処理をしている間は、Z80側は待たされます。

4.3.2 Oh!FM版 63K CP/M の BIOS 構造

FM-CP/M の BIOS と比較し、シンプルな構造になっています。

+--------------------------------------------------------------------+
|                        BDOS/APPLICATION PROGRAM                    | Z80担当
|                                                                    |
+----------------------------------+---------------------------------+
                                   |
+----------------------------------+---------------------------------+
|                                BIOS80                              | Z80担当
|                                                                    |
+--------------------------------+--------------+--------+-----------+
                                 |              |        |
+--------------------------------+-----------+  |        |
|                   BIOS09                   |  |        |             6809担当
+-----+--------------------------+-------+---+  |        |
      |                          |       |      |        |
+-----+-----+                    |       |      |        |
|  BOOT ROM |                    |       |      |        |             6809担当
+-----+-----+                    |       |      |        |
      |           x      x       |       |      |        |        x
+-----+-----++----+--++--+-++----+---++--+------+--++----+---++---+--+
|Floppy Disk||漢字ROM||BEEP||プリンタ||サブシステム||Keyboard||RS232C| ハードウェア
+-----------++-------++----++--------++-----+------++--------++------+
                                            |
                                        +---+---+
                                        |Display|
                                        +-------+
4.4 FM-CP/M のディスクフォーマット
4.4.1 FM-CP/M のディスクフォーマットです。(5/3.5inch 2D の場合です。)

            <---------- SIDE 0 ------------><---------- SIDE 1 ------------>
セクタ      1 2 3 4 5 6 7 8 9 101112131415161 2 3 4 5 6 7 8 9 10111213141516
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック0  |IPL|      CCP      |          BDOS             |      BIOS     |
           +---+---------------+---------------------------+---------------+

           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック1  |       BIOS        |            BIOS               |空 |SST|空 |
           +-------------------+-------------------------------+---+---+---+
           60K CP/M時ココまで ->           56K CP/M時ココまで ->FM-11用>

           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック2  |          Directory            |        data and program       |
           +-------------------------------+---------------+---------------+

           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック3  |                      data and program                         |
     〜39  +---------------+---------------+---------------+---------------+

・SSTの部分は、FM-11用のみ使われています。詳細は 4.4.3 FM-11 サブシステム セルフテスト機能 を参照してください。

(1)物理的なフォーマット
上の方にも書いてますが、トラック0、1はセクターインターリーブなし、
トラック2〜39はセクターインターリーブ(ファクター=2)がかかっています。)
cpm-sectorid-1
(2)論理的なフォーマット
トラック0、1はIPL及びCP/M本体が格納されるシステム領域です。
トラック2のサイド0がディレクトリ領域、トラック2のサイド1以降がデータ領域です。
ファイルはF-BASICと同様、8セクタx256バイト=2Kバイトの単位で管理されています。
フォーマット直後には、4 x 38 - 2 = 150 ブロック = 300KB の空き容量があります。

これを実現するための DPB は次のようになります。
*     SPT    BSH  BLM  EXM  DSM    DRM    AL0 AL1  CKS    OFF
xxxxH 0040H, 04H, 0FH, 01H, 0097H, 007FH, C0H,00H, 0020H, 0002H  5'FDD

各項目の意味は次のとおりです。

SPT: Records Per Track
BSH: Block Shift: 128 * 2^BSH
BLM: Block Mask: 128 * (BLM + 1)
EXM: Extent Mask
DSM: Number of blocks - 1
DRM: Number of directory entries - 1
AL0: AL0 directory bitmap
AL1: AL1 directory bitmap
CKS: Size of checksum vector
OFF: Reserved tracks

FMシリーズのCP/Mと、NEC PC-8001/8801シリーズのCP/Mは、5インチ 2Dのメディアについて
上記のパラメタが一致しているため、相互にDISKを交換しても正しくファイルをアクセス
(読み書き)することができます。
一見、当たり前のような話ですが、実はこれは大変めずらしいことなのです。
CP/Mの世界では、標準フォーマットは8インチの1S(片面単密度)のものしか規定されておらず、
それ以外のメディアについては、移植する各社が勝手に決めて流通していたのでした。
なので、不特定機種向けのソフトウェアの販売は8インチ 1Sフォーマットで提供するのが
普通でした。

では、なぜFMシリーズとNEC PC-8001/8801シリーズのCP/Mのフォーマットが一致していたかと
言うと、MicroSoftware Associates(MSA) という会社が両方のCP/Mの移植に深く関わっていた
からに他なりません。(PC用は自主開発、FM用は共同開発もしくは委託開発と思われる。)
cpmtimeline
しかしこの互換性は、残念ながら 5インチ 2D版の CP/M-80 で途絶えてしまいます。
CP/M-86 の時代になると各社それぞれの思惑でフォーマットが選定されたため非互換に
戻ります。DPB、DPH を BIOS側に持っている欠点が露呈しています。IDセクタ等に入れる
方式であればむしろフレキシブルなフォーマットで便利なはずなのに残念なところです。
MS-DOS は最初からフォーマットを規定してたので互換問題は発生しませんでした。
普及の一助になっていると予想されます。

CP/Mでは、STAT DSK: コマンドにより、上記のパラメタを確認することができます。
cpm_fm8_msa_dsk
pc8801ma_cpm_msa_dsk
4.4.2 FM-CP/M のディスクフォーマットです。(8inch 2D/5inch 2HD)

セクタ      1 2 3 4 5 6 7 8 9 1011121314151617181920212123242526
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック0  |  IPL  |                 空き                      |
  サイド0  +-------+-------------------------------------------+
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック0  |      CCP      |          BDOS             | BIOS80|
  サイド1  +---------------+---------------------------+-------+

           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック1  |             BIOS09              |      FBIOS      |
  サイド0  +---------------------------------+-----------------+
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック1  | FBIOS |   |SST|               空き                |
  サイド1  +-------+---+---+-----------------------------------+

           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
トラック2  |          Directory            |  data and program |
  サイド0  +-------------------------------+-------------------+

トラック2  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  サイド1  |                 data and program                  |
     〜76  +---------------------------------------------------+

・トラック0、サイド0のみ、単密度でフォーマットされており、128byte/sectorとなっています。
 先頭4セクタにIPLのみが書き込まれており、他のセクタは未使用です。
・トラック0、サイド1及びトラック1以降は倍密度フォーマットで、FM-CP/Mでは、256byte/sectorです。
・トラック2に配置されるDirectory Slotは、5インチ版と同じ128スロットでした。
 ディスク容量が3倍強なのに、登録可能ファイル数が同じなので、ちょっと少ないかもです。
・SSTの部分は、 4.4.3 FM-11 サブシステム セルフテスト機能 を参照してください。
CPM11_2HD_DSK
pc8801ma_cpm_neche_dsk

4.4.3 FM-11 サブシステム セルフテスト機能

CPM11_SUB_DIAG
4.4.4 Windows とのファイル交換

CP/M Disk のイメージファイル(.D88 or .2D)に対して Windows のファイルシステムと
やりとりする便利なツールがいくつか開発されていますのでご紹介します。

L3 Disk Explorer

Sasaji さんの開発された、L3 Disk Explorer です。
元々は、名称の通り BML3/MB-S1用DISK-BASIC と Windows との間でファイル交換するツール
としてリリースされてましたが、現在では F-BASIC、N88/N66-BASIC、MSX-BASIC/MSX-DOS、
X1用Hu-BASIC、MZ の S-BASIC、そして OS-9 for MB-S1/FM、FLEX for MB-S1/FM、CP/M for PC88/FM/X1、
MS-DOS for PC98/PCAT、他多種のディスクイメージと Windows との間でファイル交換が可能となっています。

D77Manager

malikto999 さんの開発された、D77Manager です。
こちらは、FMシリーズに特化されており、F-BASIC、FM-CP/M、OS-9 for FM、FLEX for FM の
ディスクイメージと Windows との間でファイル交換可能となっています。
CP/M for X1 DiskExplorer ひっそりX1 さんの開発された、CP/M for X1 DiskExplorer です。 名称の通り、本来は X1用のCP/M Diskのイメージファイル用なのですが、 若干の工夫で PC-8001/8801用CP/M、FM-CP/M の 5インチ 2D フォーマットの イメージファイルでも使う事ができ、非常に便利です。 (1) CP/Mイメージファイル→Windowsファイルシステム  特に問題なくCP/Mイメージファイルから、当該のファイルを取り出すことができます。 (2) Windowsファイルシステム→CP/Mイメージファイル  X1用CP/M と、PC-8001/8801/FM用CP/M の微妙なディスクフォーマットの違い(後述)  により、ディレクトリ領域(の後半)を破壊する可能性がありますので、下記のブランク  ディスクイメージを使用してください。(.2D、.D88、.D77 の3種類入れてあります。)  CP/M for X1 DiskExplorer用Blank Diskイメージ
説明:X1用CP/M と、PC-8001/8801/FM用CP/M の微妙なディスクフォーマットの違い トラック0、1の違いは問題とならないのですが、トラック2において、X1用CP/Mでは 下記の通りディレクトリ領域が PC/FM用と比較し半分になっています。このため、 X1用CP/M 及び CP/M for X1 Explorer では トラック2、セクタ 9-16 をデータ領域 と誤解して書き込んでしまう事になります。 上記ブランクディスクでは、DUMMYファイル にてこの領域をリザーブしてますので、 X1用CP/M、CP/M for X1 Explorer、PC/FM用CP/M で共通に使えるようになっています。 X1用CP/M のディスクフォーマットです。(5inch 2D の場合です。) <---------- SIDE 0 ------------><---------- SIDE 1 ------------> セクタ 1 2 3 4 5 6 7 8 9 101112131415161 2 3 4 5 6 7 8 9 10111213141516 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ トラック0 |i| CCP | BDOS | BIOS | +-+---------------+---------------------------+-----------------+ | IPL info +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ トラック1 | BIOS | 空き | +---------------------+-----------------------------------------+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ トラック2 | Directory | data and program | +---------------+---------------+---------------+---------------+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ トラック3 | data and program | 〜39 +---------------+---------------+---------------+---------------+

4.5 \.COMコマンド

それでは、FM-CP/Mの特長のひとつである \.COM コマンドについて見ていきましょう。
マニュアルによれば、F-BASICにおけるコマンドのいくつかのサブセットを提供する、とあります。
(あまりそうする必然性はないと思うのですが...)
重要:この \.COM コマンドは、60K版のシステムでは使用できません。

CPM77_CONSOLE
CPM77_COLOR
CPM77_CLS
CPM77_KEY
CPM77_KEY2
CPM77_CONSOLE2
CPM77_CONSOLE3

各機種、バージョン毎の\コマンドサポート機能一覧表です。
FM-8初期版 FM-8 2nd版 FM-7 FM-77 FM-11
COLOR △(0-7)
CONSOLE 第1,2パラメタ ×
第3パラメタ ×
第4パラメタ
CLS
HARDC ×
DSKINI × × × ×
BUBINI × × × ×
WIDTH × × ×
KEY
KEY LIST
CLOCK ON × × × ×
CLOCK OFF × × × ×
TIME × × × ×
4.6 MODSYSコマンド
FM-CP/Mの特徴のひとつである、MODSYSコマンドについて解説します。
このコマンドは単独で使われることはなく、CP/M標準コマンドの
MOVCPM や FM-CP/M 用のSYSGENコマンドと組み合わせて使用されます。
ですので、まずは MODSYSコマンドと関連の深い SYSGENコマンドと
MOVCPMコマンドから見て行きます。(遠まわりご容赦)

# MODSYSはFM-8用2nd Version以降のFM-CP/Mに搭載されているコマンドです。

4.6.1 SYSGENコマンド

FM-CP/MのSYSGENコマンドは非常に単純な機能のみ実装されています。
(1)指定されたドライブのトラック0、トラック1をメモリ内に読み込む。
   FM-CP/Mでは、トラック0、トラック1にIPL,CP/M本体,BIOSが格納
   されています。
                       +------+
    +---+              |      |
    | O | → SYSGEN → |MEMORY|
    +---+              |      |
                       +------+

(2)メモリに格納されたIPL,CP/M本体,BIOSを指定されたドライブの
   トラック0、トラック1に書き込む。
                       +------+
    +---+              |      |
    | O | ← SYSGEN ← |MEMORY|
    +---+              |      |
                       +------+

  IPL,CP/M本体,BIOSを格納する領域は固定されています。

            |        |
       100 -+--------+
            |SYSGEN  |
       780 -+--------+
            |IPL     | ↑
       980 -+--------+ |
            |CP/M本体| |Track 0, 1 のデータ
           -+--------+ |
            |BIOS    | ↓
           -+--------+
            |        |

上記2つの機能は連続で実行することもできますし、どちらか片方だけ
実行することも可能です。(1)と(2)を連続で実行した場合には、トラック0、
トラック1のコピーをしたことになります。(事前に転送先のフロッピー
ディスクはフォーマットしてあることが前提です。)
話が反れますが、FM-CP/Mのフロッピーディスクのバックアップを取る際に
は、トラック0、トラック1のコピーは上記SYSGENコマンドで、トラック2
以降は PIP A:=B:*.* コマンドで実行するのが一般的です。
(しかしこの方法ではシングルドライブだとコピーできませんので、FM-7用
CP/Mでは SDCOPY というバックアップコマンドが用意されました。)

SYSGENコマンドでドライブA:のトラック0、1をドライブB:にコピーした例
を示します。
CPM8_2ND_SYSGEN

4.6.2 MOVCPMコマンド

Z80(8080)のコードはリロケータブルでないため、メモリ容量に合わせてCP/Mの
本体(CCP+BDOS+BIOS)にパッチ当てしてメモリ位置を変更する際に使用するコマ
ンドです。ただし BIOS に関しては Intel MDS-800 専用になっているため、
他の機種では使えません。
FM-CP/M では Digital Research社から供給される標準版の MOVCPM が添付され
ており、CCP と BDOS に対するパッチのみが有効です。
ちなみに CP/M 2.2 のOriginalのメモリサイズは20KBです。

        Original
        20K CP/M         56K CP/M         60K CP/M

  0000 -+------+   0000 -+------+   0000 -+------+
        |WORK  |         |WORK  |         |WORK  |
  0100 -+------+   0100 -+------+   0100 -+------+
        |TPA   |         |TPA   |         |TPA   |
  3400 -+------+         |      |         |      |
        |CCP   |         |      |         |      |
  3C00 -+------+         |      |         |      |
        |BDOS  |         |      |         |      |
  4A00 -+------+         |      |         |      |
        |BIOS  |         |      |         |      |
  4FFF -+------+         |      |         |      |
        |      |         |      |         |      |
        |      |   C400 -+------+         |      |
        |      |         |CCP   |         |      |
        |      |   CC00 -+------+         |      |
        |      |         |BDOS  |   D400 -+------+
        |      |   DA00 -+------+         |CCP   |
        |      |         |BIOS  |   DC00 -+------+
        |      |   DFFF -+------+         |BDOS  |
        |      |         |      |   EA00 -+------+
        |      |         |      |         |BIOS  |
        |      |         |      |   EFFF -+------+
        |      |         |      |         |      |
  FFFF -+------+   FFFF -+------+   FFFF -+------+

・再配置可能なサイズは4KB単位でなく1KB単位で設定可能です。
  実際に、他のメーカー製PCで57K CP/Mを発売していた例があります。
・BIOSについては Intel MDS-800 専用のものが生成され、他の機種では
 使えないので、他のプログラムで対処する必要があります。
 (そこで登場するのがMODSYSです。)

MOVCPMコマンド実行例

(1)
  A>MOVCPM 60

(2)
  A>MOVCPM 60 *

(1)は、メモリサイズ60KB用に再配置後、CP/Mを再起動します。
前述の通り、MOVCPM で生成される BIOS は Intel MDS-800
専用となっているため、他の機種では確実に暴走します。

# NEC製の PC-8001/8801用CP/M では、標準BIOS ではなく NEC製BIOS
# に関してもリロケートしてくれるそうです。また、(1)の書式であっ
# ても (2)の書式として扱われ、再起動はしないそうです。(TF様情報)

(2)は、メモリサイズ60KB用に再配置して、それをメモリ上に残したまま、
コマンドラインに戻ります。通常はこの使い方になります。

下記は、Original CP/M(20K)に対し MOVCPM を実行した場合のメモリ
マップです。CCP'、BDOS'、BIOS'は再配置後のものを示しています。

                        (1)              (2)
        Original         MOVCPM 56        MOVCPM 56 *
        CP/M             実行後           実行後

  0000 -+------+   0000 -+------+   0000 -+------+
        |WORK  |         |WORK  |         |WORK  |
  0100 -+------+   0100 -+------+   0100 -+------+
        |TPA   |         |MOVCPM|         |MOVCPM|
        |      |   0980 -+------+   0980 -+------+
        |      |         |      |         |CCP'  |
        |      |         |      |        -+------+
        |      |         |      |         |BDOS' |
        |      |         |      |        -+------+
        |      |         |      |         |BIOS' |
        |      |         |      |        -+------+
        |      |         |      |         |      |
  3400 -+------+         |      |   3400 -+------+
        |CCP   |         |      |         |CCP   |
  3C00 -+------+         |      |   3C00 -+------+
        |BDOS  |         |      |         |BDOS  |
  4A00 -+------+         |      |   4A00 -+------+
        |BIOS  |         |      |         |BIOS  |
        |for   |   C400 -+------+         |for   |
        |20K   |         |CCP'  |         |20K   |
        |CP/M  |   CC00 -+------+         |CP/M  |
        |      |         |BDOS' |         |      |
        |      |   DA00 -+------+         |      |
        |      |         |BIOS' |         |      |
        |      |         |for   |         |      |
        |      |         |56K   |         |      |
        |      |         |CP/M  |         |      |
  FFFF -+------+   FFFF -+------+   FFFF -+------+

さて、既にお気付きの通り SYSGEN コマンドがトラック0、トラック1を
読み込むメモリ領域と、上記MOVCPMコマンド(2)がCP/M本体を再配置後
に格納するメモリ領域は一致しています。
そこで登場するのが本題のMODSYSコマンドになります。

4.6.3 MODSYSコマンド

今風に言うとCONFIGコマンドと呼んだ方がしっくり来るコマンドです。
上述のSYSGENコマンド、MOVCPMコマンドと組み合わせてCP/Mシステム
を再構成します。主な用途は次の通りです。

(1)メモリサイズ変更を伴わない再構成
   (A) 320KBドライブシステムから、1MBドライブシステムを構成する。
   (B) 1MBドライブシステムから、320KBドライブシステムを構成する。
   (C) FM-77用CP/Mシステムから、FM-7用CP/Mシステムを構成する。
   (D) デフォルトのファンクションキーを変更する
   (E) 320KBドライブのステップレートを変更する
   (F) キャラクターコードの設定を変更する

(2)メモリサイズ変更を伴う再構成
   (G) 56K CP/Mシステムから、60K CP/Mシステムを構成する。

各機種用のCP/Mで設定できる項目が異なっています。
FM-7,FM-77版CP/Mでは設定項目が増えたため、MODSYSコマンドも肥大化
しています。780H からのシステム格納領域を避けるよう、MODSYS.COM
及び MODSYS.OVL という名前で分割ロードするようになっています。
FM-8初期版 FM-8 2nd版 FM-7 FM-77 FM-11
(A)56K 1MB CP/M生成 × ×
(B)56K 320KB CP/M生成 ×
(C)FM-7 CP/M生成 × × ×
(D)PF KEY設定 × ×
(E)ステップレート × × × ×
(F)キャラクタコード × × × ×
(G)60K CP/M生成 × ×
(A),(B),(C),(G)のケースでは BIOS(Z80)、BIOS09、FBIOS を差し替えるため、
メモリ上に格納されているCP/M本体に加えて次のファイルを読み込みます。

     FM-8用        FM-7用        FM-77用
---------------------------------------------
(A)  FMCPM568.COM  FMCPM568.SYS
(B)  FMCPM565.COM  FMCPM565.SYS
(C)                              FM7CPM80.SYS
(G)  FMCPM605.COM  FMCPM605.SYS  FMCPM605.SYS

ファイルの構成とロードアドレス

                               |      |
                          100 -+------+
                               |MODSYS|
                               |  .COM|
     FMxxxxファイル       780 -+------+
                   +---->      |IPL   | <----- SYSGEN でロードされた
   0 -+------+     |      980 -+------+        IPL は上書きされる
      |IPL   |-----+           |(CCP) | <--+ 
 200 -+------+                -+------+    +-- SYSGEN または MOVCPM にて
      |BIOS80|-------+         |(BDOS)| <--+   あらかじめ格納しておく
 x00 -+------+       |   1F80 -+------+
      |BIOS09|-----+ +-->      |BIOS80|
 y00 -+------+     |     xx80 -+------+
      |FBIOS |---+ +---->      |BIOS09|
 z00 -+------+   |       yy80 -+------+
                 +------>      |FBIOS |
                         zz80 -+------+
                               |      |
                         6000 -+------+
                               |MODSYS| <----- FM-7版、FM-77版のみ
                               |  .OVL|
                         67FF -+------+
                               |      |

実行方法は(1)と(2)で異なります。

MODSYSコマンド実行例(1)

  A>SYSGEN
  A
  A>MODSYS
  ...
  A>SYSGEN
  B

MODSYSコマンド実行例(2)

  A>MOVCPM 60 *
  A>MODSYS
  ...
  A>SYSGEN
  B
CPM8_2ND_MODSYS565
CPM8_2ND_MODSYS568
CPM8_2ND_MODSYS605
CPM7_MODSYS565
CPM7_MODSYS568
CPM7_MODSYS605
CPM77_MODSYS56K
CPM77_MODSYS60K
CPM77_MODSYSFM7

4.7 FM-CP/M デモ
FM-8 CP/M2ndバージョンデモKANJIデモ(FM-8)09DEMO

4.7.1 FM-8用CP/M 2ndバージョンデモ

CPM8_2ND_DEMO0
CPM8_2ND_DEMO1
CPM8_2ND_DEMO2
CPM8_2ND_DEMO3
CPM8_2ND_DEMO4
CPM8_2ND_DEMO5
CPM8_2ND_DEMO6
CPM8_2ND_DEMO7
CPM8_2ND_DEMO8
CPM8_2ND_DEMO9
CPM8_2ND_DEMOA
CPM8_2ND_DEMOB

4.7.2 KANJIデモ(FM-8)
FM-8 CP/M2ndバージョンデモKANJIデモ(FM-8)09DEMO

cpm-kanji-1
cpm-kanji-2
cpm-kanji-3
cpm-kanji-4
cpm-kanji-5
cpm-kanji-6

4.7.3 09DEMO
FM-8 CP/M2ndバージョンデモKANJIデモ(FM-8)09DEMO

cpm-09demo8-0
cpm-09demo8-1
cpm-09demo8-2
cpm-09demo8-3
cpm-09demo8-4

cpm-09demo8-7
cpm-09demo77-0
cpm-09demo77-2
cpm-09demo77-3
cpm-09demo77-4

4.8 参考文献

81SM-000200-1 FM-8 CP/M-80 Level 3.0 操作手引書 1983年7月(富士通)
82SM-000031-1 FM-7 CP/M-80 操作手引書 1982年12月(富士通)
82SM-000031-2 FM-7/NEW7 CP/M-80 操作手引書 1984年7月(富士通)
83SM-000041-2 FM-11 CP/M-80 操作手引書 1983年5月(富士通)
標準CP/Mハンドブック 1981年5月(アスキー出版) ISBN4-87148-120-4 C3055 \2900E
I/O 1985年4,6月号 (工学社)
Oh! FM 1986年7月号 (ソフトバンク)

謝辞:本ページの各表の作成にはThinkさんのCSV→Table変換サイトのお世話になりました。 ありがとうございました。
謝辞:福井利夫様、MOVCPM及びPC-8001/8801mkII用CP/MのBIOS 及びディスクフォーマットに関する情報、ありがとうございました。
謝辞:かべきん様、FM-11用CP/Mに関する情報、ありがとうございました。

F-BASIC起動画面集  F-BASIC詳細編  F-BASIC詳細編(その2:デモ画面集)
FM77AVシリーズ システムディスク編
FM77AVシリーズ デモ・入門ディスク編
CP/M-80編 CP/M-80 アプリケーション編
OS-9編
FLEX編 FLEX アプリケーション編
F-BASIC ファイルシステム(およびその上位互換)上に構築されたOS、開発システム
FM-7/8シリーズ用プログラミング言語とその処理系
番外編(その2:勝手に誤記修正編)
番外編(その3:6809用MMU考察)
番外編(その5:FM-7,8シリーズのROM一覧)
番外編(その6:FM-77用拡張メモリ他について)
番外編(その7:FM-8/7/77/77AVシリーズの微妙な非互換性)
番外編(その8:FM-7/8シリーズ用アドオンCPUカード)
番外編(その11:FM-11,16シリーズのROM一覧)
緊急特集:MB22603の秘密
FM-8改造 備忘録
--------
レベル3BASICとF-BASIC を覗いてみる
テクノポリス誌ナウシカベンチマークとミンキーモモベンチマーク
ASCIIART(マンデルブロ集合)ベンチマーク
漢字ROM博物館(情報募集中)
--------
各種電子デバイス関連
--------
入り口ページに戻る

ご意見、ご要望はこちらまで(笑)
Copyright (C) 2019 by Haserin